Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
bar_slider.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: © 2019-2022 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
9
10#ifndef __GUI_WIDGETS_BAR_SLIDER_H__
11#define __GUI_WIDGETS_BAR_SLIDER_H__
12
13#include "common/utils/types.h"
14#include "common/utils/ui.h"
15#include "gui/backend/gtk_widgets/gtk_wrapper.h"
16
17#define BAR_SLIDER_WIDGET_TYPE (bar_slider_widget_get_type ())
18G_DECLARE_FINAL_TYPE (
20 bar_slider_widget,
21 Z,
22 BAR_SLIDER_WIDGET,
23 GtkWidget)
24
25class Port;
26
32
36enum class BarSliderType
37{
38 BAR_SLIDER_TYPE_NORMAL,
39
42
43 BAR_SLIDER_TYPE_CONTROL_PORT,
44};
45
53typedef struct _BarSliderWidget
54{
55 GtkWidget parent_instance;
56
59
62 char suffix[600];
63
65 char prefix[600];
66
68 float max;
69
71 float min;
72
74 float zero;
75
78
81
84
87
90
92 Port * port;
93
95 int width;
96
98 int height;
99
101 void * object;
102
104 GtkGestureDrag * drag;
105
107 double last_x;
108
110 double start_x;
111
113 UiDragMode mode;
114
116 int hover;
117
120
124
127
130
132 PangoLayout * layout;
133
138 int last_width_extent;
139 int last_height_extent;
140 char last_extent_str[3000];
141
143
154 BarSliderType type,
155 GenericFloatGetter get_val,
156 GenericFloatSetter set_val,
157 void * object,
158 float min,
159 float max,
160 int w,
161 int h,
162 float zero,
163 int convert_to_percentage,
164 int decimals,
165 UiDragMode mode,
166 const char * prefix,
167 const char * suffix);
168
172#define bar_slider_widget_new( \
173 getter, setter, obj, min, max, w, h, zero, dec, mode, suffix) \
174 _bar_slider_widget_new ( \
175 BarSliderType::BAR_SLIDER_TYPE_NORMAL, getter, setter, (void *) obj, min, \
176 max, w, h, zero, 0, dec, mode, "", suffix)
177
183#define bar_slider_widget_new_port_connection(conn, prefix) \
184 _bar_slider_widget_new ( \
185 BarSliderType::BAR_SLIDER_TYPE_PORT_MULTIPLIER, nullptr, nullptr, \
186 (void *) conn, 0.f, 1.f, 160, 20, 0.f, 1, 0, \
187 UiDragMode::UI_DRAG_MODE_CURSOR, prefix, " %")
188
192
193#endif
std::function< float()> GenericFloatGetter
Getter prototype for float values.
Definition types.h:92
std::function< void(float)> GenericFloatSetter
Setter prototype for float values.
Definition types.h:97
BarSliderType
Type of slider.
Definition bar_slider.h:37
BarSliderWidget * _bar_slider_widget_new(BarSliderType type, GenericFloatGetter get_val, GenericFloatSetter set_val, void *object, float min, float max, int w, int h, float zero, int convert_to_percentage, int decimals, UiDragMode mode, const char *prefix, const char *suffix)
Creates a bar slider widget for floats.
@ BAR_SLIDER_TYPE_PORT_MULTIPLIER
Port connection multiplier.
Definition bar_slider.h:41
Draggable slider to adjust an amount (such as a percentage).
Definition bar_slider.h:54
int decimals
Number of decimal points to show.
Definition bar_slider.h:58
int height
Widget height.
Definition bar_slider.h:98
UiDragMode mode
Update mode.
Definition bar_slider.h:113
float last_real_val
Cache of text extents.
Definition bar_slider.h:137
int hover
Whether hovering or not.
Definition bar_slider.h:116
PangoLayout * layout
Cache layout.
Definition bar_slider.h:132
GenericFloatGetter snapped_getter
Float getter for snapped values (optional).
Definition bar_slider.h:80
Port * port
Port, if control port.
Definition bar_slider.h:92
float max
Maximum value.
Definition bar_slider.h:68
GenericFloatSetter setter
Float setter.
Definition bar_slider.h:83
float min
Minimum value.
Definition bar_slider.h:71
int editable
Whether the user can change the value.
Definition bar_slider.h:126
double last_x
Used in gesture drag.
Definition bar_slider.h:107
double start_x
Used in gesture drag.
Definition bar_slider.h:110
GenericFloatSetter end_setter
Float setter for drag end.
Definition bar_slider.h:89
int show_value
Whether to show the value in text or just the prefix + suffix.
Definition bar_slider.h:123
float zero
Zero point.
Definition bar_slider.h:74
BarSliderType type
The type of slider.
Definition bar_slider.h:119
GenericFloatSetter init_setter
Float setter for drag begin.
Definition bar_slider.h:86
void * object
Object to call get/set with.
Definition bar_slider.h:101
GtkGestureDrag * drag
Used when dragging.
Definition bar_slider.h:104
int width
Widget width.
Definition bar_slider.h:95
int convert_to_percentage
Multiply the value by 100 when showing it.
Definition bar_slider.h:129
GenericFloatGetter getter
Float getter.
Definition bar_slider.h:77
char suffix[600]
The suffix to show after the value (eg "%" for percentages).
Definition bar_slider.h:62
char prefix[600]
The prefix to show before the value.
Definition bar_slider.h:65