mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-27 06:00:22 +00:00
8a836c07cf
Sat, 6 May 2000 13:31:34 +0200 Paolo Molaro <lupus@linuxcare.com> * gdk/nanox/*: nano-X port work in progress. * gdk/simple.c: simple test for Gdk. * README.nanox: notes about the port: read this first! * gtk/gtk{dnd,plug,selection,window}.c: minimal changes to make gtk compile with nano-X.
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);
|
|
}
|
|
|