de.javasoft.plaf.synthetica.painter
Class TabbedPanePainter

java.lang.Object
  extended by de.javasoft.plaf.synthetica.painter.TabbedPanePainter

public class TabbedPanePainter
extends java.lang.Object

Painter for TabbedPanes.

UI-properties:

  • Synthetica.tabbedPane.contentBorder.image[.top | .left | .bottom | .right] - String, content border image path.
  • Synthetica.tabbedPane.contentBorder.image[.top | .left | .bottom | .right].insets - Insets, image insets.
  • Synthetica.tabbedPane.tabArea.background.image[.top | .left | .bottom | .right] - String, tab area image path.
  • Synthetica.tabbedPane.tabArea.background.image[.top | .left | .bottom | .right].insets - Insets, image insets.
  • Synthetica.tabbedPane.tab[.selected | .hover | .disabled][.top | .left | .bottom | .right] - String, tab image path.
  • Synthetica.tabbedPane.tab[.selected | .hover | .disabled].insets - Insets, image insets.
  • Supported client properties:

  • Synthetica.tabbedPane.tab.[tabIndex].background, Color - used for tab coloring.
  • Synthetica.tabbedPane.tab.[tabIndex].background.alpha, Float - alpha value for tab coloring.
  • Version:
    2.69, 19.01.2013

    Nested Class Summary
    static class Cacheable.ScaleType
               
     
    Field Summary
    static int BOTTOM
               
    protected static java.util.HashMap<java.lang.String,de.javasoft.plaf.synthetica.painter.SyntheticaComponentPainter> instances
               
    static int LEFT
               
    static int LEFT_RIGHT
               
    static int RIGHT
               
    static int TOP
               
    static int TOP_BOTTOM
               
    static java.lang.String UI_KEY
               
    static int UNDEFINED
               
     
    Constructor Summary
    protected TabbedPanePainter()
              Constructor.
     
    Method Summary
    protected  float calcRelativeArc(java.awt.Graphics2D g2, float arc, float offset)
              Helper method to calculate an arc relative to the given offset.
    protected  float calcRelativeGradientPos(java.awt.Graphics2D g2, float pos, float offset)
              Helper method to calculate a relative gradient position in respect to the given offset.
    protected static float calcRelativeLength(java.awt.Graphics2D g2, float length, float offset)
              Helper method to calculate a length in respect to the given offset.
    protected  float calcRelativePos(java.awt.Graphics2D g2, float pos, float offset)
              Helper method to calculate a relative position in respect to the given offset.
    protected  java.awt.Color createAlphaColor(java.awt.Color color, java.lang.Float alpha)
              Helper method to create a alpha color from a solid color.
    protected  java.awt.Paint createLinearGradientPaint(float startX, float startY, float endX, float endY, float[] fractions, java.awt.Color[] colors)
              Convenient method to create a LinearGradientPaint for Java 1.5 and Java 6.
    protected  java.awt.BasicStroke createStroke(javax.swing.plaf.synth.SynthContext sc)
              Creates the stroke used for Java2D painting.
    protected  boolean flipOnRTL(javax.swing.JComponent c)
              Indicates if tabbedPane appearance will flip horizontally in RTL mode.
     int getCacheHash(javax.swing.plaf.synth.SynthContext sc, int w, int h, int meta, java.lang.String id)
              Returns a cache hash value which is used by SyntheticaSoftCache.
     java.awt.Insets getCacheScaleInsets(javax.swing.plaf.synth.SynthContext sc, java.lang.String id)
              Returns the insets in case of 9 square scaling is used.
     Cacheable.ScaleType getCacheScaleType(java.lang.String id)
              Returns the scaling type which will be used for scaling.
    static TabbedPanePainter getInstance()
              Returns painter instance.
    static TabbedPanePainter getInstance(javax.swing.plaf.synth.SynthContext sc)
              Returns painter instance.
    protected static de.javasoft.plaf.synthetica.painter.SyntheticaComponentPainter getInstance(javax.swing.plaf.synth.SynthContext sc, java.lang.Class<?> syntheticaPainter, java.lang.String customPainterUIKey)
              Returns a painter instance.
    protected static java.lang.String getPainterClassName(javax.swing.plaf.synth.SynthContext sc, java.lang.Class<?> syntheticaPainter, java.lang.String customPainterUIKey)
               
    protected  float getScale()
              Returns the current scale factor.
    protected  int getSelectedRun(javax.swing.JTabbedPane tabbedPane)
               
    protected  java.awt.Color getSyntheticaBackgroundColor(javax.swing.JComponent c)
              Helper method to create the Synthetica background color with alpha value provided by component background property or client properties "Synthetica.background" and "Synthetica.background.alpha".
    protected  int getTabPosition(javax.swing.JTabbedPane tabbedPane, int tabIndex)
              Returns tab position for specified tab index.
    protected  void modifyChildOpacity(javax.swing.plaf.synth.SynthContext sc)
               
     void paintTabbedPaneBackground(javax.swing.plaf.synth.SynthContext sc, java.awt.Graphics g, int x, int y, int w, int h)
               
     void paintTabbedPaneBorder(javax.swing.plaf.synth.SynthContext sc, java.awt.Graphics g, int x, int y, int w, int h)
               
     void paintTabbedPaneContentBackground(javax.swing.plaf.synth.SynthContext sc, java.awt.Graphics g, int x, int y, int w, int h)
               
     void paintTabbedPaneContentBorder(javax.swing.JComponent c, SyntheticaState state, int placement, boolean gap4SelectedTab, java.awt.Graphics g, int x, int y, int w, int h)
              Paint tabbedPane content border for non-rotated tabs (angle=0).
     void paintTabbedPaneContentBorder(javax.swing.JComponent c, SyntheticaState state, int placement, boolean gap4SelectedTab, int angle, java.awt.Graphics g, int x, int y, int w, int h)
              Paint tabbedPane content border.
     void paintTabbedPaneContentBorder(javax.swing.plaf.synth.SynthContext sc, java.awt.Graphics g, int x, int y, int w, int h)
              Paints tabbedPane content border.
     void paintTabbedPaneTab(javax.swing.JComponent c, SyntheticaState state, int tabIndex, int placement, int position, int angle, java.awt.Graphics g, int x, int y, int w, int h)
              Paint tabbedPane tab.
     void paintTabbedPaneTabAreaBackground(javax.swing.JComponent c, SyntheticaState state, int placement, int angle, java.awt.Graphics g, int x, int y, int w, int h)
              Paint tabbedPane tab area background.
     void paintTabbedPaneTabAreaBackground(javax.swing.plaf.synth.SynthContext sc, java.awt.Graphics g, int x, int y, int w, int h)
               
     void paintTabbedPaneTabAreaBorder(javax.swing.plaf.synth.SynthContext sc, java.awt.Graphics g, int x, int y, int w, int h)
               
     void paintTabbedPaneTabBackground(javax.swing.plaf.synth.SynthContext sc, java.awt.Graphics g, int x, int y, int w, int h, int tabIndex)
              Paints tabbedPane tab background.
     void paintTabbedPaneTabBorder(javax.swing.plaf.synth.SynthContext sc, java.awt.Graphics g, int x, int y, int w, int h, int tabIndex)
              Paints tabbedPane tab border.
     boolean paintTabbedPaneTabText(javax.swing.plaf.synth.SynthContext sc, java.awt.Graphics g, java.lang.String text, int x, int y, int mnemonicIndex)
               
    protected  java.awt.Graphics2D prepareGraphics2D(javax.swing.plaf.synth.SynthContext sc, java.awt.Graphics g, int x, int y, boolean antiAlias)
              Prepare graphics for Java2D painting.
    protected  java.awt.Graphics2D prepareGraphics2D(javax.swing.plaf.synth.SynthContext sc, java.awt.Graphics g, int x, int y, boolean antiAlias, boolean translateXY)
              Prepare graphics for Java2D painting.
    protected  java.awt.Graphics2D prepareGraphics2D(javax.swing.plaf.synth.SynthContext sc, java.awt.Graphics g, int x, int y, boolean antiAlias, boolean translateXY, java.awt.BasicStroke stroke)
              Prepares/configures graphics object for 2D painting.
    protected  java.awt.Graphics2D prepareGraphics2D(javax.swing.plaf.synth.SynthContext sc, java.awt.Graphics g, int x, int y, int w, int h, java.awt.BasicStroke stroke)
              Deprecated.  
    protected  java.awt.Graphics2D prepareGraphics2D(javax.swing.plaf.synth.SynthContext sc, java.awt.Graphics g, int x, int y, int w, int h, boolean respectStrokeWidth)
              Deprecated.  
    static void reinitialize()
               
    protected  void restoreGraphics2D(java.awt.Graphics2D g2)
              Restore the already prepared graphics object.
    protected  float scaleArc(float arc)
              Returns a scaled arc.
    protected static java.awt.Shape subtractStroke(java.awt.Graphics2D g2, java.awt.Shape s)
              Helper method to subtract the stroke from the given shape.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    UI_KEY

    public static final java.lang.String UI_KEY
    See Also:
    Constant Field Values

    UNDEFINED

    public static final int UNDEFINED
    See Also:
    Constant Field Values

    LEFT

    public static final int LEFT
    See Also:
    Constant Field Values

    RIGHT

    public static final int RIGHT
    See Also:
    Constant Field Values

    LEFT_RIGHT

    public static final int LEFT_RIGHT
    See Also:
    Constant Field Values

    TOP

    public static final int TOP
    See Also:
    Constant Field Values

    BOTTOM

    public static final int BOTTOM
    See Also:
    Constant Field Values

    TOP_BOTTOM

    public static final int TOP_BOTTOM
    See Also:
    Constant Field Values

    instances

    protected static java.util.HashMap<java.lang.String,de.javasoft.plaf.synthetica.painter.SyntheticaComponentPainter> instances
    Constructor Detail

    TabbedPanePainter

    protected TabbedPanePainter()
    Constructor.

    Method Detail

    getInstance

    public static TabbedPanePainter getInstance()
    Returns painter instance.


    getInstance

    public static TabbedPanePainter getInstance(javax.swing.plaf.synth.SynthContext sc)
    Returns painter instance.

    Since:
    V2.7.0

    reinitialize

    public static void reinitialize()

    paintTabbedPaneBackground

    public void paintTabbedPaneBackground(javax.swing.plaf.synth.SynthContext sc,
                                          java.awt.Graphics g,
                                          int x,
                                          int y,
                                          int w,
                                          int h)

    paintTabbedPaneBorder

    public void paintTabbedPaneBorder(javax.swing.plaf.synth.SynthContext sc,
                                      java.awt.Graphics g,
                                      int x,
                                      int y,
                                      int w,
                                      int h)

    paintTabbedPaneContentBackground

    public void paintTabbedPaneContentBackground(javax.swing.plaf.synth.SynthContext sc,
                                                 java.awt.Graphics g,
                                                 int x,
                                                 int y,
                                                 int w,
                                                 int h)

    paintTabbedPaneContentBorder

    public void paintTabbedPaneContentBorder(javax.swing.plaf.synth.SynthContext sc,
                                             java.awt.Graphics g,
                                             int x,
                                             int y,
                                             int w,
                                             int h)
    Paints tabbedPane content border.


    paintTabbedPaneContentBorder

    public void paintTabbedPaneContentBorder(javax.swing.JComponent c,
                                             SyntheticaState state,
                                             int placement,
                                             boolean gap4SelectedTab,
                                             java.awt.Graphics g,
                                             int x,
                                             int y,
                                             int w,
                                             int h)
    Paint tabbedPane content border for non-rotated tabs (angle=0).

    See Also:
    paintTabbedPaneContentBorder(JComponent, SyntheticaState, int, boolean, int, Graphics, int, int, int, int)

    paintTabbedPaneContentBorder

    public void paintTabbedPaneContentBorder(javax.swing.JComponent c,
                                             SyntheticaState state,
                                             int placement,
                                             boolean gap4SelectedTab,
                                             int angle,
                                             java.awt.Graphics g,
                                             int x,
                                             int y,
                                             int w,
                                             int h)
    Paint tabbedPane content border. The method is intended to be used by third parties.

    Parameters:
    c - The relevant component
    state - Current component state
    placement - The tab placement SwingConstants.TOP, SwingConstants.BOTTOM, SwingConstants.LEFT, SwingConstants.RIGHT
    gap4SelectedTab - True means, do not paint content border at the edge of the selected tab
    angle - Angle in degrees (supported values: 0, 90, -90)
    g - Graphics
    x - The x-position
    y - The y-position
    w - The width
    h - The height

    modifyChildOpacity

    protected void modifyChildOpacity(javax.swing.plaf.synth.SynthContext sc)

    paintTabbedPaneTabAreaBorder

    public void paintTabbedPaneTabAreaBorder(javax.swing.plaf.synth.SynthContext sc,
                                             java.awt.Graphics g,
                                             int x,
                                             int y,
                                             int w,
                                             int h)

    paintTabbedPaneTabAreaBackground

    public void paintTabbedPaneTabAreaBackground(javax.swing.plaf.synth.SynthContext sc,
                                                 java.awt.Graphics g,
                                                 int x,
                                                 int y,
                                                 int w,
                                                 int h)

    paintTabbedPaneTabAreaBackground

    public void paintTabbedPaneTabAreaBackground(javax.swing.JComponent c,
                                                 SyntheticaState state,
                                                 int placement,
                                                 int angle,
                                                 java.awt.Graphics g,
                                                 int x,
                                                 int y,
                                                 int w,
                                                 int h)
    Paint tabbedPane tab area background. The method is intended to be used by third parties.

    Parameters:
    c - The relevant component
    state - Current component state
    placement - The tab placement SwingConstants.TOP, SwingConstants.BOTTOM, SwingConstants.LEFT, SwingConstants.RIGHT
    angle - Angle in degrees (supported values: 0, 90, -90)
    g - Graphics
    x - The x-position
    y - The y-position
    w - The width
    h - The height

    paintTabbedPaneTabBorder

    public void paintTabbedPaneTabBorder(javax.swing.plaf.synth.SynthContext sc,
                                         java.awt.Graphics g,
                                         int x,
                                         int y,
                                         int w,
                                         int h,
                                         int tabIndex)
    Paints tabbedPane tab border.


    paintTabbedPaneTab

    public void paintTabbedPaneTab(javax.swing.JComponent c,
                                   SyntheticaState state,
                                   int tabIndex,
                                   int placement,
                                   int position,
                                   int angle,
                                   java.awt.Graphics g,
                                   int x,
                                   int y,
                                   int w,
                                   int h)
    Paint tabbedPane tab. The method is intended to be used by third parties.

    Parameters:
    c - The relevant component
    state - Current state of the tab
    tabIndex - Index of the tab
    placement - The tab placement SwingConstants.TOP, SwingConstants.BOTTOM, SwingConstants.LEFT, SwingConstants.RIGHT
    position - Tab position within a tab row. Valid values are UNDEFINED, LEFT, LEFT_RIGHT, RIGHT, TOP, TOP_BOTTOM, BOTTOM. Note: LEFT means tab is at the left edge. UNDEFINED means that the tab is neither at the left nor at the right and neither at the top nor at the bottom edge of the tabbedPane. LEFT_RIGHT or TOP_BOTTOM is only valid if tab is left and right at the same time - this applies to single tabs only.
    angle - Rotation angle in degrees (supported values: 0, 90, -90)
    g - Graphics
    x - The x-position
    y - The y-position
    w - The width
    h - The height

    paintTabbedPaneTabBackground

    public void paintTabbedPaneTabBackground(javax.swing.plaf.synth.SynthContext sc,
                                             java.awt.Graphics g,
                                             int x,
                                             int y,
                                             int w,
                                             int h,
                                             int tabIndex)
    Paints tabbedPane tab background.


    getTabPosition

    protected int getTabPosition(javax.swing.JTabbedPane tabbedPane,
                                 int tabIndex)
    Returns tab position for specified tab index.


    paintTabbedPaneTabText

    public boolean paintTabbedPaneTabText(javax.swing.plaf.synth.SynthContext sc,
                                          java.awt.Graphics g,
                                          java.lang.String text,
                                          int x,
                                          int y,
                                          int mnemonicIndex)

    flipOnRTL

    protected boolean flipOnRTL(javax.swing.JComponent c)
    Indicates if tabbedPane appearance will flip horizontally in RTL mode. This is useful if a tabbedPane contains asymmetric parts i.e. asymmetric tabs.

    Parameters:
    c - The tabbedPane component.
    Returns:
    true means appearance will flip horizontally.

    getSelectedRun

    protected int getSelectedRun(javax.swing.JTabbedPane tabbedPane)

    getCacheScaleType

    public Cacheable.ScaleType getCacheScaleType(java.lang.String id)
    Returns the scaling type which will be used for scaling.

    Parameters:
    id - Usually the relevant painter method name
    Returns:
    The scaling type

    getCacheHash

    public int getCacheHash(javax.swing.plaf.synth.SynthContext sc,
                            int w,
                            int h,
                            int meta,
                            java.lang.String id)
    Returns a cache hash value which is used by SyntheticaSoftCache. The hash value has to represent every single paint attribute which is used by the painter class which implements the Cacheable interface.

    Parameters:
    sc - The synth context
    w - The paint width
    h - The paint height
    meta - A context related meta value
    id - Usually the relevant painter method name
    Returns:
    The hash value or -1 for non-cacheable

    getInstance

    protected static de.javasoft.plaf.synthetica.painter.SyntheticaComponentPainter getInstance(javax.swing.plaf.synth.SynthContext sc,
                                                                                                java.lang.Class<?> syntheticaPainter,
                                                                                                java.lang.String customPainterUIKey)
    Returns a painter instance.


    getPainterClassName

    protected static java.lang.String getPainterClassName(javax.swing.plaf.synth.SynthContext sc,
                                                          java.lang.Class<?> syntheticaPainter,
                                                          java.lang.String customPainterUIKey)

    prepareGraphics2D

    protected java.awt.Graphics2D prepareGraphics2D(javax.swing.plaf.synth.SynthContext sc,
                                                    java.awt.Graphics g,
                                                    int x,
                                                    int y,
                                                    boolean antiAlias,
                                                    boolean translateXY,
                                                    java.awt.BasicStroke stroke)
    Prepares/configures graphics object for 2D painting.

    Parameters:
    sc - Synth context, can be null.
    g - Graphics object.
    x - Original X-position, if translateXY is true the point of origin is X,Y which means the paint method doesn't have to respect the X-position.
    y - Original Y-position, if translateXY is true the point of origin is X,Y which means the paint method doesn't have to respect the Y-position.
    antiAlias - True means anti-alias rendering hint will be set - it's recommended to enable anti-aliasing for borders (#draw(Shape s)) and for background fills (#fill(Shape s)) in case that the border is translucent.
    translateXY - True, translate graphics to specified X,Y coordinates and respect stroke width - point of origin for painting is X,Y.
    stroke - Stroke used for painting - can be null in this case (createStroke(SynthContext) will be used).
    Returns:
    Configured Graphics2D object.

    prepareGraphics2D

    protected java.awt.Graphics2D prepareGraphics2D(javax.swing.plaf.synth.SynthContext sc,
                                                    java.awt.Graphics g,
                                                    int x,
                                                    int y,
                                                    boolean antiAlias)
    Prepare graphics for Java2D painting. Graphics will be translated to the specified X,Y coordinates - point of origin for painting is X,Y. Painter methods doesn't have to respect the X,Y-position.

    See Also:
    prepareGraphics2D(SynthContext, Graphics, int, int, boolean, boolean, BasicStroke), createStroke(SynthContext)

    prepareGraphics2D

    protected java.awt.Graphics2D prepareGraphics2D(javax.swing.plaf.synth.SynthContext sc,
                                                    java.awt.Graphics g,
                                                    int x,
                                                    int y,
                                                    boolean antiAlias,
                                                    boolean translateXY)
    Prepare graphics for Java2D painting.

    See Also:
    prepareGraphics2D(SynthContext, Graphics, int, int, boolean, boolean, BasicStroke), createStroke(SynthContext)

    prepareGraphics2D

    protected java.awt.Graphics2D prepareGraphics2D(javax.swing.plaf.synth.SynthContext sc,
                                                    java.awt.Graphics g,
                                                    int x,
                                                    int y,
                                                    int w,
                                                    int h,
                                                    java.awt.BasicStroke stroke)
    Deprecated. 

    Prepare graphics for Java2D painting.

    See Also:
    prepareGraphics2D(SynthContext, Graphics, int, int, boolean, boolean, BasicStroke)

    prepareGraphics2D

    protected java.awt.Graphics2D prepareGraphics2D(javax.swing.plaf.synth.SynthContext sc,
                                                    java.awt.Graphics g,
                                                    int x,
                                                    int y,
                                                    int w,
                                                    int h,
                                                    boolean respectStrokeWidth)
    Deprecated. 

    Prepare graphics for Java2D painting.

    See Also:
    prepareGraphics2D(SynthContext, Graphics, int, int, boolean, boolean, BasicStroke)

    restoreGraphics2D

    protected void restoreGraphics2D(java.awt.Graphics2D g2)
    Restore the already prepared graphics object.


    getScale

    protected float getScale()
    Returns the current scale factor.


    createStroke

    protected java.awt.BasicStroke createStroke(javax.swing.plaf.synth.SynthContext sc)
    Creates the stroke used for Java2D painting.


    scaleArc

    protected float scaleArc(float arc)
    Returns a scaled arc.

    Parameters:
    arc - The unscaled arc.
    Returns:
    The scaled arc.

    calcRelativeArc

    protected float calcRelativeArc(java.awt.Graphics2D g2,
                                    float arc,
                                    float offset)
    Helper method to calculate an arc relative to the given offset. Note: Stroke width has to be equal to the scale factor

    Parameters:
    g2 - 2D graphics object.
    arc - The base arc.
    offset - The offset in pixel.
    Returns:
    The calculated arc.

    calcRelativePos

    protected float calcRelativePos(java.awt.Graphics2D g2,
                                    float pos,
                                    float offset)
    Helper method to calculate a relative position in respect to the given offset. Note: Stroke width has to be equal to the scale factor

    Parameters:
    g2 - 2D graphics object.
    pos - X/Y-position.
    offset - The offset in pixel.
    Returns:
    The calculated position.

    calcRelativeGradientPos

    protected float calcRelativeGradientPos(java.awt.Graphics2D g2,
                                            float pos,
                                            float offset)
    Helper method to calculate a relative gradient position in respect to the given offset. Note: Stroke width has to be equal to the scale factor

    Parameters:
    g2 - 2D graphics object.
    pos - X/Y-position.
    offset - The offset in pixel.
    Returns:
    The calculated position.

    calcRelativeLength

    protected static float calcRelativeLength(java.awt.Graphics2D g2,
                                              float length,
                                              float offset)
    Helper method to calculate a length in respect to the given offset. Note: Stroke width has to be equal to the scale factor

    Parameters:
    g2 - 2D graphics object.
    length - The length.
    offset - The offset in pixel.
    Returns:
    The calculated length.

    subtractStroke

    protected static java.awt.Shape subtractStroke(java.awt.Graphics2D g2,
                                                   java.awt.Shape s)
    Helper method to subtract the stroke from the given shape.

    Parameters:
    g2 - Graphics.
    s - The shape.
    Returns:
    The shape without stroke.

    getSyntheticaBackgroundColor

    protected java.awt.Color getSyntheticaBackgroundColor(javax.swing.JComponent c)
    Helper method to create the Synthetica background color with alpha value provided by component background property or client properties "Synthetica.background" and "Synthetica.background.alpha". If no background color is set null will be returned.

    Parameters:
    c - The relevant JComponent.
    Returns:
    The background color including alpha value or null

    createAlphaColor

    protected java.awt.Color createAlphaColor(java.awt.Color color,
                                              java.lang.Float alpha)
    Helper method to create a alpha color from a solid color. If color is null, null will be returned. If alpha value is null 0.1f will be used.

    Parameters:
    color - The color.
    alpha - The alpha value - null means 0.1f
    Returns:
    The color including alpha value or null

    createLinearGradientPaint

    protected java.awt.Paint createLinearGradientPaint(float startX,
                                                       float startY,
                                                       float endX,
                                                       float endY,
                                                       float[] fractions,
                                                       java.awt.Color[] colors)
    Convenient method to create a LinearGradientPaint for Java 1.5 and Java 6.

    See Also:
    SyntheticaLookAndFeel.createLinearGradientPaint(float, float, float, float, float[], Color[])

    getCacheScaleInsets

    public java.awt.Insets getCacheScaleInsets(javax.swing.plaf.synth.SynthContext sc,
                                               java.lang.String id)
    Returns the insets in case of 9 square scaling is used.

    Parameters:
    sc - The synth context
    id - Usually the relevant painter method name
    Returns:
    The image insets used for 9 square scaling


    Copyright © 2004-2011 Jyloo Software. All Rights Reserved.