Search in sources :

Example 1 with ImageData

use of com.ait.lienzo.client.core.types.ImageData in project lienzo-core by ahome-it.

the class ColorExtractor method extract.

public static final Color extract(final String color) {
    SCRATCH.clear();
    final Context2D context = SCRATCH.getContext();
    context.setFillColor(color);
    context.fillRect(0, 0, 2, 2);
    final ImageData data = context.getImageData(0, 0, 2, 2);
    return new Color(data.getRedAt(1, 1), data.getGreenAt(1, 1), data.getBlueAt(1, 1), ((data.getAlphaAt(1, 1)) / 255.0));
}
Also used : Context2D(com.ait.lienzo.client.core.Context2D) ImageData(com.ait.lienzo.client.core.types.ImageData) Color(com.ait.lienzo.shared.core.types.Color)

Example 2 with ImageData

use of com.ait.lienzo.client.core.types.ImageData in project lienzo-core by ahome-it.

the class WiresConnectorControlImpl method getIndexForSelectedSegment.

public static int getIndexForSelectedSegment(final WiresConnector connector, final int mouseX, final int mouseY, final Point2DArray oldPoints) {
    final NFastStringMap<Integer> colorMap = new NFastStringMap<>();
    final AbstractDirectionalMultiPointShape<?> line = connector.getLine();
    final ScratchPad scratch = line.getScratchPad();
    scratch.clear();
    final PathPartList path = line.getPathPartList();
    int pointsIndex = 1;
    String color = MagnetManager.m_c_rotor.next();
    colorMap.put(color, pointsIndex);
    final Context2D ctx = scratch.getContext();
    final double strokeWidth = line.getStrokeWidth();
    ctx.setStrokeWidth(strokeWidth);
    final Point2D absolutePos = connector.getLine().getComputedLocation();
    final double offsetX = absolutePos.getX();
    final double offsetY = absolutePos.getY();
    Point2D pathStart = new Point2D(offsetX, offsetY);
    Point2D segmentStart = pathStart;
    for (int i = 0; i < path.size(); i++) {
        final PathPartEntryJSO entry = path.get(i);
        NFastDoubleArrayJSO points = entry.getPoints();
        switch(entry.getCommand()) {
            case PathPartEntryJSO.MOVETO_ABSOLUTE:
                {
                    final double x0 = points.get(0) + offsetX;
                    final double y0 = points.get(1) + offsetY;
                    final Point2D m = new Point2D(x0, y0);
                    if (i == 0) {
                        // this is position is needed, if we close the path.
                        pathStart = m;
                    }
                    segmentStart = m;
                    break;
                }
            case PathPartEntryJSO.LINETO_ABSOLUTE:
                {
                    points = entry.getPoints();
                    final double x0 = points.get(0) + offsetX;
                    final double y0 = points.get(1) + offsetY;
                    final Point2D end = new Point2D(x0, y0);
                    if (oldPoints.get(pointsIndex).equals(segmentStart)) {
                        pointsIndex++;
                        color = MagnetManager.m_c_rotor.next();
                        colorMap.put(color, pointsIndex);
                    }
                    ctx.setStrokeColor(color);
                    ctx.beginPath();
                    ctx.moveTo(segmentStart.getX(), segmentStart.getY());
                    ctx.lineTo(x0, y0);
                    ctx.stroke();
                    segmentStart = end;
                    break;
                }
            case PathPartEntryJSO.CLOSE_PATH_PART:
                {
                    final double x0 = pathStart.getX() + offsetX;
                    final double y0 = pathStart.getY() + offsetY;
                    final Point2D end = new Point2D(x0, y0);
                    if (oldPoints.get(pointsIndex).equals(segmentStart)) {
                        pointsIndex++;
                        color = MagnetManager.m_c_rotor.next();
                        colorMap.put(color, pointsIndex);
                    }
                    ctx.setStrokeColor(color);
                    ctx.beginPath();
                    ctx.moveTo(segmentStart.getX(), segmentStart.getY());
                    ctx.lineTo(x0, y0);
                    ctx.stroke();
                    segmentStart = end;
                    break;
                }
            case PathPartEntryJSO.CANVAS_ARCTO_ABSOLUTE:
                {
                    points = entry.getPoints();
                    final double x0 = points.get(0) + offsetX;
                    final double y0 = points.get(1) + offsetY;
                    final Point2D p0 = new Point2D(x0, y0);
                    final double x1 = points.get(2) + offsetX;
                    final double y1 = points.get(3) + offsetY;
                    final double r = points.get(4);
                    final Point2D p1 = new Point2D(x1, y1);
                    final Point2D end = p1;
                    if (p0.equals(oldPoints.get(pointsIndex))) {
                        pointsIndex++;
                        color = MagnetManager.m_c_rotor.next();
                        colorMap.put(color, pointsIndex);
                    }
                    ctx.setStrokeColor(color);
                    ctx.beginPath();
                    ctx.moveTo(segmentStart.getX(), segmentStart.getY());
                    ctx.arcTo(x0, y0, x1, y1, r);
                    ctx.stroke();
                    segmentStart = end;
                    break;
                }
        }
    }
    final BoundingBox box = connector.getLine().getBoundingBox();
    // Keep the ImageData small by clipping just the visible line area
    // But remember the mouse must be offset for this clipped area.
    final int sx = (int) (box.getX() - strokeWidth - offsetX);
    final int sy = (int) (box.getY() - strokeWidth - offsetY);
    final ImageData backing = ctx.getImageData(sx, sy, (int) (box.getWidth() + strokeWidth + strokeWidth), (int) (box.getHeight() + strokeWidth + strokeWidth));
    color = BackingColorMapUtils.findColorAtPoint(backing, mouseX - sx, mouseY - sy);
    return null != color ? colorMap.get(color) : -1;
}
Also used : NFastStringMap(com.ait.tooling.nativetools.client.collection.NFastStringMap) ScratchPad(com.ait.lienzo.client.core.util.ScratchPad) PathPartEntryJSO(com.ait.lienzo.client.core.types.PathPartEntryJSO) NFastDoubleArrayJSO(com.ait.tooling.nativetools.client.collection.NFastDoubleArrayJSO) Context2D(com.ait.lienzo.client.core.Context2D) Point2D(com.ait.lienzo.client.core.types.Point2D) ImageData(com.ait.lienzo.client.core.types.ImageData) BoundingBox(com.ait.lienzo.client.core.types.BoundingBox) PathPartList(com.ait.lienzo.client.core.types.PathPartList)

