This is an automated email from the ASF dual-hosted git repository.

ebakke pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git

commit b211ac86e9fb75f1587b8115a910a39bdf866e46
Author: Eirik Bakke <[email protected]>
AuthorDate: Sat May 11 02:01:54 2019 +0200

    Factored out the parameter parsing logic for the splash screen's status 
line, in preparation for adding a separate optional version text box.
    
    No behavior should change as a result of this commit (refactoring only).
---
 .../src/org/netbeans/core/startup/Splash.java      | 157 +++++++++++++--------
 1 file changed, 98 insertions(+), 59 deletions(-)

diff --git a/platform/core.startup/src/org/netbeans/core/startup/Splash.java 
b/platform/core.startup/src/org/netbeans/core/startup/Splash.java
index a48e6a0..7bb15ea 100644
--- a/platform/core.startup/src/org/netbeans/core/startup/Splash.java
+++ b/platform/core.startup/src/org/netbeans/core/startup/Splash.java
@@ -271,17 +271,91 @@ public final class Splash implements Stamps.Updater {
         }
     }
 
+    private static final class TextBox {
+        final Rectangle bounds;
+        final Color color;
+        final int textSize;
+        final Font font;
+        final FontMetrics fm;
+        // Will be set by SwingUtilities.layoutCompoundLabel.
+        final Rectangle effectiveBounds = new Rectangle();
+
+        private TextBox(
+                Rectangle bounds, Color color, int textSize, Font font, 
FontMetrics fontMetrics)
+        {
+            this.bounds = bounds;
+            this.color = color;
+            this.textSize = textSize;
+            this.font = font;
+            this.fm = fontMetrics;
+        }
+
+        /**
+         * Compute the text layout and, if graphics is not null, paint the 
text string.
+         */
+        public void layout(String text, Graphics graphics) {
+            if (fm == null) {
+              // XXX(-ttran) this happened on Japanese Windows NT, don't
+              // fully understand why
+              return;
+            }
+            SwingUtilities.layoutCompoundLabel(fm, text, null,
+                    BOTTOM, LEFT, BOTTOM, LEFT,
+                    bounds, new Rectangle(), effectiveBounds, 0);
+            if (graphics != null) {
+              graphics.setColor(color);
+              graphics.setFont(font);
+              graphics.drawString(text, effectiveBounds.x, effectiveBounds.y + 
fm.getAscent());
+            }
+        }
+
+        public static TextBox parse(Graphics graphics, JComponent comp, 
ResourceBundle bundle,
+            String prefix, boolean optional)
+        {
+            if (optional && !bundle.containsKey(prefix + "Bounds"))
+              return null;
+            StringTokenizer st = new StringTokenizer(
+                    bundle.getString(prefix + "Bounds"), " ,"); // NOI18N
+            Rectangle bounds = new Rectangle(Integer.parseInt(st.nextToken()),
+                    Integer.parseInt(st.nextToken()),
+                    Integer.parseInt(st.nextToken()),
+                    Integer.parseInt(st.nextToken()));
+            Color color = Color.BLACK;
+            try {
+                Integer rgb = Integer.decode(bundle.getString(prefix + 
"Color")); // NOI18N
+                color = new Color(rgb.intValue());
+            } catch (NumberFormatException nfe) {
+                //IZ 37515 - NbBundle.DEBUG causes startup to fail; use 
default value
+                Util.err.warning("Number format exception " + //NOI18N
+                        "loading splash screen parameters."); //NOI18N
+                Logger.getLogger("global").log(Level.WARNING, null, nfe);
+            }
+            int size = 12;
+            try {
+                String sizeStr = bundle.getString(prefix + "FontSize");
+                size = Integer.parseInt(sizeStr);
+            } catch (MissingResourceException e) {
+                //ignore - use default size
+            } catch (NumberFormatException nfe) {
+                //ignore - use default size
+            }
+            Font font = new Font(bundle.getString(prefix + "FontType"), 
Font.PLAIN, size); // NOI18N
+            FontMetrics fontMetrics;
+            if (comp != null) {
+                fontMetrics = comp.getFontMetrics(font);
+            } else {
+                fontMetrics = graphics.getFontMetrics(font);
+            }
+            return new TextBox(bounds, color, size, font, fontMetrics);
+        }
+    }
+
     private static class SplashPainter {
-        Rectangle view;
-        Color color_text;
+        TextBox statusBox;
         Color color_bar;
         Color color_edge;
         Color color_corner;
-       
-        /** font size for splash texts */
-        private int size = 12;
         private Rectangle dirty = new Rectangle();
-        private Rectangle rect = new Rectangle();
         private Rectangle bar = new Rectangle();
         private Rectangle bar_inc = new Rectangle();
         private int progress = 0;
@@ -290,7 +364,6 @@ public final class Splash implements Stamps.Updater {
         private int barLength = 0;
         private Image image;
         private String text;
-        private FontMetrics fm;
         private Graphics graphics;
         private final JComponent comp;
         private final boolean about;
@@ -315,22 +388,15 @@ public final class Splash implements Stamps.Updater {
             maxSteps = 140;
 
             ResourceBundle bundle = NbBundle.getBundle(Splash.class);
+            statusBox = TextBox.parse(graphics, comp, bundle, 
"SplashRunningText", false);
             StringTokenizer st = new StringTokenizer(
-                    bundle.getString("SplashRunningTextBounds"), " ,"); // 
NOI18N
-            view = new Rectangle(Integer.parseInt(st.nextToken()),
-                    Integer.parseInt(st.nextToken()),
-                    Integer.parseInt(st.nextToken()),
-                    Integer.parseInt(st.nextToken()));
-            st = new StringTokenizer(
                     bundle.getString("SplashProgressBarBounds"), " ,"); // 
NOI18N
             try {
                 bar = new Rectangle(Integer.parseInt(st.nextToken()),
                         Integer.parseInt(st.nextToken()),
                         Integer.parseInt(st.nextToken()),
                         Integer.parseInt(st.nextToken()));
-                Integer rgb = 
Integer.decode(bundle.getString("SplashRunningTextColor")); // NOI18N
-                color_text = new Color(rgb.intValue());
-                rgb = 
Integer.decode(bundle.getString("SplashProgressBarColor")); // NOI18N
+                Integer rgb = 
Integer.decode(bundle.getString("SplashProgressBarColor")); // NOI18N
                 color_bar = new Color(rgb.intValue());
                 rgb = 
Integer.decode(bundle.getString("SplashProgressBarEdgeColor")); // NOI18N
                 color_edge = new Color(rgb.intValue());
@@ -341,31 +407,16 @@ public final class Splash implements Stamps.Updater {
                 Util.err.warning("Number format exception " + //NOI18N
                         "loading splash screen parameters."); //NOI18N
                 Logger.getLogger("global").log(Level.WARNING, null, nfe);
-                color_text = Color.BLACK;
                 color_bar = Color.ORANGE;
                 color_edge = Color.BLUE;
                 color_corner = Color.GREEN;
                 bar = new Rectangle(0, 0, 80, 10);
             }
-            try {
-                String sizeStr = bundle.getString("SplashRunningTextFontSize");
-                size = Integer.parseInt(sizeStr);
-            } catch (MissingResourceException e) {
-                //ignore - use default size
-            } catch (NumberFormatException nfe) {
-                //ignore - use default size
-            }
 
             image = loadContent(about);
 
-            Font font = new 
Font(bundle.getString("SplashRunningTextFontType"), Font.PLAIN, size); // NOI18N
-            if (comp != null) {
-                comp.setFont(font); 
-                fm = comp.getFontMetrics(font);
-            } else {
-                graphics.setFont(font);
-                fm = graphics.getFontMetrics(font);
-            }
+            if (comp != null)
+              comp.setFont(statusBox.font);
         }
 
         long next;
@@ -409,19 +460,17 @@ public final class Splash implements Stamps.Updater {
                         return;
                     }
 
-                    if (fm == null) {
+                    if (statusBox.fm == null) {
                         return;
                     }
 
                     adjustText(text);
 
-                    SwingUtilities.layoutCompoundLabel(fm, text, null,
-                            BOTTOM, LEFT, BOTTOM, LEFT,
-                            view, new Rectangle(), rect, 0);
-                    dirty = dirty.union(rect);
+                    statusBox.layout(text, null);
+                    dirty = dirty.union(statusBox.effectiveBounds);
                     // update screen (assume repaint manager optimizes unions;)
                     repaint(dirty);
-                    dirty = new Rectangle(rect);
+                    dirty = new Rectangle(statusBox.effectiveBounds);
                 }
             });
         }
