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_EDITING = 0x40 // draw other editor stuff, can be disabled.
, DRAW_ERRORS = 0x80 // draw error indicators, can't 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_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 // ----------------------------------------------------------------------------- : EOF
+11 -6
View File
@@ -41,7 +41,8 @@ ValueViewerP DataEditor::makeViewer(const StyleP& style) {
DrawWhat DataEditor::drawWhat(const ValueViewer* viewer) const { DrawWhat DataEditor::drawWhat(const ValueViewer* viewer) const {
int what = DRAW_NORMAL int what = DRAW_NORMAL
| DRAW_ACTIVE * viewerIsCurrent(viewer); | DRAW_ACTIVE * viewerIsCurrent(viewer)
| DRAW_HOVER * (viewer == hovered_viewer);
if (nativeLook()) { if (nativeLook()) {
what |= DRAW_BOXES | DRAW_EDITING | DRAW_NATIVELOOK | DRAW_ERRORS; what |= DRAW_BOXES | DRAW_EDITING | DRAW_NATIVELOOK | DRAW_ERRORS;
} else { } else {
@@ -256,20 +257,23 @@ void DataEditor::onMotion(wxMouseEvent& ev) {
} }
if (!HasCapture()) { if (!HasCapture()) {
// find editor under mouse // 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 FOR_EACH_REVERSE(v,viewers) { // find high z index fields first
RealPoint pos = mousePoint(ev, *v); RealPoint pos = mousePoint(ev, *v);
if (v->containsPoint(pos) && v->getField()->editable) { if (v->containsPoint(pos) && v->getField()->editable) {
new_hovered_viewer = v.get(); hovered_viewer = v.get();
break; break;
} }
} }
if (hovered_viewer && hovered_viewer != new_hovered_viewer) { if (old_hovered_viewer && hovered_viewer != old_hovered_viewer) {
ValueEditor* e = hovered_viewer->getEditor(); ValueEditor* e = old_hovered_viewer->getEditor();
RealPoint pos = mousePoint(ev, *hovered_viewer); RealPoint pos = mousePoint(ev, *hovered_viewer);
if (e) e->onMouseLeave(pos, ev); 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 // change cursor and set status text
wxFrame* frame = dynamic_cast<wxFrame*>( wxGetTopLevelParent(this) ); wxFrame* frame = dynamic_cast<wxFrame*>( wxGetTopLevelParent(this) );
if (hovered_viewer) { if (hovered_viewer) {
@@ -293,6 +297,7 @@ void DataEditor::onMouseLeave(wxMouseEvent& ev) {
if (hovered_viewer) { if (hovered_viewer) {
ValueEditor* e = hovered_viewer->getEditor(); ValueEditor* e = hovered_viewer->getEditor();
if (e) e->onMouseLeave(mousePoint(ev,*hovered_viewer), ev); if (e) e->onMouseLeave(mousePoint(ev,*hovered_viewer), ev);
if (hovered_viewer) redraw(*hovered_viewer);
hovered_viewer = nullptr; hovered_viewer = nullptr;
} }
// clear status text // clear status text
+2
View File
@@ -59,6 +59,8 @@ bool ValueViewer::setFieldBorderPen(RotatedDC& dc) {
if (!(what & DRAW_BORDERS)) return false; if (!(what & DRAW_BORDERS)) return false;
if (what & DRAW_ACTIVE) { if (what & DRAW_ACTIVE) {
dc.SetPen(wxPen(Color(0, 128, 255), 1, wxPENSTYLE_SOLID)); dc.SetPen(wxPen(Color(0, 128, 255), 1, wxPENSTYLE_SOLID));
} else if (what & DRAW_HOVER) {
dc.SetPen(dotted_pen(Color(0, 128, 255)));
} else { } else {
dc.SetPen(dotted_pen(Color(128, 128, 128))); dc.SetPen(dotted_pen(Color(128, 128, 128)));
} }