forked from AuroraMiddleware/gtk
272 lines
7.3 KiB
C
272 lines
7.3 KiB
C
|
#include "gdk.h"
|
||
|
#include "gdkprivate-nanox.h"
|
||
|
|
||
|
static void gdk_nanox_drawable_destroy (GdkDrawable *drawable);
|
||
|
|
||
|
static void gdk_nanox_draw_rectangle (GdkDrawable *drawable,
|
||
|
GdkGC *gc,
|
||
|
gint filled,
|
||
|
gint x,
|
||
|
gint y,
|
||
|
gint width,
|
||
|
gint height);
|
||
|
static void gdk_nanox_draw_arc (GdkDrawable *drawable,
|
||
|
GdkGC *gc,
|
||
|
gint filled,
|
||
|
gint x,
|
||
|
gint y,
|
||
|
gint width,
|
||
|
gint height,
|
||
|
gint angle1,
|
||
|
gint angle2);
|
||
|
static void gdk_nanox_draw_polygon (GdkDrawable *drawable,
|
||
|
GdkGC *gc,
|
||
|
gint filled,
|
||
|
GdkPoint *points,
|
||
|
gint npoints);
|
||
|
static void gdk_nanox_draw_text (GdkDrawable *drawable,
|
||
|
GdkFont *font,
|
||
|
GdkGC *gc,
|
||
|
gint x,
|
||
|
gint y,
|
||
|
const gchar *text,
|
||
|
gint text_length);
|
||
|
static void gdk_nanox_draw_text_wc (GdkDrawable *drawable,
|
||
|
GdkFont *font,
|
||
|
GdkGC *gc,
|
||
|
gint x,
|
||
|
gint y,
|
||
|
const GdkWChar *text,
|
||
|
gint text_length);
|
||
|
static void gdk_nanox_draw_drawable (GdkDrawable *drawable,
|
||
|
GdkGC *gc,
|
||
|
GdkPixmap *src,
|
||
|
gint xsrc,
|
||
|
gint ysrc,
|
||
|
gint xdest,
|
||
|
gint ydest,
|
||
|
gint width,
|
||
|
gint height);
|
||
|
static void gdk_nanox_draw_points (GdkDrawable *drawable,
|
||
|
GdkGC *gc,
|
||
|
GdkPoint *points,
|
||
|
gint npoints);
|
||
|
static void gdk_nanox_draw_segments (GdkDrawable *drawable,
|
||
|
GdkGC *gc,
|
||
|
GdkSegment *segs,
|
||
|
gint nsegs);
|
||
|
static void gdk_nanox_draw_lines (GdkDrawable *drawable,
|
||
|
GdkGC *gc,
|
||
|
GdkPoint *points,
|
||
|
gint npoints);
|
||
|
|
||
|
GdkDrawableClass _gdk_nanox_drawable_class = {
|
||
|
gdk_nanox_drawable_destroy,
|
||
|
_gdk_nanox_gc_new,
|
||
|
gdk_nanox_draw_rectangle,
|
||
|
gdk_nanox_draw_arc,
|
||
|
gdk_nanox_draw_polygon,
|
||
|
gdk_nanox_draw_text,
|
||
|
gdk_nanox_draw_text_wc,
|
||
|
gdk_nanox_draw_drawable,
|
||
|
gdk_nanox_draw_points,
|
||
|
gdk_nanox_draw_segments,
|
||
|
gdk_nanox_draw_lines
|
||
|
};
|
||
|
|
||
|
GdkColormap*
|
||
|
gdk_drawable_get_colormap (GdkDrawable *drawable)
|
||
|
{
|
||
|
GdkDrawablePrivate *drawable_private;
|
||
|
|
||
|
g_return_val_if_fail (drawable != NULL, NULL);
|
||
|
drawable_private = (GdkDrawablePrivate*) drawable;
|
||
|
|
||
|
if (!GDK_DRAWABLE_DESTROYED (drawable))
|
||
|
{
|
||
|
if (drawable_private->colormap == NULL &&
|
||
|
GDK_IS_WINDOW (drawable))
|
||
|
{
|
||
|
/*XGetWindowAttributes (GDK_DRAWABLE_XDISPLAY (drawable),
|
||
|
GDK_DRAWABLE_XID (drawable),
|
||
|
&window_attributes);
|
||
|
drawable_private->colormap = gdk_colormap_lookup (window_attributes.colormap);*/
|
||
|
}
|
||
|
|
||
|
return drawable_private->colormap;
|
||
|
}
|
||
|
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
void
|
||
|
gdk_drawable_set_colormap (GdkDrawable *drawable,
|
||
|
GdkColormap *colormap)
|
||
|
{
|
||
|
GdkDrawablePrivate *drawable_private;
|
||
|
GdkColormapPrivateX *colormap_private;
|
||
|
|
||
|
g_return_if_fail (drawable != NULL);
|
||
|
g_return_if_fail (colormap != NULL);
|
||
|
|
||
|
drawable_private = (GdkDrawablePrivate *)drawable;
|
||
|
colormap_private = (GdkColormapPrivateX *)colormap;
|
||
|
|
||
|
if (!GDK_DRAWABLE_DESTROYED (drawable))
|
||
|
{
|
||
|
if (GDK_IS_WINDOW (drawable))
|
||
|
{
|
||
|
g_return_if_fail (colormap_private->base.visual !=
|
||
|
((GdkColormapPrivate *)(drawable_private->colormap))->visual);
|
||
|
|
||
|
}
|
||
|
|
||
|
if (drawable_private->colormap)
|
||
|
gdk_colormap_unref (drawable_private->colormap);
|
||
|
drawable_private->colormap = colormap;
|
||
|
gdk_colormap_ref (drawable_private->colormap);
|
||
|
|
||
|
if (GDK_IS_WINDOW (drawable) &&
|
||
|
drawable_private->window_type != GDK_WINDOW_TOPLEVEL)
|
||
|
/*gdk_window_add_colormap_windows (drawable);*/;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
gdk_nanox_drawable_destroy (GdkDrawable *drawable)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
gdk_nanox_draw_rectangle (GdkDrawable *drawable,
|
||
|
GdkGC *gc,
|
||
|
gint filled,
|
||
|
gint x,
|
||
|
gint y,
|
||
|
gint width,
|
||
|
gint height)
|
||
|
{
|
||
|
if (filled)
|
||
|
GrFillRect (GDK_DRAWABLE_XID (drawable), GDK_GC_XGC (gc), x, y, width, height);
|
||
|
else
|
||
|
GrRect (GDK_DRAWABLE_XID (drawable), GDK_GC_XGC (gc), x, y, width, height);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
gdk_nanox_draw_arc (GdkDrawable *drawable,
|
||
|
GdkGC *gc,
|
||
|
gint filled,
|
||
|
gint x,
|
||
|
gint y,
|
||
|
gint width,
|
||
|
gint height,
|
||
|
gint angle1,
|
||
|
gint angle2)
|
||
|
{
|
||
|
/* this is not an arc, obviously */
|
||
|
if (filled)
|
||
|
GrFillEllipse (GDK_DRAWABLE_XID (drawable), GDK_GC_XGC (gc), x, y, width/2, height/2);
|
||
|
else
|
||
|
GrEllipse (GDK_DRAWABLE_XID (drawable), GDK_GC_XGC (gc), x, y, width/2, height/2);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
gdk_nanox_draw_polygon (GdkDrawable *drawable,
|
||
|
GdkGC *gc,
|
||
|
gint filled,
|
||
|
GdkPoint *points,
|
||
|
gint npoints)
|
||
|
{
|
||
|
GR_POINT *new_points = g_new(GR_POINT, npoints);
|
||
|
int i;
|
||
|
for (i=0; i < npoints;++i) {
|
||
|
new_points[i].x = points[i].x;
|
||
|
new_points[i].y = points[i].y;
|
||
|
}
|
||
|
if (filled)
|
||
|
{
|
||
|
GrFillPoly (GDK_DRAWABLE_XID (drawable), GDK_GC_XGC (gc), npoints, new_points);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
GrPoly (GDK_DRAWABLE_XID (drawable), GDK_GC_XGC (gc), npoints, new_points);
|
||
|
}
|
||
|
g_free(new_points);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
gdk_nanox_draw_text (GdkDrawable *drawable,
|
||
|
GdkFont *font,
|
||
|
GdkGC *gc,
|
||
|
gint x,
|
||
|
gint y,
|
||
|
const gchar *text,
|
||
|
gint text_length)
|
||
|
{
|
||
|
GrSetGCFont(GDK_GC_XGC(gc), GDK_FONT_XFONT(font));
|
||
|
GrText (GDK_DRAWABLE_XID (drawable), GDK_GC_XGC (gc), x, y, text, text_length, TF_UTF8|TF_BASELINE);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
gdk_nanox_draw_text_wc (GdkDrawable *drawable,
|
||
|
GdkFont *font,
|
||
|
GdkGC *gc,
|
||
|
gint x,
|
||
|
gint y,
|
||
|
const GdkWChar *text,
|
||
|
gint text_length)
|
||
|
{
|
||
|
GrSetGCFont(GDK_GC_XGC(gc), GDK_FONT_XFONT(font));
|
||
|
GrText (GDK_DRAWABLE_XID (drawable), GDK_GC_XGC (gc), x, y, text, text_length, TF_UC32|TF_BASELINE);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
gdk_nanox_draw_drawable (GdkDrawable *drawable,
|
||
|
GdkGC *gc,
|
||
|
GdkPixmap *src,
|
||
|
gint xsrc,
|
||
|
gint ysrc,
|
||
|
gint xdest,
|
||
|
gint ydest,
|
||
|
gint width,
|
||
|
gint height)
|
||
|
{
|
||
|
GrCopyArea(GDK_DRAWABLE_XID(drawable), GDK_GC_XGC(gc), xdest, ydest,
|
||
|
width, height, GDK_DRAWABLE_XID(src), xsrc, ysrc, 0);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
gdk_nanox_draw_points (GdkDrawable *drawable,
|
||
|
GdkGC *gc,
|
||
|
GdkPoint *points,
|
||
|
gint npoints)
|
||
|
{
|
||
|
int i;
|
||
|
for (i=0; i < npoints; ++i)
|
||
|
GrPoint(GDK_DRAWABLE_XID(drawable), GDK_GC_XGC(gc), points[i].x, points[i].y);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
gdk_nanox_draw_segments (GdkDrawable *drawable,
|
||
|
GdkGC *gc,
|
||
|
GdkSegment *segs,
|
||
|
gint nsegs)
|
||
|
{
|
||
|
int i;
|
||
|
for (i=0; i < nsegs; ++i)
|
||
|
GrLine(GDK_DRAWABLE_XID(drawable), GDK_GC_XGC(gc), segs[i].x1, segs[i].y1, segs[i].x2, segs[i].y2);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
gdk_nanox_draw_lines (GdkDrawable *drawable,
|
||
|
GdkGC *gc,
|
||
|
GdkPoint *points,
|
||
|
gint npoints)
|
||
|
{
|
||
|
int i;
|
||
|
for (i=0; i < npoints-1; ++i)
|
||
|
GrLine(GDK_DRAWABLE_XID(drawable), GDK_GC_XGC(gc), points[i].x, points[i].y, points[i+1].x, points[i+1].y);
|
||
|
}
|
||
|
|