@@ -437,12 +486,12 @@ public final class Splash implements Stamps.Updater {
             if (text == null)
                 return ;
 
-            if (fm == null)
+            if (statusBox.fm == null)
                 return;
             
-            int width = fm.stringWidth(text);            
+            int width = statusBox.fm.stringWidth(text);
             
-            if (width > view.width) {                
+            if (width > statusBox.bounds.width) {
                 StringTokenizer st = new StringTokenizer(text);
                 while (st.hasMoreTokens()) {
                     String element = st.nextToken();                           
         
@@ -450,7 +499,7 @@ public final class Splash implements Stamps.Updater {
                         newString = element;
                     else
                         newString = newText + " " + element; // NOI18N
-                    if (fm.stringWidth(newString + "...") > view.width) { // 
NOI18N
+                    if (statusBox.fm.stringWidth(newString + "...") > 
statusBox.bounds.width) { // NOI18N
                         this.text = newText + "..."; // NOI18N
                         break;
                     } else                        
@@ -466,7 +515,7 @@ public final class Splash implements Stamps.Updater {
                     newText = "";
                     for (int i = 0; i < text.length(); i++) {
                         newString += text.charAt(i);
-                        if (fm.stringWidth(newString + "...") > view.width) { 
// NOI18N
+                        if (statusBox.fm.stringWidth(newString + "...") > 
statusBox.bounds.width) { // NOI18N
                             this.text = newText + "..."; // NOI18N
                             break;
                         } else {
@@ -524,24 +573,14 @@ public final class Splash implements Stamps.Updater {
         }
        
         void paint() {
-            graphics.setColor(color_text);
             graphics.drawImage(image, 0, 0, null);
+            // turn anti-aliasing on for the splash text
+            Graphics2D g2d = (Graphics2D) graphics;
+            g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
+                    RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
 
             if (text != null) {
-                if (fm == null) {
-                    // XXX(-ttran) this happened on Japanese Windows NT, don't
-                    // fully understand why
-                    return;
-                }
-
-                SwingUtilities.layoutCompoundLabel(fm, text, null,
-                        BOTTOM, LEFT, BOTTOM, LEFT,
-                        view, new Rectangle(), rect, 0);
-                // turn anti-aliasing on for the splash text
-                Graphics2D g2d = (Graphics2D) graphics;
-                g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
-                        RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
-                graphics.drawString(text, rect.x, rect.y + fm.getAscent());
+                statusBox.layout(text, graphics);
             }
 
             // Draw progress bar if applicable


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to