From 6161feefc5b41943ee0c265411eff4880aaabe3a Mon Sep 17 00:00:00 2001 From: Twan van Laarhoven Date: Tue, 5 May 2020 23:23:09 +0200 Subject: [PATCH] Don't use text cursor when hovering over labels in native look editor --- src/gui/control/card_editor.cpp | 39 +++++++++++++++++++++------------ src/gui/control/card_editor.hpp | 2 +- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/src/gui/control/card_editor.cpp b/src/gui/control/card_editor.cpp index e2f579e9..ca147f91 100644 --- a/src/gui/control/card_editor.cpp +++ b/src/gui/control/card_editor.cpp @@ -322,7 +322,8 @@ void DataEditor::onMotion(wxMouseEvent& ev) { if (!HasCapture()) { // find editor under mouse ValueViewer* old_hovered_viewer = hovered_viewer; - hovered_viewer = mousedOverViewer(ev); + bool hovered_label = false; + hovered_viewer = mousedOverViewer(ev, &hovered_label); if (old_hovered_viewer && hovered_viewer != old_hovered_viewer) { ValueEditor* e = old_hovered_viewer->getEditor(); RealPoint pos = mousePoint(ev, *old_hovered_viewer); @@ -333,19 +334,23 @@ void DataEditor::onMotion(wxMouseEvent& ev) { if (draw_hover_borders) redraw(*hovered_viewer); } // change cursor and set status text - wxFrame* frame = dynamic_cast( wxGetTopLevelParent(this) ); - if (hovered_viewer) { + if (hovered_viewer && !hovered_label) { ValueEditor* e = hovered_viewer->getEditor(); RealPoint pos = mousePoint(ev, *hovered_viewer); wxCursor c; if (e) c = e->cursor(pos); - if (c.Ok()) SetCursor(c); - else SetCursor(wxCURSOR_ARROW); - if (frame) frame->SetStatusText(hovered_viewer->getField()->description); + if (c.Ok()) { + SetCursor(c); + } else { + SetCursor(wxCURSOR_ARROW); + } } else { - // no field under cursor SetCursor(wxCURSOR_ARROW); - if (frame) frame->SetStatusText(wxEmptyString); + } + // set status text + wxFrame* frame = dynamic_cast( wxGetTopLevelParent(this) ); + if (frame) { + frame->SetStatusText(hovered_viewer ? hovered_viewer->getField()->description : String()); } } } @@ -404,13 +409,19 @@ RealPoint DataEditor::mousePoint(const wxMouseEvent& ev, const ValueViewer& view return rot.trInv(RealPoint(ev.GetX(), ev.GetY())); } -ValueViewer* DataEditor::mousedOverViewer(const wxMouseEvent& ev) const { +ValueViewer* DataEditor::mousedOverViewer(const wxMouseEvent& ev, bool* over_label_out) const { FOR_EACH_EDITOR_REVERSE{ // find high z index fields first - int y; - if (v->getField()->editable && (v->containsPoint(mousePoint(ev,*v)) || - (nativeLook() && (y = ev.GetY() + GetScrollPos(wxVERTICAL)) >= v->getStyle()->top - && y < v->getStyle()->bottom))) { - return v.get(); + if (v->getField()->editable) { + if (v->containsPoint(mousePoint(ev,*v))) { + if (over_label_out) *over_label_out = false; + return v.get(); + } else if (nativeLook()) { + int y = ev.GetY() + GetScrollPos(wxVERTICAL); + if (y >= v->getStyle()->top && y < v->getStyle()->bottom) { + if (over_label_out) *over_label_out = true; + return v.get(); + } + } } } return nullptr; diff --git a/src/gui/control/card_editor.hpp b/src/gui/control/card_editor.hpp index 17d8f95b..ee0426ec 100644 --- a/src/gui/control/card_editor.hpp +++ b/src/gui/control/card_editor.hpp @@ -127,7 +127,7 @@ class DataEditor : public CardViewer { /// Convert mouse coordinates to internal coordinates RealPoint mousePoint(const wxMouseEvent&, const ValueViewer& viewer) const; /// Field under the mouse cursor, or nullptr if there is none - ValueViewer* mousedOverViewer(const wxMouseEvent&) const; + ValueViewer* mousedOverViewer(const wxMouseEvent&, bool* over_label_out=nullptr) const; /// Select a field found by tab order, can be viewers.end() bool selectWithTab(vector::iterator const&);