Package com.seaglasslookandfeel

Source Code of com.seaglasslookandfeel.SeaGlassSynthPainterImpl

/*
* Copyright (c) 2009 Kathryn Huxtable and Kenneth Orr.
*
* This file is part of the SeaGlass Pluggable Look and Feel.
*
* Licensed 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.
*
* $Id: SeaGlassSynthPainterImpl.java 1595 2011-08-09 20:33:48Z rosstauscher@gmx.de $
*/
package com.seaglasslookandfeel;

import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.geom.NoninvertibleTransformException;
import java.awt.image.BufferedImage;

import javax.swing.JSlider;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.SwingConstants;
import javax.swing.plaf.synth.SynthContext;
import javax.swing.plaf.synth.SynthPainter;

import com.seaglasslookandfeel.painter.SeaGlassPainter;

/**
* SeaGlassSynthPainterImpl.
*
* <p>Based on Nimbus's SynthPainterImpl class by Richard Bair.</p>
*
*/
@SuppressWarnings("unchecked")
public class SeaGlassSynthPainterImpl extends SynthPainter {
    private SeaGlassStyle style;

    /**
     * Creates a new SeaGlassSynthPainterImpl object.
     *
     * @param style the SynthStyle object.
     */
    public SeaGlassSynthPainterImpl(SeaGlassStyle style) {
        this.style = style;
    }

    /**
     * Paint the provided painter using the provided transform at the specified
     * position and size. Handles if g is a non 2D Graphics by painting via a
     * BufferedImage.
     *
     * @param p         the painter to use.
     * @param ctx       the SynthContext describing the component/region, the
     *                  style, and the state.
     * @param g         the Graphics context to paint with.
     * @param x         the left-most portion of the object to paint.
     * @param y         the upper-most portion of the object to paint.
     * @param w         the width to paint.
     * @param h         the height to paint.
     * @param transform the affine transform to apply, or {@code null} if none
     *                  is to be applied.
     */
    private void paint(SeaGlassPainter p, SynthContext ctx, Graphics g, int x, int y, int w, int h, AffineTransform transform) {
        if (p != null) {

            if (g instanceof Graphics2D) {
                Graphics2D gfx = (Graphics2D) g;

                if (transform != null) {
                    gfx.transform(transform);
                }

                gfx.translate(x, y);
                p.paint(gfx, ctx.getComponent(), w, h);
                gfx.translate(-x, -y);

                if (transform != null) {

                    try {
                        gfx.transform(transform.createInverse());
                    } catch (NoninvertibleTransformException e) {

                        // this should never happen as we are in control of all
                        // calls into this method and only ever pass in simple
                        // transforms of rotate, flip and translates
                        e.printStackTrace();
                    }
                }
            } else {

                // use image if we are printing to a Java 1.1 PrintGraphics as
                // it is not a instance of Graphics2D
                BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
                Graphics2D    gfx = img.createGraphics();

                if (transform != null) {
                    gfx.transform(transform);
                }

                p.paint(gfx, ctx.getComponent(), w, h);
                gfx.dispose();
                g.drawImage(img, x, y, null);
                img = null;
            }
        }
    }

    /**
     * Paint the object's background.
     *
     * @param ctx       the SynthContext.
     * @param g         the Graphics context.
     * @param x         the x location corresponding to the upper-left
     *                  coordinate to paint.
     * @param y         the y location corresponding to the upper left
     *                  coordinate to paint.
     * @param w         the width to paint.
     * @param h         the height to paint.
     * @param transform the affine transform to apply, or {@code null} if none
     *                  is to be applied.
     */
    private void paintBackground(SynthContext ctx, Graphics g, int x, int y, int w, int h, AffineTransform transform) {
        // if the background color of the component is 100% transparent
        // then we should not paint any background graphics. This is a solution
        // for there being no way of turning off Nimbus background painting as
        // basic components are all non-opaque by default.
        Component c  = ctx.getComponent();
        Color     bg = (c != null) ? c.getBackground() : null;

        if (bg == null || bg.getAlpha() > 0) {
            SeaGlassPainter backgroundPainter = style.getBackgroundPainter(ctx);

            if (backgroundPainter != null) {
                paint(backgroundPainter, ctx, g, x, y, w, h, transform);
            }
        }
    }

