Modified: 
pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSheetSkin_ja.json
URL: 
http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSheetSkin_ja.json?rev=1913470&r1=1913469&r2=1913470&view=diff
==============================================================================
--- 
pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSheetSkin_ja.json
 (original)
+++ 
pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSheetSkin_ja.json
 Tue Oct 31 19:15:47 2023
@@ -1,21 +1,21 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you 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.
- */
-{   saveAs: "名前を付けて保存:",
-    ok: "OK",
-    cancel: "キャンセル"
-}
-
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you 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.
+ */
+{   saveAs: "名前を付けて保存:",
+    ok: "OK",
+    cancel: "キャンセル"
+}
+

Propchange: 
pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSheetSkin_ja.json
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSkin_ja.json
URL: 
http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSkin_ja.json?rev=1913470&r1=1913469&r2=1913470&view=diff
==============================================================================
--- 
pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSkin_ja.json
 (original)
+++ 
pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSkin_ja.json
 Tue Oct 31 19:15:47 2023
@@ -1,27 +1,27 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you 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.
- */
-{   selectDrive: "ドライブの選択",
-    goTo: "下のフォルダーに移動",
-    goUp: "上のフォルダーに移動",
-    newFolder: "新しいフォルダーの作成",
-    goHome: "ホームフォルダーに移動",
-    search: "検索",
-    searchFor: "ファイルを検索",
-    fileName: "ファイル",
-    size: "サイズ",
-    lastModified: "更新日時"
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you 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.
+ */
+{   selectDrive: "ドライブの選択",
+    goTo: "下のフォルダーに移動",
+    goUp: "上のフォルダーに移動",
+    newFolder: "新しいフォルダーの作成",
+    goHome: "ホームフォルダーに移動",
+    search: "検索",
+    searchFor: "ファイルを検索",
+    fileName: "ファイル",
+    size: "サイズ",
+    lastModified: "更新日時"
+}

Propchange: 
pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSkin_ja.json
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraGaugeSkin.java
URL: 
http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraGaugeSkin.java?rev=1913470&r1=1913469&r2=1913470&view=diff
==============================================================================
--- 
pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraGaugeSkin.java 
(original)
+++ 
pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraGaugeSkin.java 
Tue Oct 31 19:15:47 2023
@@ -1,734 +1,734 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you 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 org.apache.pivot.wtk.skin.terra;
-
-import java.awt.BasicStroke;
-import java.awt.Color;
-import java.awt.Font;
-import java.awt.Graphics2D;
-import java.awt.RenderingHints;
-import java.awt.font.FontRenderContext;
-import java.awt.font.LineMetrics;
-import java.awt.geom.Arc2D;
-import java.awt.geom.Rectangle2D;
-
-import org.apache.pivot.collections.Dictionary;
-import org.apache.pivot.collections.Sequence;
-import org.apache.pivot.util.StringUtils;
-import org.apache.pivot.util.Utils;
-import org.apache.pivot.wtk.Component;
-import org.apache.pivot.wtk.Dimensions;
-import org.apache.pivot.wtk.Gauge;
-import org.apache.pivot.wtk.GaugeListener;
-import org.apache.pivot.wtk.GraphicsUtilities;
-import org.apache.pivot.wtk.Insets;
-import org.apache.pivot.wtk.Origin;
-import org.apache.pivot.wtk.Theme;
-import org.apache.pivot.wtk.skin.ComponentSkin;
-
-
-/**
- * Skin class for the {@link Gauge} component, which draws a circular gauge 
with possible text
- * in the center.
- * <p> The gauge colors, as well as colors for the warning and/or critical 
colors can be set.
- *
- * @param <T> The numeric type for the gauge value.
- */
-public class TerraGaugeSkin<T extends Number> extends ComponentSkin implements 
GaugeListener<T> {
-    private static final float STROKE_WIDTH = 6.0f;
-
-    private Color backgroundColor;
-    /** This is the color of the circle part of the gauge, where the value "is 
not". */
-    private Color gaugeColor;
-    private Color textColor;
-    private Color tickColor;
-    /** This is the color for the "value" if it is below the warning or 
critical levels. */
-    private Color color;
-    private Color borderColor;
-    private Color warningColor;
-    private Color criticalColor;
-    private boolean onlyMaxColor = false;
-    private boolean showTickMarks = false;
-    private Insets padding;
-    private Font font;
-    private float thickness = STROKE_WIDTH;
-    private T tickFrequency;
-    private boolean showBorder = false;
-    private float borderThickness = 1.0f;
-
-    private static final RenderingHints RENDERING_HINTS = new 
RenderingHints(null);
-
-    static {
-        RENDERING_HINTS.put(RenderingHints.KEY_ANTIALIASING, 
RenderingHints.VALUE_ANTIALIAS_ON);
-        RENDERING_HINTS.put(RenderingHints.KEY_STROKE_CONTROL, 
RenderingHints.VALUE_STROKE_PURE);
-        RENDERING_HINTS.put(RenderingHints.KEY_ALPHA_INTERPOLATION, 
RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
-    };
-
-    public TerraGaugeSkin() {
-        font = currentTheme().getFont().deriveFont(Font.BOLD, 24.0f);
-        setBackgroundColor(defaultBackgroundColor());
-        setGaugeColor(8);
-        setColor(Color.green);
-        setWarningColor(20);
-        setCriticalColor(23);
-        setTextColor(8);
-        setTickColor(6);
-        setBorderColor(6);
-        setPadding(Insets.NONE);
-    }
-
-    @Override
-    public void install(final Component component) {
-        super.install(component);
-
-        @SuppressWarnings("unchecked")
-        Gauge<T> gauge = (Gauge<T>) component;
-        gauge.getGaugeListeners().add(this);
-    }
-
-    /**
-     * This is a "display-only" component, so as such will not accept focus.
-     */
-    @Override
-    public final boolean isFocusable() {
-        return false;
-    }
-
-    @Override
-    public void layout() {
-        // Nothing to do because we have no child components
-    }
-
-    @Override
-    public int getPreferredHeight(final int width) {
-        return 128;  // Note: same as TerraActivityIndicatorSkin
-    }
-
-    @Override
-    public int getPreferredWidth(final int height) {
-        return 128;  // Note: same as TerraActivityIndicatorSkin
-    }
-
-    /**
-     * Do the transformation of the arcs to the normal cartesian coordinates, 
and for the specified origin,
-     * then draw the arc in the given color.  Assumes the rendering hints and 
the stroke have already been set.
-     * <p> Start and extent are in the 0-360 range.
-     *
-     * @param graphics Where to draw the arc.
-     * @param rect The enclosing rectangle for the arc.
-     * @param origin Which of the compass points to use for the start of the 
arc.
-     * @param arcStart The starting angle from the origin for the arc.
-     * @param arcExtent The angular extent of the arc (from the start).
-     * @param color The color to use for this arc.
-     */
-    private void drawArc(final Graphics2D graphics, final Rectangle2D rect, 
final Origin origin,
-        final float arcStart, final float arcExtent, final Color color) {
-        float newStart = origin.getOriginAngle() - arcStart - arcExtent;
-        Arc2D arc = new Arc2D.Float(rect, newStart, arcExtent, Arc2D.OPEN);
-        graphics.setPaint(color);
-        graphics.draw(arc);
-    }
-
-    @Override
-    public void paint(final Graphics2D graphics) {
-        @SuppressWarnings("unchecked")
-        Gauge<T> gauge = (Gauge<T>) getComponent();
-        // NOTE: sanity check:  warning level > min && < max, warning < 
critical if both set
-        // also critical > main && < max, critical > warning if both set
-
-        String text = gauge.getText();
-        T value = gauge.getValue();
-        T minLevel = gauge.getMinValue();
-        T maxLevel = gauge.getMaxValue();
-        T warningLevel = gauge.getWarningLevel();
-        T criticalLevel = gauge.getCriticalLevel();
-
-        Dimensions size = gauge.getSize();
-        Origin origin = gauge.getOrigin();
-
-        // The pen thickness is centered on the path, so we need to calculate 
the path diameter for the
-        // center of the stroke width (basically 1/2 the thickness on each 
side, or the thickness itself)
-        // And only account for the border thickness (the outer part) if > 1.0
-        boolean showingBorder = showBorder && borderColor != null;
-        float borderAdjust = (showingBorder ? (borderThickness > 1.0f ? 
borderThickness : 0.0f) : 0.0f);
-        float diameter = (float) (Math.min(size.width - padding.getWidth(), 
size.height - padding.getHeight()))
-            - thickness - (borderAdjust * 2.0f);
-        float x = ((float) size.width - diameter) / 2.0f;
-        float y = ((float) size.height - diameter) / 2.0f;
-
-        Rectangle2D rect = new Rectangle2D.Float(x, y, diameter, diameter);
-
-        float minValue = minLevel == null ? 0.0f : minLevel.floatValue();
-        float maxValue = maxLevel == null ? 100.0f : maxLevel.floatValue();
-        float fullRange = maxValue - minValue;
-        float toAngle = 360.0f / fullRange;
-        float activeValue = (value == null ? 0.0f : value.floatValue()) - 
minValue;
-        float activeAngle = activeValue * toAngle;
-
-        if (backgroundColor != null) {
-            graphics.setColor(backgroundColor);
-            graphics.fillRect(0, 0, size.width, size.height);
-        }
-
-        graphics.setRenderingHints(RENDERING_HINTS);
-        graphics.setStroke(new BasicStroke(thickness, BasicStroke.CAP_BUTT, 
BasicStroke.JOIN_BEVEL));
-
-        // Note: presume that critical > warning if both are set
-        Color maxColor = null;
-        if (warningLevel != null && warningColor != null) {
-            float warningValue = warningLevel.floatValue() - minValue;
-            if (activeValue >= warningValue) {
-                float warningAngle = warningValue * toAngle;
-                if (criticalLevel != null && criticalColor != null) {
-                    float criticalValue = criticalLevel.floatValue() - 
minValue;
-                    if (activeValue >= criticalValue) {
-                        if (onlyMaxColor) {
-                            maxColor = criticalColor;
-                        } else {
-                            // Three segments here:
-                            // min->warning (normal color),
-                            // warning->critical (warning color),
-                            // critical->active (critical color)
-                            float criticalAngle = criticalValue * toAngle;
-                            drawArc(graphics, rect, origin, 0.0f, 
warningAngle, color);
-                            drawArc(graphics, rect, origin, warningAngle, 
criticalAngle - warningAngle, warningColor);
-                            drawArc(graphics, rect, origin, criticalAngle, 
activeAngle - criticalAngle, criticalColor);
-                        }
-                    } else {
-                        if (onlyMaxColor) {
-                            maxColor = warningColor;
-                        } else {
-                            // Two segments here: min->warning (normal), 
warning->active (warning)
-                            drawArc(graphics, rect, origin, 0.0f, 
warningAngle, color);
-                            drawArc(graphics, rect, origin, warningAngle, 
activeAngle - warningAngle, warningColor);
-                        }
-                    }
-                } else {
-                    if (onlyMaxColor) {
-                        maxColor = warningColor;
-                    } else {
-                        // Two segments here: min->warning (normal), 
warning->active (warning color)
-                        drawArc(graphics, rect, origin, 0.0f, warningAngle, 
color);
-                        drawArc(graphics, rect, origin, warningAngle, 
activeAngle - warningAngle, warningColor);
-                    }
-                }
-            } else {
-                // Just one segment, the normal value
-                drawArc(graphics, rect, origin, 0.0f, activeAngle, color);
-            }
-        } else if (criticalLevel != null && criticalColor != null) {
-            float criticalValue = criticalLevel.floatValue() - minValue;
-            if (activeValue > criticalValue) {
-                if (onlyMaxColor) {
-                    maxColor = criticalColor;
-                } else {
-                    // Two here: min->critical (normal color), 
critical->active (critical color)
-                    float criticalAngle = criticalValue * toAngle;
-                    drawArc(graphics, rect, origin, 0.0f, criticalAngle, 
color);
-                    drawArc(graphics, rect, origin, criticalAngle, activeAngle 
- criticalAngle, criticalColor);
-                }
-            } else {
-                // One, min->active (normal color)
-                drawArc(graphics, rect, origin, 0.0f, activeAngle, color);
-            }
-        } else {
-            // Else just one segment (min->active, normal color)
-            drawArc(graphics, rect, origin, 0.0f, activeAngle, color);
-        }
-
-        // Now if we didn't draw the multiple segments because of 
"onlyMaxColor" do it now
-        if (onlyMaxColor && maxColor != null) {
-            drawArc(graphics, rect, origin, 0.0f, activeAngle, maxColor);
-        }
-
-        // Now draw the "inactive" part the rest of the way
-        if (activeAngle < 360.0f) {
-            drawArc(graphics, rect, origin, activeAngle, 360.0f - activeAngle, 
gaugeColor);
-        }
-
-        // Now draw the border strokes if requested around the whole circle
-        if (showingBorder) {
-            graphics.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, 
RenderingHints.VALUE_STROKE_PURE);
-            graphics.setStroke(new BasicStroke(borderThickness, 
BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));
-            float border = borderThickness > 1.0f ? borderThickness : 0.0f;
-            float halfStroke = (thickness + border) / 2.0f;
-            float thicknessAdjust = thickness + border;
-            Rectangle2D rectOuter = new Rectangle2D.Float(x - halfStroke, y - 
halfStroke,
-                 diameter + thicknessAdjust, diameter + thicknessAdjust);
-            Rectangle2D rectInner = new Rectangle2D.Float(x + halfStroke, y + 
halfStroke,
-                diameter - thicknessAdjust, diameter - thicknessAdjust);
-            drawArc(graphics, rectInner, origin, 360.0f, 360.0f, borderColor);
-            drawArc(graphics, rectOuter, origin, 360.0f, 360.0f, borderColor);
-        }
-
-        // On top of the arcs, draw the tick marks (if requested)
-        if (showTickMarks && tickFrequency != null && tickColor != null) {
-            // frequency is how many gauge values between marks
-            float frequency = tickFrequency.floatValue();
-            int numMarks = (int) Math.floor(fullRange / frequency);
-            graphics.setColor(tickColor == null ? backgroundColor : tickColor);
-            // Note: VALUE_STROKE_PURE tends to make the arcs fine but the 
lines non-uniform,
-            // while VALUE_STROKE_NORMALIZE works well for the lines but makes 
the arcs "wobble" around a bit
-            graphics.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, 
RenderingHints.VALUE_STROKE_NORMALIZE);
-            graphics.setStroke(new BasicStroke(0.5f, BasicStroke.CAP_BUTT, 
BasicStroke.JOIN_BEVEL));
-            float radius = diameter / 2.0f;
-            float innerRadius = radius - (thickness / 2.0f);
-            float outerRadius = radius + (thickness / 2.0f);
-            float xCenter = x + radius;
-            float yCenter = y + radius;
-            // Draw the "0" mark at the origin
-            switch (origin) {
-                case NORTH:
-                    graphics.drawLine((int) xCenter, (int) (yCenter - 
innerRadius),
-                                      (int) xCenter, (int) (yCenter - 
outerRadius));
-                    break;
-                case EAST:
-                    graphics.drawLine((int) (xCenter + innerRadius), (int) 
yCenter,
-                                      (int) (xCenter + outerRadius), (int) 
yCenter);
-                    break;
-                case SOUTH:
-                    graphics.drawLine((int) xCenter, (int) (yCenter + 
innerRadius),
-                                      (int) xCenter, (int) (yCenter + 
outerRadius));
-                    break;
-                case WEST:
-                    graphics.drawLine((int) (xCenter - innerRadius), (int) 
yCenter,
-                                      (int) (xCenter - outerRadius), (int) 
yCenter);
-                    break;
-                default:
-                    break;
-            }
-            // Draw clockwise from the origin, subtracting the frequency each 
time
-            double startAngleRadians = origin.getOriginAngle() * Math.PI / 
180.0;
-            double frequencyAngleRadians = frequency / fullRange * Math.PI * 
2.0;
-            double angleRadians = startAngleRadians - frequencyAngleRadians;
-            for (int i = 0; i < numMarks; i++) {
-                float cosAngle = (float) Math.cos(angleRadians);
-                float sinAngle = (float) Math.sin(angleRadians);
-                int xInner = (int) (xCenter + (innerRadius * cosAngle) + 0.5f);
-                int yInner = (int) (yCenter + (innerRadius * sinAngle) + 0.5f);
-                int xOuter = (int) (xCenter + (outerRadius * cosAngle) + 0.5f);
-                int yOuter = (int) (yCenter + (outerRadius * sinAngle) + 0.5f);
-                graphics.drawLine(xInner, yInner, xOuter, yOuter);
-                angleRadians -= frequencyAngleRadians;
-            }
-        }
-
-        // Draw the text in the middle (if any)
-        if (!Utils.isNullOrEmpty(text)) {
-            FontRenderContext fontRenderContext = 
GraphicsUtilities.prepareForText(graphics, font, textColor);
-            LineMetrics lm = font.getLineMetrics(text, fontRenderContext);
-            Rectangle2D textBounds = font.getStringBounds(text, 
fontRenderContext);
-
-            // Since this is only a single line, ignore the text leading in 
the height
-            double textHeight = lm.getAscent() + lm.getDescent();
-            double textX = x + (diameter - textBounds.getWidth()) / 2.0;
-            double textY = y + (diameter - textHeight) / 2.0 + lm.getAscent();
-
-            graphics.drawString(text, (int) textX, (int) textY);
-        }
-    }
-
-    public final Font getFont() {
-        return font;
-    }
-
-    public final void setFont(final Font font) {
-        Utils.checkNull(font, "font");
-
-        this.font = font;
-        repaintComponent();
-    }
-
-    public final void setFont(final String font) {
-        setFont(decodeFont(font));
-    }
-
-    public final void setFont(final Dictionary<String, ?> font) {
-        setFont(Theme.deriveFont(font));
-    }
-
-    public final Color getBackgroundColor() {
-        return backgroundColor;
-    }
-
-    public final void setBackgroundColor(final Color backgroundColor) {
-        // We allow a null background color here
-        this.backgroundColor = backgroundColor;
-        repaintComponent();
-    }
-
-    public final void setBackgroundColor(final String backgroundColor) {
-        setBackgroundColor(GraphicsUtilities.decodeColor(backgroundColor, 
"backgroundColor"));
-    }
-
-    public final void setBackgroundColor(final int backgroundColor) {
-        Theme theme = currentTheme();
-        setBackgroundColor(theme.getColor(backgroundColor));
-    }
-
-    public final Color getColor() {
-        return color;
-    }
-
-    public final void setColor(final Color color) {
-        Utils.checkNull(color, "color");
-        this.color = color;
-        repaintComponent();
-    }
-
-    public final void setColor(final String color) {
-        setColor(GraphicsUtilities.decodeColor(color, "color"));
-    }
-
-    public final void setColor(final int color) {
-        Theme theme = currentTheme();
-        setColor(theme.getColor(color));
-    }
-
-    public final Color getGaugeColor() {
-        return gaugeColor;
-    }
-
-    public final void setGaugeColor(final Color gaugeColor) {
-        Utils.checkNull(gaugeColor, "gaugeColor");
-        this.gaugeColor = gaugeColor;
-        repaintComponent();
-    }
-
-    public final void setGaugeColor(final String gaugeColor) {
-        setGaugeColor(GraphicsUtilities.decodeColor(gaugeColor, "gaugeColor"));
-    }
-
-    public final void setGaugeColor(final int gaugeColor) {
-        Theme theme = currentTheme();
-        setGaugeColor(theme.getColor(gaugeColor));
-    }
-
-    public final Color getTextColor() {
-        return textColor;
-    }
-
-    public final void setTextColor(final Color textColor) {
-        Utils.checkNull(textColor, "textColor");
-        this.textColor = textColor;
-        repaintComponent();
-    }
-
-    public final void setTextColor(final String textColor) {
-        setTextColor(GraphicsUtilities.decodeColor(textColor, "textColor"));
-    }
-
-    public final void setTextColor(final int textColor) {
-        Theme theme = currentTheme();
-        setTextColor(theme.getColor(textColor));
-    }
-
-    public final Color getTickColor() {
-        return tickColor;
-    }
-
-    /**
-     * Set the color for the radial "tick" marks along the arc of the gauge.
-     * <p> Note: to disable tick drawing, use a style of "showTickMarks:false".
-     * @param tickColor Any color value, or {@code null} to use the background 
color.
-     */
-    public final void setTickColor(final Color tickColor) {
-        // Tick color can be null to use the background color.
-        this.tickColor = tickColor;
-        repaintComponent();
-    }
-
-    public final void setTickColor(final String tickColor) {
-        setTickColor(GraphicsUtilities.decodeColor(tickColor, "tickColor"));
-    }
-
-    public final void setTickColor(final int tickColor) {
-        Theme theme = currentTheme();
-        setTickColor(theme.getColor(tickColor));
-    }
-
-    public final Color getBorderColor() {
-        return borderColor;
-    }
-
-    /**
-     * Set the color for the borders around the arcs.
-     * <p> Note: to disable border drawing, use a style of "showBorder:false",
-     * or set this color to null.
-     * @param borderColor Any color value, or {@code null} to disable border 
drawing.
-     */
-    public final void setBorderColor(final Color borderColor) {
-        // Border color can be null to not draw the border.
-        this.borderColor = borderColor;
-        repaintComponent();
-    }
-
-    public final void setBorderColor(final String borderColor) {
-        setBorderColor(GraphicsUtilities.decodeColor(borderColor, 
"borderColor"));
-    }
-
-    public final void setBorderColor(final int borderColor) {
-        Theme theme = currentTheme();
-        setBorderColor(theme.getColor(borderColor));
-    }
-
-    public final Color getWarningColor() {
-        return this.warningColor;
-    }
-
-    /**
-     * Set the warning color to use for the portion of the value display when 
the
-     * value exceeds the gauge's warning level.
-     * <p> Note: one, two, or three colors may be displayed depending on the 
warning
-     * and critical levels (and whether they are set), and the warning and 
critical
-     * colors (and whether they are set) (and of course what the value is).
-     * @param warningColor A color for the warning levels, or {@code null} to 
disable
-     * the warning level checks.
-     */
-    public final void setWarningColor(final Color warningColor) {
-        this.warningColor = warningColor;
-        repaintComponent();
-    }
-
-    public final void setWarningColor(final String warningColor) {
-        setWarningColor(GraphicsUtilities.decodeColor(warningColor, 
"warningColor"));
-    }
-
-    public final void setWarningColor(final int warningColor) {
-        Theme theme = currentTheme();
-        setWarningColor(theme.getColor(warningColor));
-    }
-
-    public final Color getCriticalColor() {
-        return this.criticalColor;
-    }
-
-    /**
-     * Set the critical color to use for the portion of the value display when 
the
-     * value exceeds the gauge's critical level.
-     * <p> Note: one, two, or three colors may be displayed depending on the 
warning
-     * and critical levels (and whether they are set), and the warning and 
critical
-     * colors (and whether they are set) (and of course what the value is).
-     * @param criticalColor A color for the critical levels, or {@code null} 
to disable
-     * the critical level checks.
-     */
-    public final void setCriticalColor(final Color criticalColor) {
-        this.criticalColor = criticalColor;
-    }
-
-    public final void setCriticalColor(final String criticalColor) {
-        setCriticalColor(GraphicsUtilities.decodeColor(criticalColor, 
"criticalColor"));
-    }
-
-    public final void setCriticalColor(final int criticalColor) {
-        Theme theme = currentTheme();
-        setCriticalColor(theme.getColor(criticalColor));
-    }
-
-    public final Insets getPadding() {
-        return padding;
-    }
-
-    public final void setPadding(final Insets padding) {
-        Utils.checkNull(padding, "padding");
-
-        this.padding = padding;
-        invalidateComponent();
-    }
-
-    /**
-     * Sets the amount of space to leave between the edge of the gauge area and
-     * the actual drawing.
-     *
-     * @param padding A dictionary containing the keys {top ,left, bottom, 
and/or right}.
-     */
-    public final void setPadding(final Dictionary<String, ?> padding) {
-        setPadding(new Insets(padding));
-    }
-
-    /**
-     * Sets the amount of space to leave between the edge of the gauge area and
-     * the actual drawing.
-     *
-     * @param padding A sequence containing the values [top left, bottom, 
right].
-     */
-    public final void setPadding(final Sequence<?> padding) {
-        setPadding(new Insets(padding));
-    }
-
-    /**
-     * Sets the amount of space to leave between the edge of the gauge area and
-     * the actual drawing.
-     *
-     * @param padding A single value to use for the padding on all sides.
-     */
-    public final void setPadding(final int padding) {
-        setPadding(new Insets(padding));
-    }
-
-    /**
-     * Sets the amount of space to leave between the edge of the gauge area and
-     * the actual drawing.
-     *
-     * @param padding A single value to use for the padding on all sides.
-     */
-    public final void setPadding(final Number padding) {
-        setPadding(new Insets(padding));
-    }
-
-    /**
-     * Sets the amount of space to leave between the edge of the gauge area and
-     * the actual drawing.
-     *
-     * @param padding A string containing an integer or a JSON map or list with
-     * keys/values top, left, bottom, and/or right.
-     */
-    public final void setPadding(final String padding) {
-        setPadding(Insets.decode(padding));
-    }
-
-    public final float getThickness() {
-        return thickness;
-    }
-
-    /**
-     * Set the thickness of the value display.
-     * @param thickness The new value (default is {@link #STROKE_WIDTH}).
-     * @throws IllegalArgumentException if the value is 0.0 or less.
-     */
-    public final void setThickness(final float thickness) {
-        Utils.checkPositive(thickness, "thickness");
-
-        this.thickness = thickness;
-        repaintComponent();
-    }
-
-    public final void setThickness(final Number thickness) {
-        Utils.checkNull(thickness, "thickness");
-        setThickness(thickness.floatValue());
-    }
-
-    public final void setThickness(final String thickness) {
-        Utils.checkNullOrEmpty(thickness, "thickness");
-        setThickness(StringUtils.toNumber(thickness, Float.class));
-    }
-
-    public final boolean getShowTickMarks() {
-        return showTickMarks;
-    }
-
-    public final void setShowTickMarks(final boolean showTickMarks) {
-        this.showTickMarks = showTickMarks;
-        repaintComponent();
-    }
-
-    public final T getTickFrequency() {
-        return tickFrequency;
-    }
-
-    public final void setTickFrequency(final T frequency) {
-        Utils.checkNull(frequency, "frequency");
-        this.tickFrequency = frequency;
-        repaintComponent();
-    }
-
-    public final boolean getShowBorder() {
-        return showBorder;
-    }
-
-    public final void setShowBorder(final boolean showBorder) {
-        this.showBorder = showBorder;
-        repaintComponent();
-    }
-
-    public final float getBorderThickness() {
-        return borderThickness;
-    }
-
-    /**
-     * Set the thickness of the border around the gauge.
-     * @param borderThickness The new value (default is 1.0f).
-     * @throws IllegalArgumentException if the value is 0.0 or less.
-     */
-    public final void setBorderThickness(final float borderThickness) {
-        Utils.checkPositive(borderThickness, "borderThickness");
-
-        this.borderThickness = borderThickness;
-        invalidateComponent();
-    }
-
-    public final void setBorderThickness(final Number borderThickness) {
-        Utils.checkNull(borderThickness, "borderThickness");
-        setBorderThickness(borderThickness.floatValue());
-    }
-
-    public final void setBorderThickness(final String borderThickness) {
-        Utils.checkNullOrEmpty(borderThickness, "borderThickness");
-        setBorderThickness(StringUtils.toNumber(borderThickness, Float.class));
-    }
-
-    public final boolean getOnlyMaxColor() {
-        return onlyMaxColor;
-    }
-
-    /**
-     * Set whether or not to only show the maximum color for the entire gauge.
-     * @param onlyMaxColor {@code true} to show the entire gauge in the normal,
-     * warning, or critical color (if set) which is appropriate for the value
-     * and the warning or critical levels (again if set), {@code false} to
-     * show multiple segments.
-     */
-    public final void setOnlyMaxColor(final boolean onlyMaxColor) {
-        this.onlyMaxColor = onlyMaxColor;
-        repaintComponent();
-    }
-
-    @Override
-    public void originChanged(final Gauge<T> gauge, final Origin 
previousOrigin) {
-        invalidateComponent();
-    }
-
-    @Override
-    public void valueChanged(final Gauge<T> gauge, final T previousValue) {
-        repaintComponent();
-    }
-
-    @Override
-    public void textChanged(final Gauge<T> gauge, final String previousText) {
-        repaintComponent();
-    }
-
-    @Override
-    public void minValueChanged(final Gauge<T> gauge, final T 
previousMinValue) {
-        repaintComponent();
-    }
-
-    @Override
-    public void maxValueChanged(final Gauge<T> gauge, final T 
previousMaxValue) {
-        repaintComponent();
-    }
-
-    @Override
-    public void warningLevelChanged(final Gauge<T> gauge, final T 
previousWarningLevel) {
-        repaintComponent();
-    }
-
-    @Override
-    public void criticalLevelChanged(final Gauge<T> gauge, final T 
previousCriticalLevel) {
-        repaintComponent();
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you 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 org.apache.pivot.wtk.skin.terra;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.font.FontRenderContext;
+import java.awt.font.LineMetrics;
+import java.awt.geom.Arc2D;
+import java.awt.geom.Rectangle2D;
+
+import org.apache.pivot.collections.Dictionary;
+import org.apache.pivot.collections.Sequence;
+import org.apache.pivot.util.StringUtils;
+import org.apache.pivot.util.Utils;
+import org.apache.pivot.wtk.Component;
+import org.apache.pivot.wtk.Dimensions;
+import org.apache.pivot.wtk.Gauge;
+import org.apache.pivot.wtk.GaugeListener;
+import org.apache.pivot.wtk.GraphicsUtilities;
+import org.apache.pivot.wtk.Insets;
+import org.apache.pivot.wtk.Origin;
+import org.apache.pivot.wtk.Theme;
+import org.apache.pivot.wtk.skin.ComponentSkin;
+
+
+/**
+ * Skin class for the {@link Gauge} component, which draws a circular gauge 
with possible text
+ * in the center.
+ * <p> The gauge colors, as well as colors for the warning and/or critical 
colors can be set.
+ *
+ * @param <T> The numeric type for the gauge value.
+ */
+public class TerraGaugeSkin<T extends Number> extends ComponentSkin implements 
GaugeListener<T> {
+    private static final float STROKE_WIDTH = 6.0f;
+
+    private Color backgroundColor;
+    /** This is the color of the circle part of the gauge, where the value "is 
not". */
+    private Color gaugeColor;
+    private Color textColor;
+    private Color tickColor;
+    /** This is the color for the "value" if it is below the warning or 
critical levels. */
+    private Color color;
+    private Color borderColor;
+    private Color warningColor;
+    private Color criticalColor;
+    private boolean onlyMaxColor = false;
+    private boolean showTickMarks = false;
+    private Insets padding;
+    private Font font;
+    private float thickness = STROKE_WIDTH;
+    private T tickFrequency;
+    private boolean showBorder = false;
+    private float borderThickness = 1.0f;
+
+    private static final RenderingHints RENDERING_HINTS = new 
RenderingHints(null);
+
+    static {
+        RENDERING_HINTS.put(RenderingHints.KEY_ANTIALIASING, 
RenderingHints.VALUE_ANTIALIAS_ON);
+        RENDERING_HINTS.put(RenderingHints.KEY_STROKE_CONTROL, 
RenderingHints.VALUE_STROKE_PURE);
+        RENDERING_HINTS.put(RenderingHints.KEY_ALPHA_INTERPOLATION, 
RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
+    };
+
+    public TerraGaugeSkin() {
+        font = currentTheme().getFont().deriveFont(Font.BOLD, 24.0f);
+        setBackgroundColor(defaultBackgroundColor());
+        setGaugeColor(8);
+        setColor(Color.green);
+        setWarningColor(20);
+        setCriticalColor(23);
+        setTextColor(8);
+        setTickColor(6);
+        setBorderColor(6);
+        setPadding(Insets.NONE);
+    }
+
+    @Override
+    public void install(final Component component) {
+        super.install(component);
+
+        @SuppressWarnings("unchecked")
+        Gauge<T> gauge = (Gauge<T>) component;
+        gauge.getGaugeListeners().add(this);
+    }
+
+    /**
+     * This is a "display-only" component, so as such will not accept focus.
+     */
+    @Override
+    public final boolean isFocusable() {
+        return false;
+    }
+
+    @Override
+    public void layout() {
+        // Nothing to do because we have no child components
+    }
+
+    @Override
+    public int getPreferredHeight(final int width) {
+        return 128;  // Note: same as TerraActivityIndicatorSkin
+    }
+
+    @Override
+    public int getPreferredWidth(final int height) {
+        return 128;  // Note: same as TerraActivityIndicatorSkin
+    }
+
+    /**
+     * Do the transformation of the arcs to the normal cartesian coordinates, 
and for the specified origin,
+     * then draw the arc in the given color.  Assumes the rendering hints and 
the stroke have already been set.
+     * <p> Start and extent are in the 0-360 range.
+     *
+     * @param graphics Where to draw the arc.
+     * @param rect The enclosing rectangle for the arc.
+     * @param origin Which of the compass points to use for the start of the 
arc.
+     * @param arcStart The starting angle from the origin for the arc.
+     * @param arcExtent The angular extent of the arc (from the start).
+     * @param color The color to use for this arc.
+     */
+    private void drawArc(final Graphics2D graphics, final Rectangle2D rect, 
final Origin origin,
+        final float arcStart, final float arcExtent, final Color color) {
+        float newStart = origin.getOriginAngle() - arcStart - arcExtent;
+        Arc2D arc = new Arc2D.Float(rect, newStart, arcExtent, Arc2D.OPEN);
+        graphics.setPaint(color);
+        graphics.draw(arc);
+    }
+
+    @Override
+    public void paint(final Graphics2D graphics) {
+        @SuppressWarnings("unchecked")
+        Gauge<T> gauge = (Gauge<T>) getComponent();
+        // NOTE: sanity check:  warning level > min && < max, warning < 
critical if both set
+        // also critical > main && < max, critical > warning if both set
+
+        String text = gauge.getText();
+        T value = gauge.getValue();
+        T minLevel = gauge.getMinValue();
+        T maxLevel = gauge.getMaxValue();
+        T warningLevel = gauge.getWarningLevel();
+        T criticalLevel = gauge.getCriticalLevel();
+
+        Dimensions size = gauge.getSize();
+        Origin origin = gauge.getOrigin();
+
+        // The pen thickness is centered on the path, so we need to calculate 
the path diameter for the
+        // center of the stroke width (basically 1/2 the thickness on each 
side, or the thickness itself)
+        // And only account for the border thickness (the outer part) if > 1.0
+        boolean showingBorder = showBorder && borderColor != null;
+        float borderAdjust = (showingBorder ? (borderThickness > 1.0f ? 
borderThickness : 0.0f) : 0.0f);
+        float diameter = (float) (Math.min(size.width - padding.getWidth(), 
size.height - padding.getHeight()))
+            - thickness - (borderAdjust * 2.0f);
+        float x = ((float) size.width - diameter) / 2.0f;
+        float y = ((float) size.height - diameter) / 2.0f;
+
+        Rectangle2D rect = new Rectangle2D.Float(x, y, diameter, diameter);
+
+        float minValue = minLevel == null ? 0.0f : minLevel.floatValue();
+        float maxValue = maxLevel == null ? 100.0f : maxLevel.floatValue();
+        float fullRange = maxValue - minValue;
+        float toAngle = 360.0f / fullRange;
+        float activeValue = (value == null ? 0.0f : value.floatValue()) - 
minValue;
+        float activeAngle = activeValue * toAngle;
+
+        if (backgroundColor != null) {
+            graphics.setColor(backgroundColor);
+            graphics.fillRect(0, 0, size.width, size.height);
+        }
+
+        graphics.setRenderingHints(RENDERING_HINTS);
+        graphics.setStroke(new BasicStroke(thickness, BasicStroke.CAP_BUTT, 
BasicStroke.JOIN_BEVEL));
+
+        // Note: presume that critical > warning if both are set
+        Color maxColor = null;
+        if (warningLevel != null && warningColor != null) {
+            float warningValue = warningLevel.floatValue() - minValue;
+            if (activeValue >= warningValue) {
+                float warningAngle = warningValue * toAngle;
+                if (criticalLevel != null && criticalColor != null) {
+                    float criticalValue = criticalLevel.floatValue() - 
minValue;
+                    if (activeValue >= criticalValue) {
+                        if (onlyMaxColor) {
+                            maxColor = criticalColor;
+                        } else {
+                            // Three segments here:
+                            // min->warning (normal color),
+                            // warning->critical (warning color),
+                            // critical->active (critical color)
+                            float criticalAngle = criticalValue * toAngle;
+                            drawArc(graphics, rect, origin, 0.0f, 
warningAngle, color);
+                            drawArc(graphics, rect, origin, warningAngle, 
criticalAngle - warningAngle, warningColor);
+                            drawArc(graphics, rect, origin, criticalAngle, 
activeAngle - criticalAngle, criticalColor);
+                        }
+                    } else {
+                        if (onlyMaxColor) {
+                            maxColor = warningColor;
+                        } else {
+                            // Two segments here: min->warning (normal), 
warning->active (warning)
+                            drawArc(graphics, rect, origin, 0.0f, 
warningAngle, color);
+                            drawArc(graphics, rect, origin, warningAngle, 
activeAngle - warningAngle, warningColor);
+                        }
+                    }
+                } else {
+                    if (onlyMaxColor) {
+                        maxColor = warningColor;
+                    } else {
+                        // Two segments here: min->warning (normal), 
warning->active (warning color)
+                        drawArc(graphics, rect, origin, 0.0f, warningAngle, 
color);
+                        drawArc(graphics, rect, origin, warningAngle, 
activeAngle - warningAngle, warningColor);
+                    }
+                }
+            } else {
+                // Just one segment, the normal value
+                drawArc(graphics, rect, origin, 0.0f, activeAngle, color);
+            }
+        } else if (criticalLevel != null && criticalColor != null) {
+            float criticalValue = criticalLevel.floatValue() - minValue;
+            if (activeValue > criticalValue) {
+                if (onlyMaxColor) {
+                    maxColor = criticalColor;
+                } else {
+                    // Two here: min->critical (normal color), 
critical->active (critical color)
+                    float criticalAngle = criticalValue * toAngle;
+                    drawArc(graphics, rect, origin, 0.0f, criticalAngle, 
color);
+                    drawArc(graphics, rect, origin, criticalAngle, activeAngle 
- criticalAngle, criticalColor);
+                }
+            } else {
+                // One, min->active (normal color)
+                drawArc(graphics, rect, origin, 0.0f, activeAngle, color);
+            }
+        } else {
+            // Else just one segment (min->active, normal color)
+            drawArc(graphics, rect, origin, 0.0f, activeAngle, color);
+        }
+
+        // Now if we didn't draw the multiple segments because of 
"onlyMaxColor" do it now
+        if (onlyMaxColor && maxColor != null) {
+            drawArc(graphics, rect, origin, 0.0f, activeAngle, maxColor);
+        }
+
+        // Now draw the "inactive" part the rest of the way
+        if (activeAngle < 360.0f) {
+            drawArc(graphics, rect, origin, activeAngle, 360.0f - activeAngle, 
gaugeColor);
+        }
+
+        // Now draw the border strokes if requested around the whole circle
+        if (showingBorder) {
+            graphics.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, 
RenderingHints.VALUE_STROKE_PURE);
+            graphics.setStroke(new BasicStroke(borderThickness, 
BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));
+            float border = borderThickness > 1.0f ? borderThickness : 0.0f;
+            float halfStroke = (thickness + border) / 2.0f;
+            float thicknessAdjust = thickness + border;
+            Rectangle2D rectOuter = new Rectangle2D.Float(x - halfStroke, y - 
halfStroke,
+                 diameter + thicknessAdjust, diameter + thicknessAdjust);
+            Rectangle2D rectInner = new Rectangle2D.Float(x + halfStroke, y + 
halfStroke,
+                diameter - thicknessAdjust, diameter - thicknessAdjust);
+            drawArc(graphics, rectInner, origin, 360.0f, 360.0f, borderColor);
+            drawArc(graphics, rectOuter, origin, 360.0f, 360.0f, borderColor);
+        }
+
+        // On top of the arcs, draw the tick marks (if requested)
+        if (showTickMarks && tickFrequency != null && tickColor != null) {
+            // frequency is how many gauge values between marks
+            float frequency = tickFrequency.floatValue();
+            int numMarks = (int) Math.floor(fullRange / frequency);
+            graphics.setColor(tickColor == null ? backgroundColor : tickColor);
+            // Note: VALUE_STROKE_PURE tends to make the arcs fine but the 
lines non-uniform,
+            // while VALUE_STROKE_NORMALIZE works well for the lines but makes 
the arcs "wobble" around a bit
+            graphics.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, 
RenderingHints.VALUE_STROKE_NORMALIZE);
+            graphics.setStroke(new BasicStroke(0.5f, BasicStroke.CAP_BUTT, 
BasicStroke.JOIN_BEVEL));
+            float radius = diameter / 2.0f;
+            float innerRadius = radius - (thickness / 2.0f);
+            float outerRadius = radius + (thickness / 2.0f);
+            float xCenter = x + radius;
+            float yCenter = y + radius;
+            // Draw the "0" mark at the origin
+            switch (origin) {
+                case NORTH:
+                    graphics.drawLine((int) xCenter, (int) (yCenter - 
innerRadius),
+                                      (int) xCenter, (int) (yCenter - 
outerRadius));
+                    break;
+                case EAST:
+                    graphics.drawLine((int) (xCenter + innerRadius), (int) 
yCenter,
+                                      (int) (xCenter + outerRadius), (int) 
yCenter);
+                    break;
+                case SOUTH:
+                    graphics.drawLine((int) xCenter, (int) (yCenter + 
innerRadius),
+                                      (int) xCenter, (int) (yCenter + 
outerRadius));
+                    break;
+                case WEST:
+                    graphics.drawLine((int) (xCenter - innerRadius), (int) 
yCenter,
+                                      (int) (xCenter - outerRadius), (int) 
yCenter);
+                    break;
+                default:
+                    break;
+            }
+            // Draw clockwise from the origin, subtracting the frequency each 
time
+            double startAngleRadians = origin.getOriginAngle() * Math.PI / 
180.0;
+            double frequencyAngleRadians = frequency / fullRange * Math.PI * 
2.0;
+            double angleRadians = startAngleRadians - frequencyAngleRadians;
+            for (int i = 0; i < numMarks; i++) {
+                float cosAngle = (float) Math.cos(angleRadians);
+                float sinAngle = (float) Math.sin(angleRadians);
+                int xInner = (int) (xCenter + (innerRadius * cosAngle) + 0.5f);
+                int yInner = (int) (yCenter + (innerRadius * sinAngle) + 0.5f);
+                int xOuter = (int) (xCenter + (outerRadius * cosAngle) + 0.5f);
+                int yOuter = (int) (yCenter + (outerRadius * sinAngle) + 0.5f);
+                graphics.drawLine(xInner, yInner, xOuter, yOuter);
+                angleRadians -= frequencyAngleRadians;
+            }
+        }
+
+        // Draw the text in the middle (if any)
+        if (!Utils.isNullOrEmpty(text)) {
+            FontRenderContext fontRenderContext = 
GraphicsUtilities.prepareForText(graphics, font, textColor);
+            LineMetrics lm = font.getLineMetrics(text, fontRenderContext);
+            Rectangle2D textBounds = font.getStringBounds(text, 
fontRenderContext);
+
+            // Since this is only a single line, ignore the text leading in 
the height
+            double textHeight = lm.getAscent() + lm.getDescent();
+            double textX = x + (diameter - textBounds.getWidth()) / 2.0;
+            double textY = y + (diameter - textHeight) / 2.0 + lm.getAscent();
+
+            graphics.drawString(text, (int) textX, (int) textY);
+        }
+    }
+
+    public final Font getFont() {
+        return font;
+    }
+
+    public final void setFont(final Font font) {
+        Utils.checkNull(font, "font");
+
+        this.font = font;
+        repaintComponent();
+    }
+
+    public final void setFont(final String font) {
+        setFont(decodeFont(font));
+    }
+
+    public final void setFont(final Dictionary<String, ?> font) {
+        setFont(Theme.deriveFont(font));
+    }
+
+    public final Color getBackgroundColor() {
+        return backgroundColor;
+    }
+
+    public final void setBackgroundColor(final Color backgroundColor) {
+        // We allow a null background color here
+        this.backgroundColor = backgroundColor;
+        repaintComponent();
+    }
+
+    public final void setBackgroundColor(final String backgroundColor) {
+        setBackgroundColor(GraphicsUtilities.decodeColor(backgroundColor, 
"backgroundColor"));
+    }
+
+    public final void setBackgroundColor(final int backgroundColor) {
+        Theme theme = currentTheme();
+        setBackgroundColor(theme.getColor(backgroundColor));
+    }
+
+    public final Color getColor() {
+        return color;
+    }
+
+    public final void setColor(final Color color) {
+        Utils.checkNull(color, "color");
+        this.color = color;
+        repaintComponent();
+    }
+
+    public final void setColor(final String color) {
+        setColor(GraphicsUtilities.decodeColor(color, "color"));
+    }
+
+    public final void setColor(final int color) {
+        Theme theme = currentTheme();
+        setColor(theme.getColor(color));
+    }
+
+    public final Color getGaugeColor() {
+        return gaugeColor;
+    }
+
+    public final void setGaugeColor(final Color gaugeColor) {
+        Utils.checkNull(gaugeColor, "gaugeColor");
+        this.gaugeColor = gaugeColor;
+        repaintComponent();
+    }
+
+    public final void setGaugeColor(final String gaugeColor) {
+        setGaugeColor(GraphicsUtilities.decodeColor(gaugeColor, "gaugeColor"));
+    }
+
+    public final void setGaugeColor(final int gaugeColor) {
+        Theme theme = currentTheme();
+        setGaugeColor(theme.getColor(gaugeColor));
+    }
+
+    public final Color getTextColor() {
+        return textColor;
+    }
+
+    public final void setTextColor(final Color textColor) {
+        Utils.checkNull(textColor, "textColor");
+        this.textColor = textColor;
+        repaintComponent();
+    }
+
+    public final void setTextColor(final String textColor) {
+        setTextColor(GraphicsUtilities.decodeColor(textColor, "textColor"));
+    }
+
+    public final void setTextColor(final int textColor) {
+        Theme theme = currentTheme();
+        setTextColor(theme.getColor(textColor));
+    }
+
+    public final Color getTickColor() {
+        return tickColor;
+    }
+
+    /**
+     * Set the color for the radial "tick" marks along the arc of the gauge.
+     * <p> Note: to disable tick drawing, use a style of "showTickMarks:false".
+     * @param tickColor Any color value, or {@code null} to use the background 
color.
+     */
+    public final void setTickColor(final Color tickColor) {
+        // Tick color can be null to use the background color.
+        this.tickColor = tickColor;
+        repaintComponent();
+    }
+
+    public final void setTickColor(final String tickColor) {
+        setTickColor(GraphicsUtilities.decodeColor(tickColor, "tickColor"));
+    }
+
+    public final void setTickColor(final int tickColor) {
+        Theme theme = currentTheme();
+        setTickColor(theme.getColor(tickColor));
+    }
+
+    public final Color getBorderColor() {
+        return borderColor;
+    }
+
+    /**
+     * Set the color for the borders around the arcs.
+     * <p> Note: to disable border drawing, use a style of "showBorder:false",
+     * or set this color to null.
+     * @param borderColor Any color value, or {@code null} to disable border 
drawing.
+     */
+    public final void setBorderColor(final Color borderColor) {
+        // Border color can be null to not draw the border.
+        this.borderColor = borderColor;
+        repaintComponent();
+    }
+
+    public final void setBorderColor(final String borderColor) {
+        setBorderColor(GraphicsUtilities.decodeColor(borderColor, 
"borderColor"));
+    }
+
+    public final void setBorderColor(final int borderColor) {
+        Theme theme = currentTheme();
+        setBorderColor(theme.getColor(borderColor));
+    }
+
+    public final Color getWarningColor() {
+        return this.warningColor;
+    }
+
+    /**
+     * Set the warning color to use for the portion of the value display when 
the
+     * value exceeds the gauge's warning level.
+     * <p> Note: one, two, or three colors may be displayed depending on the 
warning
+     * and critical levels (and whether they are set), and the warning and 
critical
+     * colors (and whether they are set) (and of course what the value is).
+     * @param warningColor A color for the warning levels, or {@code null} to 
disable
+     * the warning level checks.
+     */
+    public final void setWarningColor(final Color warningColor) {
+        this.warningColor = warningColor;
+        repaintComponent();
+    }
+
+    public final void setWarningColor(final String warningColor) {
+        setWarningColor(GraphicsUtilities.decodeColor(warningColor, 
"warningColor"));
+    }
+
+    public final void setWarningColor(final int warningColor) {
+        Theme theme = currentTheme();
+        setWarningColor(theme.getColor(warningColor));
+    }
+
+    public final Color getCriticalColor() {
+        return this.criticalColor;
+    }
+
+    /**
+     * Set the critical color to use for the portion of the value display when 
the
+     * value exceeds the gauge's critical level.
+     * <p> Note: one, two, or three colors may be displayed depending on the 
warning
+     * and critical levels (and whether they are set), and the warning and 
critical
+     * colors (and whether they are set) (and of course what the value is).
+     * @param criticalColor A color for the critical levels, or {@code null} 
to disable
+     * the critical level checks.
+     */
+    public final void setCriticalColor(final Color criticalColor) {
+        this.criticalColor = criticalColor;
+    }
+
+    public final void setCriticalColor(final String criticalColor) {
+        setCriticalColor(GraphicsUtilities.decodeColor(criticalColor, 
"criticalColor"));
+    }
+
+    public final void setCriticalColor(final int criticalColor) {
+        Theme theme = currentTheme();
+        setCriticalColor(theme.getColor(criticalColor));
+    }
+
+    public final Insets getPadding() {
+        return padding;
+    }
+
+    public final void setPadding(final Insets padding) {
+        Utils.checkNull(padding, "padding");
+
+        this.padding = padding;
+        invalidateComponent();
+    }
+
+    /**
+     * Sets the amount of space to leave between the edge of the gauge area and
+     * the actual drawing.
+     *
+     * @param padding A dictionary containing the keys {top ,left, bottom, 
and/or right}.
+     */
+    public final void setPadding(final Dictionary<String, ?> padding) {
+        setPadding(new Insets(padding));
+    }
+
+    /**
+     * Sets the amount of space to leave between the edge of the gauge area and
+     * the actual drawing.
+     *
+     * @param padding A sequence containing the values [top left, bottom, 
right].
+     */
+    public final void setPadding(final Sequence<?> padding) {
+        setPadding(new Insets(padding));
+    }
+
+    /**
+     * Sets the amount of space to leave between the edge of the gauge area and
+     * the actual drawing.
+     *
+     * @param padding A single value to use for the padding on all sides.
+     */
+    public final void setPadding(final int padding) {
+        setPadding(new Insets(padding));
+    }
+
+    /**
+     * Sets the amount of space to leave between the edge of the gauge area and
+     * the actual drawing.
+     *
+     * @param padding A single value to use for the padding on all sides.
+     */
+    public final void setPadding(final Number padding) {
+        setPadding(new Insets(padding));
+    }
+
+    /**
+     * Sets the amount of space to leave between the edge of the gauge area and
+     * the actual drawing.
+     *
+     * @param padding A string containing an integer or a JSON map or list with
+     * keys/values top, left, bottom, and/or right.
+     */
+    public final void setPadding(final String padding) {
+        setPadding(Insets.decode(padding));
+    }
+
+    public final float getThickness() {
+        return thickness;
+    }
+
+    /**
+     * Set the thickness of the value display.
+     * @param thickness The new value (default is {@link #STROKE_WIDTH}).
+     * @throws IllegalArgumentException if the value is 0.0 or less.
+     */
+    public final void setThickness(final float thickness) {
+        Utils.checkPositive(thickness, "thickness");
+
+        this.thickness = thickness;
+        repaintComponent();
+    }
+
+    public final void setThickness(final Number thickness) {
+        Utils.checkNull(thickness, "thickness");
+        setThickness(thickness.floatValue());
+    }
+
+    public final void setThickness(final String thickness) {
+        Utils.checkNullOrEmpty(thickness, "thickness");
+        setThickness(StringUtils.toNumber(thickness, Float.class));
+    }
+
+    public final boolean getShowTickMarks() {
+        return showTickMarks;
+    }
+
+    public final void setShowTickMarks(final boolean showTickMarks) {
+        this.showTickMarks = showTickMarks;
+        repaintComponent();
+    }
+
+    public final T getTickFrequency() {
+        return tickFrequency;
+    }
+
+    public final void setTickFrequency(final T frequency) {
+        Utils.checkNull(frequency, "frequency");
+        this.tickFrequency = frequency;
+        repaintComponent();
+    }
+
+    public final boolean getShowBorder() {
+        return showBorder;
+    }
+
+    public final void setShowBorder(final boolean showBorder) {
+        this.showBorder = showBorder;
+        repaintComponent();
+    }
+
+    public final float getBorderThickness() {
+        return borderThickness;
+    }
+
+    /**
+     * Set the thickness of the border around the gauge.
+     * @param borderThickness The new value (default is 1.0f).
+     * @throws IllegalArgumentException if the value is 0.0 or less.
+     */
+    public final void setBorderThickness(final float borderThickness) {
+        Utils.checkPositive(borderThickness, "borderThickness");
+
+        this.borderThickness = borderThickness;
+        invalidateComponent();
+    }
+
+    public final void setBorderThickness(final Number borderThickness) {
+        Utils.checkNull(borderThickness, "borderThickness");
+        setBorderThickness(borderThickness.floatValue());
+    }
+
+    public final void setBorderThickness(final String borderThickness) {
+        Utils.checkNullOrEmpty(borderThickness, "borderThickness");
+        setBorderThickness(StringUtils.toNumber(borderThickness, Float.class));
+    }
+
+    public final boolean getOnlyMaxColor() {
+        return onlyMaxColor;
+    }
+
+    /**
+     * Set whether or not to only show the maximum color for the entire gauge.
+     * @param onlyMaxColor {@code true} to show the entire gauge in the normal,
+     * warning, or critical color (if set) which is appropriate for the value
+     * and the warning or critical levels (again if set), {@code false} to
+     * show multiple segments.
+     */
+    public final void setOnlyMaxColor(final boolean onlyMaxColor) {
+        this.onlyMaxColor = onlyMaxColor;
+        repaintComponent();
+    }
+
+    @Override
+    public void originChanged(final Gauge<T> gauge, final Origin 
previousOrigin) {
+        invalidateComponent();
+    }
+
+    @Override
+    public void valueChanged(final Gauge<T> gauge, final T previousValue) {
+        repaintComponent();
+    }
+
+    @Override
+    public void textChanged(final Gauge<T> gauge, final String previousText) {
+        repaintComponent();
+    }
+
+    @Override
+    public void minValueChanged(final Gauge<T> gauge, final T 
previousMinValue) {
+        repaintComponent();
+    }
+
+    @Override
+    public void maxValueChanged(final Gauge<T> gauge, final T 
previousMaxValue) {
+        repaintComponent();
+    }
+
+    @Override
+    public void warningLevelChanged(final Gauge<T> gauge, final T 
previousWarningLevel) {
+        repaintComponent();
+    }
+
+    @Override
+    public void criticalLevelChanged(final Gauge<T> gauge, final T 
previousCriticalLevel) {
+        repaintComponent();
+    }
+}

Propchange: 
pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraGaugeSkin.java
------------------------------------------------------------------------------
    svn:eol-style = native


Reply via email to