@Override public Gradient createLinearGradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions) { assert colors.length == positions.length; CanvasGradient gradient = dummyCtx.createLinearGradient(x0, y0, x1, y1); for (int i = 0; i < colors.length; ++i) { gradient.addColorStop(positions[i], cssColorString(colors[i])); } return new HtmlGradient(gradient); }
public HtmlGradient (Context2d ctx, Config config) { if (config instanceof Linear) { Linear cfg = (Linear)config; gradient = ctx.createLinearGradient(cfg.x0, cfg.y0, cfg.x1, cfg.y1); for (int ii = 0; ii < cfg.colors.length; ++ii) { gradient.addColorStop(cfg.positions[ii], HtmlGraphics.cssColorString(cfg.colors[ii])); } } else if (config instanceof Radial) { Radial cfg = (Radial)config; gradient = ctx.createRadialGradient(cfg.x, cfg.y, 0, cfg.x, cfg.y, cfg.r); for (int ii = 0; ii < cfg.colors.length; ++ii) { gradient.addColorStop(cfg.positions[ii], HtmlGraphics.cssColorString(cfg.colors[ii])); } } else throw new IllegalArgumentException("?? " + config); } }
public HtmlGradient (Context2d ctx, Config config) { if (config instanceof Linear) { Linear cfg = (Linear)config; gradient = ctx.createLinearGradient(cfg.x0, cfg.y0, cfg.x1, cfg.y1); for (int ii = 0; ii < cfg.colors.length; ++ii) { gradient.addColorStop(cfg.positions[ii], HtmlGraphics.cssColorString(cfg.colors[ii])); } } else if (config instanceof Radial) { Radial cfg = (Radial)config; gradient = ctx.createRadialGradient(cfg.x, cfg.y, 0, cfg.x, cfg.y, cfg.r); for (int ii = 0; ii < cfg.colors.length; ++ii) { gradient.addColorStop(cfg.positions[ii], HtmlGraphics.cssColorString(cfg.colors[ii])); } } else throw new IllegalArgumentException("?? " + config); } }
protected CanvasGradient makeGradient(Gradient gradient, PreciseRectangle bbox) { // emulating http://www.w3.org/TR/SVG/pservers.html#LinearGradientElementGradientUnitsAttribute = objectBoundingBox double radAngle = Math.toRadians(gradient.getAngle()); double[] vector = {0, 0, Math.cos(radAngle) * bbox.getHeight(), Math.sin(radAngle) * bbox.getWidth()}; @SuppressWarnings("unused") double temp = Math.max(Math.abs(vector[2]), Math.abs(vector[3])); if (vector[2] < 0) { vector[0] = -vector[2]; vector[2] = 0; } if (vector[3] < 0) { vector[1] = -vector[3]; vector[3] = 0; } CanvasGradient g = getContext().createLinearGradient( bbox.getX() + vector[0], bbox.getY() + vector[1], bbox.getX() + vector[2], bbox.getY() + vector[3]); for (Stop s : gradient.getStops()) { g.addColorStop(((double) s.getOffset())/100.0, getColorString(s.getColor(), s.getOpacity())); } return g; } }
private void drawGradient(final boolean drawHandle) { final Context2d ctx = canvas.getContext2d(); // draw gradient final Hsl hsl = new Hsl(hue, 0, 50); for (int x = 0; x <= 179; x++) { hsl.setS(Math.round(x * 100 / 179)); final CanvasGradient grad = ctx.createLinearGradient(x, 0, x, 179); grad.addColorStop(0, "#000000"); //$NON-NLS-1$ grad.addColorStop(0.5, Colors.hsl2html(hsl)); grad.addColorStop(1, "#ffffff"); //$NON-NLS-1$ ctx.setFillStyle(grad); ctx.fillRect(x, 0, 1, 180); } // draw handle if (drawHandle) { ctx.beginPath(); ctx.arc(handleX, handleY, 4, 0, Math.PI * 2, false); ctx.closePath(); ctx.setFillStyle("#ffffff"); //$NON-NLS-1$ ctx.fill(); ctx.beginPath(); ctx.arc(handleX, handleY, 3, 0, Math.PI * 2, false); ctx.closePath(); ctx.setFillStyle("#000000"); //$NON-NLS-1$ ctx.fill(); } }