Added fancy mouseover effect to field borders.

This might be slow, if this becomes a problem I could add a setting to disable it.
This commit is contained in:
Twan van Laarhoven
2020-04-25 23:59:56 +02:00
parent 7d06e903a4
commit 5d4c3402df
3 changed files with 15 additions and 7 deletions
+2 -1
View File
@@ -22,7 +22,8 @@ enum DrawWhat
, DRAW_EDITING = 0x40 // draw other editor stuff, can be disabled.
, DRAW_ERRORS = 0x80 // draw error indicators, can't be disabled
, DRAW_ACTIVE = 0x100 // draw active editor stuff, such as hidden separators and atom highlights
, DRAW_NATIVELOOK = 0x200 // use a native look
, DRAW_HOVER = 0x200 // draw mouse over stuff, such as a highlighted border
, DRAW_NATIVELOOK = 0x400 // use a native look
};
// ----------------------------------------------------------------------------- : EOF
+11 -6
View File
@@ -41,7 +41,8 @@ ValueViewerP DataEditor::makeViewer(const StyleP& style) {
DrawWhat DataEditor::drawWhat(const ValueViewer* viewer) const {
int what = DRAW_NORMAL
| DRAW_ACTIVE * viewerIsCurrent(viewer);
| DRAW_ACTIVE * viewerIsCurrent(viewer)
| DRAW_HOVER * (viewer == hovered_viewer);
if (nativeLook()) {
what |= DRAW_BOXES | DRAW_EDITING | DRAW_NATIVELOOK | DRAW_ERRORS;
} else {
@@ -256,20 +257,23 @@ void DataEditor::onMotion(wxMouseEvent& ev) {
}
if (!HasCapture()) {
// find editor under mouse
ValueViewer* new_hovered_viewer = nullptr;
ValueViewer* old_hovered_viewer = hovered_viewer;
FOR_EACH_REVERSE(v,viewers) { // find high z index fields first
RealPoint pos = mousePoint(ev, *v);
if (v->containsPoint(pos) && v->getField()->editable) {
new_hovered_viewer = v.get();
hovered_viewer = v.get();
break;
}
}
if (hovered_viewer && hovered_viewer != new_hovered_viewer) {
ValueEditor* e = hovered_viewer->getEditor();
if (old_hovered_viewer && hovered_viewer != old_hovered_viewer) {
ValueEditor* e = old_hovered_viewer->getEditor();
RealPoint pos = mousePoint(ev, *hovered_viewer);
if (e) e->onMouseLeave(pos, ev);
redraw(*old_hovered_viewer);
}
if (hovered_viewer && hovered_viewer != old_hovered_viewer) {
redraw(*hovered_viewer);
}
hovered_viewer = new_hovered_viewer;
// change cursor and set status text
wxFrame* frame = dynamic_cast<wxFrame*>( wxGetTopLevelParent(this) );
if (hovered_viewer) {
@@ -293,6 +297,7 @@ void DataEditor::onMouseLeave(wxMouseEvent& ev) {
if (hovered_viewer) {
ValueEditor* e = hovered_viewer->getEditor();
if (e) e->onMouseLeave(mousePoint(ev,*hovered_viewer), ev);
if (hovered_viewer) redraw(*hovered_viewer);
hovered_viewer = nullptr;
}
// clear status text
+2
View File
@@ -59,6 +59,8 @@ bool ValueViewer::setFieldBorderPen(RotatedDC& dc) {
if (!(what & DRAW_BORDERS)) return false;
if (what & DRAW_ACTIVE) {
dc.SetPen(wxPen(Color(0, 128, 255), 1, wxPENSTYLE_SOLID));
} else if (what & DRAW_HOVER) {
dc.SetPen(dotted_pen(Color(0, 128, 255)));
} else {
dc.SetPen(dotted_pen(Color(128, 128, 128)));
}