All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.barrybecker4.ui.gradient.RoundGradientContext Maven / Gradle / Ivy

package com.barrybecker4.ui.gradient;

import java.awt.*;
import java.awt.geom.Point2D;
import java.awt.image.ColorModel;
import java.awt.image.Raster;
import java.awt.image.WritableRaster;

/**
 * Source derived from Java 2D graphics book by J. Knudsen.
 */
class RoundGradientContext implements PaintContext {
    protected Point2D point;
    protected Point2D radius;
    protected Color color1, color2;

    /**
     * Constructor
     */
    public RoundGradientContext( Point2D p, Color c1, Point2D r, Color c2 ) {
        point = p;
        color1 = c1;
        radius = r;
        color2 = c2;
    }

    public void dispose() {}

    public ColorModel getColorModel() {
        return ColorModel.getRGBdefault();
    }

    public Raster getRaster( int x, int y, int w, int h ) {
        WritableRaster raster =
                getColorModel().createCompatibleWritableRaster( w, h );

        int[] data = new int[w * h << 2];
        double rad = radius.distance( 0, 0 );
        for ( int j = 0; j < h; j++ ) {
            for ( int i = 0; i < w; i++ ) {
                double distance = point.distance( x + i, y + j );
                double ratio = distance / rad;
                if ( ratio > 1.0 )
                    ratio = 1.0;

                int base = (j * w + i) << 2;
                data[base] = (int) (color1.getRed() + ratio *
                        (color2.getRed() - color1.getRed()));
                data[base + 1] = (int) (color1.getGreen() + ratio *
                        (color2.getGreen() - color1.getGreen()));
                data[base + 2] = (int) (color1.getBlue() + ratio *
                        (color2.getBlue() - color1.getBlue()));
                data[base + 3] = (int) (color1.getAlpha() + ratio *
                        (color2.getAlpha() - color1.getAlpha()));
            }
        }
        raster.setPixels( 0, 0, w, h, data );

        return raster;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy