use of com.ait.lienzo.client.core.Context2D 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));
}
use of com.ait.lienzo.client.core.Context2D 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;
}
use of com.ait.lienzo.client.core.Context2D in project lienzo-core by ahome-it.
the class Layer method getCanvasElement.
/**
* Return the {@link CanvasElement}.
*
* @return CanvasElement
*/
public CanvasElement getCanvasElement() {
if (LienzoCore.IS_CANVAS_SUPPORTED) {
if (null == m_element) {
m_element = Document.get().createCanvasElement();
m_element.getStyle().setPosition(Position.ABSOLUTE);
m_element.getStyle().setDisplay(Display.INLINE_BLOCK);
}
if (null == m_context) {
m_context = new Context2D(m_element);
}
}
return m_element;
}
use of com.ait.lienzo.client.core.Context2D in project lienzo-core by ahome-it.
the class Scene method toDataURL.
public final String toDataURL(final DataURLType mimetype) {
if (LienzoCore.IS_CANVAS_SUPPORTED) {
final ScratchPad scratch = new ScratchPad(getWidth(), getHeight());
final Context2D context = scratch.getContext();
final NFastArrayList<Layer> layers = getChildNodes();
BoundingBox bbox = getStorageBounds();
if (null == bbox) {
final Viewport viewport = getViewport();
if (null != viewport) {
bbox = viewport.getStorageBounds();
}
}
if (null != layers) {
final int size = layers.size();
final IPathClipper clip = getPathClipper();
if ((null != clip) && (clip.isActive())) {
context.save();
clip.clip(context);
}
for (int i = size - 1; i >= 0; i--) {
final Layer layer = layers.get(i);
if ((null != layer) && (layer.isVisible())) {
layer.drawWithTransforms(context, 1, bbox);
}
}
if ((null != clip) && (clip.isActive())) {
context.restore();
}
}
return scratch.toDataURL(mimetype, 1.0);
} else {
return "data:,";
}
}
use of com.ait.lienzo.client.core.Context2D in project lienzo-core by ahome-it.
the class Scene method toDataURL.
// package protected
final String toDataURL(final DataURLType mimetype, final Layer background) {
if (LienzoCore.IS_CANVAS_SUPPORTED) {
final ScratchPad scratch = new ScratchPad(getWidth(), getHeight());
final Context2D context = scratch.getContext();
final NFastArrayList<Layer> layers = getChildNodes();
BoundingBox bbox = getStorageBounds();
if (null == bbox) {
final Viewport viewport = getViewport();
if (null != viewport) {
bbox = viewport.getStorageBounds();
}
}
if (null != layers) {
final int size = layers.size();
if (null != background) {
background.drawWithTransforms(context, 1, bbox);
}
final IPathClipper clip = getPathClipper();
if ((null != clip) && (clip.isActive())) {
context.save();
clip.clip(context);
}
for (int i = size - 1; i >= 0; i--) {
final Layer layer = layers.get(i);
if ((null != layer) && (layer.isVisible())) {
layer.drawWithTransforms(context, 1, bbox);
}
}
if ((null != clip) && (clip.isActive())) {
context.restore();
}
}
return scratch.toDataURL(mimetype, 1.0);
} else {
return "data:,";
}
}
Aggregations