1 /* GSequencer - Advanced GTK Sequencer
2  * Copyright (C) 2005-2020 Joël Krähemann
3  *
4  * This file is part of GSequencer.
5  *
6  * GSequencer is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * GSequencer is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with GSequencer.  If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #ifndef __AGS_ACCELERATION_H__
21 #define __AGS_ACCELERATION_H__
22 
23 #include <glib.h>
24 #include <glib-object.h>
25 
26 #include <ags/libags.h>
27 
28 G_BEGIN_DECLS
29 
30 #define AGS_TYPE_ACCELERATION                (ags_acceleration_get_type())
31 #define AGS_ACCELERATION(obj)                (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_ACCELERATION, AgsAcceleration))
32 #define AGS_ACCELERATION_CLASS(class)        (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_ACCELERATION, AgsAccelerationClass))
33 #define AGS_IS_ACCELERATION(obj)             (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_ACCELERATION))
34 #define AGS_IS_ACCELERATION_CLASS(class)     (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_ACCELERATION))
35 #define AGS_ACCELERATION_GET_CLASS(obj)      (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_ACCELERATION, AgsAccelerationClass))
36 
37 #define AGS_ACCELERATION_GET_OBJ_MUTEX(obj) (&(((AgsAcceleration *) obj)->obj_mutex))
38 
39 typedef struct _AgsAcceleration AgsAcceleration;
40 typedef struct _AgsAccelerationClass AgsAccelerationClass;
41 
42 /**
43  * AgsAccelerationFlags:
44  * @AGS_ACCELERATION_DEFAULT_START: if start is default start point
45  * @AGS_ACCELERATION_DEFAULT_END: if end is default end point
46  * @AGS_ACCELERATION_GUI: interpret x and y as GUI format
47  * @AGS_ACCELERATION_RUNTIME: interpret x and y as runtime formant
48  * @AGS_ACCELERATION_HUMAN_READABLE: interpret x and y as human readable
49  * @AGS_ACCELERATION_DEFAULT_LENGTH: if default length applies
50  * @AGS_ACCELERATION_IS_SELECTED: if the acceleration is selected
51  */
52 typedef enum{
53   AGS_ACCELERATION_DEFAULT_START   = 1,
54   AGS_ACCELERATION_DEFAULT_END     = 1 <<  1,
55   AGS_ACCELERATION_GUI             = 1 <<  2,
56   AGS_ACCELERATION_RUNTIME         = 1 <<  3,
57   AGS_ACCELERATION_HUMAN_READABLE  = 1 <<  4,
58   AGS_ACCELERATION_DEFAULT_LENGTH  = 1 <<  5,
59   AGS_ACCELERATION_IS_SELECTED     = 1 <<  6,
60 }AgsAccelerationFlags;
61 
62 struct _AgsAcceleration
63 {
64   GObject gobject;
65 
66   guint flags;
67 
68   GRecMutex obj_mutex;
69 
70   // gui format, convert easy to visualization
71   guint x;
72   gdouble y;
73 
74   gchar *acceleration_name;
75 };
76 
77 struct _AgsAccelerationClass
78 {
79   GObjectClass gobject;
80 };
81 
82 GType ags_acceleration_get_type();
83 GType ags_acceleration_flags_get_type();
84 
85 GRecMutex* ags_acceleration_get_obj_mutex(AgsAcceleration *acceleration);
86 
87 gboolean ags_acceleration_test_flags(AgsAcceleration *acceleration, guint flags);
88 void ags_acceleration_set_flags(AgsAcceleration *acceleration, guint flags);
89 void ags_acceleration_unset_flags(AgsAcceleration *acceleration, guint flags);
90 
91 gint ags_acceleration_sort_func(gconstpointer a,
92 				gconstpointer b);
93 
94 guint ags_acceleration_get_x(AgsAcceleration *acceleration);
95 void ags_acceleration_set_x(AgsAcceleration *acceleration, guint x);
96 
97 gdouble ags_acceleration_get_y(AgsAcceleration *acceleration);
98 void ags_acceleration_set_y(AgsAcceleration *acceleration, gdouble y);
99 
100 AgsAcceleration* ags_acceleration_duplicate(AgsAcceleration *acceleration);
101 
102 AgsAcceleration* ags_acceleration_new();
103 
104 G_END_DECLS
105 
106 #endif /*__AGS_ACCELERATION_H__*/
107