    /**
     * Paint the object's foreground.
     *
     * @param ctx       the SynthContext.
     * @param g         the Graphics context.
     * @param x         the x location corresponding to the upper-left
     *                  coordinate to paint.
     * @param y         the y location corresponding to the upper left
     *                  coordinate to paint.
     * @param w         the width to paint.
     * @param h         the height to paint.
     * @param transform the affine transform to apply, or {@code null} if none
     *                  is to be applied.
     */
    private void paintForeground(SynthContext ctx, Graphics g, int x, int y, int w, int h, AffineTransform transform) {
        SeaGlassPainter foregroundPainter = style.getForegroundPainter(ctx);

        if (foregroundPainter != null) {
            paint(foregroundPainter, ctx, g, x, y, w, h, transform);
        }
    }

    /**
     * Paint the object's border.
     *
     * @param ctx       the SynthContext.
     * @param g         the Graphics context.
     * @param x         the x location corresponding to the upper-left
     *                  coordinate to paint.
     * @param y         the y location corresponding to the upper left
     *                  coordinate to paint.
     * @param w         the width to paint.
     * @param h         the height to paint.
     * @param transform the affine transform to apply, or {@code null} if none
     *                  is to be applied.
     */
    private void paintBorder(SynthContext ctx, Graphics g, int x, int y, int w, int h, AffineTransform transform) {
        SeaGlassPainter borderPainter = style.getBorderPainter(ctx);

        if (borderPainter != null) {
            paint(borderPainter, ctx, g, x, y, w, h, transform);
        }
    }

    /**
     * Paint the object's background.
     *
     * @param ctx         the SynthContext.
     * @param g           the Graphics context.
     * @param x           the x location corresponding to the upper-left
     *                    coordinate to paint.
     * @param y           the y location corresponding to the upper left
     *                    coordinate to paint.
     * @param w           the width to paint.
     * @param h           the height to paint.
     * @param orientation the component's orientation, used to construct an
     *                    affine transform.
     */
    private void paintBackground(SynthContext ctx, Graphics g, int x, int y, int w, int h, int orientation) {
        Component c   = ctx.getComponent();
        boolean   ltr = c.getComponentOrientation().isLeftToRight();

        // Don't RTL flip JSpliders as they handle it internaly
        if (ctx.getComponent() instanceof JSlider)
            ltr = true;

        if (orientation == SwingConstants.VERTICAL && ltr) {
            AffineTransform transform = new AffineTransform();

            transform.scale(-1, 1);
            transform.rotate(Math.toRadians(90));
            paintBackground(ctx, g, y, x, h, w, transform);
        } else if (orientation == SwingConstants.VERTICAL) {
            AffineTransform transform = new AffineTransform();

            transform.rotate(Math.toRadians(90));
            transform.translate(0, -(x + w));
            paintBackground(ctx, g, y, x, h, w, transform);
        } else if (orientation == SwingConstants.HORIZONTAL && ltr) {
            paintBackground(ctx, g, x, y, w, h, null);
        } else {

            // horizontal and right-to-left orientation
            AffineTransform transform = new AffineTransform();

            transform.translate(x, y);
            transform.scale(-1, 1);
            transform.translate(-w, 0);
            paintBackground(ctx, g, 0, 0, w, h, transform);
        }
    }

    /**
     * Paint the object's border.
     *
     * @param ctx         the SynthContext.
     * @param g           the Graphics context.
     * @param x           the x location corresponding to the upper-left
     *                    coordinate to paint.
     * @param y           the y location corresponding to the upper left
     *                    coordinate to paint.
     * @param w           the width to paint.
     * @param h           the height to paint.
     * @param orientation the component's orientation, used to construct an
     *                    affine transform.
     */
    private void paintBorder(SynthContext ctx, Graphics g, int x, int y, int w, int h, int orientation) {
        Component c   = ctx.getComponent();
        boolean   ltr = c.getComponentOrientation().isLeftToRight();

        if (orientation == SwingConstants.VERTICAL && ltr) {
            AffineTransform transform = new AffineTransform();

            transform.scale(-1, 1);
            transform.rotate(Math.toRadians(90));
            paintBorder(ctx, g, y, x, h, w, transform);
        } else if (orientation == SwingConstants.VERTICAL) {
            AffineTransform transform = new AffineTransform();

            transform.rotate(Math.toRadians(90));
            transform.translate(0, -(x + w));
            paintBorder(ctx, g, y, 0, h, w, transform);
        } else if (orientation == SwingConstants.HORIZONTAL && ltr) {
            paintBorder(ctx, g, x, y, w, h, null);
        } else {

            // horizontal and right-to-left orientation
            paintBorder(ctx, g, x, y, w, h, null);
        }
    }

