Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/cairo/org/eclipse/swt/graphics/Transform.java')
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/cairo/org/eclipse/swt/graphics/Transform.java144
1 files changed, 144 insertions, 0 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cairo/org/eclipse/swt/graphics/Transform.java b/bundles/org.eclipse.swt/Eclipse SWT/cairo/org/eclipse/swt/graphics/Transform.java
new file mode 100644
index 0000000000..04b1116a3f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cairo/org/eclipse/swt/graphics/Transform.java
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.graphics;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.cairo.*;
+
+public class Transform {
+ /**
+ * the handle to the OS transform resource
+ * (Warning: This field is platform dependent)
+ */
+ public int /*long*/ handle;
+
+ /**
+ * the device where this font was created
+ */
+ Device device;
+
+public Transform (Device device) {
+ this(device, 1, 0, 0, 1, 0, 0);
+}
+
+public Transform(Device device, float[] elements) {
+ this (device, checkTransform(elements)[0], elements[1], elements[2], elements[3], elements[4], elements[5]);
+}
+
+public Transform (Device device, float m11, float m12, float m21, float m22, float dx, float dy) {
+ if (device == null) device = Device.getDevice();
+ if (device == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+ this.device = device;
+ device.checkCairo();
+ handle = Cairo.cairo_matrix_create();
+ if (handle == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+ Cairo.cairo_matrix_set_affine(handle, m11, m12, m21, m22, dx, dy);
+ if (device.tracking) device.new_Object(this);
+}
+
+static float[] checkTransform(float[] elements) {
+ if (elements == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+ if (elements.length < 6) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+ return elements;
+}
+
+public void dispose() {
+ if (handle == 0) return;
+ if (device.isDisposed()) return;
+ Cairo.cairo_matrix_destroy(handle);
+ handle = 0;
+ if (device.tracking) device.dispose_Object(this);
+ device = null;
+}
+
+public void getElements(float[] elements) {
+ if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+ if (elements == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+ if (elements.length < 6) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+ double[] a = new double[1], b = new double[1], c = new double[1], d = new double[1];
+ double[] tx = new double[1], ty = new double[1];
+ Cairo.cairo_matrix_get_affine(handle, a, b, c, d, tx, ty);
+ elements[0] = (float)a[0];
+ elements[1] = (float)b[0];
+ elements[2] = (float)c[0];
+ elements[3] = (float)d[0];
+ elements[4] = (float)tx[0];
+ elements[5] = (float)ty[0];
+}
+
+public void invert() {
+ if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+ if (Cairo.cairo_matrix_invert(handle) != 0) {
+ SWT.error(SWT.ERROR_CANNOT_INVERT_MATRIX);
+ }
+}
+
+public boolean isDisposed() {
+ return handle == 0;
+}
+
+public boolean isIdentity() {
+ if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+ float[] m = new float[6];
+ getElements(m);
+ return m[0] == 1 && m[1] == 0 && m[2] == 0 && m[3] == 1 && m[4] == 0 && m[5] == 0;
+}
+
+public void multiply(Transform matrix) {
+ if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+ if (matrix == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+ if (matrix.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+ Cairo.cairo_matrix_multiply(handle, matrix.handle, handle);
+}
+
+public void rotate(float angle) {
+ if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+ Cairo.cairo_matrix_rotate(handle, angle * (float)Compatibility.PI / 180);
+}
+
+public void scale(float scaleX, float scaleY) {
+ if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+ Cairo.cairo_matrix_scale(handle, scaleX, scaleY);
+}
+
+public void setElements(float m11, float m12, float m21, float m22, float dx, float dy) {
+ if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+ Cairo.cairo_matrix_set_affine(handle, m11, m12, m21, m22, dx, dy);
+}
+
+public void transform(float[] pointArray) {
+ if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+ if (pointArray == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+ double[] dx = new double[1], dy = new double[1];
+ int length = pointArray.length / 2;
+ for (int i = 0, j = 0; i < length; i++, j += 2) {
+ dx[0] = pointArray[j];
+ dy[0] = pointArray[j + 1];
+ Cairo.cairo_matrix_transform_point(handle, dx, dy);
+ pointArray[j] = (float)dx[0];
+ pointArray[j + 1] = (float)dy[0];
+ }
+}
+
+public void translate(float offsetX, float offsetY) {
+ if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+ Cairo.cairo_matrix_translate(handle, offsetX, offsetY);
+}
+
+public String toString() {
+ if (isDisposed()) return "Transform {*DISPOSED*}";
+ float[] elements = new float[6];
+ getElements(elements);
+ return "Transform {" + elements [0] + "," + elements [1] + "," +elements [2] + "," +elements [3] + "," +elements [4] + "," +elements [5] + "}";
+}
+
+}

Back to the top