Zrythm
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
knob.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
10#ifndef __GUI_WIDGETS_KNOB_H__
11#define __GUI_WIDGETS_KNOB_H__
12
13#include <stdbool.h>
14
15#include "utils/types.h"
16
17#include <gtk/gtk.h>
18
19#define KNOB_WIDGET_TYPE (knob_widget_get_type ())
20G_DECLARE_FINAL_TYPE (KnobWidget, knob_widget, Z, KNOB_WIDGET, GtkWidget)
21
22
31typedef enum KnobType
32{
33 KNOB_TYPE_NORMAL,
34
37} KnobType;
38
39typedef struct Port Port;
40
41typedef struct _KnobWidget
42{
43 GtkWidget parent_instance;
44
45 KnobType type;
46
49
52
56
59
62
65
68
70 void * object;
71
73 int size;
75 bool hover;
77 float zero;
79 bool arc;
81 int bevel;
83 bool flat;
85 float min;
87 float max;
88
90 GdkRGBA start_color;
92 GdkRGBA end_color;
93
95 GtkGestureDrag * drag;
97 double last_x;
99 double last_y;
100
101 bool drag_updated;
102
103 PangoLayout * layout;
104
107
109 GtkPopoverMenu * popover_menu;
110} KnobWidget;
111
126 GenericFloatGetter get_val,
127 GenericFloatGetter get_default_val,
128 GenericFloatSetter set_val,
129 void * object,
130 KnobType type,
131 float min,
132 float max,
133 int size,
134 float zero);
135
136#define knob_widget_new_simple( \
137 getter, default_getter, setter, obj, min, max, size, zero) \
138 _knob_widget_new ( \
139 (GenericFloatGetter) getter, (GenericFloatGetter) default_getter, \
140 (GenericFloatSetter) setter, (void *) obj, KNOB_TYPE_NORMAL, min, max, \
141 size, zero)
142
146#define knob_widget_new_port(conn, size) \
147 _knob_widget_new ( \
148 NULL, NULL, (void *) conn, KNOB_TYPE_PORT_MULTIPLIER, 0.f, 1.f, size, 0.f)
149
154#endif
void(* GenericStringCopyGetter)(void *object, char *buf)
Getter prototype for strings to be saved in the given buffer.
Definition types.h:94
float(* GenericFloatGetter)(void *object)
Getter prototype for float values.
Definition types.h:73
void(* GenericFloatSetter)(void *object, float val)
Setter prototype for float values.
Definition types.h:78
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:32
@ KNOB_TYPE_PORT_MULTIPLIER
Port connection multiplier.
Definition knob.h:36
double last_x
Used in gesture drag.
Definition knob.h:97
GdkRGBA start_color
Color away from zero point.
Definition knob.h:90
float zero
Zero point 0.0-1.0.
Definition knob.h:77
GenericFloatSetter setter
Setter.
Definition knob.h:58
GenericFloatGetter getter
Getter for the actual value.
Definition knob.h:48
GenericFloatGetter snapped_getter
Getter for a snapped value (used if passed).
Definition knob.h:55
float min
Min value (eg, 1).
Definition knob.h:85
bool flat
Flat or 3D.
Definition knob.h:83
GenericFloatSetter end_setter
Float setter for drag end.
Definition knob.h:64
GdkRGBA end_color
Color closer to zero point.
Definition knob.h:92
GtkGestureDrag * drag
Used in drag gesture.
Definition knob.h:95
bool arc
Draw arc around the knob or not.
Definition knob.h:79
float last_real_val
Last drawn real val.
Definition knob.h:106
GtkPopoverMenu * popover_menu
To be optionally used for context menus.
Definition knob.h:109
float max
Max value (eg, 180).
Definition knob.h:87
GenericFloatGetter default_getter
Getter for the default actual value.
Definition knob.h:51
int size
Size in px.
Definition knob.h:73
double last_y
Used in gesture drag.
Definition knob.h:99
void * object
Object to call get/set with.
Definition knob.h:70
GenericStringCopyGetter hover_str_getter
Value to show when hovering (optional).
Definition knob.h:67
int bevel
Bevel.
Definition knob.h:81
GenericFloatSetter init_setter
Float setter for drag begin.
Definition knob.h:61
bool hover
Whether hovering or not.
Definition knob.h:75
Must ONLY be created via port_new()
Definition port.h:139
Custom types.