Kludgey fix for invisible playhead when scrolled.
authorDavid Robillard <d@drobilla.net>
Sat, 17 Jan 2015 02:04:38 +0000 (21:04 -0500)
committerDavid Robillard <d@drobilla.net>
Sat, 17 Jan 2015 02:04:38 +0000 (21:04 -0500)
The problem this is avoiding makes absolutely no sense.  Either I'm dumb, or
something is more deeply wrong with scroll group bounding boxes, or both, but I
don't care anymore.  This works.  Viva release mode.

gtk2_ardour/editor_canvas.cc
libs/canvas/canvas/scroll_group.h
libs/canvas/scroll_group.cc

index 611d5ac054c6a79ffbf1b5caf6f9dd2e2d780aff..2e2231c09fcf8f0be8004faba52df539d5b8d57d 100644 (file)
@@ -92,7 +92,7 @@ Editor::initialize_canvas ()
        CANVAS_DEBUG_NAME (hv_scroll_group, "canvas hv scroll");
        _track_canvas->add_scroller (*hsg);
 
-       cursor_scroll_group = cg = new ArdourCanvas::ScrollGroup (_track_canvas->root(), ArdourCanvas::ScrollGroup::ScrollsHorizontally);
+       cursor_scroll_group = cg = new ArdourCanvas::ScrollGroup (_track_canvas->root(), ArdourCanvas::ScrollGroup::ScrollsHorizontally, false);
        CANVAS_DEBUG_NAME (cursor_scroll_group, "canvas cursor scroll");
        _track_canvas->add_scroller (*cg);
 
index fd9b2388d4e2da44135626d3b5c59964d8e32781..86bbf9821b0c1584b4452e6d46be2ac2a0eca765 100644 (file)
@@ -35,8 +35,8 @@ class LIBCANVAS_API ScrollGroup : public Container
                ScrollsHorizontally = 0x2
        };
        
-       ScrollGroup (Canvas*, ScrollSensitivity);
-       ScrollGroup (Item*, ScrollSensitivity);
+       ScrollGroup (Canvas*, ScrollSensitivity, bool clip=true);
+       ScrollGroup (Item*, ScrollSensitivity, bool clip=true);
 
        void scroll_to (Duple const& d);
        Duple scroll_offset() const { return _scroll_offset; }
@@ -51,6 +51,7 @@ class LIBCANVAS_API ScrollGroup : public Container
   private:
        ScrollSensitivity _scroll_sensitivity;
        Duple             _scroll_offset;
+       bool              _clip;
 };
 
 }
index 1562643b4a936a031196d090b65a8146c6601967..ad3731116a01c6e9dcd62b547435a58fe92f3390 100644 (file)
 using namespace std;
 using namespace ArdourCanvas;
 
-ScrollGroup::ScrollGroup (Canvas* c, ScrollSensitivity s)
+ScrollGroup::ScrollGroup (Canvas* c, ScrollSensitivity s, bool clip)
        : Container (c)
        , _scroll_sensitivity (s)       
+       , _clip(clip)
 {
 }
 
-ScrollGroup::ScrollGroup (Item* parent, ScrollSensitivity s)
+ScrollGroup::ScrollGroup (Item* parent, ScrollSensitivity s, bool clip)
        : Container (parent)
        , _scroll_sensitivity (s)       
+       , _clip(clip)
 {
 }
 
@@ -52,6 +54,14 @@ ScrollGroup::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) c
                return;
        }
 
+       if (!_clip) {
+               /* kludge: clip disabled, because for some reason the cursor scroll
+                  group requires scroll offsets here to clip correctly yet everything
+                  else does not.  I can't figure this out, so since not clipping a
+                  single arrow isn't the end of the world, just don't clip. */
+               Container::render (area, context);
+       }
+
        Rect self (_position.x + r.get().x0,
                   _position.y + r.get().y0,
                   _position.x + r.get().x1,