diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2014-12-31 06:52:47 -0500 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2014-12-31 07:20:48 -0500 |
commit | d8405e2ebe4b7250fb8eaaad7166f0e81479e0d7 (patch) | |
tree | 574d0ce0942ab213bed4284a95f69cd2a09b4151 /gtk2_ardour | |
parent | 168d1879943859653e197237e9baf57f3feb909e (diff) |
add the ability to use cairo scaling to warp the rendering of the main clock text
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/audio_clock.cc | 25 | ||||
-rw-r--r-- | gtk2_ardour/audio_clock.h | 11 |
2 files changed, 35 insertions, 1 deletions
diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc index 4eb8a2e8aa..ae170b8548 100644 --- a/gtk2_ardour/audio_clock.cc +++ b/gtk2_ardour/audio_clock.cc @@ -95,6 +95,8 @@ AudioClock::AudioClock (const string& clock_name, bool transient, const string& , last_sdelta (0) , dragging (false) , drag_field (Field (0)) + , xscale (1.0) + , yscale (1.0) { set_flags (CAN_FOCUS); @@ -278,6 +280,15 @@ AudioClock::set_colors () } void +AudioClock::set_scale (double x, double y) +{ + xscale = x; + yscale = y; + + queue_draw (); +} + +void AudioClock::render (cairo_t* cr, cairo_rectangle_t*) { /* main layout: rounded rect, plus the text */ @@ -296,10 +307,22 @@ AudioClock::render (cairo_t* cr, cairo_rectangle_t*) cairo_fill (cr); } - cairo_move_to (cr, (get_width() - layout_width) / 2.0, (upper_height - layout_height) / 2.0); + double lw = layout_width * xscale; + double lh = layout_height * yscale; + cairo_move_to (cr, (get_width() - lw) / 2.0, (upper_height - lh) / 2.0); + + if (xscale != 1.0 || yscale != 1.0) { + cairo_save (cr); + cairo_scale (cr, xscale, yscale); + } + pango_cairo_show_layout (cr, _layout->gobj()); + if (xscale != 1.0 || yscale != 1.0) { + cairo_restore (cr); + } + if (_left_layout) { double h = get_height() - upper_height - separator_height; diff --git a/gtk2_ardour/audio_clock.h b/gtk2_ardour/audio_clock.h index 259e330000..83bc3233c2 100644 --- a/gtk2_ardour/audio_clock.h +++ b/gtk2_ardour/audio_clock.h @@ -77,6 +77,14 @@ class AudioClock : public CairoWidget, public ARDOUR::SessionHandlePtr void set_session (ARDOUR::Session *s); void set_negative_allowed (bool yn); + /** Alter cairo scaling during rendering. + * + * Used by clocks that resize themselves + * to fit any given space. Can lead + * to font distortion. + */ + void set_scale (double x, double y); + static void print_minsec (framepos_t, char* buf, size_t bufsize, float frame_rate); sigc::signal<void> ValueChanged; @@ -232,6 +240,9 @@ class AudioClock : public CairoWidget, public ARDOUR::SessionHandlePtr double bg_r, bg_g, bg_b, bg_a; double cursor_r, cursor_g, cursor_b, cursor_a; + + double xscale; + double yscale; }; #endif /* __audio_clock_h__ */ |