mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-26 14:29:49 +08:00
114 lines
2.6 KiB
Java
114 lines
2.6 KiB
Java
|
/* 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;
|
||
|
}
|
||
|
|