summaryrefslogtreecommitdiffstats
path: root/libjava/gnu/gcj/xlib/GC.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/gnu/gcj/xlib/GC.java')
-rw-r--r--libjava/gnu/gcj/xlib/GC.java113
1 files changed, 113 insertions, 0 deletions
diff --git a/libjava/gnu/gcj/xlib/GC.java b/libjava/gnu/gcj/xlib/GC.java
new file mode 100644
index 00000000000..6b33715cf6c
--- /dev/null
+++ b/libjava/gnu/gcj/xlib/GC.java
@@ -0,0 +1,113 @@
+/* Copyright (C) 2000 Free Software Foundation
+
+ This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
+details. */
+
+package gnu.gcj.xlib;
+
+import gnu.gcj.RawData;
+import java.awt.Rectangle;
+
+/**
+ * An X11 graphics context. Unlike a traditional X11 graphics
+ * context, the target drawable is part of the GC state.
+ *
+ * Implementation notes: There is no need to do coalescing of changes
+ * since Xlib will do this for us. The implementation relies on the
+ * Xlib GC cache and will not try to be clever.
+ *
+ * @author Rolf W. Rasmussen <rolfwr@ii.uib.no>
+ */
+public class GC implements Cloneable
+{
+
+ public GC(Drawable target)
+ {
+ this.target = target;
+ initStructure(null);
+ }
+
+ public Object clone()
+ {
+ GC gcClone = (GC) super.clone();
+ gcClone.structure = null;
+ gcClone.initStructure(this);
+ gcClone.updateClip();
+ return gcClone;
+ }
+
+ private native void initStructure(GC copyFrom);
+
+ public GC create()
+ {
+ return (GC) clone();
+ }
+
+ public void finalize()
+ {
+ disposeImpl();
+ }
+
+ public void dispose()
+ {
+ disposeImpl();
+ }
+
+ public synchronized native void disposeImpl();
+
+ public native void setForeground(long pixel);
+ public native void setFont(gnu.gcj.xlib.Font font);
+
+ /**
+ * Set the clip region for the graphics operations performed by the
+ * GC.
+ *
+ * This is one of the few costly operations of this class. It is
+ * suggested that the clip is only set or changed if really
+ * necessary. Higher level APIs can make such optimizations
+ * transparent.
+ *
+ * @param rectangles the union of these rectangles describe the clip
+ * region.
+ */
+ public void setClipRectangles(Rectangle[] rectangles)
+ {
+ clip = new Clip(rectangles);
+ updateClip();
+ }
+
+ public native void drawString(String text, int x, int y);
+ public native void drawLine(int x1, int y1, int x2, int y2);
+ public native void drawRectangle(int x, int y, int w, int h);
+
+ public native void fillRectangle(int x, int y, int w, int h);
+
+ /**
+ *
+ * Clear area using the background pixel or pixmap of the drawable.
+ * Note that this operation does not adhere to the current clip.
+ */
+ public native void clearArea(int x, int y, int w, int h,
+ boolean exposures);
+
+
+ public native void putImage(XImage image,
+ int srcX, int srcY,
+ int destX, int destY,
+ int width, int height);
+
+ public Drawable getDrawable()
+ {
+ return target;
+ }
+
+ private native void updateClip();
+
+ private Drawable target;
+ private RawData structure;
+ private Clip clip;
+}
+
OpenPOWER on IntegriCloud