Merge branch 'appcode10' into merge_appcode10
[idea/community.git] / platform / platform-api / src / com / intellij / ui / SimpleColoredComponent.java
index e058c065fd56241aa590c9a706657f12c15a594c..e25dbad921f9a0d3b865a923bb207e918796ef5d 100644 (file)
@@ -317,11 +317,15 @@ public class SimpleColoredComponent extends JComponent implements Accessible {
 
     LOG.assertTrue(font != null);
 
+    int baseSize = font.getSize();
+    boolean wasSmaller = false;
     for (int i = 0; i < myAttributes.size(); i++) {
       SimpleTextAttributes attributes = myAttributes.get(i);
-      if (font.getStyle() != attributes.getFontStyle()) { // derive font only if it is necessary
-        font = font.deriveFont(attributes.getFontStyle());
+      boolean isSmaller = attributes.isSmaller();
+      if (font.getStyle() != attributes.getFontStyle() || isSmaller != wasSmaller) { // derive font only if it is necessary
+        font = font.deriveFont(attributes.getFontStyle(), isSmaller ? UIUtil.getFontSize(UIUtil.FontSize.SMALL) : baseSize);
       }
+      wasSmaller = isSmaller;
       final FontMetrics metrics = getFontMetrics(font);
       width += metrics.stringWidth(myFragments.get(i));
 
@@ -365,11 +369,16 @@ public class SimpleColoredComponent extends JComponent implements Accessible {
     Font font = getFont();
     LOG.assertTrue(font != null);
 
+    int baseSize = font.getSize();
+    boolean wasSmaller = false;
     for (int i = 0; i < myAttributes.size(); i++) {
       SimpleTextAttributes attributes = myAttributes.get(i);
-      if (font.getStyle() != attributes.getFontStyle()) { // derive font only if it is necessary
-        font = font.deriveFont(attributes.getFontStyle());
+      boolean isSmaller = attributes.isSmaller();
+      if (font.getStyle() != attributes.getFontStyle() || isSmaller != wasSmaller) { // derive font only if it is necessary
+        font = font.deriveFont(attributes.getFontStyle(), isSmaller ? UIUtil.getFontSize(UIUtil.FontSize.SMALL) : baseSize);
       }
+      wasSmaller = isSmaller;
+
       final FontMetrics metrics = getFontMetrics(font);
       final int curWidth = metrics.stringWidth(myFragments.get(i));
       if (x >= curX && x < curX + curWidth) {
@@ -455,12 +464,19 @@ public class SimpleColoredComponent extends JComponent implements Accessible {
     UIUtil.applyRenderingHints(g);
     applyAdditionalHints(g);
 
+    final Font ownFont = getFont();
+    int baseSize = ownFont != null ? ownFont.getSize() : g.getFont().getSize();
+    boolean wasSmaller = false;
     for (int i = 0; i < myFragments.size(); i++) {
       final SimpleTextAttributes attributes = myAttributes.get(i);
+
       Font font = g.getFont();
-      if (font.getStyle() != attributes.getFontStyle()) { // derive font only if it is necessary
-        font = font.deriveFont(attributes.getFontStyle());
+      boolean isSmaller = attributes.isSmaller();
+      if (font.getStyle() != attributes.getFontStyle() || isSmaller != wasSmaller) { // derive font only if it is necessary
+        font = font.deriveFont(attributes.getFontStyle(), isSmaller ? UIUtil.getFontSize(UIUtil.FontSize.SMALL) : baseSize);
       }
+      wasSmaller = isSmaller;
+
       g.setFont(font);
       final FontMetrics metrics = g.getFontMetrics(font);