summaryrefslogtreecommitdiff
path: root/src/cd_active.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cd_active.c')
-rw-r--r--src/cd_active.c1007
1 files changed, 1007 insertions, 0 deletions
diff --git a/src/cd_active.c b/src/cd_active.c
new file mode 100644
index 0000000..0ae489a
--- /dev/null
+++ b/src/cd_active.c
@@ -0,0 +1,1007 @@
+/** \file
+ * \brief OLD API that needs the cdActivate call
+ *
+ * See Copyright Notice in cd.h
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <stdarg.h>
+
+#ifdef CD_NO_OLD_INTERFACE
+#undef CD_NO_OLD_INTERFACE
+#endif
+
+#include "cd.h"
+#include "wd.h"
+
+static cdCanvas *active_canvas = NULL;
+
+int cdActivate(cdCanvas *canvas)
+{
+ /* if is the active canvas, just update canvas state */
+ if (active_canvas && canvas == active_canvas)
+ {
+ if (cdCanvasActivate(canvas) == CD_ERROR)
+ {
+ active_canvas = NULL;
+ return CD_ERROR;
+ }
+
+ return CD_OK;
+ }
+
+ /* if exists an active canvas, deactivate it */
+ if (active_canvas)
+ cdCanvasDeactivate(active_canvas);
+
+ /* allow to active a NULL canvas, the user may restore a previous canvas that was NULL */
+ if (canvas == NULL)
+ {
+ active_canvas = NULL;
+ return CD_ERROR;
+ }
+
+ /* do the activation */
+ active_canvas = canvas;
+
+ if (cdCanvasActivate(canvas) == CD_ERROR)
+ {
+ active_canvas = NULL;
+ return CD_ERROR;
+ }
+
+ return CD_OK;
+}
+
+cdCanvas* cdActiveCanvas(void)
+{
+ return active_canvas;
+}
+
+int cdSimulate(int mode)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return cdCanvasSimulate(active_canvas, mode);
+}
+
+cdState* cdSaveState(void)
+{
+ assert(active_canvas);
+ if (!active_canvas) return NULL;
+ return cdCanvasSaveState(active_canvas);
+}
+
+void cdRestoreState(cdState* state)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasRestoreState(active_canvas, state);
+}
+
+void cdFlush(void)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasFlush(active_canvas);
+}
+
+void cdClear(void)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasClear(active_canvas);
+}
+
+void cdSetAttribute(const char* name, char *data)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasSetAttribute(active_canvas, name, data);
+}
+
+void cdSetfAttribute(const char* name, const char* format, ...)
+{
+ char data[1024];
+ va_list arglist;
+
+ assert(active_canvas);
+ if (!active_canvas) return;
+
+ va_start(arglist, format);
+ vsprintf(data, format, arglist);
+
+ cdCanvasSetAttribute(active_canvas, name, data);
+}
+
+char* cdGetAttribute(const char* name)
+{
+ assert(active_canvas);
+ if (!active_canvas) return NULL;
+ return cdCanvasGetAttribute(active_canvas, name);
+}
+
+int cdPlay(cdContext* context, int xmin, int xmax, int ymin, int ymax, void *data)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return cdCanvasPlay(active_canvas, context, xmin, xmax, ymin, ymax, data);
+}
+
+int cdClip(int mode)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return cdCanvasClip(active_canvas, mode);
+}
+
+void cdClipArea(int xmin, int xmax, int ymin, int ymax)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasClipArea(active_canvas, xmin, xmax, ymin, ymax);
+}
+
+int cdGetClipArea(int *xmin, int *xmax, int *ymin, int *ymax)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return cdCanvasGetClipArea(active_canvas, xmin, xmax, ymin, ymax);
+}
+
+int cdPointInRegion(int x, int y)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return cdCanvasIsPointInRegion(active_canvas, x, y);
+}
+
+void cdOffsetRegion(int x, int y)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasOffsetRegion(active_canvas, x, y);
+}
+
+void cdRegionBox(int *xmin, int *xmax, int *ymin, int *ymax)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasGetRegionBox(active_canvas, xmin, xmax, ymin, ymax);
+}
+
+void cdGetCanvasSize(int *width, int *height, double *width_mm, double *height_mm)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasGetSize(active_canvas, width, height, width_mm, height_mm);
+}
+
+void cdMM2Pixel(double mm_dx, double mm_dy, int *dx, int *dy)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasMM2Pixel(active_canvas, mm_dx, mm_dy, dx, dy);
+}
+
+void cdPixel2MM(int dx, int dy, double *mm_dx, double *mm_dy)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasPixel2MM(active_canvas, dx, dy, mm_dx, mm_dy);
+}
+
+void cdOrigin(int x, int y)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasOrigin(active_canvas, x, y);
+}
+
+int cdUpdateYAxis(int *y)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return cdCanvasUpdateYAxis(active_canvas, y);
+}
+
+void cdPixel(int x, int y, long color)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasPixel(active_canvas, x, y, color);
+}
+
+void cdMark(int x, int y)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasMark(active_canvas, x, y);
+}
+
+void cdLine(int x1, int y1, int x2, int y2)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasLine(active_canvas, x1, y1, x2, y2);
+}
+
+void cdBegin(int mode)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasBegin(active_canvas, mode);
+}
+
+void cdVertex(int x, int y)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasVertex(active_canvas, x, y);
+}
+
+void cdEnd(void)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasEnd(active_canvas);
+}
+
+void cdRect(int xmin, int xmax, int ymin, int ymax)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasRect(active_canvas, xmin, xmax, ymin, ymax);
+}
+
+void cdBox(int xmin, int xmax, int ymin, int ymax)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasBox(active_canvas, xmin, xmax, ymin, ymax);
+}
+
+void cdArc(int xc, int yc, int w, int h, double angle1, double angle2)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasArc(active_canvas, xc, yc, w, h, angle1, angle2);
+}
+
+void cdSector(int xc, int yc, int w, int h, double angle1, double angle2)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasSector(active_canvas, xc, yc, w, h, angle1, angle2);
+}
+
+void cdChord(int xc, int yc, int w, int h, double angle1, double angle2)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasChord(active_canvas, xc, yc, w, h, angle1, angle2);
+}
+
+void cdText(int x, int y, const char *s)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasText(active_canvas, x, y, s);
+}
+
+int cdBackOpacity(int opacity)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return cdCanvasBackOpacity(active_canvas, opacity);
+}
+
+int cdWriteMode(int mode)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return cdCanvasWriteMode(active_canvas, mode);
+}
+
+int cdLineStyle(int style)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return cdCanvasLineStyle(active_canvas, style);
+}
+
+int cdLineJoin(int join)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return cdCanvasLineJoin(active_canvas, join);
+}
+
+int cdLineCap(int cap)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return cdCanvasLineCap(active_canvas, cap);
+}
+
+int cdRegionCombineMode(int mode)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return cdCanvasRegionCombineMode(active_canvas, mode);
+}
+
+void cdLineStyleDashes(const int* dashes, int count)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasLineStyleDashes(active_canvas, dashes, count);
+}
+
+int cdLineWidth(int width)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return cdCanvasLineWidth(active_canvas, width);
+}
+
+int cdFillMode(int mode)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return cdCanvasFillMode(active_canvas, mode);
+}
+
+int cdInteriorStyle (int style)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return cdCanvasInteriorStyle(active_canvas, style);
+}
+
+int cdHatch(int style)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return cdCanvasHatch(active_canvas, style);
+}
+
+void cdStipple(int w, int h, const unsigned char *stipple)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasStipple(active_canvas, w, h, stipple);
+}
+
+unsigned char* cdGetStipple(int *w, int *h)
+{
+ assert(active_canvas);
+ if (!active_canvas) return NULL;
+ return cdCanvasGetStipple(active_canvas, w, h);
+}
+
+void cdPattern(int w, int h, const long *pattern)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasPattern(active_canvas, w, h, pattern);
+}
+
+long* cdGetPattern(int* w, int* h)
+{
+ assert(active_canvas);
+ if (!active_canvas) return NULL;
+ return cdCanvasGetPattern(active_canvas, w, h);
+}
+
+void cdFont(int type_face, int style, int size)
+{
+ static const char * family[] =
+ {
+ "System", /* CD_SYSTEM */
+ "Courier", /* CD_COURIER */
+ "Times", /* CD_TIMES_ROMAN */
+ "Helvetica" /* CD_HELVETICA */
+ };
+
+ assert(active_canvas);
+ assert(type_face>=CD_SYSTEM && type_face<=CD_NATIVE);
+ if (!active_canvas) return;
+ if (type_face<CD_SYSTEM || type_face>CD_NATIVE) return;
+
+ if (type_face == CD_NATIVE)
+ {
+ char* native_font = cdCanvasNativeFont(active_canvas, NULL);
+ cdCanvasNativeFont(active_canvas, native_font);
+ }
+ else
+ cdCanvasFont(active_canvas, family[type_face], style, size);
+}
+
+void cdGetFont(int *type_face, int *style, int *size)
+{
+ char family[1024];
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasGetFont(active_canvas, family, style, size);
+
+ if (type_face)
+ {
+ if (strcmp(family, "System")==0)
+ *type_face = CD_SYSTEM;
+ else if (strcmp(family, "Courier")==0)
+ *type_face = CD_COURIER;
+ else if (strcmp(family, "Times")==0)
+ *type_face = CD_TIMES_ROMAN;
+ else if (strcmp(family, "Helvetica")==0)
+ *type_face = CD_HELVETICA;
+ else
+ *type_face = CD_NATIVE;
+ }
+}
+
+char* cdNativeFont(const char* font)
+{
+ assert(active_canvas);
+ if (!active_canvas) return NULL;
+ return cdCanvasNativeFont(active_canvas, font);
+}
+
+int cdTextAlignment(int alignment)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return cdCanvasTextAlignment(active_canvas, alignment);
+}
+
+double cdTextOrientation(double angle)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return cdCanvasTextOrientation(active_canvas, angle);
+}
+
+int cdMarkType(int type)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return cdCanvasMarkType(active_canvas, type);
+}
+
+int cdMarkSize(int size)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return cdCanvasMarkSize(active_canvas, size);
+}
+
+long cdBackground(long color)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return cdCanvasBackground(active_canvas, color);
+}
+
+long cdForeground(long color)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return cdCanvasForeground(active_canvas, color);
+}
+
+void cdFontDim(int *max_width, int *height, int *ascent, int *descent)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasGetFontDim(active_canvas, max_width, height, ascent, descent);
+}
+
+void cdTextSize(const char *s, int *width, int *height)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasGetTextSize(active_canvas, s, width, height);
+}
+
+void cdTextBounds(int x, int y, const char *s, int *rect)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasGetTextBounds(active_canvas, x, y, s, rect);
+}
+
+void cdTextBox(int x, int y, const char *s, int *xmin, int *xmax, int *ymin, int *ymax)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasGetTextBox(active_canvas, x, y, s, xmin, xmax, ymin, ymax);
+}
+
+int cdGetColorPlanes(void)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return cdCanvasGetColorPlanes(active_canvas);
+}
+
+void cdPalette(int n, const long *palette, int mode)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasPalette(active_canvas, n, palette, mode);
+}
+
+void cdGetImageRGB(unsigned char *r, unsigned char *g, unsigned char *b, int x, int y, int w, int h)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasGetImageRGB(active_canvas, r, g, b, x, y, w, h);
+}
+
+void cdPutImageRectRGB(int iw, int ih, const unsigned char *r, const unsigned char *g, const unsigned char *b, int x, int y, int w, int h, int xmin, int xmax, int ymin, int ymax)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasPutImageRectRGB(active_canvas, iw, ih, r, g, b, x, y, w, h, xmin, xmax, ymin, ymax);
+}
+
+void cdPutImageRectRGBA(int iw, int ih, const unsigned char *r, const unsigned char *g, const unsigned char *b, const unsigned char *a, int x, int y, int w, int h, int xmin, int xmax, int ymin, int ymax)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasPutImageRectRGBA(active_canvas, iw, ih, r, g, b, a, x, y, w, h, xmin, xmax, ymin, ymax);
+}
+
+void cdPutImageRectMap(int iw, int ih, const unsigned char *index, const long *colors, int x, int y, int w, int h, int xmin, int xmax, int ymin, int ymax)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasPutImageRectMap(active_canvas, iw, ih, index, colors, x, y, w, h, xmin, xmax, ymin, ymax);
+}
+
+cdImage* cdCreateImage(int w, int h)
+{
+ assert(active_canvas);
+ if (!active_canvas) return NULL;
+ return cdCanvasCreateImage(active_canvas, w, h);
+}
+
+void cdGetImage(cdImage* image, int x, int y)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasGetImage(active_canvas, image, x, y);
+}
+
+void cdPutImageRect(cdImage* image, int x, int y, int xmin, int xmax, int ymin, int ymax)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasPutImageRect(active_canvas, image, x, y, xmin, xmax, ymin, ymax);
+}
+
+void cdScrollArea(int xmin, int xmax, int ymin, int ymax, int dx, int dy)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasScrollArea(active_canvas, xmin, xmax, ymin, ymax, dx, dy);
+}
+
+void cdPutBitmap(cdBitmap* bitmap, int x, int y, int w, int h)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasPutBitmap(active_canvas, bitmap, x, y, w, h);
+}
+
+void cdGetBitmap(cdBitmap* bitmap, int x, int y)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasGetBitmap(active_canvas, bitmap, x, y);
+}
+
+void wdWindow(double xmin, double xmax, double ymin, double ymax)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasWindow(active_canvas, xmin, xmax, ymin, ymax);
+}
+
+void wdGetWindow (double *xmin, double *xmax, double *ymin, double *ymax)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasGetWindow(active_canvas, xmin, xmax, ymin, ymax);
+}
+
+void wdViewport(int xmin, int xmax, int ymin, int ymax)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasViewport(active_canvas, xmin, xmax, ymin, ymax);
+}
+
+void wdGetViewport (int *xmin, int *xmax, int *ymin, int *ymax)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasGetViewport(active_canvas, xmin, xmax, ymin, ymax);
+}
+
+void wdWorld2Canvas(double xw, double yw, int *xv, int *yv)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasWorld2Canvas(active_canvas, xw, yw, xv, yv);
+}
+
+void wdWorld2CanvasSize(double hw, double vw, int *hv, int *vv)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasWorld2CanvasSize(active_canvas, hw, vw, hv, vv);
+}
+
+void wdCanvas2World(int xv, int yv, double *xw, double *yw)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasCanvas2World(active_canvas, xv, yv, xw, yw);
+}
+
+void wdClipArea(double xmin, double xmax, double ymin, double ymax)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasClipArea(active_canvas, xmin, xmax, ymin, ymax);
+}
+
+int wdPointInRegion(double x, double y)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return wdCanvasIsPointInRegion(active_canvas, x, y);
+}
+
+void wdOffsetRegion(double x, double y)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasOffsetRegion(active_canvas, x, y);
+}
+
+void wdRegionBox(double *xmin, double *xmax, double *ymin, double *ymax)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasGetRegionBox(active_canvas, xmin, xmax, ymin, ymax);
+}
+
+int wdGetClipArea(double *xmin, double *xmax, double *ymin, double *ymax)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return wdCanvasGetClipArea(active_canvas, xmin, xmax, ymin, ymax);
+}
+
+void wdLine (double x1, double y1, double x2, double y2)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasLine(active_canvas, x1, y1, x2, y2);
+}
+
+void wdBox (double xmin, double xmax, double ymin, double ymax)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasBox(active_canvas, xmin, xmax, ymin, ymax);
+}
+
+void wdRect(double xmin, double xmax, double ymin, double ymax)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasRect(active_canvas, xmin, xmax, ymin, ymax);
+}
+
+void wdArc(double xc, double yc, double w, double h, double angle1, double angle2)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasArc(active_canvas, xc, yc, w, h, angle1, angle2);
+}
+
+void wdSector(double xc, double yc, double w, double h, double angle1, double angle2)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasSector(active_canvas, xc, yc, w, h, angle1, angle2);
+}
+
+void wdChord(double xc, double yc, double w, double h, double angle1, double angle2)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasChord(active_canvas, xc, yc, w, h, angle1, angle2);
+}
+
+void wdText(double x, double y, const char *s)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasText(active_canvas, x, y, s);
+}
+
+void wdVertex(double x, double y)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasVertex(active_canvas, x, y);
+}
+
+void wdMark(double x, double y)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasMark(active_canvas, x, y);
+}
+
+void wdPixel(double x, double y, long color)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasPixel(active_canvas, x, y, color);
+}
+
+void wdPutImageRect(cdImage* image, double x, double y, int xmin, int xmax, int ymin, int ymax)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasPutImageRect(active_canvas, image, x, y, xmin, xmax, ymin, ymax);
+}
+
+void wdPutImageRectRGB(int iw, int ih, const unsigned char *r, const unsigned char *g, const unsigned char *b, double x, double y, double w, double h, int xmin, int xmax, int ymin, int ymax)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasPutImageRectRGB(active_canvas, iw, ih, r, g, b, x, y, w, h, xmin, xmax, ymin, ymax);
+}
+
+void wdPutImageRectRGBA(int iw, int ih, const unsigned char *r, const unsigned char *g, const unsigned char *b, const unsigned char *a, double x, double y, double w, double h, int xmin, int xmax, int ymin, int ymax)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasPutImageRectRGBA(active_canvas, iw, ih, r, g, b, a, x, y, w, h, xmin, xmax, ymin, ymax);
+}
+
+void wdPutImageRectMap(int iw, int ih, const unsigned char *index, const long *colors, double x, double y, double w, double h, int xmin, int xmax, int ymin, int ymax)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasPutImageRectMap(active_canvas, iw, ih, index, colors, x, y, w, h, xmin, xmax, ymin, ymax);
+}
+
+void wdPutBitmap(cdBitmap* bitmap, double x, double y, double w, double h)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasPutBitmap(active_canvas, bitmap, x, y, w, h);
+}
+
+double wdLineWidth(double width_mm)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return wdCanvasLineWidth(active_canvas, width_mm);
+}
+
+void wdFont(int type_face, int style, double size_mm)
+{
+ static const char * family[] =
+ {
+ "System", /* CD_SYSTEM */
+ "Courier", /* CD_COURIER */
+ "Times Roman", /* CD_TIMES_ROMAN */
+ "Helvetica" /* CD_HELVETICA */
+ };
+
+ assert(active_canvas);
+ if (!active_canvas) return;
+ if (type_face<CD_SYSTEM || type_face>CD_HELVETICA) return;
+
+ wdCanvasFont(active_canvas, family[type_face], style, (int)(size_mm*CD_MM2PT + 0.5));
+}
+
+void wdGetFont(int *type_face, int *style, double *size)
+{
+ char family[1024];
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasGetFont(active_canvas, family, style, size);
+
+ if (type_face)
+ {
+ if (strcmp(family, "System")==0)
+ *type_face = CD_SYSTEM;
+ else if (strcmp(family, "Courier")==0)
+ *type_face = CD_COURIER;
+ else if (strcmp(family, "Times Roman")==0)
+ *type_face = CD_TIMES_ROMAN;
+ else if (strcmp(family, "Helvetica")==0)
+ *type_face = CD_HELVETICA;
+ else
+ *type_face = CD_NATIVE;
+ }
+}
+
+double wdMarkSize(double size_mm)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return wdCanvasMarkSize(active_canvas, size_mm);
+}
+
+void wdFontDim(double *max_width, double *height, double *ascent, double *descent)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasGetFontDim(active_canvas, max_width, height, ascent, descent);
+}
+
+void wdTextSize(const char *s, double *width, double *height)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasGetTextSize(active_canvas, s, width, height);
+}
+
+void wdTextBox(double x, double y, const char *s, double *xmin, double *xmax, double *ymin, double *ymax)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasGetTextBox(active_canvas, x, y, s, xmin, xmax, ymin, ymax);
+}
+
+void wdTextBounds(double x, double y, const char *s, double *rect)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasGetTextBounds(active_canvas, x, y, s, rect);
+}
+
+void wdPattern(int w, int h, const long *color, double w_mm, double h_mm)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasPattern(active_canvas, w, h, color, w_mm, h_mm);
+}
+
+void wdStipple(int w, int h, const unsigned char *fgbg, double w_mm, double h_mm)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasStipple(active_canvas, w, h, fgbg, w_mm, h_mm);
+}
+
+void wdHardcopy(cdContext* ctx, void *data, cdCanvas *canvas, void(*draw_func)(void))
+{
+ wdCanvasHardcopy(canvas, ctx, data, (void(*)(cdCanvas*))draw_func);
+}
+
+void cdVectorText(int x, int y, const char* s)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasVectorText(active_canvas, x, y, s);
+}
+
+void cdMultiLineVectorText(int x, int y, const char* s)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasMultiLineVectorText(active_canvas, x, y, s);
+}
+
+char *cdVectorFont(const char *filename)
+{
+ assert(active_canvas);
+ if (!active_canvas) return NULL;
+ return cdCanvasVectorFont(active_canvas, filename);
+}
+
+void cdVectorTextDirection(int x1, int y1, int x2, int y2)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasVectorTextDirection(active_canvas, x1, y1, x2, y2);
+}
+
+double* cdVectorTextTransform(const double* matrix)
+{
+ assert(active_canvas);
+ if (!active_canvas) return NULL;
+ return cdCanvasVectorTextTransform(active_canvas, matrix);
+}
+
+void cdVectorTextSize(int size_x, int size_y, const char* s)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasVectorTextSize(active_canvas, size_x, size_y, s);
+}
+
+int cdVectorCharSize(int size)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return cdCanvasVectorCharSize(active_canvas, size);
+}
+
+void cdGetVectorTextSize(const char* s, int *x, int *y)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasGetVectorTextSize(active_canvas, s, x, y);
+}
+
+void cdGetVectorTextBounds(const char* s, int x, int y, int *rect)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ cdCanvasGetVectorTextBounds(active_canvas, s, x, y, rect);
+}
+
+void wdVectorTextDirection(double x1, double y1, double x2, double y2)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasVectorTextDirection(active_canvas, x1, y1, x2, y2);
+}
+
+void wdVectorTextSize(double size_x, double size_y, const char* s)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasVectorTextSize(active_canvas, size_x, size_y, s);
+}
+
+void wdGetVectorTextSize(const char* s, double *x, double *y)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasGetVectorTextSize(active_canvas, s, x, y);
+}
+
+double wdVectorCharSize(double size)
+{
+ assert(active_canvas);
+ if (!active_canvas) return CD_ERROR;
+ return wdCanvasVectorCharSize(active_canvas, size);
+}
+
+void wdVectorText(double x, double y, const char* s)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasVectorText(active_canvas, x, y, s);
+}
+
+void wdMultiLineVectorText(double x, double y, const char* s)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasMultiLineVectorText(active_canvas, x, y, s);
+}
+
+void wdGetVectorTextBounds(const char* s, double x, double y, double *rect)
+{
+ assert(active_canvas);
+ if (!active_canvas) return;
+ wdCanvasGetVectorTextBounds(active_canvas, s, x, y, rect);
+}
+