Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
knob.h
1// SPDX-FileCopyrightText: © 2019-2022, 2024 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense OR GPL-2.0-or-later
3
4#ifndef __GUI_WIDGETS_KNOB_H__
5#define __GUI_WIDGETS_KNOB_H__
6
7#include "common/utils/types.h"
8#include "gui/backend/gtk_widgets/gtk_wrapper.h"
9
10#define KNOB_WIDGET_TYPE (knob_widget_get_type ())
11G_DECLARE_FINAL_TYPE (KnobWidget, knob_widget, Z, KNOB_WIDGET, GtkWidget)
12
13
18
19
22enum class KnobType
23{
24 KNOB_TYPE_NORMAL,
25
28};
29
30class Port;
31
37using KnobWidget = struct _KnobWidget
38{
39 GtkWidget parent_instance;
40
41 KnobType type;
42
44 GenericFloatGetter getter;
45
47 GenericFloatGetter default_getter;
48
51 GenericFloatGetter snapped_getter;
52
54 GenericFloatSetter setter;
55
57 GenericFloatSetter init_setter;
58
60 GenericFloatSetter end_setter;
61
63 GenericStringGetter hover_str_getter;
64
66 void * object;
67
69 int size;
71 bool hover;
73 float zero;
75 bool arc;
77 int bevel;
79 bool flat;
81 float min;
83 float max;
84
86 GdkRGBA start_color;
88 GdkRGBA end_color;
89
91 GtkGestureDrag * drag;
93 double last_x;
95 double last_y;
96
97 bool drag_updated;
98
99 PangoLayout * layout;
100
102 float last_real_val;
103
105 GtkPopoverMenu * popover_menu;
106};
107
122 GenericFloatGetter get_val,
123 GenericFloatGetter get_default_val,
124 GenericFloatSetter set_val,
125 void * object,
126 KnobType type,
127 float min,
128 float max,
129 int size,
130 float zero);
131
132#define knob_widget_new_simple( \
133 getter, default_getter, setter, obj, min, max, size, zero) \
134 _knob_widget_new ( \
135 (GenericFloatGetter) getter, (GenericFloatGetter) default_getter, \
136 (GenericFloatSetter) setter, (void *) obj, KnobType::KNOB_TYPE_NORMAL, \
137 min, max, size, zero)
138
142#define knob_widget_new_port(conn, size) \
143 _knob_widget_new ( \
144 nullptr, nullptr, (void *) conn, KnobType::KNOB_TYPE_PORT_MULTIPLIER, 0.f, \
145 1.f, size, 0.f)
146
150
151#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
std::function< std::string()> GenericStringGetter
Getter prototype for strings.
Definition types.h:102
KnobWidget * _knob_widget_new(GenericFloatGetter get_val, GenericFloatGetter get_default_val, GenericFloatSetter set_val, void *object, KnobType type, float min, float max, int size, float zero)
Creates a knob widget with the given options and binds it to the given value.
KnobType
Type of knob.
Definition knob.h:23
struct _KnobWidget { GtkWidget parent_instance; KnobType type; GenericFloatGetter getter; GenericFloatGetter default_getter; GenericFloatGetter snapped_getter; GenericFloatSetter setter; GenericFloatSetter init_setter; GenericFloatSetter end_setter; GenericStringGetter hover_str_getter; void *object; int size; bool hover; float zero; bool arc; int bevel; bool flat; float min; float max; GdkRGBA start_color; GdkRGBA end_color; GtkGestureDrag *drag; double last_x; double last_y; bool drag_updated; PangoLayout *layout; float last_real_val; GtkPopoverMenu *popover_menu;} KnobWidget
Basic knob widget.
Definition knob.h:37
@ KNOB_TYPE_PORT_MULTIPLIER
Port connection multiplier.
Definition knob.h:27