From 62db91c60d24eb7d06e4310ff679c4ad42a4b417 Mon Sep 17 00:00:00 2001 From: Ben Fry Date: Sat, 10 Sep 2016 22:22:57 -0400 Subject: [PATCH] limit rollovers on EditorStatus to the text portion --- app/src/processing/app/Platform.java | 2 +- app/src/processing/app/ui/EditorStatus.java | 52 ++++++++++++++++++--- build/shared/lib/theme.txt | 1 + todo.txt | 1 + 4 files changed, 48 insertions(+), 8 deletions(-) diff --git a/app/src/processing/app/Platform.java b/app/src/processing/app/Platform.java index 91ea3c3d1..02b24c142 100644 --- a/app/src/processing/app/Platform.java +++ b/app/src/processing/app/Platform.java @@ -150,7 +150,7 @@ public class Platform { } catch (Exception e) { Messages.showWarning("Problem Opening URL", - "Could not open the URL\n" + url, e); + "Could not open the URL\n" + url, e); } } diff --git a/app/src/processing/app/ui/EditorStatus.java b/app/src/processing/app/ui/EditorStatus.java index 73269775c..aca1bc047 100644 --- a/app/src/processing/app/ui/EditorStatus.java +++ b/app/src/processing/app/ui/EditorStatus.java @@ -33,6 +33,7 @@ import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.awt.event.MouseMotionAdapter; import javax.swing.plaf.basic.BasicSplitPaneDivider; import javax.swing.plaf.basic.BasicSplitPaneUI; @@ -50,6 +51,7 @@ public class EditorStatus extends BasicSplitPaneDivider { //JPanel { static final int LEFT_MARGIN = Editor.LEFT_GUTTER; static final int RIGHT_MARGIN = 20; + Color urlColor; Color[] fgColor; Color[] bgColor; Image[] bgImage; @@ -72,7 +74,11 @@ public class EditorStatus extends BasicSplitPaneDivider { //JPanel { int mode; String message; + String url; + int rightEdge; + int mouseX; + boolean inside; Font font; FontMetrics metrics; @@ -98,18 +104,45 @@ public class EditorStatus extends BasicSplitPaneDivider { //JPanel { updateMode(); addMouseListener(new MouseAdapter() { + + @Override public void mouseEntered(MouseEvent e) { - if (url != null) { - setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - } + updateMouse(); } + @Override public void mousePressed(MouseEvent e) { - if (url != null) { + //if (url != null) { + if (inside) { Platform.openURL(url); } } + + @Override + public void mouseExited(MouseEvent e) { + updateMouse(); + } + }); + + addMouseMotionListener(new MouseMotionAdapter() { + + @Override + public void mouseMoved(MouseEvent e) { + mouseX = e.getX(); + updateMouse(); + } + }); + } + + + void updateMouse() { + if (inside) { + setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + } else { + setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); + } + repaint(); } @@ -125,6 +158,8 @@ public class EditorStatus extends BasicSplitPaneDivider { //JPanel { public void updateMode() { Mode mode = editor.getMode(); + urlColor = mode.getColor("status.url.fgcolor"); + fgColor = new Color[] { mode.getColor("status.notice.fgcolor"), mode.getColor("status.error.fgcolor"), @@ -240,7 +275,7 @@ public class EditorStatus extends BasicSplitPaneDivider { //JPanel { if (offscreen == null) { sizeW = size.width; sizeH = size.height; -// setButtonBounds(); + if (Toolkit.highResDisplay()) { offscreen = createImage(sizeW*2, sizeH*2); } else { @@ -257,15 +292,18 @@ public class EditorStatus extends BasicSplitPaneDivider { //JPanel { ascent = metrics.getAscent(); } - //g.setColor(bgColor[mode]); - //g.fillRect(0, 0, sizeW, sizeH); g.drawImage(bgImage[mode], 0, 0, sizeW, sizeH, this); g.setColor(fgColor[mode]); // https://github.com/processing/processing/issues/3265 if (message != null) { g.setFont(font); // needs to be set each time on osx + inside = (mouseX > LEFT_MARGIN && mouseX < rightEdge); + if (inside) { + g.setColor(urlColor); + } g.drawString(message, LEFT_MARGIN, (sizeH + ascent) / 2); + rightEdge = LEFT_MARGIN + g.getFontMetrics().stringWidth(message); } if (indeterminate) { diff --git a/build/shared/lib/theme.txt b/build/shared/lib/theme.txt index 06101c6a0..5be58de3d 100644 --- a/build/shared/lib/theme.txt +++ b/build/shared/lib/theme.txt @@ -6,6 +6,7 @@ status.error.fgcolor = #ffffff status.error.bgcolor = #9E0A0A status.warning.bgcolor = #EF8115 status.warning.fgcolor = #FFFFFF +status.url.fgcolor = #cccccc status.font = processing.sans,plain,13 # HEADER TABS diff --git a/todo.txt b/todo.txt index 66f152cfc..59a92fa89 100755 --- a/todo.txt +++ b/todo.txt @@ -3,6 +3,7 @@ X Find in reference for size() opens StringList.size() X https://github.com/processing/processing/issues/4224 X though that's still imperfect: X https://github.com/processing/processing/issues/4655 +X limit rollovers on EditorStatus to the text portion X more font tweaks to make mono fonts work properly after #4639 _ update the Linux notes based on where we land on this _ https://github.com/processing/processing/wiki/Supported-Platforms#linux