Bump to v4.1.0
[terminatorX.git] / src / tX_widget.h
1 /*
2     terminatorX - realtime audio scratching software
3     Copyright (C) 1999-2021  Alexander K├Ânig
4
5     This program is free software; you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation; either version 2 of the License, or
8     (at your option) any later version.
9
10     This program is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU General Public License for more details.
14
15     You should have received a copy of the GNU General Public License
16     along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
18     File: tX_widget.h
19
20     Description: Header to tX_widget.c
21 */
22
23 #ifndef __GTK_TX_H__
24 #define __GTK_TX_H__
25 #include <gdk/gdk.h>
26 #include <gtk/gtk.h>
27
28 #include "tX_types.h"
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif /* __cplusplus */
33
34 #define GTK_TX(obj) G_TYPE_CHECK_INSTANCE_CAST(obj, gtk_tx_get_type(), GtkTx)
35 #define GTK_TX_CLASS(klass) GTK_CHECK_CLASS_CAST(klass, gtk_tx_get_type(), GtkTxClass)
36 #define GTK_IS_TX(obj) G_TYPE_CHECK_INSTANCE_TYPE(obj, gtk_tx_get_type())
37
38 typedef struct _GtkTx GtkTx;
39 typedef struct _GtkTxClass GtkTxClass;
40
41 typedef enum tx_widget_motion {
42     NO_MOTION,
43     MOTION_LEFT,
44     MOTION_RIGHT
45 } tx_widget_motion;
46
47 #define GTK_TX_HISTORY_LENGTH 4
48
49 struct _GtkTx {
50     GtkWidget widget;
51
52     int16_t* disp_data;
53     int16_t* data;
54     int samples;
55
56     GdkRGBA colors[6];
57     GdkRGBA history_colors[GTK_TX_HISTORY_LENGTH];
58
59     GdkRGBA* current_fg;
60     GdkRGBA* current_bg;
61
62     GdkRGBA* audio_colors_focus;
63     GdkRGBA* audio_colors_nofocus;
64
65     int spp;
66     int xc;
67     int xmax;
68     int yc;
69     int ymax;
70
71     f_prec zoom;
72
73     int cursor_pos;
74     int cursor_x_pos;
75     int mute;
76     int cursor_history[GTK_TX_HISTORY_LENGTH];
77     int cursor_history_offset;
78
79     int display_width;
80     int display_x_offset;
81
82 #ifdef USE_DISPLAY_NORMALIZE
83     f_prec max_value;
84 #endif
85
86     cairo_surface_t* render_buffer_surface_a;
87     cairo_surface_t* render_buffer_surface_b;
88
89     cairo_surface_t* current_render_buffer_surface;
90     cairo_surface_t* previous_render_buffer_surface;
91
92     int render_buffer_x_offset;
93     int render_buffer_display_width;
94     GdkRGBA* render_buffer_fg;
95 };
96
97 struct _GtkTxClass {
98     GtkWidgetClass parent_class;
99 };
100
101 GtkWidget* gtk_tx_new(int16_t* wavdata, int wavsamples);
102 GType gtk_tx_get_type(void);
103 void gtk_tx_set_data(GtkTx* tx, int16_t* wavdata, int wavsamples);
104 void gtk_tx_cleanup_pos_display(GtkTx* tx);
105 void gtk_tx_update_pos_display(GtkTx* tx, int sample, int mute);
106 void gtk_tx_show_focus(GtkTx* tx, int show);
107 void gtk_tx_set_zoom(GtkTx* tx, f_prec zoom, int is_playing);
108 void gtk_tx_update_colors(GtkTx* tx, GdkRGBA* vtt_color);
109 f_prec gtk_tx_get_zoom(GtkTx* tx);
110
111 #ifdef __cplusplus
112 }
113 #endif /* __cplusplus */
114 #endif