From 1b3e25e79b0ad11cc65095d57e587a2a369a1732 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 20 Nov 2013 18:00:00 +0100 Subject: [PATCH 1/2] fit value rectangle --- .../ide/ui/laf/darcula/ui/DarculaComboBoxUI.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaComboBoxUI.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaComboBoxUI.java index 39fcc8f76445..7a72ba5a74f2 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaComboBoxUI.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaComboBoxUI.java @@ -205,6 +205,14 @@ public class DarculaComboBoxUI extends BasicComboBoxUI implements Border { paintCurrentValue(g, r, hasFocus); } + @Override + protected Rectangle rectangleForCurrentValue() { + final Rectangle r = super.rectangleForCurrentValue(); + r.x-=2; + r.y-=1; + return r; + } + public void paintCurrentValue(Graphics g, Rectangle bounds, boolean hasFocus) { ListCellRenderer renderer = comboBox.getRenderer(); Component c; @@ -247,9 +255,11 @@ public class DarculaComboBoxUI extends BasicComboBoxUI implements Border { r.height -= myPadding.top + myPadding.bottom; } - currentValuePane.paintComponent(g, c, comboBox, r.x-2, r.y, r.width, r.height, shouldValidate); + currentValuePane.paintComponent(g, c, comboBox, r.x, r.y, r.width, r.height, shouldValidate); } + + @Override protected void installKeyboardActions() { super.installKeyboardActions(); From 11398a81834e8ee5e2aefd2214545e1862ba5a86 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 20 Nov 2013 18:01:42 +0100 Subject: [PATCH 2/2] internal action to show non retina icons --- .../internal/ShowNonRetinaImagesActions.java | 105 ++++++++++++++++++ .../src/idea/PlatformActions.xml | 1 + 2 files changed, 106 insertions(+) create mode 100644 platform/lang-impl/src/com/intellij/internal/ShowNonRetinaImagesActions.java diff --git a/platform/lang-impl/src/com/intellij/internal/ShowNonRetinaImagesActions.java b/platform/lang-impl/src/com/intellij/internal/ShowNonRetinaImagesActions.java new file mode 100644 index 000000000000..5c5c742caa75 --- /dev/null +++ b/platform/lang-impl/src/com/intellij/internal/ShowNonRetinaImagesActions.java @@ -0,0 +1,105 @@ +/* + * Copyright 2000-2013 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.internal; + +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.project.DumbAwareAction; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.DialogWrapper; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.search.FilenameIndex; +import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.ui.components.JBScrollPane; +import org.jetbrains.annotations.Nullable; + +import javax.swing.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; + +/** + * @author Konstantin Bulenkov + */ +@SuppressWarnings("UndesirableClassUsage") +public class ShowNonRetinaImagesActions extends DumbAwareAction { + @Override + public void actionPerformed(AnActionEvent e) { + final Project project = e.getProject(); + if (project == null) return; + class ImageInfo { + boolean retina; + boolean normal; + boolean dark; + boolean retina_dark; + + } + HashMap info = new HashMap(); + final Collection images = FilenameIndex.getAllFilesByExt(project, "png", GlobalSearchScope.projectScope(project)); + for (VirtualFile image : images) { + final String path = image.getPath(); + final String key = toKey(path); + ImageInfo imageInfo = info.get(key); + if (imageInfo == null) { + imageInfo = new ImageInfo(); + info.put(key, imageInfo); + } + if (path.endsWith("@2x_dark.png")) { + imageInfo.retina_dark = true; + } else if (path.endsWith("_dark.png")) { + imageInfo.dark = true; + } else if (path.endsWith("@2x.png")) { + imageInfo.retina = true; + } else { + imageInfo.normal = true; + } + } + + final ArrayList retinaMissed = new ArrayList(); + for (String key : info.keySet()) { + if (!info.get(key).retina && info.get(key).normal) { + retinaMissed.add(key); + } + } + Collections.sort(retinaMissed, String.CASE_INSENSITIVE_ORDER); + + new DialogWrapper(project) { + { + init(); + } + + @Nullable + @Override + protected JComponent createCenterPanel() { + return new JBScrollPane(new JTextArea(StringUtil.join(retinaMissed, "\n"))); + } + }.show(); + } + + private static String toKey(String path) { + if (path.endsWith("@2x_dark.png")) { + return path.substring(0, path.lastIndexOf("@2x_dark.png")) + ".png"; + } + if (path.endsWith("_dark.png")) { + return path.substring(0, path.lastIndexOf("_dark.png")) + ".png"; + } + if (path.endsWith("@2x.png")) { + return path.substring(0, path.lastIndexOf("@2x.png")) + ".png"; + } + return path; + } +} diff --git a/platform/platform-resources/src/idea/PlatformActions.xml b/platform/platform-resources/src/idea/PlatformActions.xml index 2549f241beb4..136fa5486c5c 100644 --- a/platform/platform-resources/src/idea/PlatformActions.xml +++ b/platform/platform-resources/src/idea/PlatformActions.xml @@ -612,6 +612,7 @@ +