    /**
     * Paint the object's foreground.
     *
     * @param ctx         the SynthContext.
     * @param g           the Graphics context.
     * @param x           the x location corresponding to the upper-left
     *                    coordinate to paint.
     * @param y           the y location corresponding to the upper left
     *                    coordinate to paint.
     * @param w           the width to paint.
     * @param h           the height to paint.
     * @param orientation the component's orientation, used to construct an
     *                    affine transform.
     */
    private void paintForeground(SynthContext ctx, Graphics g, int x, int y, int w, int h, int orientation) {
        Component c   = ctx.getComponent();
        boolean   ltr = c.getComponentOrientation().isLeftToRight();

        if (orientation == SwingConstants.VERTICAL && ltr) {
            AffineTransform transform = new AffineTransform();

            transform.scale(-1, 1);
            transform.rotate(Math.toRadians(90));
            paintForeground(ctx, g, y, x, h, w, transform);
        } else if (orientation == SwingConstants.VERTICAL) {
            AffineTransform transform = new AffineTransform();

            transform.rotate(Math.toRadians(90));
            transform.translate(0, -(x + w));
            paintForeground(ctx, g, y, 0, h, w, transform);
        } else if (orientation == SwingConstants.HORIZONTAL && ltr) {
            paintForeground(ctx, g, x, y, w, h, null);
        } else {

            // horizontal and right-to-left orientation
            paintForeground(ctx, g, x, y, w, h, null);
        }
    }

    /**
     * Paints the background of an arrow button. Arrow buttons are created by
     * some components, such as <code>JScrollBar</code>.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintArrowButtonBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        if (context.getComponent().getComponentOrientation().isLeftToRight()) {
            paintBackground(context, g, x, y, w, h, null);
        } else {
            AffineTransform transform = new AffineTransform();

            transform.translate(x, y);
            transform.scale(-1, 1);
            transform.translate(-w, 0);
            paintBackground(context, g, 0, 0, w, h, transform);
        }
    }

    /**
     * Paints the border of an arrow button. Arrow buttons are created by some
     * components, such as <code>JScrollBar</code>.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintArrowButtonBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the foreground of an arrow button. This method is responsible for
     * drawing a graphical representation of a direction, typically an arrow.
     * Arrow buttons are created by some components, such as <code>
     * JScrollBar</code>
     *
     * @param context   SynthContext identifying the <code>JComponent</code> and
     *                  <code>Region</code> to paint to
     * @param g         <code>Graphics</code> to paint to
     * @param x         X coordinate of the area to paint to
     * @param y         Y coordinate of the area to paint to
     * @param w         Width of the area to paint to
     * @param h         Height of the area to paint to
     * @param direction One of SwingConstants.NORTH, SwingConstants.SOUTH
     *                  SwingConstants.EAST or SwingConstants.WEST
     */
    public void paintArrowButtonForeground(SynthContext context, Graphics g, int x, int y, int w, int h, int direction) {
        // assume that the painter is arranged with the arrow pointing... LEFT?
        String  compName = context.getComponent().getName();
        boolean ltr      = context.getComponent().getComponentOrientation().isLeftToRight();

        // The hard coding for spinners here needs to be replaced by a more
        // general method for disabling rotation
        if ("Spinner.nextButton".equals(compName) || "Spinner.previousButton".equals(compName)) {

            if (ltr) {
                paintForeground(context, g, x, y, w, h, null);
            } else {
                AffineTransform transform = new AffineTransform();

                transform.translate(w, 0);
                transform.scale(-1, 1);
                paintForeground(context, g, x, y, w, h, transform);
            }
        } else if (direction == SwingConstants.WEST) {
            paintForeground(context, g, x, y, w, h, null);
        } else if (direction == SwingConstants.NORTH) {

            if (ltr) {
                AffineTransform transform = new AffineTransform();

                transform.scale(-1, 1);
                transform.rotate(Math.toRadians(90));
                paintForeground(context, g, y, x, h, w, transform);
            } else {
                AffineTransform transform = new AffineTransform();

                transform.rotate(Math.toRadians(90));
                transform.translate(0, -(x + w));
                paintForeground(context, g, y, x, h, w, transform);
            }
        } else if (direction == SwingConstants.EAST) {
            AffineTransform transform = new AffineTransform();

            transform.translate(w, 0);
            transform.scale(-1, 1);
            paintForeground(context, g, x, y, w, h, transform);
        } else if (direction == SwingConstants.SOUTH) {

            if (ltr) {
                AffineTransform transform = new AffineTransform();

                transform.rotate(Math.toRadians(-90));
                transform.translate(-h, 0);
                paintForeground(context, g, y, x, h, w, transform);
            } else {
                AffineTransform transform = new AffineTransform();

                transform.scale(-1, 1);
                transform.rotate(Math.toRadians(-90));
                transform.translate(-(h + y), -(w + x));
                paintForeground(context, g, y, x, h, w, transform);
            }
        }
    }

