diff --git a/aegisub/src/video_display.cpp b/aegisub/src/video_display.cpp index 310d37656..480ecddf0 100644 --- a/aegisub/src/video_display.cpp +++ b/aegisub/src/video_display.cpp @@ -488,7 +488,6 @@ void VideoDisplay::OnMouseEvent(wxMouseEvent& event) { tool->OnMouseEvent(event); ShowCursor(activeMode != Video_Mode_Standard); - Render(); } void VideoDisplay::OnKey(wxKeyEvent &event) { int key = event.GetKeyCode(); diff --git a/aegisub/src/visual_tool.cpp b/aegisub/src/visual_tool.cpp index 4baa5ddef..d8112d886 100644 --- a/aegisub/src/visual_tool.cpp +++ b/aegisub/src/visual_tool.cpp @@ -105,9 +105,11 @@ VisualTool::~VisualTool() { template void VisualTool::OnMouseEvent (wxMouseEvent &event) { bool realTime = realtime->GetBool(); + bool needRender = false; if (event.Leaving()) { Update(); + parent->Render(); return; } externalChange = false; @@ -127,7 +129,9 @@ void VisualTool::OnMouseEvent (wxMouseEvent &event) { dragListOK = true; } if (!dragging) { + int oldHigh = curFeatureI; GetHighlightedFeature(); + if (curFeatureI != oldHigh) needRender = true; } if (dragging) { @@ -150,7 +154,12 @@ void VisualTool::OnMouseEvent (wxMouseEvent &event) { CommitDrag(&features[*cur]); } } - if (realTime) Commit(); + if (realTime) { + Commit(); + } + else { + needRender = true; + } } // end drag else { @@ -195,6 +204,9 @@ void VisualTool::OnMouseEvent (wxMouseEvent &event) { CommitHold(); Commit(); } + else { + needRender = true; + } } // end hold else { @@ -242,6 +254,7 @@ void VisualTool::OnMouseEvent (wxMouseEvent &event) { if (!altDown) { ClearSelection(); SetEditbox(); + needRender = true; } curDiag = GetActiveDialogueLine(); if (curDiag && InitializeHold()) { @@ -252,7 +265,7 @@ void VisualTool::OnMouseEvent (wxMouseEvent &event) { } } - Update(); + if (Update() || needRender) parent->Render(); externalChange = true; } diff --git a/aegisub/src/visual_tool.h b/aegisub/src/visual_tool.h index 7cd0fa034..2276ea4f8 100644 --- a/aegisub/src/visual_tool.h +++ b/aegisub/src/visual_tool.h @@ -67,7 +67,7 @@ protected: public: virtual void OnMouseEvent(wxMouseEvent &event)=0; virtual void OnSubTool(wxCommandEvent &)=0; - virtual void Update()=0; + virtual bool Update()=0; virtual void Draw()=0; virtual void Refresh()=0; virtual ~IVisualTool() { }; @@ -194,7 +194,8 @@ public: /// @brief Event handler for the subtoolbar virtual void OnSubTool(wxCommandEvent &) { } /// @brief Called when there's stuff - virtual void Update() { }; + /// @return Should the display rerender? + virtual bool Update() { return false; }; /// @brief Draw stuff virtual void Draw()=0; /// @brief Called by stuff when there's stuff diff --git a/aegisub/src/visual_tool_cross.cpp b/aegisub/src/visual_tool_cross.cpp index ead913482..62e51a1f6 100644 --- a/aegisub/src/visual_tool_cross.cpp +++ b/aegisub/src/visual_tool_cross.cpp @@ -52,11 +52,11 @@ VisualToolCross::VisualToolCross(VideoDisplay *parent, VideoState const& video, VisualToolCross::~VisualToolCross() { } /// @brief Update -void VisualToolCross::Update() { - if (!leftDClick) return; +bool VisualToolCross::Update() { + if (!leftDClick) return true; AssDialogue* line = GetActiveDialogueLine(); - if (!line) return; + if (!line) return true; int dx, dy; @@ -80,6 +80,7 @@ void VisualToolCross::Update() { } Commit(true, _("positioning")); + return false; } /// @brief Draw diff --git a/aegisub/src/visual_tool_cross.h b/aegisub/src/visual_tool_cross.h index f67b25fde..de441e7f9 100644 --- a/aegisub/src/visual_tool_cross.h +++ b/aegisub/src/visual_tool_cross.h @@ -48,7 +48,7 @@ public: VisualToolCross(VideoDisplay *parent, VideoState const& video, wxToolBar *); ~VisualToolCross(); - void Update(); + bool Update(); void Draw(); }; diff --git a/aegisub/src/visual_tool_drag.cpp b/aegisub/src/visual_tool_drag.cpp index f21e8cbc1..16c8356c6 100644 --- a/aegisub/src/visual_tool_drag.cpp +++ b/aegisub/src/visual_tool_drag.cpp @@ -308,8 +308,8 @@ void VisualToolDrag::CommitDrag(VisualToolDragDraggableFeature* feature) { SetOverride(feature->line, L"\\move", wxString::Format(L"(%i,%i,%i,%i,%i,%i)", x1, y1, x2, y2, feature->time, p->time)); } } -void VisualToolDrag::Update() { - if (!leftDClick) return; +bool VisualToolDrag::Update() { + if (!leftDClick) return false; int dx, dy; int vx = video.x; @@ -321,7 +321,7 @@ void VisualToolDrag::Update() { } else { AssDialogue* line = GetActiveDialogueLine(); - if (!line) return; + if (!line) return false; GetLinePosition(line, dx, dy); } parent->ToScriptCoords(&dx, &dy); @@ -359,4 +359,5 @@ void VisualToolDrag::Update() { Commit(true, _("positioning")); GenerateFeatures(); + return false; } diff --git a/aegisub/src/visual_tool_drag.h b/aegisub/src/visual_tool_drag.h index 74ce2fd52..dde2e3289 100644 --- a/aegisub/src/visual_tool_drag.h +++ b/aegisub/src/visual_tool_drag.h @@ -88,6 +88,6 @@ public: void OnSelectionChange(bool clear, int row, bool selected); void Draw(); - void Update(); + bool Update(); void OnSubTool(wxCommandEvent &event); }; diff --git a/aegisub/src/visual_tool_rotatez.h b/aegisub/src/visual_tool_rotatez.h index da3439a90..0a61a16e3 100644 --- a/aegisub/src/visual_tool_rotatez.h +++ b/aegisub/src/visual_tool_rotatez.h @@ -88,4 +88,5 @@ public: VisualToolRotateZ(VideoDisplay *parent, VideoState const& video, wxToolBar *); void Draw(); + bool Update() { return true; } };