Example 3 with ImageData

use of com.ait.lienzo.client.core.types.ImageData in project lienzo-core by ahome-it.

the class AbstractConvolveImageDataFilter method filter.

@Override
public ImageData filter(ImageData source, final boolean copy) {
    if (null == source) {
        return null;
    }
    if (copy) {
        source = source.copy();
    }
    if (false == isActive()) {
        return source;
    }
    final CanvasPixelArray data = source.getData();
    if (null == data) {
        return source;
    }
    final FilterConvolveMatrix matrix = getMatrix();
    if (matrix.size() < 1) {
        return source;
    }
    final ImageData result = source.create();
    FilterCommonOps.doFilterConvolve(data, result.getData(), matrix, source.getWidth(), source.getHeight());
    return result;
}
Also used : CanvasPixelArray(com.google.gwt.canvas.dom.client.CanvasPixelArray) ImageData(com.ait.lienzo.client.core.types.ImageData)

Example 4 with ImageData

use of com.ait.lienzo.client.core.types.ImageData in project lienzo-core by ahome-it.

the class AbstractTransformImageDataFilter method filter.

@Override
public ImageData filter(ImageData source, final boolean copy) {
    if (null == source) {
        return null;
    }
    if (copy) {
        source = source.copy();
    }
    if (false == isActive()) {
        return source;
    }
    final CanvasPixelArray data = source.getData();
    if (null == data) {
        return source;
    }
    final FilterTransformFunction transform = getTransform();
    if (null == transform) {
        return source;
    }
    final ImageData result = source.create();
    FilterCommonOps.doFilterTransform(data, result.getData(), transform, source.getWidth(), source.getHeight());
    return result;
}
Also used : CanvasPixelArray(com.google.gwt.canvas.dom.client.CanvasPixelArray) ImageData(com.ait.lienzo.client.core.types.ImageData)

Example 5 with ImageData

use of com.ait.lienzo.client.core.types.ImageData in project lienzo-core by ahome-it.

the class AbstractValueTransformImageDataFilter method filter.

@Override
public ImageData filter(ImageData source, final boolean copy) {
    if (null == source) {
        return null;
    }
    if (copy) {
        source = source.copy();
    }
    if (false == isActive()) {
        return source;
    }
    final CanvasPixelArray data = source.getData();
    if (null == data) {
        return source;
    }
    final ImageData result = source.create();
    FilterCommonOps.doFilterTransform(data, result.getData(), getTransform(getValue()), source.getWidth(), source.getHeight());
    return result;
}
Also used : CanvasPixelArray(com.google.gwt.canvas.dom.client.CanvasPixelArray) ImageData(com.ait.lienzo.client.core.types.ImageData)

Aggregations

ImageData (com.ait.lienzo.client.core.types.ImageData)7 CanvasPixelArray (com.google.gwt.canvas.dom.client.CanvasPixelArray)4 Context2D (com.ait.lienzo.client.core.Context2D)3 ScratchPad (com.ait.lienzo.client.core.util.ScratchPad)2 BoundingBox (com.ait.lienzo.client.core.types.BoundingBox)1 DashArray (com.ait.lienzo.client.core.types.DashArray)1 PathPartEntryJSO (com.ait.lienzo.client.core.types.PathPartEntryJSO)1 PathPartList (com.ait.lienzo.client.core.types.PathPartList)1 Point2D (com.ait.lienzo.client.core.types.Point2D)1 Color (com.ait.lienzo.shared.core.types.Color)1 NFastDoubleArrayJSO (com.ait.tooling.nativetools.client.collection.NFastDoubleArrayJSO)1 NFastStringMap (com.ait.tooling.nativetools.client.collection.NFastStringMap)1 UmbrellaException (com.google.gwt.event.shared.UmbrellaException)1