summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2015-09-22 18:25:14 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2015-09-28 17:42:11 -0400
commit601770837e2530a73056a6aa67759d56e16e735a (patch)
tree2a9eb0fa73d235297ca1216935be33d83148f19e
parent3e0d801509290ff438b19773ac144f91ea51706e (diff)
change the way the audio clock cursor is drawn (somewhat of an experiment but it has some benefits
-rw-r--r--gtk2_ardour/audio_clock.cc66
1 files changed, 42 insertions, 24 deletions
diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc
index 54f17725eb..8de39d58f1 100644
--- a/gtk2_ardour/audio_clock.cc
+++ b/gtk2_ardour/audio_clock.cc
@@ -197,6 +197,7 @@ AudioClock::set_font (Pango::FontDescription font)
tmp->set_text ("8");
tmp->get_pixel_size (em_width, ignore_height);
+
/* force redraw of markup with new font-size */
set (last_when, true);
@@ -312,13 +313,17 @@ AudioClock::render (cairo_t* cr, cairo_rectangle_t*)
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 (lw >= get_width()) {
+ cairo_move_to (cr, 0.0, (upper_height - lh) / 2.0);
+ } else {
+ 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) {
@@ -401,42 +406,44 @@ AudioClock::render (cairo_t* cr, cairo_rectangle_t*)
}
if (editing) {
- if (!insert_map.empty()) {
+ Pango::Rectangle cursor;
- int xcenter = (get_width() - layout_width) /2;
+ if (!insert_map.empty()) {
if (input_string.length() < insert_map.size()) {
- Pango::Rectangle cursor;
- if (input_string.empty()) {
- /* nothing entered yet, put cursor at the end
- of string
- */
- cursor = _layout->get_cursor_strong_pos (edit_string.length() - 1);
- } else {
- cursor = _layout->get_cursor_strong_pos (insert_map[input_string.length()]);
- }
+ cursor = _layout->get_cursor_strong_pos (edit_string.length() - 1);
cairo_set_source_rgba (cr, cursor_r, cursor_g, cursor_b, cursor_a);
+
cairo_rectangle (cr,
- min (get_width() - 2.0,
- (double) xcenter + cursor.get_x()/PANGO_SCALE + em_width),
- (upper_height - layout_height)/2.0,
- 2.0, cursor.get_height()/PANGO_SCALE);
- cairo_fill (cr);
+ cursor.get_x()/PANGO_SCALE,
+ (upper_height - layout_height)/2.0,
+ em_width,
+ cursor.get_height()/PANGO_SCALE);
+ cairo_stroke (cr);
+
} else {
/* we've entered all possible digits, no cursor */
}
} else {
- if (input_string.empty()) {
- cairo_set_source_rgba (cr, cursor_r, cursor_g, cursor_b, cursor_a);
+ cairo_set_source_rgba (cr, cursor_r, cursor_g, cursor_b, cursor_a);
+
+ if (edit_string.empty()) {
cairo_rectangle (cr,
- (get_width()/2.0),
- (upper_height - layout_height)/2.0,
- 2.0, upper_height);
- cairo_fill (cr);
+ get_width() - em_width,
+ (upper_height - layout_height)/2.0,
+ em_width, upper_height);
+ } else {
+ cursor = _layout->get_cursor_strong_pos (edit_string.length() - 1);
+ cairo_rectangle (cr,
+ cursor.get_x()/PANGO_SCALE,
+ (upper_height - layout_height)/2.0,
+ em_width, upper_height);
}
+
+ cairo_stroke (cr);
}
}
}
@@ -477,8 +484,19 @@ AudioClock::set_clock_dimensions (Gtk::Requisition& req)
tmp->set_text (" 88:88:88,88 ");
tmp->get_pixel_size (req.width, req.height);
+
layout_height = req.height;
layout_width = req.width;
+
+ /* get the figure width for the font. This doesn't have to super
+ * accurate since we only use it to measure the (roughly 1 character)
+ * offset from the position Pango tells us for the "cursor"
+ */
+
+ int ignore_height;
+
+ tmp->set_text ("8");
+ tmp->get_pixel_size (em_width, ignore_height);
}
void