Don't use text cursor when hovering over labels in native look editor

This commit is contained in:
Twan van Laarhoven
2020-05-05 23:23:09 +02:00
parent 6434532dfb
commit 6161feefc5
2 changed files with 26 additions and 15 deletions
+25 -14
View File
@@ -322,7 +322,8 @@ void DataEditor::onMotion(wxMouseEvent& ev) {
if (!HasCapture()) { if (!HasCapture()) {
// find editor under mouse // find editor under mouse
ValueViewer* old_hovered_viewer = hovered_viewer; 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) { if (old_hovered_viewer && hovered_viewer != old_hovered_viewer) {
ValueEditor* e = old_hovered_viewer->getEditor(); ValueEditor* e = old_hovered_viewer->getEditor();
RealPoint pos = mousePoint(ev, *old_hovered_viewer); RealPoint pos = mousePoint(ev, *old_hovered_viewer);
@@ -333,19 +334,23 @@ void DataEditor::onMotion(wxMouseEvent& ev) {
if (draw_hover_borders) redraw(*hovered_viewer); if (draw_hover_borders) redraw(*hovered_viewer);
} }
// change cursor and set status text // change cursor and set status text
wxFrame* frame = dynamic_cast<wxFrame*>( wxGetTopLevelParent(this) ); if (hovered_viewer && !hovered_label) {
if (hovered_viewer) {
ValueEditor* e = hovered_viewer->getEditor(); ValueEditor* e = hovered_viewer->getEditor();
RealPoint pos = mousePoint(ev, *hovered_viewer); RealPoint pos = mousePoint(ev, *hovered_viewer);
wxCursor c; wxCursor c;
if (e) c = e->cursor(pos); if (e) c = e->cursor(pos);
if (c.Ok()) SetCursor(c); if (c.Ok()) {
else SetCursor(wxCURSOR_ARROW); SetCursor(c);
if (frame) frame->SetStatusText(hovered_viewer->getField()->description); } else {
SetCursor(wxCURSOR_ARROW);
}
} else { } else {
// no field under cursor
SetCursor(wxCURSOR_ARROW); SetCursor(wxCURSOR_ARROW);
if (frame) frame->SetStatusText(wxEmptyString); }
// set status text
wxFrame* frame = dynamic_cast<wxFrame*>( 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())); 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 FOR_EACH_EDITOR_REVERSE{ // find high z index fields first
int y; if (v->getField()->editable) {
if (v->getField()->editable && (v->containsPoint(mousePoint(ev,*v)) || if (v->containsPoint(mousePoint(ev,*v))) {
(nativeLook() && (y = ev.GetY() + GetScrollPos(wxVERTICAL)) >= v->getStyle()->top if (over_label_out) *over_label_out = false;
&& y < v->getStyle()->bottom))) { return v.get();
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; return nullptr;
+1 -1
View File
@@ -127,7 +127,7 @@ class DataEditor : public CardViewer {
/// Convert mouse coordinates to internal coordinates /// Convert mouse coordinates to internal coordinates
RealPoint mousePoint(const wxMouseEvent&, const ValueViewer& viewer) const; RealPoint mousePoint(const wxMouseEvent&, const ValueViewer& viewer) const;
/// Field under the mouse cursor, or nullptr if there is none /// 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() /// Select a field found by tab order, can be viewers.end()
bool selectWithTab(vector<ValueViewerP>::iterator const&); bool selectWithTab(vector<ValueViewerP>::iterator const&);