File: ags_seekable.c

package info (click to toggle)
gsequencer 7.7.5-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 71,040 kB
  • sloc: ansic: 1,145,949; xml: 31,016; cpp: 9,487; sh: 5,798; makefile: 3,845; perl: 155; sed: 16; python: 11
file content (132 lines) | stat: -rw-r--r-- 3,387 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/* GSequencer - Advanced GTK Sequencer
 * Copyright (C) 2005-2019 Joël Krähemann
 *
 * This file is part of GSequencer.
 *
 * GSequencer is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * GSequencer is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with GSequencer.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <ags/object/ags_seekable.h>

#include <ags/object/ags_marshal.h>

void ags_seekable_class_init(AgsSeekableInterface *ginterface);

/**
 * SECTION:ags_seekable
 * @short_description: unique access to seekable classes
 * @title: AgsSeekable
 * @section_id: AgsSeekable
 * @include: ags/object/ags_seekable.h
 *
 * The #AgsSeekable interface gives you the #AgsSeekable::seek() signal
 * what notifies about changed offset of pattern or notation.
 */

enum {
  SEEK,
  LAST_SIGNAL,
};

static guint seekable_signals[LAST_SIGNAL];

GType
ags_seekable_get_type()
{
  static gsize g_define_type_id__static = 0;

  if(g_once_init_enter(&g_define_type_id__static)){
    GType ags_type_seekable = 0;

    ags_type_seekable = g_type_register_static_simple(G_TYPE_INTERFACE,
						      "AgsSeekable",
						      sizeof (AgsSeekableInterface),
						      (GClassInitFunc) ags_seekable_class_init,
						      0, NULL, 0);

    g_once_init_leave(&g_define_type_id__static, ags_type_seekable);
  }

  return(g_define_type_id__static);
}

GType
ags_seek_type_get_type()
{
  static gsize g_enum_type_id__static;

  if(g_once_init_enter(&g_enum_type_id__static)){
    static const GEnumValue values[] = {
      { AGS_SEEK_CUR, "AGS_SEEK_CUR", "seek-cur" },
      { AGS_SEEK_SET, "AGS_SEEK_SET", "seek-set" },
      { AGS_SEEK_END, "AGS_SEEK_END", "seek-end" },
      { 0, NULL, NULL }
    };

    GType g_enum_type_id = g_enum_register_static(g_intern_static_string("AgsSeekType"), values);

    g_once_init_leave(&g_enum_type_id__static, g_enum_type_id);
  }
  
  return(g_enum_type_id__static);
}

void
ags_seekable_class_init(AgsSeekableInterface *ginterface)
{
  /**
   * AgsSeekable::seek:
   * @seekable: the #GObject sub-type implementing #AgsSeekable
   * @offset: the offset
   * @whence: the direction, see #AgsSeekType-enum
   *
   * The ::seek signal notifies about changed position
   * of sequencer.
   * 
   * Since: 3.0.0
   */
  seekable_signals[SEEK] =
    g_signal_new("seek",
		 G_TYPE_FROM_INTERFACE(ginterface),
		 G_SIGNAL_RUN_LAST,
		 G_STRUCT_OFFSET(AgsSeekableInterface, seek),
		 NULL, NULL,
		 ags_cclosure_marshal_VOID__INT64_UINT,
		 G_TYPE_NONE, 2,
		 G_TYPE_INT64,
		 G_TYPE_UINT);
}

void
ags_seekable_base_init(AgsSeekableInterface *ginterface)
{
  /* empty */
}

/**
 * ags_seekable_seek:
 * @seekable: the #AgsSeekable interface
 * @offset: the offset
 * @whence: the direction, see #AgsSeekType-enum
 *
 * Seek.
 *
 * Since: 3.0.0
 */
void
ags_seekable_seek(AgsSeekable *seekable, gint64 offset, guint whence)
{
  g_signal_emit(seekable, seekable_signals[SEEK], 0,
		offset, whence);
}