    /**
     * Paints the foreground of a search field button. This method is
     * responsible for drawing a graphical representation of a find or cancel
     * button.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintSearchButtonForeground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintForeground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a button.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintButtonBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a button.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintButtonBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a check box menu item.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintCheckBoxMenuItemBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a check box menu item.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintCheckBoxMenuItemBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a check box.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintCheckBoxBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a check box.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintCheckBoxBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a color chooser.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintColorChooserBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a color chooser.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintColorChooserBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a combo box.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintComboBoxBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        if (context.getComponent().getComponentOrientation().isLeftToRight()) {
            paintBackground(context, g, x, y, w, h, null);
        } else {
            AffineTransform transform = new AffineTransform();

            transform.translate(x, y);
            transform.scale(-1, 1);
            transform.translate(-w, 0);
            paintBackground(context, g, 0, 0, w, h, transform);
        }
    }

    /**
     * Paints the border of a combo box.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintComboBoxBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a desktop icon.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintDesktopIconBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a desktop icon.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintDesktopIconBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a desktop pane.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintDesktopPaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a desktop pane.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintDesktopPaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of an editor pane.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintEditorPaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of an editor pane.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintEditorPaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a file chooser.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintFileChooserBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a file chooser.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintFileChooserBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a formatted text field.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintFormattedTextFieldBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        if (context.getComponent().getComponentOrientation().isLeftToRight()) {
            paintBackground(context, g, x, y, w, h, null);
        } else {
            AffineTransform transform = new AffineTransform();

            transform.translate(x, y);
            transform.scale(-1, 1);
            transform.translate(-w, 0);
            paintBackground(context, g, 0, 0, w, h, transform);
        }
    }

    /**
     * Paints the border of a formatted text field.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintFormattedTextFieldBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        if (context.getComponent().getComponentOrientation().isLeftToRight()) {
            paintBorder(context, g, x, y, w, h, null);
        } else {
            AffineTransform transform = new AffineTransform();

            transform.translate(x, y);
            transform.scale(-1, 1);
            transform.translate(-w, 0);
            paintBorder(context, g, 0, 0, w, h, transform);
        }
    }

    /**
     * Paints the background of an internal frame title pane.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintInternalFrameTitlePaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of an internal frame title pane.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintInternalFrameTitlePaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of an internal frame.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintInternalFrameBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of an internal frame.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintInternalFrameBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a label.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintLabelBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a label.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintLabelBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a list.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintListBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a list.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintListBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a menu bar.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintMenuBarBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a menu bar.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintMenuBarBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a menu item.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintMenuItemBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a menu item.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintMenuItemBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a menu.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintMenuBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a menu.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintMenuBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of an option pane.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintOptionPaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of an option pane.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintOptionPaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a panel.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintPanelBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a panel.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintPanelBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a password field.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintPasswordFieldBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a password field.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintPasswordFieldBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a popup menu.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintPopupMenuBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a popup menu.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintPopupMenuBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a progress bar.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintProgressBarBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a progress bar. This implementation invokes the
     * method of the same name without the orientation.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation one of <code>JProgressBar.HORIZONTAL</code> or <code>
     *                    JProgressBar.VERTICAL</code>
     */
    public void paintProgressBarBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        paintBackground(context, g, x, y, w, h, orientation);
    }

    /**
     * Paints the border of a progress bar.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintProgressBarBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a progress bar. This implementation invokes the
     * method of the same name without the orientation.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation one of <code>JProgressBar.HORIZONTAL</code> or <code>
     *                    JProgressBar.VERTICAL</code>
     */
    public void paintProgressBarBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        paintBorder(context, g, x, y, w, h, orientation);
    }

    /**
     * Paints the foreground of a progress bar. is responsible for providing an
     * indication of the progress of the progress bar.
     *
     * @param ctx         SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation one of <code>JProgressBar.HORIZONTAL</code> or <code>
     *                    JProgressBar.VERTICAL</code>
     */
    public void paintProgressBarForeground(SynthContext ctx, Graphics g, int x, int y, int w, int h, int orientation) {
        Component c   = ctx.getComponent();
        boolean   ltr = c.getComponentOrientation().isLeftToRight();

        if (orientation == SwingConstants.VERTICAL) {

            // We always draw from bottom to top, regardless of the
            // left-to-right orientation.
            AffineTransform transform = new AffineTransform();

            transform.translate(x, y);
            transform.rotate(Math.toRadians(-90));
            paintForeground(ctx, g, 0, 0, h, w, transform);
        } else if (orientation == SwingConstants.HORIZONTAL && ltr) {
            paintForeground(ctx, g, x, y, w, h, null);
        } else {

            // Horizontal and right-to-left orientation.
            // Flip the drawing so that any border on the progress bar is
            // painted at the left end.
            AffineTransform transform = new AffineTransform();

            transform.translate(x + w, 0);
            transform.scale(-1, 1);
            paintForeground(ctx, g, 0, y, w, h, transform);
        }
    }

    /**
     * Paints the background of a radio button menu item.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintRadioButtonMenuItemBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a radio button menu item.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintRadioButtonMenuItemBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a radio button.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintRadioButtonBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a radio button.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintRadioButtonBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a root pane.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintRootPaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a root pane.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintRootPaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a scrollbar.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintScrollBarBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a scrollbar. This implementation invokes the
     * method of the same name without the orientation.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation Orientation of the JScrollBar, one of <code>
     *                    JScrollBar.HORIZONTAL</code> or <code>
     *                    JScrollBar.VERTICAL</code>
     */
    public void paintScrollBarBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        paintBackground(context, g, x, y, w, h, orientation);
    }

    /**
     * Paints the border of a scrollbar.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintScrollBarBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a scrollbar. This implementation invokes the method
     * of the same name without the orientation.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation Orientation of the JScrollBar, one of <code>
     *                    JScrollBar.HORIZONTAL</code> or <code>
     *                    JScrollBar.VERTICAL</code>
     */
    public void paintScrollBarBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        paintBorder(context, g, x, y, w, h, orientation);
    }

    /**
     * Paints the background of the thumb of a scrollbar. The thumb provides a
     * graphical indication as to how much of the Component is visible in a
     * <code>JScrollPane</code>.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation Orientation of the JScrollBar, one of <code>
     *                    JScrollBar.HORIZONTAL</code> or <code>
     *                    JScrollBar.VERTICAL</code>
     */
    public void paintScrollBarThumbBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        paintBackground(context, g, x, y, w, h, orientation);
    }

    /**
     * Paints the border of the thumb of a scrollbar. The thumb provides a
     * graphical indication as to how much of the Component is visible in a
     * <code>JScrollPane</code>.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation Orientation of the JScrollBar, one of <code>
     *                    JScrollBar.HORIZONTAL</code> or <code>
     *                    JScrollBar.VERTICAL</code>
     */
    public void paintScrollBarThumbBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        paintBorder(context, g, x, y, w, h, orientation);
    }

    /**
     * Paints the background of the track of a scrollbar. The track contains the
     * thumb.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintScrollBarTrackBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of the track of a scrollbar. The track contains the
     * thumb. This implementation invokes the method of the same name without
     * the orientation.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation Orientation of the JScrollBar, one of <code>
     *                    JScrollBar.HORIZONTAL</code> or <code>
     *                    JScrollBar.VERTICAL</code>
     */
    public void paintScrollBarTrackBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        paintBackground(context, g, x, y, w, h, orientation);
    }

    /**
     * Paints the border of the track of a scrollbar. The track contains the
     * thumb.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintScrollBarTrackBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of the track of a scrollbar. The track contains the
     * thumb. This implementation invokes the method of the same name without
     * the orientation.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation Orientation of the JScrollBar, one of <code>
     *                    JScrollBar.HORIZONTAL</code> or <code>
     *                    JScrollBar.VERTICAL</code>
     */
    public void paintScrollBarTrackBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        paintBorder(context, g, x, y, w, h, orientation);
    }

    /**
     * Paints the background of a scroll pane.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintScrollPaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a scroll pane.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintScrollPaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a separator.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintSeparatorBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a separator. This implementation invokes the
     * method of the same name without the orientation.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation One of <code>JSeparator.HORIZONTAL</code> or <code>
     *                    JSeparator.VERTICAL</code>
     */
    public void paintSeparatorBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        paintBackground(context, g, x, y, w, h, orientation);
    }

    /**
     * Paints the border of a separator.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintSeparatorBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a separator. This implementation invokes the method
     * of the same name without the orientation.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation One of <code>JSeparator.HORIZONTAL</code> or <code>
     *                    JSeparator.VERTICAL</code>
     */
    public void paintSeparatorBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        paintBorder(context, g, x, y, w, h, orientation);
    }

    /**
     * Paints the foreground of a separator.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation One of <code>JSeparator.HORIZONTAL</code> or <code>
     *                    JSeparator.VERTICAL</code>
     */
    public void paintSeparatorForeground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        paintForeground(context, g, x, y, w, h, orientation);
    }

    /**
     * Paints the background of a slider.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintSliderBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a slider. This implementation invokes the method
     * of the same name without the orientation.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation One of <code>JSlider.HORIZONTAL</code> or <code>
     *                    JSlider.VERTICAL</code>
     */
    public void paintSliderBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        paintBackground(context, g, x, y, w, h, orientation);
    }

    /**
     * Paints the border of a slider.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintSliderBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a slider. This implementation invokes the method of
     * the same name without the orientation.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation One of <code>JSlider.HORIZONTAL</code> or <code>
     *                    JSlider.VERTICAL</code>
     */
    public void paintSliderBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        paintBorder(context, g, x, y, w, h, orientation);
    }

    /**
     * Paints the background of the thumb of a slider.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation One of <code>JSlider.HORIZONTAL</code> or <code>
     *                    JSlider.VERTICAL</code>
     */
    public void paintSliderThumbBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        if (context.getComponent().getClientProperty("Slider.paintThumbArrowShape") == Boolean.TRUE) {

            if (orientation == JSlider.HORIZONTAL) {
                orientation = JSlider.VERTICAL;
            } else {
                orientation = JSlider.HORIZONTAL;
            }

            paintBackground(context, g, x, y, w, h, orientation);
        } else {
            paintBackground(context, g, x, y, w, h, orientation);
        }
    }

    /**
     * Paints the border of the thumb of a slider.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation One of <code>JSlider.HORIZONTAL</code> or <code>
     *                    JSlider.VERTICAL</code>
     */
    public void paintSliderThumbBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        paintBorder(context, g, x, y, w, h, orientation);
    }

    /**
     * Paints the background of the track of a slider.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintSliderTrackBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of the track of a slider. This implementation
     * invokes the method of the same name without the orientation.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation One of <code>JSlider.HORIZONTAL</code> or <code>
     *                    JSlider.VERTICAL</code>
     */
    public void paintSliderTrackBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        paintBackground(context, g, x, y, w, h, orientation);
    }

    /**
     * Paints the border of the track of a slider.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintSliderTrackBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of the track of a slider. This implementation invokes
     * the method of the same name without the orientation.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation One of <code>JSlider.HORIZONTAL</code> or <code>
     *                    JSlider.VERTICAL</code>
     */
    public void paintSliderTrackBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        paintBorder(context, g, x, y, w, h, orientation);
    }

    /**
     * Paints the background of a spinner.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintSpinnerBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a spinner.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintSpinnerBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of the divider of a split pane.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintSplitPaneDividerBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of the divider of a split pane. This implementation
     * invokes the method of the same name without the orientation.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation One of <code>JSplitPane.HORIZONTAL_SPLIT</code> or
     *                    <code>JSplitPane.VERTICAL_SPLIT</code>
     */
    public void paintSplitPaneDividerBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        if (orientation == JSplitPane.HORIZONTAL_SPLIT) {
            AffineTransform transform = new AffineTransform();

            transform.scale(-1, 1);
            transform.rotate(Math.toRadians(90));
            paintBackground(context, g, y, x, h, w, transform);
        } else {
            paintBackground(context, g, x, y, w, h, null);
        }
    }

    /**
     * Paints the foreground of the divider of a split pane.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation One of <code>JSplitPane.HORIZONTAL_SPLIT</code> or
     *                    <code>JSplitPane.VERTICAL_SPLIT</code>
     */
    public void paintSplitPaneDividerForeground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        paintForeground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the divider, when the user is dragging the divider, of a split
     * pane.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation One of <code>JSplitPane.HORIZONTAL_SPLIT</code> or
     *                    <code>JSplitPane.VERTICAL_SPLIT</code>
     */
    public void paintSplitPaneDragDivider(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a split pane.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintSplitPaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a split pane.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintSplitPaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a tabbed pane.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintTabbedPaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a tabbed pane.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintTabbedPaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of the area behind the tabs of a tabbed pane.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintTabbedPaneTabAreaBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of the area behind the tabs of a tabbed pane. This
     * implementation invokes the method of the same name without the
     * orientation.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation One of <code>JTabbedPane.TOP</code>, <code>
     *                    JTabbedPane.LEFT</code>, <code>
     *                    JTabbedPane.BOTTOM</code> , or <code>
     *                    JTabbedPane.RIGHT</code>
     */
    public void paintTabbedPaneTabAreaBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        if (orientation == JTabbedPane.LEFT) {
            AffineTransform transform = new AffineTransform();

            transform.scale(-1, 1);
            transform.rotate(Math.toRadians(90));
            paintBackground(context, g, y, x, h, w, transform);
        } else if (orientation == JTabbedPane.RIGHT) {
            AffineTransform transform = new AffineTransform();

            transform.rotate(Math.toRadians(90));
            transform.translate(0, -(x + w));
            paintBackground(context, g, y, 0, h, w, transform);
        } else if (orientation == JTabbedPane.BOTTOM) {
            AffineTransform transform = new AffineTransform();

            transform.translate(x, y);
            paintBackground(context, g, 0, 0, w, h, transform);
        } else {
            paintBackground(context, g, x, y, w, h, null);
        }
    }

    /**
     * Paints the border of the area behind the tabs of a tabbed pane.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintTabbedPaneTabAreaBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of the area behind the tabs of a tabbed pane. This
     * implementation invokes the method of the same name without the
     * orientation.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation One of <code>JTabbedPane.TOP</code>, <code>
     *                    JTabbedPane.LEFT</code>, <code>
     *                    JTabbedPane.BOTTOM</code> , or <code>
     *                    JTabbedPane.RIGHT</code>
     */
    public void paintTabbedPaneTabAreaBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a tab of a tabbed pane.
     *
     * @param context  SynthContext identifying the <code>JComponent</code> and
     *                 <code>Region</code> to paint to
     * @param g        <code>Graphics</code> to paint to
     * @param x        X coordinate of the area to paint to
     * @param y        Y coordinate of the area to paint to
     * @param w        Width of the area to paint to
     * @param h        Height of the area to paint to
     * @param tabIndex Index of tab being painted.
     */
    public void paintTabbedPaneTabBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int tabIndex) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a tab of a tabbed pane. This implementation
     * invokes the method of the same name without the orientation.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param tabIndex    Index of tab being painted.
     * @param orientation One of <code>JTabbedPane.TOP</code>, <code>
     *                    JTabbedPane.LEFT</code>, <code>
     *                    JTabbedPane.BOTTOM</code> , or <code>
     *                    JTabbedPane.RIGHT</code>
     */
    public void paintTabbedPaneTabBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int tabIndex, int orientation) {
        if (orientation == JTabbedPane.LEFT) {
            AffineTransform transform = new AffineTransform();

            transform.scale(-1, 1);
            transform.rotate(Math.toRadians(90));
            paintBackground(context, g, y, x, h, w, transform);
        } else if (orientation == JTabbedPane.RIGHT) {
            AffineTransform transform = new AffineTransform();

            transform.rotate(Math.toRadians(90));
            transform.translate(0, -(x + w));
            paintBackground(context, g, y, 0, h, w, transform);
        } else if (orientation == JTabbedPane.BOTTOM) {
            AffineTransform transform = new AffineTransform();

            transform.translate(x, y);
            transform.scale(1, -1);
            transform.translate(0, -h);
            paintBackground(context, g, 0, 0, w, h, transform);
        } else {
            paintBackground(context, g, x, y, w, h, null);
        }
    }

    /**
     * Paints the border of a tab of a tabbed pane.
     *
     * @param context  SynthContext identifying the <code>JComponent</code> and
     *                 <code>Region</code> to paint to
     * @param g        <code>Graphics</code> to paint to
     * @param x        X coordinate of the area to paint to
     * @param y        Y coordinate of the area to paint to
     * @param w        Width of the area to paint to
     * @param h        Height of the area to paint to
     * @param tabIndex Index of tab being painted.
     */
    public void paintTabbedPaneTabBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int tabIndex) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a tab of a tabbed pane. This implementation invokes
     * the method of the same name without the orientation.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param tabIndex    Index of tab being painted.
     * @param orientation One of <code>JTabbedPane.TOP</code>, <code>
     *                    JTabbedPane.LEFT</code>, <code>
     *                    JTabbedPane.BOTTOM</code> , or <code>
     *                    JTabbedPane.RIGHT</code>
     */
    public void paintTabbedPaneTabBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int tabIndex, int orientation) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of the area that contains the content of the
     * selected tab of a tabbed pane.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintTabbedPaneContentBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of the area that contains the content of the selected
     * tab of a tabbed pane.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintTabbedPaneContentBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of the header of a table.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintTableHeaderBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of the header of a table.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintTableHeaderBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a table.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintTableBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a table.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintTableBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a text area.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintTextAreaBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a text area.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintTextAreaBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a text pane.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintTextPaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a text pane.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintTextPaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a text field.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintTextFieldBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        if (context.getComponent().getComponentOrientation().isLeftToRight()) {
            paintBackground(context, g, x, y, w, h, null);
        } else {
            AffineTransform transform = new AffineTransform();

            transform.translate(x, y);
            transform.scale(-1, 1);
            transform.translate(-w, 0);
            paintBackground(context, g, 0, 0, w, h, transform);
        }
    }

    /**
     * Paints the border of a text field.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintTextFieldBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        if (context.getComponent().getComponentOrientation().isLeftToRight()) {
            paintBorder(context, g, x, y, w, h, null);
        } else {
            AffineTransform transform = new AffineTransform();

            transform.translate(x, y);
            transform.scale(-1, 1);
            transform.translate(-w, 0);
            paintBorder(context, g, 0, 0, w, h, transform);
        }
    }

    /**
     * Paints the background of a toggle button.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintToggleButtonBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a toggle button.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintToggleButtonBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a tool bar.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintToolBarBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a tool bar. This implementation invokes the
     * method of the same name without the orientation.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation One of <code>JToolBar.HORIZONTAL</code> or <code>
     *                    JToolBar.VERTICAL</code>
     */
    public void paintToolBarBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        paintBackground(context, g, x, y, w, h, orientation);
    }

    /**
     * Paints the border of a tool bar.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintToolBarBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a tool bar. This implementation invokes the method
     * of the same name without the orientation.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation One of <code>JToolBar.HORIZONTAL</code> or <code>
     *                    JToolBar.VERTICAL</code>
     */
    public void paintToolBarBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        paintBorder(context, g, x, y, w, h, orientation);
    }

    /**
     * Paints the background of the tool bar's content area.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintToolBarContentBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of the tool bar's content area. This implementation
     * invokes the method of the same name without the orientation.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation One of <code>JToolBar.HORIZONTAL</code> or <code>
     *                    JToolBar.VERTICAL</code>
     */
    public void paintToolBarContentBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        paintBackground(context, g, x, y, w, h, orientation);
    }

    /**
     * Paints the border of the content area of a tool bar.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintToolBarContentBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of the content area of a tool bar. This implementation
     * invokes the method of the same name without the orientation.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation One of <code>JToolBar.HORIZONTAL</code> or <code>
     *                    JToolBar.VERTICAL</code>
     */
    public void paintToolBarContentBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        paintBorder(context, g, x, y, w, h, orientation);
    }

    /**
     * Paints the background of the window containing the tool bar when it has
     * been detached from its primary frame.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintToolBarDragWindowBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of the window containing the tool bar when it has
     * been detached from its primary frame. This implementation invokes the
     * method of the same name without the orientation.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation One of <code>JToolBar.HORIZONTAL</code> or <code>
     *                    JToolBar.VERTICAL</code>
     */
    public void paintToolBarDragWindowBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        paintBackground(context, g, x, y, w, h, orientation);
    }

    /**
     * Paints the border of the window containing the tool bar when it has been
     * detached from it's primary frame.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintToolBarDragWindowBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of the window containing the tool bar when it has been
     * detached from it's primary frame. This implementation invokes the method
     * of the same name without the orientation.
     *
     * @param context     SynthContext identifying the <code>JComponent</code>
     *                    and <code>Region</code> to paint to
     * @param g           <code>Graphics</code> to paint to
     * @param x           X coordinate of the area to paint to
     * @param y           Y coordinate of the area to paint to
     * @param w           Width of the area to paint to
     * @param h           Height of the area to paint to
     * @param orientation One of <code>JToolBar.HORIZONTAL</code> or <code>
     *                    JToolBar.VERTICAL</code>
     */
    public void paintToolBarDragWindowBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) {
        paintBorder(context, g, x, y, w, h, orientation);
    }

    /**
     * Paints the background of a tool tip.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintToolTipBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a tool tip.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintToolTipBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of a tree.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintTreeBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a tree.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintTreeBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the background of the row containing a cell in a tree.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintTreeCellBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of the row containing a cell in a tree.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintTreeCellBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }

    /**
     * Paints the focus indicator for a cell in a tree when it has focus.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintTreeCellFocus(SynthContext context, Graphics g, int x, int y, int w, int h) {
        // TODO Paint tree cell focus.
    }

    /**
     * Paints the background of the viewport.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintViewportBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBackground(context, g, x, y, w, h, null);
    }

    /**
     * Paints the border of a viewport.
     *
     * @param context SynthContext identifying the <code>JComponent</code> and
     *                <code>Region</code> to paint to
     * @param g       <code>Graphics</code> to paint to
     * @param x       X coordinate of the area to paint to
     * @param y       Y coordinate of the area to paint to
     * @param w       Width of the area to paint to
     * @param h       Height of the area to paint to
     */
    public void paintViewportBorder(SynthContext context, Graphics g, int x, int y, int w, int h) {
        paintBorder(context, g, x, y, w, h, null);
    }
}
TOP

Related Classes of com.seaglasslookandfeel.SeaGlassSynthPainterImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.