diff --git a/src/mouse.cpp b/src/mouse.cpp index 352c17e..700b765 100644 --- a/src/mouse.cpp +++ b/src/mouse.cpp @@ -463,6 +463,15 @@ void GraphicsWindow::MouseMoved(double x, double y, bool leftDown, pending.operation != DRAGGING_MARQUEE) { SS.GenerateAll(); + + // Activate degraded mode, and regenerate display items without edges. + if(activeGroup.v != 0) { + bool showEdges = SS.GW.showEdges; + SS.GW.showEdges = false; + SK.GetGroup(activeGroup)->GenerateDisplayItems(); + SS.GW.showEdges = showEdges; + isDegraded = true; + } } } @@ -470,6 +479,12 @@ void GraphicsWindow::ClearPending(void) { pending.points.Clear(); pending = {}; SS.ScheduleShowTW(); + + // If degraded mode was enabled, we need to regenerate again to get edges back. + if(isDegraded) { + isDegraded = false; + SK.GetGroup(activeGroup)->displayDirty = true; + } } void GraphicsWindow::MouseMiddleOrRightDown(double x, double y) { diff --git a/src/ui.h b/src/ui.h index ebb60b2..a041ed3 100644 --- a/src/ui.h +++ b/src/ui.h @@ -504,6 +504,9 @@ public: // allowing a paint in between. The extra solves are wasted if they're // not displayed. bool havePainted; + // Similarly, don't draw edges and outlines, since that's too slow + // for real-time dragging. + bool isDegraded; // Some state for the context menu. struct {