audio clocks: switch cursor to other side, thinner; half-make delete key work
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 18 Nov 2011 23:46:55 +0000 (23:46 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Fri, 18 Nov 2011 23:46:55 +0000 (23:46 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@10697 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/audio_clock.cc

index c92325eb79446f81e71771f5188d10ecb36f659e..0158f007316d0b1e1067497d597ac8f713975e41 100644 (file)
@@ -282,24 +282,24 @@ AudioClock::render (cairo_t* cr)
        }
 
        if (editing) {
-               const double cursor_width = 4.0; /* need em width here, not 16 */
+               const double cursor_width = 12; /* need em width here, not 16 */
 
                if (!insert_map.empty()) {
                        Pango::Rectangle cursor = _layout->get_cursor_strong_pos (insert_map[input_string.length()]);
                        
                        cairo_set_source_rgba (cr, 0.9, 0.1, 0.1, 0.8);
                        cairo_rectangle (cr, 
-                                        x_leading_padding + cursor.get_x()/PANGO_SCALE
+                                        x_leading_padding + cursor.get_x()/PANGO_SCALE + cursor_width,
                                         (upper_height - layout_height)/2.0, 
-                                        cursor_width, cursor.get_height()/PANGO_SCALE);
+                                        2.0, cursor.get_height()/PANGO_SCALE);
                        cairo_fill (cr);        
                } else {
                        if (input_string.empty()) {
                                cairo_set_source_rgba (cr, 0.9, 0.1, 0.1, 0.8);
                                cairo_rectangle (cr, 
-                                                (get_width()/2.0) - cursor_width,
+                                                (get_width()/2.0),
                                                 (upper_height - layout_height)/2.0, 
-                                                cursor_width, upper_height);
+                                                2.0, upper_height);
                                cairo_fill (cr);
                        }
                }
@@ -441,7 +441,7 @@ AudioClock::end_edit (bool modify)
                } else {
 
                        editing = false;
-                       framepos_t pos;
+                       framepos_t pos = 0; /* stupid gcc */
 
                        switch (_mode) {
                        case Timecode:
@@ -1117,6 +1117,11 @@ AudioClock::on_key_release_event (GdkEventKey *ev)
                ChangeAborted();  /*  EMIT SIGNAL  */
                return true;
 
+       case GDK_Delete:
+       case GDK_BackSpace:
+               input_string = input_string.substr (1, input_string.length() - 1);
+               goto use_input_string;
+
        default:
                return false;
        }
@@ -1127,10 +1132,12 @@ AudioClock::on_key_release_event (GdkEventKey *ev)
        }
 
        input_string.insert (input_string.begin(), new_char);
-       
+
+  use_input_string:
+
        string::reverse_iterator ri;
        vector<int> insert_at;
-       int highlight_length;
+       int highlight_length = 0;
        char buf[32];
        framepos_t pos;
 
@@ -1139,10 +1146,16 @@ AudioClock::on_key_release_event (GdkEventKey *ev)
        switch (_mode) {
        case Frames:
                /* get this one in the right order, and to the right width */
-               edit_string.push_back (new_char);
-               sscanf (edit_string.c_str(), "%" PRId64, &pos);
-               snprintf (buf, sizeof (buf), " %10" PRId64, pos);
-               edit_string = buf;
+               if (ev->keyval != GDK_Delete && ev->keyval != GDK_BackSpace) {
+                       edit_string.push_back (new_char);
+               } else {
+                       edit_string = edit_string.substr (0, edit_string.length() - 1);
+               }
+               if (!edit_string.empty()) {
+                       sscanf (edit_string.c_str(), "%" PRId64, &pos);
+                       snprintf (buf, sizeof (buf), " %10" PRId64, pos);
+                       edit_string = buf;
+               }
                highlight_length = edit_string.length();
                break;