diff options
Diffstat (limited to 'backend/impress/r_geometry.c')
-rw-r--r-- | backend/impress/r_geometry.c | 208 |
1 files changed, 0 insertions, 208 deletions
diff --git a/backend/impress/r_geometry.c b/backend/impress/r_geometry.c deleted file mode 100644 index 4819821a..00000000 --- a/backend/impress/r_geometry.c +++ /dev/null @@ -1,208 +0,0 @@ -/* imposter (OO.org Impress viewer) -** Copyright (C) 2003-2005 Gurer Ozen -** This code is free software; you can redistribute it and/or -** modify it under the terms of GNU General Public License. -*/ - -#include <config.h> -#include "common.h" -#include "internal.h" -#include <math.h> - -void -r_parse_color(const char *color, ImpColor *ic) -{ - unsigned int cval; - - if (1 != sscanf(color, "#%X", &cval)) return; - - ic->red = (cval & 0xFF0000) >> 8; - ic->green = cval & 0x00FF00; - ic->blue = (cval & 0xFF) << 8; -} - -int -r_get_color(ImpRenderCtx *ctx, iks *node, char *name, ImpColor *ic) -{ - char *color; - - color = r_get_style(ctx, node, name); - if (!color) return 0; - r_parse_color(color, ic); - - return 1; -} - -static void -fg_color(ImpRenderCtx *ctx, void *drw_data, iks *node, char *name) -{ - ImpColor ic; - - if (r_get_color(ctx, node, name, &ic)) { - ctx->drw->set_fg_color(drw_data, &ic); - } -} - -int -r_get_x (ImpRenderCtx *ctx, iks *node, char *name) -{ - char *val; - - val = iks_find_attrib (node, name); - if (!val) return 0; - return atof (val) * ctx->fact_x; -} - -int -r_get_y (ImpRenderCtx *ctx, iks *node, char *name) -{ - char *val; - - val = iks_find_attrib (node, name); - if (!val) return 0; - return atof (val) * ctx->fact_y; -} - -int -r_get_angle (iks *node, char *name, int def) -{ - char *tmp; - - tmp = iks_find_attrib (node, name); - if (!tmp) return def; - return atof (tmp); -} - -static int x, y, w, h; -static int px, py, pw, ph; - -static void -r_get_viewbox (iks *node) -{ - char *tmp; - - tmp = iks_find_attrib (node, "svg:viewBox"); - if (!tmp) return; - sscanf (tmp, "%d %d %d %d", &px, &py, &pw, &ph); -} - -void -r_polygon(ImpRenderCtx *ctx, void *drw_data, iks *node) -{ - char *data; - ImpPoint *points; - int i, cnt, j; - int num; - int fill = 1; - - data = r_get_style (ctx, node, "draw:fill"); - if (!data || strcmp (data, "solid") != 0) fill = 0; - - x = r_get_x (ctx, node, "svg:x"); - y = r_get_y (ctx, node, "svg:y"); - w = r_get_x (ctx, node, "svg:width"); - h = r_get_y (ctx, node, "svg:height"); - r_get_viewbox (node); - - data = iks_find_attrib (node, "draw:points"); - points = malloc (sizeof (ImpPoint) * strlen (data) / 4); - - cnt = 0; - j = 0; - num = -1; - for (i = 0; data[i]; i++) { - if (data[i] >= '0' && data[i] <= '9') { - if (num == -1) num = i; - } else { - if (num != -1) { - if (j == 0) { - points[cnt].x = atoi (data + num); - j = 1; - } else { - points[cnt++].y = atoi (data + num); - j = 0; - } - num = -1; - } - } - } - if (num != -1) { - if (j == 0) { - points[cnt].x = atoi (data + num); - } else { - points[cnt++].y = atoi (data + num); - } - } - for (i = 0; i < cnt; i++) { - points[i].x = x + points[i].x * w / pw; - points[i].y = y + points[i].y * h / ph; - } - - if (fill) { - fg_color(ctx, drw_data, node, "draw:fill-color"); - ctx->drw->draw_polygon(drw_data, 1, points, cnt); - } - fg_color(ctx, drw_data, node, "svg:stroke-color"); - ctx->drw->draw_polygon(drw_data, 0, points, cnt); - - free (points); -} - -void -r_polyline(ImpRenderCtx *ctx, void *drw_data, iks *node) -{ - char *data; - ImpPoint *points; - int i, cnt, j; - int num; - int pen_x, pen_y; - - x = r_get_x (ctx, node, "svg:x"); - y = r_get_y (ctx, node, "svg:y"); - w = r_get_x (ctx, node, "svg:width"); - h = r_get_y (ctx, node, "svg:height"); - r_get_viewbox (node); - - data = iks_find_attrib (node, "draw:points"); - points = malloc (sizeof (ImpPoint) * strlen (data) / 4); - - cnt = 0; - j = 0; - num = -1; - for (i = 0; data[i]; i++) { - if (data[i] >= '0' && data[i] <= '9') { - if (num == -1) num = i; - } else { - if (num != -1) { - if (j == 0) { - points[cnt].x = atoi (data + num); - j = 1; - } else { - points[cnt++].y = atoi (data + num); - j = 0; - } - num = -1; - } - } - } - if (num != -1) { - if (j == 0) { - points[cnt].x = atoi (data + num); - } else { - points[cnt++].y = atoi (data + num); - } - } - - pen_x = x + points[0].x * w /pw; - pen_y = y + points[0].y * h / ph; - fg_color(ctx, drw_data, node, "svg:stroke-color"); - for (i = 1; i < cnt; i++) { - int tx, ty; - tx = x + points[i].x * w / pw; - ty = y + points[i].y * h / ph; - ctx->drw->draw_line(drw_data, pen_x, pen_y, tx, ty); - pen_x = tx; - pen_y = ty; - } - free (points); -} |