summaryrefslogtreecommitdiff
path: root/gtk2_ardour/audio_clock.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/audio_clock.cc')
-rw-r--r--gtk2_ardour/audio_clock.cc66
1 files changed, 24 insertions, 42 deletions
diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc
index 8de39d58f1..54f17725eb 100644
--- a/gtk2_ardour/audio_clock.cc
+++ b/gtk2_ardour/audio_clock.cc
@@ -197,7 +197,6 @@ 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);
@@ -313,17 +312,13 @@ AudioClock::render (cairo_t* cr, cairo_rectangle_t*)
double lw = layout_width * xscale;
double lh = layout_height * yscale;
- 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);
- }
+ 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) {
@@ -406,44 +401,42 @@ AudioClock::render (cairo_t* cr, cairo_rectangle_t*)
}
if (editing) {
- Pango::Rectangle cursor;
-
if (!insert_map.empty()) {
+ int xcenter = (get_width() - layout_width) /2;
+
if (input_string.length() < insert_map.size()) {
+ Pango::Rectangle cursor;
- cursor = _layout->get_cursor_strong_pos (edit_string.length() - 1);
+ 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()]);
+ }
cairo_set_source_rgba (cr, cursor_r, cursor_g, cursor_b, cursor_a);
-
cairo_rectangle (cr,
- cursor.get_x()/PANGO_SCALE,
- (upper_height - layout_height)/2.0,
- em_width,
- cursor.get_height()/PANGO_SCALE);
- cairo_stroke (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);
} else {
/* we've entered all possible digits, no cursor */
}
} else {
- cairo_set_source_rgba (cr, cursor_r, cursor_g, cursor_b, cursor_a);
-
- if (edit_string.empty()) {
- cairo_rectangle (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);
+ if (input_string.empty()) {
+ cairo_set_source_rgba (cr, cursor_r, cursor_g, cursor_b, cursor_a);
cairo_rectangle (cr,
- cursor.get_x()/PANGO_SCALE,
- (upper_height - layout_height)/2.0,
- em_width, upper_height);
+ (get_width()/2.0),
+ (upper_height - layout_height)/2.0,
+ 2.0, upper_height);
+ cairo_fill (cr);
}
-
- cairo_stroke (cr);
}
}
}
@@ -484,19 +477,8 @@ 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