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