diff options
Diffstat (limited to 'gtk2_ardour/audio_clock.cc')
-rw-r--r-- | gtk2_ardour/audio_clock.cc | 66 |
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 |