javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/GC.java
changeset 79 2f468c1958d0
parent 35 85266cc22c7f
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/GC.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/GC.java	Mon Oct 04 00:10:53 2010 +0300
@@ -16,8 +16,10 @@
 import org.eclipse.swt.internal.qt.GCData;
 import org.eclipse.swt.internal.qt.OS;
 import org.eclipse.swt.internal.qt.graphics.GraphicsContext;
+import org.eclipse.swt.internal.qt.graphics.WindowSurface;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Internal_PackageSupport;
 
 /**
  * Class <code>GC</code> is where all of the drawing capabilities that are
@@ -1035,6 +1037,16 @@
                     translatedFlags, isTransparent);
 }
 
+/*
+ * Ends external rendering session.
+ */
+void endExternalRendering() {
+	if (drawable instanceof Control) {
+		Internal_PackageSupport.endWindowSurfaceSession((Control)drawable);
+	}
+}
+
+
 /**
  * Compares the argument to the receiver, and returns true if they represent the
  * <em>same</em> object using a class specific comparison.
@@ -1657,6 +1669,21 @@
     return (data.xorMode == GCData.XOR_MODE_ON);
 }
 
+/*
+ * Getter for the window surface which is target of this 
+ * GC instance.
+ * @return related WindowSurface instance if the target is widget, 
+ *         otherwise null, if e.g. the target is instance of Image.
+ */
+WindowSurface getWindowSurface() {
+	if (drawable instanceof Control) {
+		return Internal_PackageSupport.getWindowsurface(((Control)drawable).getShell());
+	} else {
+		return null;
+	}
+}
+
+
 /**
  * Returns an integer hash code for the receiver. Any two objects that return
  * <code>true</code> when passed to <code>equals</code> must return the same
@@ -2055,6 +2082,24 @@
     return textExtent(string, 0);
 }
 
+/*
+ * Starts external rendering session.
+ * The sessions must be opened before starting to render to the target outside GC.
+ * This is needed in order to open the rendering session to Qt window surface.
+ * Once rendering has completed the session must be closed with 
+ * endExternalRendering() -call, which closes the window surface session.
+ * 
+ * If the target of this GC is not Control, this call has no effect.
+ * 
+ * @return the clip area of the GC in window coordinates
+ */
+Rectangle startExternalRendering() {
+	if (drawable instanceof Control) {
+		return Internal_PackageSupport.startWindowSurfaceSession((Control)drawable, getClipping());
+	}
+	return null;
+}
+
 /**
  * Returns the extent of the given string. Tab expansion and carriage return
  * processing are performed.