From 10f6be400dbdfb6150d84466029ef00086cb440b Mon Sep 17 00:00:00 2001 From: Dennis Ushakov Date: Fri, 26 Aug 2011 19:01:53 +0400 Subject: [PATCH] IDEA-68995 Can't see the mouse in the editor when the background color is black on a Mac --- platform/icons/src/mac/text.gif | Bin 0 -> 913 bytes .../intellij/openapi/editor/impl/EditorImpl.java | 5 ++++- platform/util/src/com/intellij/ui/ColorUtil.java | 11 +++++++++++ .../util/src/com/intellij/util/ui/MacUIUtil.java | 7 +++++++ 4 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 platform/icons/src/mac/text.gif diff --git a/platform/icons/src/mac/text.gif b/platform/icons/src/mac/text.gif new file mode 100644 index 0000000000000000000000000000000000000000..c56c17995579a07d953eae033959a880caeb2708 GIT binary patch literal 913 zcmZ?wbhEHbRA5kG_|5+Z^f#E-c4#?Y}Ji)+`$MBz1 z#$&^RgUuYmS}`X!EIiyUpzJm0hC##8Mlt4qBN`43#~5Ty^Zrb~xcGRtvSpW#r@#}h zX-u()a$XiL^O~({e2C?y;S;}Z_4s8|GAE~;UF1?I7phf~d~Shr?WY{6z;vG}uA8&& Op4z(ldIuvTgEau~$vR{J literal 0 HcmV?d00001 diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java index d4ee04f3c921..6c471d4899b9 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java @@ -68,6 +68,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.openapi.wm.IdeGlassPane; +import com.intellij.ui.ColorUtil; import com.intellij.ui.GuiUtils; import com.intellij.ui.LightweightHint; import com.intellij.ui.components.JBScrollBar; @@ -81,6 +82,7 @@ import com.intellij.util.containers.HashMap; import com.intellij.util.messages.MessageBusConnection; import com.intellij.util.text.CharArrayUtil; import com.intellij.util.ui.ButtonlessScrollBarUI; +import com.intellij.util.ui.MacUIUtil; import com.intellij.util.ui.UIUtil; import com.intellij.util.ui.update.UiNotifyConnector; import gnu.trove.TIntArrayList; @@ -3533,7 +3535,8 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi return; } } - myEditorComponent.setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR)); + myEditorComponent.setCursor(SystemInfo.isMac && ColorUtil.isDark(getBackgroundColor()) ? + MacUIUtil.INVERTED_TEXT_CURSOR : Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR)); } } diff --git a/platform/util/src/com/intellij/ui/ColorUtil.java b/platform/util/src/com/intellij/ui/ColorUtil.java index 5ddc936f42e5..cace50d8e7aa 100644 --- a/platform/util/src/com/intellij/ui/ColorUtil.java +++ b/platform/util/src/com/intellij/ui/ColorUtil.java @@ -98,4 +98,15 @@ public class ColorUtil { } return null; } + + /** + * Checks whether color is dark or not based on perceptional luminosity + * http://stackoverflow.com/questions/596216/formula-to-determine-brightness-of-rgb-color + * @param c color to check + * @return dark or not + */ + public static boolean isDark(@NotNull final Color c) { + // based on perceptional luminosity, see + return (1 - (0.299 * c.getRed() + 0.587 * c.getGreen() + 0.114 * c.getBlue()) / 255) >= 0.5; + } } diff --git a/platform/util/src/com/intellij/util/ui/MacUIUtil.java b/platform/util/src/com/intellij/util/ui/MacUIUtil.java index cfc2195c8c3c..b23d72e69261 100644 --- a/platform/util/src/com/intellij/util/ui/MacUIUtil.java +++ b/platform/util/src/com/intellij/util/ui/MacUIUtil.java @@ -33,6 +33,7 @@ public class MacUIUtil { public static final boolean USE_QUARTZ = "true".equals(System.getProperty("apple.awt.graphics.UseQuartz")); public static final String MAC_FILL_BORDER = "MAC_FILL_BORDER"; + public static final Cursor INVERTED_TEXT_CURSOR = createInvertedTextCursor(); private MacUIUtil() { } @@ -250,4 +251,10 @@ public class MacUIUtil { } } } + + private static Cursor createInvertedTextCursor() { + final Toolkit toolkit = Toolkit.getDefaultToolkit(); + Image cursorImage = toolkit.createImage(MacUIUtil.class.getClassLoader().getResource("/mac/text.gif")); + return toolkit.createCustomCursor(cursorImage, new Point(0, 0), "InvertedTextCursor"); + } }