diff --git a/platform/icons/src/ide/notification/errorEvents.png b/platform/icons/src/ide/notification/errorEvents.png new file mode 100644 index 000000000000..8fe04b8971c0 Binary files /dev/null and b/platform/icons/src/ide/notification/errorEvents.png differ diff --git a/platform/icons/src/ide/notification/errorEvents@2x.png b/platform/icons/src/ide/notification/errorEvents@2x.png new file mode 100644 index 000000000000..7450904c5d57 Binary files /dev/null and b/platform/icons/src/ide/notification/errorEvents@2x.png differ diff --git a/platform/icons/src/ide/notification/infoEvents.png b/platform/icons/src/ide/notification/infoEvents.png new file mode 100644 index 000000000000..3ce39c835959 Binary files /dev/null and b/platform/icons/src/ide/notification/infoEvents.png differ diff --git a/platform/icons/src/ide/notification/infoEvents@2x.png b/platform/icons/src/ide/notification/infoEvents@2x.png new file mode 100644 index 000000000000..c9fb87e2400d Binary files /dev/null and b/platform/icons/src/ide/notification/infoEvents@2x.png differ diff --git a/platform/icons/src/ide/notification/noEvents.png b/platform/icons/src/ide/notification/noEvents.png new file mode 100644 index 000000000000..0cbeeed2a9fb Binary files /dev/null and b/platform/icons/src/ide/notification/noEvents.png differ diff --git a/platform/icons/src/ide/notification/noEvents@2x.png b/platform/icons/src/ide/notification/noEvents@2x.png new file mode 100644 index 000000000000..9ef60cceccdb Binary files /dev/null and b/platform/icons/src/ide/notification/noEvents@2x.png differ diff --git a/platform/icons/src/ide/notification/warningEvents.png b/platform/icons/src/ide/notification/warningEvents.png new file mode 100644 index 000000000000..7a2696747933 Binary files /dev/null and b/platform/icons/src/ide/notification/warningEvents.png differ diff --git a/platform/icons/src/ide/notification/warningEvents@2x.png b/platform/icons/src/ide/notification/warningEvents@2x.png new file mode 100644 index 000000000000..acd4f27c739e Binary files /dev/null and b/platform/icons/src/ide/notification/warningEvents@2x.png differ diff --git a/platform/platform-impl/src/com/intellij/ide/actions/ActivateToolWindowAction.java b/platform/platform-impl/src/com/intellij/ide/actions/ActivateToolWindowAction.java index 8a6b478b2a0d..4dfa4e525c1c 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/ActivateToolWindowAction.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/ActivateToolWindowAction.java @@ -97,7 +97,7 @@ public class ActivateToolWindowAction extends DumbAwareAction { presentation.setDescription(IdeBundle.message("action.activate.tool.window", title)); Icon icon = toolWindow.getIcon(); if (EventLog.LOG_TOOL_WINDOW_ID.equals(myToolWindowId)) { - icon = AllIcons.Ide.Info_notifications; + icon = AllIcons.Ide.Notification.InfoEvents; } presentation.setIcon(icon == null ? null : new SizedIcon(icon, icon.getIconHeight(), icon.getIconHeight())); } diff --git a/platform/platform-impl/src/com/intellij/notification/impl/IdeNotificationArea.java b/platform/platform-impl/src/com/intellij/notification/impl/IdeNotificationArea.java index 7c4b5efa078d..021646b39ba6 100644 --- a/platform/platform-impl/src/com/intellij/notification/impl/IdeNotificationArea.java +++ b/platform/platform-impl/src/com/intellij/notification/impl/IdeNotificationArea.java @@ -26,13 +26,13 @@ import com.intellij.notification.NotificationType; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.wm.CustomStatusBarWidget; import com.intellij.openapi.wm.IconLikeCustomStatusBarWidget; import com.intellij.openapi.wm.StatusBar; import com.intellij.openapi.wm.ToolWindow; import com.intellij.ui.ClickListener; import com.intellij.ui.LayeredIcon; -import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -91,7 +91,7 @@ public class IdeNotificationArea extends JLabel implements CustomStatusBarWidget @Nullable private Project getProject() { - return CommonDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext((Component) myStatusBar)); + return CommonDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext((Component)myStatusBar)); } @NotNull @@ -126,10 +126,14 @@ public class IdeNotificationArea extends JLabel implements CustomStatusBarWidget private LayeredIcon createIconWithNotificationCount(ArrayList notifications) { LayeredIcon icon = new LayeredIcon(2); - Icon statusIcon = getPendingNotificationsIcon(AllIcons.Ide.Notifications, getMaximumType(notifications)); + NotificationType type = getMaximumType(notifications); + Icon statusIcon = getPendingNotificationsIcon(AllIcons.Ide.Notification.NoEvents, type); icon.setIcon(statusIcon, 0); - if (notifications.size() > 0) { - icon.setIcon(new TextIcon(this, String.valueOf(notifications.size())), 1, statusIcon.getIconWidth() - 2, 0); + int size = notifications.size(); + if (size > 0) { + //noinspection UseJBColor + Color textColor = type == NotificationType.ERROR ? Color.white : Color.black; + icon.setIcon(new TextIcon(this, size < 10 ? String.valueOf(size) : "9+", textColor), 1); } return icon; } @@ -142,9 +146,12 @@ public class IdeNotificationArea extends JLabel implements CustomStatusBarWidget private static Icon getPendingNotificationsIcon(Icon defIcon, final NotificationType maximumType) { if (maximumType != null) { switch (maximumType) { - case WARNING: return AllIcons.Ide.Warning_notifications; - case ERROR: return AllIcons.Ide.Error_notifications; - case INFORMATION: return AllIcons.Ide.Info_notifications; + case WARNING: + return AllIcons.Ide.Notification.WarningEvents; + case ERROR: + return AllIcons.Ide.Notification.ErrorEvents; + case INFORMATION: + return AllIcons.Ide.Notification.InfoEvents; } } return defIcon; @@ -172,12 +179,14 @@ public class IdeNotificationArea extends JLabel implements CustomStatusBarWidget private static class TextIcon implements Icon { private final String myStr; private final JComponent myComponent; + private final Color myTextColor; private final int myWidth; - public TextIcon(JComponent component, @NotNull String str) { + public TextIcon(JComponent component, @NotNull String str, @NotNull Color textColor) { myStr = str; myComponent = component; - myWidth = myComponent.getFontMetrics(calcFont()).stringWidth(myStr) + 1; + myTextColor = textColor; + myWidth = myComponent.getFontMetrics(calcFont()).stringWidth(myStr); } @Override @@ -209,9 +218,14 @@ public class IdeNotificationArea extends JLabel implements CustomStatusBarWidget Font originalFont = g.getFont(); Color originalColor = g.getColor(); g.setFont(calcFont()); - y += getIconHeight() - g.getFontMetrics().getDescent(); - g.setColor(UIUtil.getLabelForeground()); + x += (getIconWidth() - myWidth) / 2; + y += getIconHeight() / 2 + g.getFontMetrics().getDescent(); + if (!SystemInfo.isLinux && myStr.length() > 1) { + x++; + } + + g.setColor(myTextColor); g.drawString(myStr, x, y); g.setFont(originalFont); @@ -219,17 +233,21 @@ public class IdeNotificationArea extends JLabel implements CustomStatusBarWidget } private Font calcFont() { - return myComponent.getFont().deriveFont(Font.BOLD).deriveFont((float) getIconHeight() * 3 / 5); + float size = (float)getIconHeight() * 3 / 5; + if (myStr.length() > 1) { + size--; + } + return myComponent.getFont().deriveFont(size); } @Override public int getIconWidth() { - return myWidth; + return AllIcons.Ide.Notification.NoEvents.getIconWidth(); } @Override public int getIconHeight() { - return AllIcons.Ide.Notifications.getIconHeight(); + return AllIcons.Ide.Notification.NoEvents.getIconHeight(); } } } diff --git a/platform/platform-resources/src/META-INF/PlatformExtensions.xml b/platform/platform-resources/src/META-INF/PlatformExtensions.xml index 44e4a5f7dde2..d18f378ebb69 100644 --- a/platform/platform-resources/src/META-INF/PlatformExtensions.xml +++ b/platform/platform-resources/src/META-INF/PlatformExtensions.xml @@ -355,7 +355,7 @@