10#ifndef __GUI_WIDGETS_RULER_H__
11#define __GUI_WIDGETS_RULER_H__
13#include "common/dsp/position.h"
14#include "common/utils/ui.h"
15#include "gui/backend/gtk_widgets/gtk_wrapper.h"
17constexpr int RW_RULER_MARKER_SIZE = 8;
18constexpr int RW_CUE_MARKER_HEIGHT = 12;
19constexpr int RW_CUE_MARKER_WIDTH = 7;
20constexpr int RW_PLAYHEAD_TRIANGLE_WIDTH = 12;
21constexpr int RW_PLAYHEAD_TRIANGLE_HEIGHT = 8;
22constexpr int RW_RANGE_HEIGHT_DIVISOR = 4;
24constexpr int RW_HEIGHT = 42;
34#define RULER_WIDGET_TYPE (ruler_widget_get_type ())
35G_DECLARE_FINAL_TYPE (RulerWidget, ruler_widget, Z, RULER_WIDGET, GtkWidget)
51#define DEFAULT_PX_PER_TICK 0.03
56#define SPACE_BEFORE_START 10
57#define SPACE_BEFORE_START_F 10.f
58#define SPACE_BEFORE_START_D 10.0
61#define RULER_ZOOM_LEVEL_MULTIPLIER 1.28
63#define MIN_ZOOM_LEVEL 0.04
64#define MAX_ZOOM_LEVEL 1800.
81enum class RulerWidgetType
100using RulerWidget =
struct _RulerWidget
102 GtkWidget parent_instance;
104 RulerWidgetType type;
108 double px_per_sixteenth;
124 double last_offset_x;
125 double last_offset_y;
131 bool vertical_panning_started;
133 GtkGestureDrag * drag;
134 GtkGestureClick * click;
152 int last_playhead_px;
168 Position range1_start_pos;
169 Position range2_start_pos;
177 Position last_set_pos;
180 Position drag_start_pos;
184 cairo_surface_t * cached_surface;
187 graphene_rect_t last_rect;
190 PangoLayout * layout_normal;
191 PangoLayout * monospace_layout_small;
192 PangoLayout * marker_layout;
195 GtkPopoverMenu * popover_menu;
256ruler_widget_is_range_hit (
273ruler_widget_px_to_pos (
280ruler_widget_pos_to_px (RulerWidget * self, Position * pos,
int use_padding);
306ruler_widget_refresh (RulerWidget * self);
#define RW_PX_TO_HIDE_BEATS
Minimum number of pixels between beat lines.
UiOverlayAction
Various overlay actions to be shared.
constexpr int RW_SCROLL_SPEED
Mouse wheel scroll speed (number of pixels).