[dia] DiaRenderer: replace fill_rect with extended draw_rect method
- From: Hans Breuer <hans src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [dia] DiaRenderer: replace fill_rect with extended draw_rect method
- Date: Thu, 1 May 2014 10:49:44 +0000 (UTC)
commit a95ae2263cdf0db7322b16a3e58f6f11454015f1
Author: Hans Breuer <hans breuer org>
Date: Sun Apr 27 20:15:31 2014 +0200
DiaRenderer: replace fill_rect with extended draw_rect method
What started with draw_beziergon() is continued with draw_rect(): merge
two calls into one to get rid of superfluous drawing commands and arbitrary
object splits.
Given that fill_rect was a required method it could be expected that now
draw_rect is. But with draw_polygon also being required there is a perfect
fallback for the base class. So some renderer's draw_rect/fill_rect
implementation could just be removed.
Just using the base class now are: DXF, LibArt, MetaPost, PGF, PS, PSTricks, VDX
To reduce the risk of breaking file formats not yet tested the following
pattern is introduced:
- rename draw_rect to stroke_rect
- keep fill_rect as local function
- make new draw_rect call one or both for fill and stroke parameter
As a result the output of these exporters wont change at all.
This is only used by: XFig and diastddia.py
Also not optimized, but simple are: HPGL, Skia
Optimized to fill and stroke in one step are: SVG, GDK, cairo, diasvg.py, WMF, WPG
Fully optimized shape rendering for: AADL, ER, FS, KAOS, Standard,
Network, UML, etc. pp. - i.e. all programmed objects
bindings/dia-renderer.cpp | 17 +---
bindings/dia-renderer.h | 7 +-
lib/arrows.c | 2 +-
lib/diagdkrenderer.c | 61 +++++---------
lib/diaimportrenderer.c | 36 +++-----
lib/diapathrenderer.c | 23 +-----
lib/diarenderer.c | 68 ++++++++--------
lib/diarenderer.h | 6 +-
lib/diasvgrenderer.c | 36 ++------
lib/diatransformrenderer.c | 41 ---------
lib/layer.c | 2 +-
objects/AADL/aadldata.c | 3 +-
objects/AADL/aadldevice.c | 3 +-
objects/AADL/aadlprocessor.c | 3 +-
objects/Database/table.c | 6 +-
objects/ER/entity.c | 7 +-
objects/FS/function.c | 9 +--
objects/GRAFCET/action.c | 4 +-
objects/GRAFCET/step.c | 7 +-
objects/Istar/other.c | 3 +-
objects/Jackson/domain.c | 5 +-
objects/KAOS/metabinrel.c | 2 +-
objects/Misc/diagram_as_object.c | 2 +-
objects/Misc/grid_object.c | 11 +--
objects/SADT/box.c | 7 +--
objects/UML/class.c | 18 ++---
objects/UML/component.c | 14 +---
objects/UML/fork.c | 4 +-
objects/UML/large_package.c | 16 +---
objects/UML/lifeline.c | 7 +-
objects/UML/object.c | 10 +--
objects/UML/small_package.c | 9 +--
objects/flowchart/box.c | 99 ++--------------------
objects/network/basestation.c | 4 +-
objects/standard/box.c | 10 ++-
objects/standard/image.c | 3 +-
objects/standard/textobj.c | 2 +-
plug-ins/cairo/diacairo-renderer.c | 19 ++---
plug-ins/cgm/cgm.c | 28 +------
plug-ins/drs/dia-render-script-renderer.c | 23 ++---
plug-ins/dxf/dxf-export.c | 32 +-------
plug-ins/hpgl/hpgl.c | 29 +------
plug-ins/libart/dialibartrenderer.c | 130 +----------------------------
plug-ins/metapost/render_metapost.c | 69 ---------------
plug-ins/pgf/render_pgf.c | 29 -------
plug-ins/postscript/diapsrenderer.c | 47 ----------
plug-ins/pstricks/render_pstricks.c | 54 ------------
plug-ins/python/codegen.py | 1 -
plug-ins/python/diadissect.py | 4 +-
plug-ins/python/diastddia.py | 9 +-
plug-ins/python/diasvg.py | 10 +--
plug-ins/python/export-render.py | 5 +-
plug-ins/python/pydia-render.c | 72 ++++------------
plug-ins/shape/shape-export.c | 9 +-
plug-ins/vdx/vdx-export.c | 57 -------------
plug-ins/wmf/wmf.cpp | 52 +++++-------
plug-ins/wpg/wpg-import.c | 9 +-
plug-ins/wpg/wpg.c | 40 ++++-----
plug-ins/xfig/xfig-export.c | 29 ++++---
59 files changed, 272 insertions(+), 1052 deletions(-)
---
diff --git a/bindings/dia-renderer.cpp b/bindings/dia-renderer.cpp
index 269b77c..535a3aa 100644
--- a/bindings/dia-renderer.cpp
+++ b/bindings/dia-renderer.cpp
@@ -117,12 +117,12 @@ dia::Renderer::draw_line (Point *start, Point *end, Color *color)
assert (self);
DIA_RENDERER_GET_CLASS(self)->draw_line (self, start, end, color);
}
-// Fill a rectangle, given its upper-left and lower-right corners
+// Fill and/or stroke a rectangle, given its upper-left and lower-right corners
void
-dia::Renderer::fill_rect (Point *ul_corner, Point *lr_corner, Color *color)
+dia::Renderer::draw_rect (Point *ul_corner, Point *lr_corner, Color *fill, Color *stroke)
{
assert (self);
- DIA_RENDERER_GET_CLASS(self)->fill_rect (self, ul_corner, lr_corner, color);
+ DIA_RENDERER_GET_CLASS(self)->draw_rect (self, ul_corner, lr_corner, fill, stroke);
}
// Draw an arc, given its center, the bounding box (widget, height), the start angle and the end angle
void
@@ -206,15 +206,8 @@ dia::Renderer::draw_text (Text* text)
assert (self);
DIA_RENDERER_GET_CLASS(self)->draw_text (self, text);
}
-// Draw a rectangle, given its upper-left and lower-right corners
-void
-dia::Renderer::draw_rect (Point *ul_corner, Point *lr_corner, Color *color)
-{
- assert (self);
- DIA_RENDERER_GET_CLASS(self)->draw_rect (self, ul_corner, lr_corner, color);
-}
-// a polyline with round coners
-void
+// Draw a polyline with round corners
+void
dia::Renderer::draw_rounded_polyline (Point *points, int num_points, Color *color, double radius )
{
assert (self);
diff --git a/bindings/dia-renderer.h b/bindings/dia-renderer.h
index 47dc7b0..d994ce8 100644
--- a/bindings/dia-renderer.h
+++ b/bindings/dia-renderer.h
@@ -76,9 +76,9 @@ public :
//! Draw a line from start to end, using color and the current line style
//! \ingroup RendererRequired
virtual void draw_line (Point *start, Point *end, Color *color);
- //! Fill a rectangle, given its upper-left and lower-right corners
+ //! Fill and/or stroke a rectangle, given its upper-left and lower-right corners
//! \ingroup RendererRequired
- virtual void fill_rect (Point *ul_corner, Point *lr_corner, Color *color);
+ virtual void draw_rect (Point *ul_corner, Point *lr_corner, Color *fill, Color *stroke);
//! the polygon is filled using the current fill type, no border is drawn
//! \ingroup RendererRequired
virtual void draw_polygon (Point *points, int num_points, Color *fill, Color *stroke);
@@ -121,9 +121,6 @@ public :
//! draw a Text. It holds its own information like position, style, ...
//! \ingroup RenderMedium
virtual void draw_text (Text* text);
- //! Draw a rectangle, given its upper-left and lower-right corners
- //! \ingroup RenderMedium
- virtual void draw_rect (Point *ul_corner, Point *lr_corner, Color *color);
/// \defgroup RenderHigh Renderer Can Implement This
//! Highest level functions, probably only to be implemented by
diff --git a/lib/arrows.c b/lib/arrows.c
index 1d5e84c..8509906 100644
--- a/lib/arrows.c
+++ b/lib/arrows.c
@@ -2033,7 +2033,7 @@ arrow_draw(DiaRenderer *renderer, ArrowType type,
p2.y = bbox.bottom;
DIA_RENDERER_GET_CLASS(renderer)->set_linewidth(renderer,0.01);
- DIA_RENDERER_GET_CLASS(renderer)->draw_rect(renderer, &p1, &p2, &col);
+ DIA_RENDERER_GET_CLASS(renderer)->draw_rect(renderer, &p1, &p2, NULL, &col);
}
}
diff --git a/lib/diagdkrenderer.c b/lib/diagdkrenderer.c
index 46a3a42..2166d19 100644
--- a/lib/diagdkrenderer.c
+++ b/lib/diagdkrenderer.c
@@ -96,13 +96,7 @@ static void draw_image (DiaRenderer *renderer,
static void draw_rect (DiaRenderer *renderer,
Point *ul_corner, Point *lr_corner,
- Color *color);
-static void fill_rect (DiaRenderer *renderer,
- Point *ul_corner, Point *lr_corner,
- Color *color);
-static void draw_fill_rect (DiaGdkRenderer *renderer,
- Point *ul_corner, Point *lr_corner,
- Color *color, gboolean fill);
+ Color *fill, Color *stroke);
static void draw_polyline (DiaRenderer *renderer,
Point *points, int num_points,
Color *color);
@@ -229,7 +223,6 @@ dia_gdk_renderer_class_init(DiaGdkRendererClass *klass)
renderer_class->draw_line = draw_line;
renderer_class->draw_polygon = draw_polygon;
renderer_class->draw_rect = draw_rect;
- renderer_class->fill_rect = fill_rect;
renderer_class->draw_arc = draw_arc;
renderer_class->fill_arc = fill_arc;
renderer_class->draw_ellipse = draw_ellipse;
@@ -242,7 +235,6 @@ dia_gdk_renderer_class_init(DiaGdkRendererClass *klass)
renderer_class->draw_image = draw_image;
/* medium level functions */
- renderer_class->draw_rect = draw_rect;
renderer_class->draw_polyline = draw_polyline;
/* highest level functions */
@@ -825,7 +817,7 @@ draw_image (DiaRenderer *object,
lr = *point;
lr.x += width;
lr.y += height;
- self_class->fill_rect(object, point, &lr, renderer->highlight_color);
+ self_class->draw_rect(object, point, &lr, renderer->highlight_color, NULL);
} else {
int real_width, real_height, real_x, real_y;
const GdkPixbuf *org = dia_image_pixbuf (image);
@@ -886,10 +878,11 @@ draw_image (DiaRenderer *object,
* medium level functions
*/
static void
-draw_fill_rect (DiaGdkRenderer *renderer,
- Point *ul_corner, Point *lr_corner,
- Color *color, gboolean fill)
+draw_rect (DiaGdkRenderer *self,
+ Point *ul_corner, Point *lr_corner,
+ Color *fill, Color *stroke)
{
+ DiaGdkRenderer *renderer = DIA_GDK_RENDERER (self);
GdkGC *gc = renderer->gc;
GdkColor gdkcolor;
gint top, bottom, left, right;
@@ -902,34 +895,20 @@ draw_fill_rect (DiaGdkRenderer *renderer,
if ((left>right) || (top>bottom))
return;
- renderer_color_convert(renderer, color, &gdkcolor);
- gdk_gc_set_foreground(gc, &gdkcolor);
-
- gdk_draw_rectangle (renderer->pixmap,
- gc, fill,
- left, top,
- right-left,
- bottom-top);
-}
-
-static void
-draw_rect (DiaRenderer *object,
- Point *ul_corner, Point *lr_corner,
- Color *color)
-{
- DiaGdkRenderer *renderer = DIA_GDK_RENDERER (object);
-
- draw_fill_rect (renderer, ul_corner, lr_corner, color, FALSE);
-}
+ if (fill) {
+ renderer_color_convert(renderer, fill, &gdkcolor);
+ gdk_gc_set_foreground(gc, &gdkcolor);
-static void
-fill_rect (DiaRenderer *object,
- Point *ul_corner, Point *lr_corner,
- Color *color)
-{
- DiaGdkRenderer *renderer = DIA_GDK_RENDERER (object);
+ gdk_draw_rectangle (renderer->pixmap, gc, TRUE,
+ left, top, right-left, bottom-top);
+ }
+ if (stroke) {
+ renderer_color_convert(renderer, stroke, &gdkcolor);
+ gdk_gc_set_foreground(gc, &gdkcolor);
- draw_fill_rect (renderer, ul_corner, lr_corner, color, TRUE);
+ gdk_draw_rectangle (renderer->pixmap, gc, FALSE,
+ left, top, right-left, bottom-top);
+ }
}
static void
@@ -1040,7 +1019,7 @@ draw_rounded_rect (DiaRenderer *self,
if (r > 0)
draw_fill_rounded_rect (self, ul_corner, lr_corner, color, radius, FALSE);
else
- draw_rect (self, ul_corner, lr_corner, color);
+ draw_rect (self, ul_corner, lr_corner, NULL, color);
}
static void
fill_rounded_rect (DiaRenderer *self,
@@ -1053,7 +1032,7 @@ fill_rounded_rect (DiaRenderer *self,
if (r > 0)
draw_fill_rounded_rect (self, ul_corner, lr_corner, color, radius, TRUE);
else
- fill_rect (self, ul_corner, lr_corner, color);
+ draw_rect (self, ul_corner, lr_corner, color, NULL);
}
static int
diff --git a/lib/diaimportrenderer.c b/lib/diaimportrenderer.c
index e153eb9..6b1a2ea 100644
--- a/lib/diaimportrenderer.c
+++ b/lib/diaimportrenderer.c
@@ -43,9 +43,9 @@ static void set_fillstyle (DiaRenderer *renderer, FillStyle mode);
static void draw_line (DiaRenderer *renderer,
Point *start, Point *end,
Color *color);
-static void fill_rect (DiaRenderer *renderer,
+static void draw_rect (DiaRenderer *renderer,
Point *ul_corner, Point *lr_corner,
- Color *color);
+ Color *fill, Color *stroke);
static void draw_arc (DiaRenderer *renderer,
Point *center,
real width, real height,
@@ -83,9 +83,6 @@ static void draw_image (DiaRenderer *renderer,
real width, real height,
DiaImage *image);
-static void draw_rect (DiaRenderer *renderer,
- Point *ul_corner, Point *lr_corner,
- Color *color);
static void draw_polyline (DiaRenderer *renderer,
Point *points, int num_points,
Color *color);
@@ -177,7 +174,7 @@ dia_import_renderer_class_init (DiaImportRendererClass *klass)
renderer_class->set_fillstyle = set_fillstyle;
renderer_class->draw_line = draw_line;
- renderer_class->fill_rect = fill_rect;
+ renderer_class->draw_rect = draw_rect;
renderer_class->draw_polygon = draw_polygon;
renderer_class->draw_arc = draw_arc;
renderer_class->fill_arc = fill_arc;
@@ -189,7 +186,6 @@ dia_import_renderer_class_init (DiaImportRendererClass *klass)
/* medium level functions */
renderer_class->draw_bezier = draw_bezier;
renderer_class->draw_beziergon = draw_beziergon;
- renderer_class->draw_rect = draw_rect;
renderer_class->draw_rounded_polyline = draw_rounded_polyline;
renderer_class->draw_polyline = draw_polyline;
@@ -374,15 +370,20 @@ draw_arc (DiaRenderer *renderer, Point *center,
}
/*!
- * \brief Fill a rectangle
+ * \brief Dtroke and/or fill a rectangle
* \memberof _DiaImportRenderer
*/
static void
-fill_rect (DiaRenderer *renderer,
+draw_rect (DiaRenderer *renderer,
Point *ul_corner, Point *lr_corner,
- Color *color)
+ Color *fill, Color *stroke)
{
- fill_rounded_rect (renderer, ul_corner, lr_corner, color, 0.0);
+ DiaImportRenderer *self = DIA_IMPORT_RENDERER (renderer);
+ DiaObject *object = create_standard_box (ul_corner->x, ul_corner->y,
+ lr_corner->x - ul_corner->x,
+ lr_corner->y - ul_corner->y);
+ _apply_style (self, object, fill,stroke, 0.0);
+ _push_object (self, object);
}
/*!
@@ -538,19 +539,6 @@ draw_beziergon (DiaRenderer *renderer,
}
/*!
- * \brief Draw a simple rectangle
- * Creates a _Box object.
- * \memberof _DiaImportRenderer
- */
-static void
-draw_rect (DiaRenderer *renderer,
- Point *ul_corner, Point *lr_corner,
- Color *color)
-{
- draw_rounded_rect (renderer, ul_corner, lr_corner, color, 0.0);
-}
-
-/*!
* \brief Draw a polyline
* Creates a _Polyline object.
* \memberof _DiaImportRenderer
diff --git a/lib/diapathrenderer.c b/lib/diapathrenderer.c
index 991c48c..ec3c5b0 100644
--- a/lib/diapathrenderer.c
+++ b/lib/diapathrenderer.c
@@ -345,9 +345,9 @@ draw_polygon(DiaRenderer *self,
_remove_duplicated_path (renderer);
}
static void
-_rect (DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- const Color *stroke, const Color *fill)
+draw_rect (DiaRenderer *self,
+ Point *ul_corner, Point *lr_corner,
+ Color *fill, Color *stroke)
{
DiaPathRenderer *renderer = DIA_PATH_RENDERER (self);
GArray *path = _get_current_path (renderer, stroke, fill);
@@ -368,21 +368,6 @@ _rect (DiaRenderer *self,
g_array_append_val (path, bp);
}
}
-static void
-draw_rect (DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color)
-{
- _rect (self, ul_corner, lr_corner, color, NULL);
- _remove_duplicated_path (DIA_PATH_RENDERER (self));
-}
-static void
-fill_rect (DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color)
-{
- _rect (self, ul_corner, lr_corner, NULL, color);
-}
/*!
* \brief Create a path from an arc
@@ -719,7 +704,6 @@ dia_path_renderer_class_init (DiaPathRendererClass *klass)
renderer_class->draw_line = draw_line;
renderer_class->draw_polygon = draw_polygon;
renderer_class->draw_rect = draw_rect;
- renderer_class->fill_rect = fill_rect;
renderer_class->draw_arc = draw_arc;
renderer_class->fill_arc = fill_arc;
renderer_class->draw_ellipse = draw_ellipse;
@@ -729,7 +713,6 @@ dia_path_renderer_class_init (DiaPathRendererClass *klass)
renderer_class->draw_image = draw_image;
/* medium level functions */
- renderer_class->draw_rect = draw_rect;
renderer_class->draw_polyline = draw_polyline;
renderer_class->draw_bezier = draw_bezier;
diff --git a/lib/diarenderer.c b/lib/diarenderer.c
index c31e610..9f5491c 100644
--- a/lib/diarenderer.c
+++ b/lib/diarenderer.c
@@ -67,9 +67,9 @@ static void set_font (DiaRenderer *renderer, DiaFont *font, real height);
static void draw_line (DiaRenderer *renderer,
Point *start, Point *end,
Color *color);
-static void fill_rect (DiaRenderer *renderer,
+static void draw_rect (DiaRenderer *renderer,
Point *ul_corner, Point *lr_corner,
- Color *color);
+ Color *fill, Color *stroke);
static void draw_arc (DiaRenderer *renderer,
Point *center,
real width, real height,
@@ -111,9 +111,6 @@ static void draw_text (DiaRenderer *renderer,
static void draw_text_line (DiaRenderer *renderer,
TextLine *text_line, Point *pos, Alignment alignment, Color *color);
-static void draw_rect (DiaRenderer *renderer,
- Point *ul_corner, Point *lr_corner,
- Color *color);
static void draw_polyline (DiaRenderer *renderer,
Point *points, int num_points,
Color *color);
@@ -321,7 +318,7 @@ dia_renderer_class_init (DiaRendererClass *klass)
renderer_class->set_font = set_font;
renderer_class->draw_line = draw_line;
- renderer_class->fill_rect = fill_rect;
+ renderer_class->draw_rect = draw_rect;
renderer_class->draw_polygon = draw_polygon;
renderer_class->draw_arc = draw_arc;
renderer_class->fill_arc = fill_arc;
@@ -333,7 +330,6 @@ dia_renderer_class_init (DiaRendererClass *klass)
/* medium level functions */
renderer_class->draw_bezier = draw_bezier;
renderer_class->draw_beziergon = draw_beziergon;
- renderer_class->draw_rect = draw_rect;
renderer_class->draw_rounded_polyline = draw_rounded_polyline;
renderer_class->draw_polyline = draw_polyline;
renderer_class->draw_text = draw_text;
@@ -437,13 +433,36 @@ draw_arc (DiaRenderer *renderer, Point *center,
G_OBJECT_CLASS_NAME (G_OBJECT_GET_CLASS (renderer)));
}
+/*!
+ * \brief Stroke and/or fill a rectangle
+ *
+ * This only needs to be implemented in the derived class if it differs
+ * from draw_polygon. Given that draw_polygon is a required method we can
+ * use that instead of forcing every inherited class to implement
+ * draw_rect(), too.
+ *
+ * \memberof _DiaRenderer
+ */
static void
-fill_rect (DiaRenderer *renderer,
+draw_rect (DiaRenderer *renderer,
Point *ul_corner, Point *lr_corner,
- Color *color)
+ Color *fill, Color *stroke)
{
- g_warning ("%s::fill_rect not implemented!",
- G_OBJECT_CLASS_NAME (G_OBJECT_GET_CLASS (renderer)));
+ if (DIA_RENDERER_GET_CLASS(renderer)->draw_polygon == &draw_polygon) {
+ g_warning ("%s::draw_rect and draw_polygon not implemented!",
+ G_OBJECT_CLASS_NAME (G_OBJECT_GET_CLASS (renderer)));
+ } else {
+ Point corner[4];
+ /* translate to polygon */
+ corner[0] = *ul_corner;
+ corner[1].x = lr_corner->x;
+ corner[1].y = ul_corner->y;
+ corner[2] = *lr_corner;
+ corner[3].x = ul_corner->x;
+ corner[3].y = lr_corner->y;
+ /* delegate transformation and drawing */
+ DIA_RENDERER_GET_CLASS(renderer)->draw_polygon (renderer, corner, 4, fill, stroke);
+ }
}
static void
@@ -742,25 +761,6 @@ draw_beziergon (DiaRenderer *renderer,
}
static void
-draw_rect (DiaRenderer *renderer,
- Point *ul_corner, Point *lr_corner,
- Color *color)
-{
- DiaRendererClass *klass = DIA_RENDERER_GET_CLASS (renderer);
- Point ur, ll;
-
- ur.x = lr_corner->x;
- ur.y = ul_corner->y;
- ll.x = ul_corner->x;
- ll.y = lr_corner->y;
-
- klass->draw_line (renderer, ul_corner, &ur, color);
- klass->draw_line (renderer, &ur, lr_corner, color);
- klass->draw_line (renderer, lr_corner, &ll, color);
- klass->draw_line (renderer, &ll, ul_corner, color);
-}
-
-static void
draw_polyline (DiaRenderer *renderer,
Point *points, int num_points,
Color *color)
@@ -925,7 +925,7 @@ draw_rounded_rect (DiaRenderer *renderer,
radius = MIN(radius, (lr_corner->y-ul_corner->y)/2);
if (radius < 0.00001) {
- renderer_ops->draw_rect(renderer, ul_corner, lr_corner, color);
+ renderer_ops->draw_rect(renderer, ul_corner, lr_corner, NULL, color);
return;
}
@@ -981,7 +981,7 @@ fill_rounded_rect(DiaRenderer *renderer,
radius = MIN(radius, (lr_corner->y-ul_corner->y)/2);
if (radius < 0.00001) {
- renderer_ops->fill_rect(renderer, ul_corner, lr_corner, color);
+ renderer_ops->draw_rect(renderer, ul_corner, lr_corner, color, NULL);
return;
}
/* if the renderer has it's own draw_beziergon use that */
@@ -994,7 +994,7 @@ fill_rounded_rect(DiaRenderer *renderer,
end.x = lr_corner->x-radius;
start.y = ul_corner->y;
end.y = lr_corner->y;
- renderer_ops->fill_rect(renderer, &start, &end, color);
+ renderer_ops->draw_rect(renderer, &start, &end, color, NULL);
center.y = ul_corner->y+radius;
renderer_ops->fill_arc(renderer, ¢er,
@@ -1010,7 +1010,7 @@ fill_rounded_rect(DiaRenderer *renderer,
start.y = ul_corner->y+radius;
end.x = lr_corner->x;
end.y = center.y = lr_corner->y-radius;
- renderer_ops->fill_rect(renderer, &start, &end, color);
+ renderer_ops->draw_rect(renderer, &start, &end, color, NULL);
center.y = lr_corner->y-radius;
center.x = ul_corner->x+radius;
diff --git a/lib/diarenderer.h b/lib/diarenderer.h
index 43b049e..b7dda28 100644
--- a/lib/diarenderer.h
+++ b/lib/diarenderer.h
@@ -133,10 +133,6 @@ struct _DiaRendererClass
void (*draw_line) (DiaRenderer *renderer,
Point *start, Point *end,
Color *color);
- /*! Fill a rectangle, given its upper-left and lower-right corners */
- void (*fill_rect) (DiaRenderer *renderer,
- Point *ul_corner, Point *lr_corner,
- Color *color);
/*! the polygon is filled using the current fill type and stroked with the current line style */
void (*draw_polygon) (DiaRenderer *renderer,
Point *points, int num_points,
@@ -206,7 +202,7 @@ struct _DiaRendererClass
/*! Draw a rectangle, given its upper-left and lower-right corners */
void (*draw_rect) (DiaRenderer *renderer,
Point *ul_corner, Point *lr_corner,
- Color *color);
+ Color *fill, Color *stroke);
/*
* Highest level functions, probably only to be implemented by
diff --git a/lib/diasvgrenderer.c b/lib/diasvgrenderer.c
index 4f3da9e..311960a 100644
--- a/lib/diasvgrenderer.c
+++ b/lib/diasvgrenderer.c
@@ -501,15 +501,20 @@ draw_polygon (DiaRenderer *self,
static void
draw_rect(DiaRenderer *self,
Point *ul_corner, Point *lr_corner,
- Color *colour)
+ Color *fill, Color *stroke)
{
DiaSvgRenderer *renderer = DIA_SVG_RENDERER (self);
xmlNodePtr node;
gchar d_buf[DTOSTR_BUF_SIZE];
+ gchar *style;
node = xmlNewChild(renderer->root, NULL, (const xmlChar *)"rect", NULL);
- xmlSetProp(node, (const xmlChar *)"style", (xmlChar *)get_draw_style(renderer, colour));
+ style = g_strdup_printf ("%s;%s",
+ stroke ? get_draw_style (renderer, stroke) : "stroke:none",
+ fill ? get_fill_style (renderer, fill) : "fill:none");
+ xmlSetProp(node, (const xmlChar *)"style", (xmlChar *) style);
+ g_free (style);
dia_svg_dtostr(d_buf, ul_corner->x);
xmlSetProp(node, (const xmlChar *)"x", (xmlChar *) d_buf);
@@ -522,29 +527,6 @@ draw_rect(DiaRenderer *self,
}
static void
-fill_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *colour)
-{
- DiaSvgRenderer *renderer = DIA_SVG_RENDERER (self);
- xmlNodePtr node;
- gchar d_buf[DTOSTR_BUF_SIZE];
-
- node = xmlNewChild(renderer->root, renderer->svg_name_space, (const xmlChar *)"rect", NULL);
-
- xmlSetProp(node, (const xmlChar *)"style", (xmlChar *) get_fill_style(renderer, colour));
-
- dia_svg_dtostr(d_buf, ul_corner->x);
- xmlSetProp(node, (const xmlChar *)"x", (xmlChar *)d_buf);
- dia_svg_dtostr(d_buf, ul_corner->y);
- xmlSetProp(node, (const xmlChar *)"y", (xmlChar *)d_buf);
- dia_svg_dtostr(d_buf, lr_corner->x - ul_corner->x);
- xmlSetProp(node, (const xmlChar *)"width", (xmlChar *)d_buf);
- dia_svg_dtostr(d_buf, lr_corner->y - ul_corner->y);
- xmlSetProp(node, (const xmlChar *)"height", (xmlChar *)d_buf);
-}
-
-static void
draw_arc(DiaRenderer *self,
Point *center,
real width, real height,
@@ -980,8 +962,7 @@ dia_svg_renderer_class_init (DiaSvgRendererClass *klass)
renderer_class->set_pattern = set_pattern;
renderer_class->draw_line = draw_line;
- renderer_class->draw_rect = draw_rect;
- renderer_class->fill_rect = fill_rect;
+ renderer_class->draw_polygon = draw_polygon;
renderer_class->draw_arc = draw_arc;
renderer_class->fill_arc = fill_arc;
renderer_class->draw_ellipse = draw_ellipse;
@@ -993,7 +974,6 @@ dia_svg_renderer_class_init (DiaSvgRendererClass *klass)
/* medium level functions */
renderer_class->draw_rect = draw_rect;
renderer_class->draw_polyline = draw_polyline;
- renderer_class->draw_polygon = draw_polygon;
renderer_class->draw_bezier = draw_bezier;
renderer_class->draw_beziergon = draw_beziergon;
diff --git a/lib/diatransformrenderer.c b/lib/diatransformrenderer.c
index 2a8c136..fd11bc3 100644
--- a/lib/diatransformrenderer.c
+++ b/lib/diatransformrenderer.c
@@ -264,44 +264,6 @@ draw_polygon(DiaRenderer *self,
{
_polyline (self, points, num_points, line_colour, NULL, TRUE);
}
-static void
-_rect (DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *stroke, Color *fill)
-{
- Point corner[4];
- /* translate to polygon */
- corner[0] = *ul_corner;
- corner[1].x = lr_corner->x;
- corner[1].y = ul_corner->y;
- corner[2] = *lr_corner;
- corner[3].x = ul_corner->x;
- corner[3].y = lr_corner->y;
- /* delegate transformation and drawing */
- _polyline (self, corner, 4, stroke, fill, TRUE);
-}
-/*!
- * \brief Transform rectangle and delegate draw
- * \memberof _DiaTransformRenderer
- */
-static void
-draw_rect (DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color)
-{
- _rect (self, ul_corner, lr_corner, color, NULL);
-}
-/*!
- * \brief Transform rectangle and delegate fill
- * \memberof _DiaTransformRenderer
- */
-static void
-fill_rect (DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color)
-{
- _rect (self, ul_corner, lr_corner, NULL, color);
-}
/* ToDo: arc and ellipse to be emulated by bezier - in base class? */
static void
_bezier (DiaRenderer *self,
@@ -558,8 +520,6 @@ dia_transform_renderer_class_init (DiaTransformRendererClass *klass)
renderer_class->draw_line = draw_line;
renderer_class->draw_polygon = draw_polygon;
- renderer_class->draw_rect = draw_rect;
- renderer_class->fill_rect = fill_rect;
renderer_class->draw_arc = draw_arc;
renderer_class->fill_arc = fill_arc;
renderer_class->draw_ellipse = draw_ellipse;
@@ -569,7 +529,6 @@ dia_transform_renderer_class_init (DiaTransformRendererClass *klass)
renderer_class->draw_image = draw_image;
/* medium level functions */
- renderer_class->draw_rect = draw_rect;
renderer_class->draw_polyline = draw_polyline;
renderer_class->draw_bezier = draw_bezier;
diff --git a/lib/layer.c b/lib/layer.c
index 7723ed9..45bf867 100644
--- a/lib/layer.c
+++ b/lib/layer.c
@@ -104,7 +104,7 @@ layer_render(Layer *layer, DiaRenderer *renderer, Rectangle *update,
col.alpha = 1.0;
DIA_RENDERER_GET_CLASS(renderer)->set_linewidth(renderer,0.01);
- DIA_RENDERER_GET_CLASS(renderer)->draw_rect(renderer, &p1, &p2, &col);
+ DIA_RENDERER_GET_CLASS(renderer)->draw_rect(renderer, &p1, &p2, NULL, &col);
}
(*obj_renderer)(obj, renderer, active_layer, data);
}
diff --git a/objects/AADL/aadldata.c b/objects/AADL/aadldata.c
index 76019b3..7447507 100755
--- a/objects/AADL/aadldata.c
+++ b/objects/AADL/aadldata.c
@@ -52,8 +52,7 @@ aadldata_draw_borders(Aadlbox *aadlbox, DiaRenderer *renderer)
points[0].x = x; points[0].y = y;
points[1].x = x + w; points[1].y = y + h;
- renderer_ops->fill_rect(renderer, points, points + 1, &aadlbox->fill_color);
- renderer_ops->draw_rect(renderer, points, points + 1, &aadlbox->line_color);
+ renderer_ops->draw_rect(renderer, points, points + 1, &aadlbox->fill_color, &aadlbox->line_color);
}
static void
diff --git a/objects/AADL/aadldevice.c b/objects/AADL/aadldevice.c
index 5703fd5..8d9f7f9 100755
--- a/objects/AADL/aadldevice.c
+++ b/objects/AADL/aadldevice.c
@@ -51,8 +51,7 @@ static void aadldevice_draw_borders(Aadlbox *aadlbox, DiaRenderer *renderer)
points[0].x = x; points[0].y = y;
points[1].x = x + w; points[1].y = y + h;
- renderer_ops->fill_rect(renderer, points, points + 1, &aadlbox->fill_color);
- renderer_ops->draw_rect(renderer, points, points + 1, &aadlbox->line_color);
+ renderer_ops->draw_rect(renderer, points, points + 1, &aadlbox->fill_color, &aadlbox->line_color);
points[1].x = x - AADL_DEVICE_DEPTH;
points[1].y = y - AADL_DEVICE_DEPTH;
diff --git a/objects/AADL/aadlprocessor.c b/objects/AADL/aadlprocessor.c
index 15446ac..ed351b8 100755
--- a/objects/AADL/aadlprocessor.c
+++ b/objects/AADL/aadlprocessor.c
@@ -51,8 +51,7 @@ static void aadlprocessor_draw_borders(Aadlbox *aadlbox, DiaRenderer *renderer)
points[0].x = x; points[0].y = y;
points[1].x = x + w; points[1].y = y + h;
- renderer_ops->fill_rect(renderer, points, points + 1, &aadlbox->fill_color);
- renderer_ops->draw_rect(renderer, points, points + 1, &aadlbox->line_color);
+ renderer_ops->draw_rect(renderer, points, points + 1, &aadlbox->fill_color, &aadlbox->line_color);
points[1].x = x + AADL_PROCESSOR_DEPTH;
points[1].y = y - AADL_PROCESSOR_DEPTH;
diff --git a/objects/Database/table.c b/objects/Database/table.c
index 07b7994..1af6517 100644
--- a/objects/Database/table.c
+++ b/objects/Database/table.c
@@ -552,8 +552,7 @@ table_draw_namebox (Table * table, DiaRenderer * renderer, Element * elem)
endP.y = startP.y + table->namebox_height;
/* first draw the outer box and fill for the class name object */
- renderer_ops->fill_rect (renderer, &startP, &endP, &table->fill_color);
- renderer_ops->draw_rect (renderer, &startP, &endP, &table->line_color);
+ renderer_ops->draw_rect (renderer, &startP, &endP, &table->fill_color, &table->line_color);
if (IS_NOT_EMPTY(table->name))
{
@@ -686,8 +685,7 @@ table_draw_attributesbox (Table * table, DiaRenderer * renderer,
endP.x = startP.x + elem->width;
endP.y = startP.y + table->attributesbox_height;
- renderer_ops->fill_rect (renderer, &startP, &endP, fill_color);
- renderer_ops->draw_rect (renderer, &startP, &endP, line_color);
+ renderer_ops->draw_rect (renderer, &startP, &endP, fill_color, line_color);
startP.x += TABLE_ATTR_NAME_OFFSET;
startP.x += (table->border_width/2.0 + 0.1);
diff --git a/objects/ER/entity.c b/objects/ER/entity.c
index 30b78ef..2107e50 100644
--- a/objects/ER/entity.c
+++ b/objects/ER/entity.c
@@ -248,11 +248,6 @@ entity_draw(Entity *entity, DiaRenderer *renderer)
renderer_ops->set_fillstyle(renderer, FILLSTYLE_SOLID);
- renderer_ops->fill_rect(renderer,
- &ul_corner,
- &lr_corner,
- &entity->inner_color);
-
renderer_ops->set_linewidth(renderer, entity->border_width);
renderer_ops->set_linestyle(renderer, LINESTYLE_SOLID);
renderer_ops->set_linejoin(renderer, LINEJOIN_MITER);
@@ -260,6 +255,7 @@ entity_draw(Entity *entity, DiaRenderer *renderer)
renderer_ops->draw_rect(renderer,
&ul_corner,
&lr_corner,
+ &entity->inner_color,
&entity->border_color);
if(entity->weak) {
@@ -270,6 +266,7 @@ entity_draw(Entity *entity, DiaRenderer *renderer)
lr_corner.y -= diff;
renderer_ops->draw_rect(renderer,
&ul_corner, &lr_corner,
+ NULL,
&entity->border_color);
}
if(entity->associative){
diff --git a/objects/FS/function.c b/objects/FS/function.c
index 3e1122e..d699631 100644
--- a/objects/FS/function.c
+++ b/objects/FS/function.c
@@ -311,11 +311,9 @@ function_draw(Function *pkg, DiaRenderer *renderer)
p2.x = x+w; p2.y = y+h;
if (pkg->is_user) {
- renderer_ops->fill_rect(renderer,
- &p1, &p2,
- &color_white);
renderer_ops->draw_rect(renderer,
&p1, &p2,
+ &color_white,
&color_black);
p1.x += font_height / FUNCTION_MARGIN_SCALE;
p1.y += font_height / FUNCTION_MARGIN_SCALE;
@@ -323,12 +321,9 @@ function_draw(Function *pkg, DiaRenderer *renderer)
p2.x -= font_height / FUNCTION_MARGIN_SCALE;
/* y += FUNCTION_MARGIN_M; */
}
-
- renderer_ops->fill_rect(renderer,
- &p1, &p2,
- &color_white);
renderer_ops->draw_rect(renderer,
&p1, &p2,
+ &color_white,
&color_black);
diff --git a/objects/GRAFCET/action.c b/objects/GRAFCET/action.c
index ed4acaf..fd695c8 100644
--- a/objects/GRAFCET/action.c
+++ b/objects/GRAFCET/action.c
@@ -358,7 +358,7 @@ action_draw(Action *action, DiaRenderer *renderer)
br.x = ul.x + action->label_width;
br.y = ul.y + ACTION_HEIGHT;
- renderer_ops->fill_rect(renderer,&ul,&br,&color_white);
+ renderer_ops->draw_rect(renderer,&ul,&br,&color_white, NULL);
action_text_draw(action->text,renderer);
@@ -379,7 +379,7 @@ action_draw(Action *action, DiaRenderer *renderer)
}
cl.red = 1.0; cl.blue = cl.green = .2; cl.alpha = 1.0;
- renderer_ops->draw_rect(renderer,&ul,&br,&color_black);
+ renderer_ops->draw_rect(renderer,&ul,&br,NULL,&color_black);
}
static DiaObject *
diff --git a/objects/GRAFCET/step.c b/objects/GRAFCET/step.c
index cccfec0..75e04a2 100644
--- a/objects/GRAFCET/step.c
+++ b/objects/GRAFCET/step.c
@@ -350,12 +350,11 @@ step_draw(Step *step, DiaRenderer *renderer)
if ((step->type == STEP_INITIAL) ||
(step->type == STEP_MACROCALL) ||
(step->type == STEP_SUBPCALL)) {
- renderer_ops->fill_rect(renderer, &step->I, &step->J, &color_white);
- renderer_ops->draw_rect(renderer, &step->I, &step->J, &color_black);
+ renderer_ops->draw_rect(renderer, &step->I, &step->J, &color_white, &color_black);
+ renderer_ops->draw_rect(renderer, &step->E, &step->F, NULL, &color_black);
} else {
- renderer_ops->fill_rect(renderer, &step->E, &step->F, &color_white);
+ renderer_ops->draw_rect(renderer, &step->E, &step->F, &color_white, &color_black);
}
- renderer_ops->draw_rect(renderer, &step->E, &step->F, &color_black);
if (step->type != STEP_MACROENTRY)
renderer_ops->draw_line(renderer,&step->A,&step->B,&color_black);
diff --git a/objects/Istar/other.c b/objects/Istar/other.c
index 27698c5..0c6f58a 100644
--- a/objects/Istar/other.c
+++ b/objects/Istar/other.c
@@ -309,9 +309,8 @@ other_draw(Other *other, DiaRenderer *renderer)
p1.y= elem->corner.y;
p2.x=p1.x+elem->width;
p2.y=p1.y+elem->height;
- renderer_ops->fill_rect(renderer,&p1,&p2, &OTHER_BG_COLOR);
renderer_ops->set_linewidth(renderer, OTHER_LINE_WIDTH);
- renderer_ops->draw_rect(renderer,&p1,&p2, &OTHER_FG_COLOR);
+ renderer_ops->draw_rect(renderer,&p1,&p2, &OTHER_BG_COLOR, &OTHER_FG_COLOR);
break;
case TASK:
compute_task(other,pl);
diff --git a/objects/Jackson/domain.c b/objects/Jackson/domain.c
index 4d69a03..a0f308e 100644
--- a/objects/Jackson/domain.c
+++ b/objects/Jackson/domain.c
@@ -348,13 +348,12 @@ jackson_box_draw(Box *box, DiaRenderer *renderer)
/* drawing main box */
renderer_ops->set_fillstyle(renderer, FILLSTYLE_SOLID);
- renderer_ops->fill_rect(renderer, &b0, &b1, &JACKSON_BOX_BG_COLOR);
renderer_ops->set_linewidth(renderer, JACKSON_BOX_LINE_WIDTH);
renderer_ops->set_linestyle(renderer, LINESTYLE_SOLID);
renderer_ops->set_linejoin(renderer, LINEJOIN_MITER);
- renderer_ops->draw_rect(renderer, &b0, &b1, &JACKSON_BOX_FG_COLOR);
+ renderer_ops->draw_rect(renderer, &b0, &b1, &JACKSON_BOX_BG_COLOR, &JACKSON_BOX_FG_COLOR);
/* adding lines for designed/machine domains */
if (box->domtype!=DOMAIN_GIVEN) {
@@ -382,7 +381,7 @@ jackson_box_draw(Box *box, DiaRenderer *renderer)
}
if (s!=NULL) {
- renderer_ops->draw_rect(renderer, &b3, &b1, &JACKSON_BOX_FG_COLOR);
+ renderer_ops->draw_rect(renderer, &b3, &b1, NULL, &JACKSON_BOX_FG_COLOR);
renderer_ops->draw_string(renderer, s, &b2, ALIGN_RIGHT, &box->text->color);
}
diff --git a/objects/KAOS/metabinrel.c b/objects/KAOS/metabinrel.c
index 637da8d..fc4ab28 100644
--- a/objects/KAOS/metabinrel.c
+++ b/objects/KAOS/metabinrel.c
@@ -439,7 +439,7 @@ mbr_draw(Mbr *mbr, DiaRenderer *renderer)
pa1.y=mbr->pm.y-mbr->text_ascent +0.1; /* with some fix... */
pa2.x=pa1.x+mbr->text_width;
pa2.y=pa1.y+MBR_DECFONTHEIGHT +0.1; /* with some fix... */
- renderer_ops->fill_rect(renderer,&pa1,&pa2,&color_white);
+ renderer_ops->draw_rect(renderer,&pa1,&pa2,&color_white, NULL);
renderer_ops->draw_string(renderer,annot,&mbr->pm,ALIGN_CENTER,&MBR_FG_COLOR);
}
diff --git a/objects/Misc/diagram_as_object.c b/objects/Misc/diagram_as_object.c
index 7b1911e..4516211 100644
--- a/objects/Misc/diagram_as_object.c
+++ b/objects/Misc/diagram_as_object.c
@@ -188,7 +188,7 @@ _dae_draw(DiagramAsElement *dae, DiaRenderer *renderer)
};
renderer_ops->draw_rect(renderer,&elem->corner, &lower_right,
- &dae->border_color);
+ NULL, &dae->border_color);
} else {
if (FALSE) {
diff --git a/objects/Misc/grid_object.c b/objects/Misc/grid_object.c
index efb52a2..5d16129 100644
--- a/objects/Misc/grid_object.c
+++ b/objects/Misc/grid_object.c
@@ -334,12 +334,6 @@ grid_object_draw(Grid_Object *grid_object, DiaRenderer *renderer)
renderer_ops->set_linejoin(renderer, LINEJOIN_MITER);
renderer_ops->set_linestyle(renderer, LINESTYLE_SOLID);
- /* draw background */
- if (grid_object->show_background)
- renderer_ops->fill_rect(renderer,&elem->corner,
- &lr_corner,
- &grid_object->inner_color);
-
/* draw gridlines */
renderer_ops->set_linewidth(renderer, grid_object->gridline_width);
grid_object_draw_gridlines(grid_object, renderer, &lr_corner);
@@ -347,8 +341,9 @@ grid_object_draw(Grid_Object *grid_object, DiaRenderer *renderer)
/* draw outline */
renderer_ops->set_linewidth(renderer, grid_object->border_line_width);
renderer_ops->draw_rect(renderer,&elem->corner,
- &lr_corner,
- &grid_object->border_color);
+ &lr_corner,
+ (grid_object->show_background) ? &grid_object->inner_color : NULL,
+ &grid_object->border_color);
}
diff --git a/objects/SADT/box.c b/objects/SADT/box.c
index c099f3b..76fd3c9 100644
--- a/objects/SADT/box.c
+++ b/objects/SADT/box.c
@@ -279,12 +279,6 @@ sadtbox_draw(Box *box, DiaRenderer *renderer)
lr_corner.y = elem->corner.y + elem->height;
renderer_ops->set_fillstyle(renderer, FILLSTYLE_SOLID);
- renderer_ops->fill_rect(renderer,
- &elem->corner,
- &lr_corner,
- &box->fill_color);
-
-
renderer_ops->set_linewidth(renderer, SADTBOX_LINE_WIDTH);
renderer_ops->set_linestyle(renderer, LINESTYLE_SOLID);
renderer_ops->set_linejoin(renderer, LINEJOIN_MITER);
@@ -292,6 +286,7 @@ sadtbox_draw(Box *box, DiaRenderer *renderer)
renderer_ops->draw_rect(renderer,
&elem->corner,
&lr_corner,
+ &box->fill_color,
&box->line_color);
diff --git a/objects/UML/class.c b/objects/UML/class.c
index cdeb398..dcbfa34 100644
--- a/objects/UML/class.c
+++ b/objects/UML/class.c
@@ -803,12 +803,9 @@ umlclass_draw_namebox(UMLClass *umlclass, DiaRenderer *renderer, Element *elem )
LowerRightPoint.x += elem->width;
LowerRightPoint.y = Yoffset;
- /*
- * First draw the outer box and fill color for the class name
- * object
- */
- renderer_ops->fill_rect(renderer, &StartPoint, &LowerRightPoint, ¨class->fill_color);
- renderer_ops->draw_rect(renderer, &StartPoint, &LowerRightPoint, ¨class->line_color);
+ /* First draw the outer box and fill color for the class name object */
+ renderer_ops->draw_rect(renderer, &StartPoint, &LowerRightPoint,
+ ¨class->fill_color, ¨class->line_color);
/* Start at the midpoint on the X axis */
StartPoint.x += elem->width / 2.0;
@@ -891,8 +888,7 @@ umlclass_draw_attributebox(UMLClass *umlclass, DiaRenderer *renderer, Element *e
LowerRight.x += elem->width;
LowerRight.y = Yoffset;
- renderer_ops->fill_rect(renderer, &StartPoint, &LowerRight, fill_color);
- renderer_ops->draw_rect(renderer, &StartPoint, &LowerRight, line_color);
+ renderer_ops->draw_rect(renderer, &StartPoint, &LowerRight, fill_color, line_color);
if (!umlclass->suppress_attributes) {
gint i = 0;
@@ -979,8 +975,7 @@ umlclass_draw_operationbox(UMLClass *umlclass, DiaRenderer *renderer, Element *e
LowerRight.x += elem->width;
LowerRight.y = Yoffset;
- renderer_ops->fill_rect(renderer, &StartPoint, &LowerRight, fill_color);
- renderer_ops->draw_rect(renderer, &StartPoint, &LowerRight, line_color);
+ renderer_ops->draw_rect(renderer, &StartPoint, &LowerRight, fill_color, line_color);
if (!umlclass->suppress_operations) {
gint i = 0;
@@ -1134,10 +1129,9 @@ umlclass_draw_template_parameters_box(UMLClass *umlclass, DiaRenderer *renderer,
LowerRight.x += umlclass->templates_width;
LowerRight.y += umlclass->templates_height;
- renderer_ops->fill_rect(renderer, &UpperLeft, &LowerRight, fill_color);
renderer_ops->set_linestyle(renderer, LINESTYLE_DASHED);
renderer_ops->set_dashlength(renderer, 0.3);
- renderer_ops->draw_rect(renderer, &UpperLeft, &LowerRight, line_color);
+ renderer_ops->draw_rect(renderer, &UpperLeft, &LowerRight, fill_color, line_color);
TextInsert.x += 0.3;
TextInsert.y += 0.1;
diff --git a/objects/UML/component.c b/objects/UML/component.c
index ce47943..887defc 100644
--- a/objects/UML/component.c
+++ b/objects/UML/component.c
@@ -242,33 +242,25 @@ component_draw(Component *cmp, DiaRenderer *renderer)
p1.x = x + COMPONENT_CWIDTH/2; p1.y = y;
p2.x = x+w; p2.y = y+h;
- renderer_ops->fill_rect(renderer,
- &p1, &p2,
- &cmp->fill_color);
renderer_ops->draw_rect(renderer,
&p1, &p2,
+ &cmp->fill_color,
&cmp->line_color);
p1.x= x; p1.y = y +(h - 3*COMPONENT_CHEIGHT)/2.0;
p2.x = x+COMPONENT_CWIDTH; p2.y = p1.y + COMPONENT_CHEIGHT;
- renderer_ops->fill_rect(renderer,
- &p1, &p2,
- &cmp->fill_color);
-
renderer_ops->draw_rect(renderer,
&p1, &p2,
+ &cmp->fill_color,
&cmp->line_color);
p1.y = p2.y + COMPONENT_CHEIGHT;
p2.y = p1.y + COMPONENT_CHEIGHT;
- renderer_ops->fill_rect(renderer,
- &p1, &p2,
- &cmp->fill_color);
-
renderer_ops->draw_rect(renderer,
&p1, &p2,
+ &cmp->fill_color,
&cmp->line_color);
if (cmp->st_stereotype != NULL &&
diff --git a/objects/UML/fork.c b/objects/UML/fork.c
index 098d187..02e922d 100644
--- a/objects/UML/fork.c
+++ b/objects/UML/fork.c
@@ -223,9 +223,9 @@ fork_draw(Fork *branch, DiaRenderer *renderer)
p2.x = elem->corner.x + w;
p2.y = elem->corner.y + h;
- renderer_ops->fill_rect(renderer,
+ renderer_ops->draw_rect(renderer,
&p1, &p2,
- &branch->fill_color);
+ &branch->fill_color, NULL);
}
static void
diff --git a/objects/UML/large_package.c b/objects/UML/large_package.c
index 2530551..63f2c99 100644
--- a/objects/UML/large_package.c
+++ b/objects/UML/large_package.c
@@ -258,26 +258,18 @@ largepackage_draw(LargePackage *pkg, DiaRenderer *renderer)
p1.x = x; p1.y = y;
p2.x = x+w; p2.y = y+h;
-
- renderer_ops->fill_rect(renderer,
- &p1, &p2,
- &pkg->fill_color);
- renderer_ops->draw_rect(renderer,
+ renderer_ops->draw_rect (renderer,
&p1, &p2,
+ &pkg->fill_color,
&pkg->line_color);
p1.x= x; p1.y = y - pkg->topheight;
p2.x = x + pkg->topwidth; p2.y = y;
-
- renderer_ops->fill_rect(renderer,
- &p1, &p2,
- &pkg->fill_color);
-
- renderer_ops->draw_rect(renderer,
+ renderer_ops->draw_rect (renderer,
&p1, &p2,
+ &pkg->fill_color,
&pkg->line_color);
-
renderer_ops->set_font(renderer, pkg->font, pkg->font_height);
p1.x = x + 0.1;
diff --git a/objects/UML/lifeline.c b/objects/UML/lifeline.c
index 351eff2..d0755d0 100644
--- a/objects/UML/lifeline.c
+++ b/objects/UML/lifeline.c
@@ -400,13 +400,10 @@ lifeline_draw(Lifeline *lifeline, DiaRenderer *renderer)
p2.x = endpoints[0].x + LIFELINE_WIDTH/2.0;
p2.y = endpoints[0].y + lifeline->rbot;
- if (lifeline->draw_focuscontrol) {
- renderer_ops->fill_rect(renderer,
- &p1, &p2,
- &lifeline->fill_color);
-
+ if (lifeline->draw_focuscontrol) {
renderer_ops->draw_rect(renderer,
&p1, &p2,
+ &lifeline->fill_color,
&lifeline->line_color);
}
diff --git a/objects/UML/object.c b/objects/UML/object.c
index 437bb0e..97c47b4 100644
--- a/objects/UML/object.c
+++ b/objects/UML/object.c
@@ -303,11 +303,9 @@ objet_draw(Objet *ob, DiaRenderer *renderer)
if (ob->is_multiple) {
p1.x += OBJET_MARGIN_M(ob);
p2.y -= OBJET_MARGIN_M(ob);
- renderer_ops->fill_rect(renderer,
- &p1, &p2,
- &ob->fill_color);
renderer_ops->draw_rect(renderer,
&p1, &p2,
+ &ob->fill_color,
&ob->line_color);
p1.x -= OBJET_MARGIN_M(ob);
p1.y += OBJET_MARGIN_M(ob);
@@ -315,12 +313,10 @@ objet_draw(Objet *ob, DiaRenderer *renderer)
p2.y += OBJET_MARGIN_M(ob);
y += OBJET_MARGIN_M(ob);
}
-
- renderer_ops->fill_rect(renderer,
- &p1, &p2,
- &ob->fill_color);
+
renderer_ops->draw_rect(renderer,
&p1, &p2,
+ &ob->fill_color,
&ob->line_color);
diff --git a/objects/UML/small_package.c b/objects/UML/small_package.c
index 72bbc31..85df889 100644
--- a/objects/UML/small_package.c
+++ b/objects/UML/small_package.c
@@ -257,22 +257,17 @@ smallpackage_draw(SmallPackage *pkg, DiaRenderer *renderer)
p1.x = x; p1.y = y;
p2.x = x+w; p2.y = y+h;
- renderer_ops->fill_rect(renderer,
- &p1, &p2,
- &pkg->fill_color);
renderer_ops->draw_rect(renderer,
&p1, &p2,
+ &pkg->fill_color,
&pkg->line_color);
p1.x= x; p1.y = y-SMALLPACKAGE_TOPHEIGHT;
p2.x = x+SMALLPACKAGE_TOPWIDTH; p2.y = y;
- renderer_ops->fill_rect(renderer,
- &p1, &p2,
- &pkg->fill_color);
-
renderer_ops->draw_rect(renderer,
&p1, &p2,
+ &pkg->fill_color,
&pkg->line_color);
text_draw(pkg->text, renderer);
diff --git a/objects/flowchart/box.c b/objects/flowchart/box.c
index f3330c8..2556ac0 100644
--- a/objects/flowchart/box.c
+++ b/objects/flowchart/box.c
@@ -328,103 +328,22 @@ box_draw(Box *box, DiaRenderer *renderer)
lr_corner.x = elem->corner.x + elem->width;
lr_corner.y = elem->corner.y + elem->height;
- if (box->show_background) {
- renderer_ops->set_fillstyle(renderer, FILLSTYLE_SOLID);
+ if (box->show_background)
+ renderer_ops->set_fillstyle(renderer, FILLSTYLE_SOLID);
- /* Problem: How do we make the fill with rounded corners? */
- if (box->corner_radius > 0) {
- Point start, end, center;
-
- radius = box->corner_radius;
- radius = MIN(radius, elem->width/2);
- radius = MIN(radius, elem->height/2);
- start.x = center.x = elem->corner.x+radius;
- end.x = lr_corner.x-radius;
- start.y = elem->corner.y;
- end.y = lr_corner.y;
- renderer_ops->fill_rect(renderer, &start, &end, &box->inner_color);
-
- center.y = elem->corner.y+radius;
- renderer_ops->fill_arc(renderer, ¢er,
- 2.0*radius, 2.0*radius,
- 90.0, 180.0, &box->inner_color);
- center.x = end.x;
- renderer_ops->fill_arc(renderer, ¢er,
- 2.0*radius, 2.0*radius,
- 0.0, 90.0, &box->inner_color);
-
- start.x = elem->corner.x;
- start.y = elem->corner.y+radius;
- end.x = lr_corner.x;
- end.y = center.y = lr_corner.y-radius;
- renderer_ops->fill_rect(renderer, &start, &end, &box->inner_color);
-
- center.y = lr_corner.y-radius;
- center.x = elem->corner.x+radius;
- renderer_ops->fill_arc(renderer, ¢er,
- 2.0*radius, 2.0*radius,
- 180.0, 270.0, &box->inner_color);
- center.x = lr_corner.x-radius;
- renderer_ops->fill_arc(renderer, ¢er,
- 2.0*radius, 2.0*radius,
- 270.0, 360.0, &box->inner_color);
- } else {
- renderer_ops->fill_rect(renderer,
- &elem->corner,
- &lr_corner,
- &box->inner_color);
- }
- }
+ /* Problem: How do we make the fill with rounded corners?
+ * It's solved in the base class ...
+ */
+ renderer_ops->fill_rounded_rect (renderer, &elem->corner, &lr_corner,
+ &box->inner_color, box->corner_radius);
renderer_ops->set_linewidth(renderer, box->border_width);
renderer_ops->set_linestyle(renderer, box->line_style);
renderer_ops->set_dashlength(renderer, box->dashlength);
renderer_ops->set_linejoin(renderer, LINEJOIN_MITER);
- if (box->corner_radius > 0) {
- Point start, end, center;
-
- radius = box->corner_radius;
- radius = MIN(radius, elem->width/2);
- radius = MIN(radius, elem->height/2);
- start.x = center.x = elem->corner.x+radius;
- end.x = lr_corner.x-radius;
- start.y = end.y = elem->corner.y;
- renderer_ops->draw_line(renderer, &start, &end, &box->border_color);
- start.y = end.y = lr_corner.y;
- renderer_ops->draw_line(renderer, &start, &end, &box->border_color);
-
- center.y = elem->corner.y+radius;
- renderer_ops->draw_arc(renderer, ¢er,
- 2.0*radius, 2.0*radius,
- 90.0, 180.0, &box->border_color);
- center.x = end.x;
- renderer_ops->draw_arc(renderer, ¢er,
- 2.0*radius, 2.0*radius,
- 0.0, 90.0, &box->border_color);
-
- start.y = elem->corner.y+radius;
- start.x = end.x = elem->corner.x;
- end.y = center.y = lr_corner.y-radius;
- renderer_ops->draw_line(renderer, &start, &end, &box->border_color);
- start.x = end.x = lr_corner.x;
- renderer_ops->draw_line(renderer, &start, &end, &box->border_color);
-
- center.y = lr_corner.y-radius;
- center.x = elem->corner.x+radius;
- renderer_ops->draw_arc(renderer, ¢er,
- 2.0*radius, 2.0*radius,
- 180.0, 270.0, &box->border_color);
- center.x = lr_corner.x-radius;
- renderer_ops->draw_arc(renderer, ¢er,
- 2.0*radius, 2.0*radius,
- 270.0, 360.0, &box->border_color);
- } else {
- renderer_ops->draw_rect(renderer,
- &elem->corner,
- &lr_corner,
- &box->border_color);
- }
+ renderer_ops->draw_rounded_rect (renderer, &elem->corner, &lr_corner,
+ &box->border_color, box->corner_radius);
text_draw(box->text, renderer);
}
diff --git a/objects/network/basestation.c b/objects/network/basestation.c
index 428da71..9297988 100644
--- a/objects/network/basestation.c
+++ b/objects/network/basestation.c
@@ -271,8 +271,8 @@ basestation_draw(Basestation *basestation, DiaRenderer *renderer)
p1.x -= r/2.0;
p2 = cb;
p2.x += r/2.0;
- renderer_ops->fill_rect(renderer, &p1, &p2,
- &basestation->fill_colour);
+ renderer_ops->draw_rect(renderer, &p1, &p2,
+ &basestation->fill_colour, NULL);
p2.x -= r;
renderer_ops->draw_line(renderer, &p1, &p2,
&basestation->line_colour);
diff --git a/objects/standard/box.c b/objects/standard/box.c
index b295678..f18aca6 100644
--- a/objects/standard/box.c
+++ b/objects/standard/box.c
@@ -327,6 +327,7 @@ box_draw(Box *box, DiaRenderer *renderer)
if (renderer_ops->is_capable_to(renderer, RENDER_PATTERN))
renderer_ops->set_pattern (renderer, box->pattern);
}
+ /* we only want separate calls for potential pattern fill */
if (box->corner_radius > 0) {
renderer_ops->fill_rounded_rect(renderer,
&elem->corner,
@@ -334,10 +335,10 @@ box_draw(Box *box, DiaRenderer *renderer)
&fill,
box->corner_radius);
} else {
- renderer_ops->fill_rect(renderer,
+ renderer_ops->draw_rect(renderer,
&elem->corner,
&lr_corner,
- &fill);
+ &fill, NULL);
}
if (renderer_ops->is_capable_to(renderer, RENDER_PATTERN))
renderer_ops->set_pattern (renderer, NULL);
@@ -346,13 +347,14 @@ box_draw(Box *box, DiaRenderer *renderer)
if (box->corner_radius > 0) {
renderer_ops->draw_rounded_rect(renderer,
&elem->corner,
- &lr_corner,
+ &lr_corner,
&box->border_color,
box->corner_radius);
} else {
renderer_ops->draw_rect(renderer,
&elem->corner,
- &lr_corner,
+ &lr_corner,
+ NULL,
&box->border_color);
}
}
diff --git a/objects/standard/image.c b/objects/standard/image.c
index 6a2bce4..16fef11 100644
--- a/objects/standard/image.c
+++ b/objects/standard/image.c
@@ -412,7 +412,8 @@ image_draw(Image *image, DiaRenderer *renderer)
renderer_ops->draw_rect(renderer,
&ul_corner,
- &lr_corner,
+ &lr_corner,
+ NULL,
&image->border_color);
}
/* Draw the image */
diff --git a/objects/standard/textobj.c b/objects/standard/textobj.c
index bec7e8e..53abd72 100644
--- a/objects/standard/textobj.c
+++ b/objects/standard/textobj.c
@@ -249,7 +249,7 @@ textobj_draw(Textobj *textobj, DiaRenderer *renderer)
ul.y = box.top;
lr.x = box.right;
lr.y = box.bottom;
- DIA_RENDERER_GET_CLASS (renderer)->fill_rect (renderer, &ul, &lr, &textobj->fill_color);
+ DIA_RENDERER_GET_CLASS (renderer)->draw_rect (renderer, &ul, &lr, &textobj->fill_color, NULL);
}
text_draw(textobj->text, renderer);
}
diff --git a/plug-ins/cairo/diacairo-renderer.c b/plug-ins/cairo/diacairo-renderer.c
index e2e9271..1bf5376 100644
--- a/plug-ins/cairo/diacairo-renderer.c
+++ b/plug-ins/cairo/diacairo-renderer.c
@@ -672,17 +672,12 @@ _rect(DiaRenderer *self,
static void
draw_rect(DiaRenderer *self,
Point *ul_corner, Point *lr_corner,
- Color *color)
+ Color *fill, Color *stroke)
{
- _rect (self, ul_corner, lr_corner, color, FALSE);
-}
-
-static void
-fill_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color)
-{
- _rect (self, ul_corner, lr_corner, color, TRUE);
+ if (fill)
+ _rect (self, ul_corner, lr_corner, fill, TRUE);
+ if (stroke)
+ _rect (self, ul_corner, lr_corner, stroke, FALSE);
}
static void
@@ -1245,8 +1240,7 @@ cairo_renderer_class_init (DiaCairoRendererClass *klass)
renderer_class->set_font = set_font;
renderer_class->draw_line = draw_line;
- renderer_class->draw_rect = draw_rect;
- renderer_class->fill_rect = fill_rect;
+ renderer_class->draw_polygon = draw_polygon;
renderer_class->draw_arc = draw_arc;
renderer_class->fill_arc = fill_arc;
renderer_class->draw_ellipse = draw_ellipse;
@@ -1258,7 +1252,6 @@ cairo_renderer_class_init (DiaCairoRendererClass *klass)
/* medium level functions */
renderer_class->draw_rect = draw_rect;
renderer_class->draw_polyline = draw_polyline;
- renderer_class->draw_polygon = draw_polygon;
renderer_class->draw_bezier = draw_bezier;
renderer_class->draw_beziergon = draw_beziergon;
diff --git a/plug-ins/cgm/cgm.c b/plug-ins/cgm/cgm.c
index 4d391d6..ca3ba4f 100644
--- a/plug-ins/cgm/cgm.c
+++ b/plug-ins/cgm/cgm.c
@@ -275,10 +275,7 @@ static void draw_polygon(DiaRenderer *self,
Color *fill, Color *stroke);
static void draw_rect(DiaRenderer *self,
Point *ul_corner, Point *lr_corner,
- Color *colour);
-static void fill_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *colour);
+ Color *fill, Color *stroke);
static void draw_arc(DiaRenderer *self,
Point *center,
real width, real height,
@@ -797,27 +794,11 @@ draw_polygon (DiaRenderer *self,
static void
draw_rect(DiaRenderer *self,
Point *ul_corner, Point *lr_corner,
- Color *colour)
+ Color *fill, Color *stroke)
{
CgmRenderer *renderer = CGM_RENDERER(self);
- write_filledge_attributes(renderer, NULL, colour);
-
- write_elhead(renderer->file, 4, 11, 4 * REALSIZE);
- write_real(renderer->file, ul_corner->x);
- write_real(renderer->file, swap_y(renderer, ul_corner->y));
- write_real(renderer->file, lr_corner->x);
- write_real(renderer->file, swap_y(renderer, lr_corner->y));
-}
-
-static void
-fill_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *colour)
-{
- CgmRenderer *renderer = CGM_RENDERER(self);
-
- write_filledge_attributes(renderer, colour, NULL);
+ write_filledge_attributes(renderer, fill, stroke);
write_elhead(renderer->file, 4, 11, 4 * REALSIZE);
write_real(renderer->file, ul_corner->x);
@@ -826,8 +807,6 @@ fill_rect(DiaRenderer *self,
write_real(renderer->file, swap_y(renderer, lr_corner->y));
}
-
-
static void
write_ellarc(CgmRenderer *renderer,
int elemid,
@@ -1351,7 +1330,6 @@ cgm_renderer_class_init (CgmRendererClass *klass)
renderer_class->draw_polygon = draw_polygon;
renderer_class->draw_rect = draw_rect;
- renderer_class->fill_rect = fill_rect;
renderer_class->draw_arc = draw_arc;
renderer_class->fill_arc = fill_arc;
diff --git a/plug-ins/drs/dia-render-script-renderer.c b/plug-ins/drs/dia-render-script-renderer.c
index 7e9c5b4..2dbb15a 100644
--- a/plug-ins/drs/dia-render-script-renderer.c
+++ b/plug-ins/drs/dia-render-script-renderer.c
@@ -480,17 +480,14 @@ _rounded_rect(DiaRenderer *self,
static void
draw_rect(DiaRenderer *self,
Point *lefttop, Point *rightbottom,
- Color *color)
+ Color *fill, Color *stroke)
{
- _rounded_rect(self, lefttop, rightbottom, color, NULL, FALSE);
-}
-static void
-fill_rect(DiaRenderer *self,
- Point *lefttop, Point *rightbottom,
- Color *color)
-{
- _rounded_rect(self, lefttop, rightbottom, color, NULL, TRUE);
+ if (fill)
+ _rounded_rect(self, lefttop, rightbottom, fill, NULL, FALSE);
+ if (stroke)
+ _rounded_rect(self, lefttop, rightbottom, stroke, NULL, TRUE);
}
+
static void
draw_rounded_rect(DiaRenderer *self,
Point *lefttop, Point *rightbottom,
@@ -717,8 +714,7 @@ drs_renderer_class_init (DrsRendererClass *klass)
renderer_class->set_font = set_font;
renderer_class->draw_line = draw_line;
- renderer_class->draw_rect = draw_rect;
- renderer_class->fill_rect = fill_rect;
+ renderer_class->draw_polygon = draw_polygon;
renderer_class->draw_arc = draw_arc;
renderer_class->fill_arc = fill_arc;
renderer_class->draw_ellipse = draw_ellipse;
@@ -728,11 +724,10 @@ drs_renderer_class_init (DrsRendererClass *klass)
renderer_class->draw_image = draw_image;
/* medium level functions */
- renderer_class->draw_rect = draw_rect;
+ renderer_class->draw_rect = draw_rect;
renderer_class->draw_polyline = draw_polyline;
- renderer_class->draw_polygon = draw_polygon;
- renderer_class->draw_bezier = draw_bezier;
+ renderer_class->draw_bezier = draw_bezier;
renderer_class->draw_beziergon = draw_beziergon;
renderer_class->draw_rounded_polyline = draw_rounded_polyline;
diff --git a/plug-ins/dxf/dxf-export.c b/plug-ins/dxf/dxf-export.c
index 7894c8d..77378bf 100644
--- a/plug-ins/dxf/dxf-export.c
+++ b/plug-ins/dxf/dxf-export.c
@@ -135,9 +135,9 @@ static void draw_line(DiaRenderer *self,
static void draw_polyline(DiaRenderer *self,
Point *points, int num_points,
Color *color);
-static void fill_rect (DiaRenderer *renderer,
+static void draw_rect (DiaRenderer *renderer,
Point *ul_corner, Point *lr_corner,
- Color *color);
+ Color *fill, Color *stroke);
static void draw_polygon (DiaRenderer *renderer,
Point *points, int num_points,
Color *fill, Color *stroke);
@@ -228,9 +228,8 @@ dxf_renderer_class_init (DxfRendererClass *klass)
renderer_class->set_font = set_font;
renderer_class->draw_line = draw_line;
- renderer_class->draw_polyline = draw_polyline;
- renderer_class->fill_rect = fill_rect;
renderer_class->draw_polygon = draw_polygon;
+ renderer_class->draw_polyline = draw_polyline;
renderer_class->draw_arc = draw_arc;
renderer_class->fill_arc = fill_arc;
@@ -400,31 +399,6 @@ draw_polyline(DiaRenderer *self,
}
static void
-fill_rect (DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color)
-{
- DxfRenderer *renderer = DXF_RENDERER(self);
- Point pts[4] = {
- {ul_corner->x, -lr_corner->y},
- {ul_corner->x, -ul_corner->y},
- {lr_corner->x, -lr_corner->y},
- {lr_corner->x, -ul_corner->y}
- };
- int i;
- gchar buf[G_ASCII_DTOSTR_BUF_SIZE];
- gchar buf2[G_ASCII_DTOSTR_BUF_SIZE];
-
- fprintf(renderer->file, " 0\nSOLID\n");
- fprintf(renderer->file, " 8\n%s\n", renderer->layername);
- fprintf(renderer->file, " 62\n%d\n", dxf_color (color));
- for (i = 0; i < 4; ++i)
- fprintf(renderer->file, " %d\n%s\n %d\n%s\n",
- 10+i, g_ascii_formatd (buf, sizeof(buf), "%g", pts[i].x),
- 20+i, g_ascii_formatd (buf2, sizeof(buf2), "%g", pts[i].y));
-}
-
-static void
draw_polygon (DiaRenderer *self,
Point *points, int num_points,
Color *fill, Color *stroke)
diff --git a/plug-ins/hpgl/hpgl.c b/plug-ins/hpgl/hpgl.c
index a94f872..4c4f556 100644
--- a/plug-ins/hpgl/hpgl.c
+++ b/plug-ins/hpgl/hpgl.c
@@ -365,10 +365,13 @@ draw_polygon(DiaRenderer *object,
static void
draw_rect(DiaRenderer *object,
Point *ul_corner, Point *lr_corner,
- Color *colour)
+ Color *fill, Color *stroke)
{
+ Color *colour = fill ? fill : stroke;
HpglRenderer *renderer = HPGL_RENDERER (object);
+ g_return_if_fail (colour != NULL);
+
DIAG_NOTE(g_message("draw_rect %f,%f -> %f,%f",
ul_corner->x, ul_corner->y, lr_corner->x, lr_corner->y));
hpgl_select_pen(renderer, colour, 0.0);
@@ -380,28 +383,6 @@ draw_rect(DiaRenderer *object,
}
static void
-fill_rect(DiaRenderer *object,
- Point *ul_corner, Point *lr_corner,
- Color *colour)
-{
- DIAG_NOTE(g_message("fill_rect %f,%f -> %f,%f",
- ul_corner->x, ul_corner->y, lr_corner->x, lr_corner->y));
-#if 0
- HpglRenderer *renderer = HPGL_RENDERER (object);
-
- hpgl_select_pen(renderer, colour, 0.0);
- fprintf (renderer->file, "PU%d,%d;PD;RA%d,%d;\n",
- hpgl_scale(renderer, ul_corner->x),
- hpgl_scale(renderer, -ul_corner->y),
- hpgl_scale(renderer, lr_corner->x),
- hpgl_scale(renderer, -lr_corner->y));
-#else
- /* the fill modes aren't really compatible ... */
- draw_rect(object, ul_corner, lr_corner, colour);
-#endif
-}
-
-static void
draw_arc(DiaRenderer *object,
Point *center,
real width, real height,
@@ -669,8 +650,6 @@ hpgl_renderer_class_init (HpglRendererClass *klass)
renderer_class->draw_line = draw_line;
renderer_class->draw_polygon = draw_polygon;
- renderer_class->draw_rect = draw_rect;
- renderer_class->fill_rect = fill_rect;
renderer_class->draw_arc = draw_arc;
renderer_class->fill_arc = fill_arc;
renderer_class->draw_ellipse = draw_ellipse;
diff --git a/plug-ins/libart/dialibartrenderer.c b/plug-ins/libart/dialibartrenderer.c
index f963c5f..7e0b55a 100644
--- a/plug-ins/libart/dialibartrenderer.c
+++ b/plug-ins/libart/dialibartrenderer.c
@@ -555,131 +555,6 @@ draw_polygon(DiaRenderer *self,
}
static void
-draw_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color)
-{
- DiaLibartRenderer *renderer = DIA_LIBART_RENDERER (self);
- ArtVpath *vpath, *vpath_dashed;
- ArtSVP *svp;
- guint32 rgba;
- double top, bottom, left, right;
-
- dia_transform_coords_double(renderer->transform,
- ul_corner->x, ul_corner->y, &left, &top);
- dia_transform_coords_double(renderer->transform,
- lr_corner->x, lr_corner->y, &right, &bottom);
-
- if ((left>right) || (top>bottom))
- return;
-
- rgba = color_to_rgba(renderer, color);
-
- vpath = art_new (ArtVpath, 6);
-
- vpath[0].code = ART_MOVETO;
- vpath[0].x = left;
- vpath[0].y = top;
- vpath[1].code = ART_LINETO;
- vpath[1].x = right;
- vpath[1].y = top;
- vpath[2].code = ART_LINETO;
- vpath[2].x = right;
- vpath[2].y = bottom;
- vpath[3].code = ART_LINETO;
- vpath[3].x = left;
- vpath[3].y = bottom;
- vpath[4].code = ART_LINETO;
- vpath[4].x = left;
- vpath[4].y = top;
- vpath[5].code = ART_END;
- vpath[5].x = 0;
- vpath[5].y = 0;
-
- if (renderer->dash_enabled) {
- vpath_dashed = art_vpath_dash(vpath, &renderer->dash);
- art_free( vpath );
- vpath = vpath_dashed;
- }
-
- svp = art_svp_vpath_stroke (vpath,
- renderer->join_style,
- renderer->cap_style,
- renderer->line_width,
- 4,
- 0.25);
-
- art_free( vpath );
-
- art_rgb_svp_alpha (svp,
- 0, 0,
- renderer->pixel_width,
- renderer->pixel_height,
- rgba,
- renderer->rgb_buffer, renderer->pixel_width*3,
- NULL);
-
- art_svp_free( svp );
-}
-
-static void
-fill_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color)
-{
- DiaLibartRenderer *renderer = DIA_LIBART_RENDERER (self);
- ArtVpath *vpath;
- ArtSVP *svp;
- guint32 rgba;
- double top, bottom, left, right;
-
- dia_transform_coords_double(renderer->transform,
- ul_corner->x, ul_corner->y, &left, &top);
- dia_transform_coords_double(renderer->transform,
- lr_corner->x, lr_corner->y, &right, &bottom);
-
- if ((left>right) || (top>bottom))
- return;
-
- rgba = color_to_rgba(renderer, color);
-
- vpath = art_new (ArtVpath, 6);
-
- vpath[0].code = ART_MOVETO;
- vpath[0].x = left;
- vpath[0].y = top;
- vpath[1].code = ART_LINETO;
- vpath[1].x = right;
- vpath[1].y = top;
- vpath[2].code = ART_LINETO;
- vpath[2].x = right;
- vpath[2].y = bottom;
- vpath[3].code = ART_LINETO;
- vpath[3].x = left;
- vpath[3].y = bottom;
- vpath[4].code = ART_LINETO;
- vpath[4].x = left;
- vpath[4].y = top;
- vpath[5].code = ART_END;
- vpath[5].x = 0;
- vpath[5].y = 0;
-
- svp = art_svp_from_vpath (vpath);
-
- art_free( vpath );
-
- art_rgb_svp_alpha (svp,
- 0, 0,
- renderer->pixel_width,
- renderer->pixel_height,
- rgba,
- renderer->rgb_buffer, renderer->pixel_width*3,
- NULL);
-
- art_svp_free( svp );
-}
-
-static void
draw_arc(DiaRenderer *self,
Point *center,
real width, real height,
@@ -1323,7 +1198,7 @@ draw_image(DiaRenderer *self,
lr = *point;
lr.x += width;
lr.y += height;
- self_class->fill_rect(self, point, &lr, renderer->highlight_color);
+ self_class->draw_rect(self, point, &lr, renderer->highlight_color, NULL);
} else {
double real_width, real_height;
double x,y;
@@ -1537,9 +1412,6 @@ dia_libart_renderer_class_init (DiaLibartRendererClass *klass)
renderer_class->draw_polygon = draw_polygon;
- renderer_class->draw_rect = draw_rect;
- renderer_class->fill_rect = fill_rect;
-
renderer_class->draw_arc = draw_arc;
renderer_class->fill_arc = fill_arc;
diff --git a/plug-ins/metapost/render_metapost.c b/plug-ins/metapost/render_metapost.c
index 0ce4264..6ddcd8c 100644
--- a/plug-ins/metapost/render_metapost.c
+++ b/plug-ins/metapost/render_metapost.c
@@ -168,12 +168,6 @@ static void draw_polyline(DiaRenderer *self,
static void draw_polygon(DiaRenderer *self,
Point *points, int num_points,
Color *fill, Color *stroke);
-static void draw_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color);
-static void fill_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color);
static void draw_arc(DiaRenderer *self,
Point *center,
real width, real height,
@@ -279,9 +273,6 @@ metapost_renderer_class_init (MetapostRendererClass *klass)
renderer_class->draw_polygon = draw_polygon;
- renderer_class->draw_rect = draw_rect;
- renderer_class->fill_rect = fill_rect;
-
renderer_class->draw_arc = draw_arc;
renderer_class->fill_arc = fill_arc;
@@ -671,66 +662,6 @@ draw_polygon(DiaRenderer *self,
}
static void
-draw_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color)
-{
- MetapostRenderer *renderer = METAPOST_RENDERER (self);
- gchar ulx_buf[DTOSTR_BUF_SIZE];
- gchar uly_buf[DTOSTR_BUF_SIZE];
- gchar lrx_buf[DTOSTR_BUF_SIZE];
- gchar lry_buf[DTOSTR_BUF_SIZE];
-
- mp_dtostr(ulx_buf, (gdouble) ul_corner->x);
- mp_dtostr(uly_buf, (gdouble) ul_corner->y);
- mp_dtostr(lrx_buf, (gdouble) lr_corner->x);
- mp_dtostr(lry_buf, (gdouble) lr_corner->y);
-
- set_line_color(renderer,color);
-
- fprintf(renderer->file,
- " draw (%sx,%sy)--(%sx,%sy)--(%sx,%sy)--(%sx,%sy)--cycle",
- ulx_buf, uly_buf,
- ulx_buf, lry_buf,
- lrx_buf, lry_buf,
- lrx_buf, uly_buf );
- end_draw_op(renderer);
-}
-
-static void
-fill_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color)
-{
- MetapostRenderer *renderer = METAPOST_RENDERER (self);
- gchar ulx_buf[DTOSTR_BUF_SIZE];
- gchar uly_buf[DTOSTR_BUF_SIZE];
- gchar lrx_buf[DTOSTR_BUF_SIZE];
- gchar lry_buf[DTOSTR_BUF_SIZE];
- gchar red_buf[DTOSTR_BUF_SIZE];
- gchar green_buf[DTOSTR_BUF_SIZE];
- gchar blue_buf[DTOSTR_BUF_SIZE];
-
- mp_dtostr(ulx_buf, (gdouble) ul_corner->x);
- mp_dtostr(uly_buf, (gdouble) ul_corner->y);
- mp_dtostr(lrx_buf, (gdouble) lr_corner->x);
- mp_dtostr(lry_buf, (gdouble) lr_corner->y);
-
- fprintf(renderer->file,
- " path p;\n"
- " p = (%sx,%sy)--(%sx,%sy)--(%sx,%sy)--(%sx,%sy)--cycle;\n",
- ulx_buf, uly_buf,
- ulx_buf, lry_buf,
- lrx_buf, lry_buf,
- lrx_buf, uly_buf );
- fprintf(renderer->file,
- " fill p withcolor (%s,%s,%s);\n",
- mp_dtostr(red_buf, (gdouble) color->red),
- mp_dtostr(green_buf, (gdouble) color->green),
- mp_dtostr(blue_buf, (gdouble) color->blue) );
-}
-
-static void
metapost_arc(MetapostRenderer *renderer,
Point *center,
real width, real height,
diff --git a/plug-ins/pgf/render_pgf.c b/plug-ins/pgf/render_pgf.c
index 719900f..3b4d55d 100644
--- a/plug-ins/pgf/render_pgf.c
+++ b/plug-ins/pgf/render_pgf.c
@@ -99,12 +99,6 @@ static void draw_rounded_polyline (DiaRenderer *self,
static void draw_polygon(DiaRenderer *self,
Point *points, int num_points,
Color *fill, Color *stroke);
-static void draw_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color);
-static void fill_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color);
static void draw_rounded_rect(DiaRenderer *self,
Point *ul_corner, Point *lr_corner,
Color *color, real radius);
@@ -256,9 +250,6 @@ pgf_renderer_class_init (PgfRendererClass *klass)
renderer_class->draw_polygon = draw_polygon;
- renderer_class->draw_rect = draw_rect;
- renderer_class->fill_rect = fill_rect;
-
renderer_class->draw_rounded_rect = draw_rounded_rect;
renderer_class->fill_rounded_rect = fill_rounded_rect;
@@ -599,26 +590,6 @@ pgf_rect(PgfRenderer *renderer,
lrx_buf, uly_buf );
}
-static void
-draw_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color)
-{
- PgfRenderer *renderer = PGF_RENDERER(self);
-
- pgf_rect(renderer,ul_corner,lr_corner,color,FALSE);
-}
-
-static void
-fill_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color)
-{
- PgfRenderer *renderer = PGF_RENDERER(self);
-
- pgf_rect(renderer,ul_corner,lr_corner,color,TRUE);
-}
-
static void
draw_rounded_rect(DiaRenderer *self,
Point *ul_corner, Point *lr_corner,
diff --git a/plug-ins/postscript/diapsrenderer.c b/plug-ins/postscript/diapsrenderer.c
index 86079af..d0dd7ba 100644
--- a/plug-ins/postscript/diapsrenderer.c
+++ b/plug-ins/postscript/diapsrenderer.c
@@ -385,51 +385,6 @@ draw_polygon (DiaRenderer *self,
}
static void
-psrenderer_rect(DiaPsRenderer *renderer,
- Point *ul_corner,
- Point *lr_corner,
- Color *color,
- gboolean filled)
-{
- gchar ulx_buf[DTOSTR_BUF_SIZE];
- gchar uly_buf[DTOSTR_BUF_SIZE];
- gchar lrx_buf[DTOSTR_BUF_SIZE];
- gchar lry_buf[DTOSTR_BUF_SIZE];
-
- lazy_setcolor(renderer,color);
-
- psrenderer_dtostr(ulx_buf, (gdouble) ul_corner->x);
- psrenderer_dtostr(uly_buf, (gdouble) ul_corner->y);
- psrenderer_dtostr(lrx_buf, (gdouble) lr_corner->x);
- psrenderer_dtostr(lry_buf, (gdouble) lr_corner->y);
-
- fprintf(renderer->file, "n %s %s m %s %s l %s %s l %s %s l %s\n",
- ulx_buf, uly_buf,
- ulx_buf, lry_buf,
- lrx_buf, lry_buf,
- lrx_buf, uly_buf,
- filled ? "f" : "cp s" );
-}
-
-static void
-draw_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color)
-{
- DiaPsRenderer *renderer = DIA_PS_RENDERER(self);
- psrenderer_rect(renderer, ul_corner, lr_corner, color, FALSE);
-}
-
-static void
-fill_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color)
-{
- DiaPsRenderer *renderer = DIA_PS_RENDERER(self);
- psrenderer_rect(renderer, ul_corner, lr_corner, color, TRUE);
-}
-
-static void
psrenderer_arc(DiaPsRenderer *renderer,
Point *center,
real width, real height,
@@ -1045,8 +1000,6 @@ dia_ps_renderer_class_init (DiaPsRendererClass *klass)
/* medium level functions */
renderer_class->draw_bezier = draw_bezier;
renderer_class->draw_beziergon = draw_beziergon;
- renderer_class->draw_rect = draw_rect;
- renderer_class->fill_rect = fill_rect;
renderer_class->draw_polyline = draw_polyline;
/* ps specific */
diff --git a/plug-ins/pstricks/render_pstricks.c b/plug-ins/pstricks/render_pstricks.c
index 3af6279..481e6f2 100644
--- a/plug-ins/pstricks/render_pstricks.c
+++ b/plug-ins/pstricks/render_pstricks.c
@@ -82,12 +82,6 @@ static void draw_polyline(DiaRenderer *self,
static void draw_polygon(DiaRenderer *self,
Point *points, int num_points,
Color *fill, Color *stroke);
-static void draw_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color);
-static void fill_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color);
static void draw_arc(DiaRenderer *self,
Point *center,
real width, real height,
@@ -188,9 +182,6 @@ pstricks_renderer_class_init (PstricksRendererClass *klass)
renderer_class->draw_polygon = draw_polygon;
- renderer_class->draw_rect = draw_rect;
- renderer_class->fill_rect = fill_rect;
-
renderer_class->draw_arc = draw_arc;
renderer_class->fill_arc = fill_arc;
@@ -478,51 +469,6 @@ draw_polygon (DiaRenderer *self,
}
static void
-pstricks_rect(PstricksRenderer *renderer,
- Point *ul_corner, Point *lr_corner,
- Color *color, gboolean filled)
-{
- gchar ulx_buf[DTOSTR_BUF_SIZE];
- gchar uly_buf[DTOSTR_BUF_SIZE];
- gchar lrx_buf[DTOSTR_BUF_SIZE];
- gchar lry_buf[DTOSTR_BUF_SIZE];
-
- set_line_color(renderer,color);
-
- pstricks_dtostr(ulx_buf, (gdouble) ul_corner->x);
- pstricks_dtostr(uly_buf, (gdouble) ul_corner->y);
- pstricks_dtostr(lrx_buf, (gdouble) lr_corner->x);
- pstricks_dtostr(lry_buf, (gdouble) lr_corner->y);
-
- fprintf(renderer->file, "\\pspolygon%s(%s,%s)(%s,%s)(%s,%s)(%s,%s)\n",
- (filled?"*":""),
- ulx_buf, uly_buf,
- ulx_buf, lry_buf,
- lrx_buf, lry_buf,
- lrx_buf, uly_buf );
-}
-
-static void
-draw_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color)
-{
- PstricksRenderer *renderer = PSTRICKS_RENDERER(self);
-
- pstricks_rect(renderer,ul_corner,lr_corner,color,FALSE);
-}
-
-static void
-fill_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color)
-{
- PstricksRenderer *renderer = PSTRICKS_RENDERER(self);
-
- pstricks_rect(renderer,ul_corner,lr_corner,color,TRUE);
-}
-
-static void
pstricks_arc(PstricksRenderer *renderer,
Point *center,
real width, real height,
diff --git a/plug-ins/python/codegen.py b/plug-ins/python/codegen.py
index 04c55c7..1a96f90 100644
--- a/plug-ins/python/codegen.py
+++ b/plug-ins/python/codegen.py
@@ -701,7 +701,6 @@ class PhpRenderer(ObjRenderer) :
mainfile.close()
ObjRenderer.end_render(self)
- def fill_rect(*args):pass
def draw_line(*args):pass
def draw_string(*args):pass
diff --git a/plug-ins/python/diadissect.py b/plug-ins/python/diadissect.py
index 4d2b812..427c451 100644
--- a/plug-ins/python/diadissect.py
+++ b/plug-ins/python/diadissect.py
@@ -105,13 +105,11 @@ class DissectRenderer :
self.Warning ("%s negative height" % (fun,))
if rect.left > rect.right :
self.Warning ("%s negative width" % (fun,))
- def draw_rect (self, rect, color) :
+ def draw_rect (self, rect, fill, stroke) :
self._rect (rect, "draw_rect")
def draw_rounded_rect (self, rect, color, rounding) :
# XXX: check rounding to be positive (smaller than half width, height?)
self._rect (rect, "draw_rect")
- def fill_rect (self, rect, color) :
- self._rect (rect, "draw_rect")
def fill_rounded_rect (self, rect, color, rounding) :
self._rect (rect, "draw_rect")
def _arc (self, center, width, height, angle1, angle2, fun) :
diff --git a/plug-ins/python/diastddia.py b/plug-ins/python/diastddia.py
index 0f3d4b9..bc13d78 100644
--- a/plug-ins/python/diastddia.py
+++ b/plug-ins/python/diastddia.py
@@ -157,10 +157,11 @@ class StandardDiaRenderer :
%s%s
</dia:object>''' % (self.oid, rect.left,rect.top, rect.right - rect.left, rect.bottom - rect.top,
self._tinting(color, fill, 'border_color', 'border_width'), self._stroke_style()))
- def draw_rect (self, rect, color) :
- self._box(rect, color, 0)
- def fill_rect (self, rect, color) :
- self._box(rect, color, 1)
+ def draw_rect (self, rect, fill, stroke) :
+ if fill :
+ self._box(rect, fill, 1)
+ if stroke :
+ self._box(rect, stroke, 0)
def _ellipse (self, center, width, height, color, fill) :
self.oid = self.oid + 1
diff --git a/plug-ins/python/diasvg.py b/plug-ins/python/diasvg.py
index 1602e75..b173cac 100644
--- a/plug-ins/python/diasvg.py
+++ b/plug-ins/python/diasvg.py
@@ -115,18 +115,14 @@ class SvgRenderer :
for pt in points :
self.f.write ('%.3f,%.3f ' % (pt.x, pt.y))
self.f.write('"/>\n')
- def draw_rect (self, rect, color) :
- self.f.write('<rect x="%.3f" y="%.3f" width="%.3f" height="%.3f" fill="none" stroke="%s"
stroke-width="%.3f" %s/>\n' \
+ def draw_rect (self, rect, fill, stroke) :
+ self.f.write('<rect x="%.3f" y="%.3f" width="%.3f" height="%.3f" fill="%s" stroke="%s"
stroke-width="%.3f" %s/>\n' \
% ( rect.left, rect.top, rect.right - rect.left, rect.bottom -
rect.top,
- self._rgb(color), self.line_width, self._stroke_style()))
+ self._rgb(fill), self._rgb(stroke), self.line_width,
self._stroke_style()))
def draw_rounded_rect (self, rect, color, rounding) :
self.f.write('<rect x="%.3f" y="%.3f" width="%.3f" height="%.3f" fill="none" stroke="%s"
stroke-width="%.3f" %s rx="%.3f" />\n' \
% ( rect.left, rect.top, rect.right - rect.left, rect.bottom -
rect.top,
self._rgb(color), self.line_width, self._stroke_style(),
rounding))
- def fill_rect (self, rect, color) :
- self.f.write('<rect x="%.3f" y="%.3f" width="%.3f" height="%.3f" fill="%s" stroke="none"
stroke-width="0"/>\n' \
- % ( rect.left, rect.top, rect.right - rect.left, rect.bottom -
rect.top,
- self._rgb(color)))
def fill_rounded_rect (self, rect, color, rounding) :
self.f.write('<rect x="%.3f" y="%.3f" width="%.3f" height="%.3f" fill="%s" stroke="none"
rx="%.3f" />\n' \
% ( rect.left, rect.top, rect.right - rect.left, rect.bottom -
rect.top,
diff --git a/plug-ins/python/export-render.py b/plug-ins/python/export-render.py
index 18ec028..9790830 100644
--- a/plug-ins/python/export-render.py
+++ b/plug-ins/python/export-render.py
@@ -76,10 +76,7 @@ class DumpRenderer :
self.f.write ("\t" + str(pt) + "\n")
## \brief Draw a rectangle
def draw_rect (self, rect, color) :
- self.f.write("draw_rect: " + str(rect) + str(color) + "\n")
- ## \brief Fill a rectangle
- def fill_rect (self, rect, color) :
- self.f.write("fill_rect: " + str(rect) + str(color) + "\n")
+ self.f.write("draw_rect: " + str(rect) + str(fill) + str(stroke) + "\n")
## \brief Draw an arc
def draw_arc (self, center, width, height, angle1, angle2, color) :
self.f.write("draw_arc: " + str(center) + ";" \
diff --git a/plug-ins/python/pydia-render.c b/plug-ins/python/pydia-render.c
index 5047445..b3ff2af 100644
--- a/plug-ins/python/pydia-render.c
+++ b/plug-ins/python/pydia-render.c
@@ -613,7 +613,6 @@ draw_polygon(DiaRenderer *renderer,
fill_po = PyDiaColor_New (fill);
else
Py_INCREF(Py_None), fill_po = Py_None;
-
if (stroke)
stroke_po = PyDiaColor_New (stroke);
else
@@ -621,7 +620,7 @@ draw_polygon(DiaRenderer *renderer,
Py_INCREF(self);
Py_INCREF(func);
- arg = Py_BuildValue ("(OO)", optt, fill_po, stroke_po);
+ arg = Py_BuildValue ("(OOO)", optt, fill_po, stroke_po);
if (arg) {
res = PyEval_CallObject (func, arg);
ON_RES(res, FALSE);
@@ -640,31 +639,42 @@ draw_polygon(DiaRenderer *renderer,
static void
draw_rect(DiaRenderer *renderer,
Point *ul_corner, Point *lr_corner,
- Color *colour)
+ Color *fill, Color *stroke)
{
PyObject *func, *res, *arg, *self = PYDIA_RENDERER (renderer);
func = PyObject_GetAttrString (self, "draw_rect");
if (func && PyCallable_Check(func)) {
PyObject *orect = PyDiaRectangle_New_FromPoints (ul_corner, lr_corner);
- PyObject *ocolor = PyDiaColor_New (colour);
+ PyObject *fill_po, *stroke_po;
Py_INCREF(self);
Py_INCREF(func);
- arg = Py_BuildValue ("(OO)", orect, ocolor);
+
+ if (fill)
+ fill_po = PyDiaColor_New (fill);
+ else
+ Py_INCREF(Py_None), fill_po = Py_None;
+ if (stroke)
+ stroke_po = PyDiaColor_New (stroke);
+ else
+ Py_INCREF(Py_None), stroke_po = Py_None;
+
+ arg = Py_BuildValue ("(OOO)", orect, fill_po, stroke_po);
if (arg) {
res = PyEval_CallObject (func, arg);
ON_RES(res, FALSE);
}
Py_XDECREF (arg);
Py_XDECREF (orect);
- Py_XDECREF (ocolor);
+ Py_XDECREF (fill_po);
+ Py_XDECREF (stroke_po);
Py_DECREF(func);
Py_DECREF(self);
}
else { /* member optional */
PyErr_Clear();
/* XXX: implementing the same fallback as DiaRenderer would do */
- DIA_RENDERER_CLASS (parent_class)->draw_rect (renderer, ul_corner, lr_corner, colour);
+ DIA_RENDERER_CLASS (parent_class)->draw_rect(renderer, ul_corner, lr_corner, fill, stroke);
}
}
@@ -701,48 +711,6 @@ draw_rounded_rect(DiaRenderer *renderer,
}
-/*!
- * \brief Fill rectangle
- *
- * Not optional on the PyDia side. If not implemented a runtime warning
- * will be generated when called.
- *
- * \memberof _DiaPyRenderer
- */
-static void
-fill_rect(DiaRenderer *renderer,
- Point *ul_corner, Point *lr_corner,
- Color *colour)
-{
- PyObject *func, *res, *arg, *self = PYDIA_RENDERER (renderer);
-
- func = PyObject_GetAttrString (self, "fill_rect");
- if (func && PyCallable_Check(func)) {
- PyObject *orect = PyDiaRectangle_New_FromPoints (ul_corner, lr_corner);
- PyObject *ocolor = PyDiaColor_New (colour);
-
- Py_INCREF(self);
- Py_INCREF(func);
- arg = Py_BuildValue ("(OO)", orect, ocolor);
- if (arg) {
- res = PyEval_CallObject (func, arg);
- ON_RES(res, FALSE);
- }
- Py_XDECREF (arg);
- Py_XDECREF (orect);
- Py_XDECREF (ocolor);
- Py_DECREF(func);
- Py_DECREF(self);
- }
- else { /* member not optional */
- gchar *msg = g_strdup_printf ("%s.fill_rect() implmentation missing.",
- G_OBJECT_CLASS_NAME (G_OBJECT_GET_CLASS (renderer)));
- PyErr_Clear();
- PyErr_Warn (PyExc_RuntimeWarning, msg);
- g_free (msg);
- }
-}
-
static void
fill_rounded_rect(DiaRenderer *renderer,
Point *ul_corner, Point *lr_corner,
@@ -1270,8 +1238,7 @@ dia_py_renderer_class_init (DiaPyRendererClass *klass)
renderer_class->set_font = set_font;
renderer_class->draw_line = draw_line;
- renderer_class->draw_rect = draw_rect;
- renderer_class->fill_rect = fill_rect;
+ renderer_class->draw_polygon = draw_polygon;
renderer_class->draw_arc = draw_arc;
renderer_class->fill_arc = fill_arc;
renderer_class->draw_ellipse = draw_ellipse;
@@ -1281,9 +1248,8 @@ dia_py_renderer_class_init (DiaPyRendererClass *klass)
renderer_class->draw_image = draw_image;
/* medium level functions */
- renderer_class->draw_rect = draw_rect;
+ renderer_class->draw_rect = draw_rect;
renderer_class->draw_polyline = draw_polyline;
- renderer_class->draw_polygon = draw_polygon;
renderer_class->draw_bezier = draw_bezier;
renderer_class->draw_beziergon = draw_beziergon;
diff --git a/plug-ins/shape/shape-export.c b/plug-ins/shape/shape-export.c
index a59696f..e08da56 100644
--- a/plug-ins/shape/shape-export.c
+++ b/plug-ins/shape/shape-export.c
@@ -114,7 +114,7 @@ static void draw_polygon(DiaRenderer *self,
Color *fill, Color *stroke);
static void draw_rect(DiaRenderer *self,
Point *ul_corner, Point *lr_corner,
- Color *colour);
+ Color *fill, Color *stroke);
static void draw_ellipse(DiaRenderer *self,
Point *center,
real width, real height,
@@ -475,14 +475,15 @@ add_rectangle_connection_points (ShapeRenderer *renderer,
static void
draw_rect (DiaRenderer *self,
Point *ul_corner, Point *lr_corner,
- Color *colour)
+ Color *fill, Color *stroke)
{
ShapeRenderer *renderer = SHAPE_RENDERER(self);
/* use base class implementation */
- DIA_RENDERER_CLASS(parent_class)->draw_rect (self, ul_corner, lr_corner, colour);
+ DIA_RENDERER_CLASS(parent_class)->draw_rect (self, ul_corner, lr_corner, fill, stroke);
/* do our own stuff */
- add_rectangle_connection_points(renderer, ul_corner, lr_corner);
+ if (stroke)
+ add_rectangle_connection_points(renderer, ul_corner, lr_corner);
}
static void
diff --git a/plug-ins/vdx/vdx-export.c b/plug-ins/vdx/vdx-export.c
index 5a5edb0..134d0ea 100644
--- a/plug-ins/vdx/vdx-export.c
+++ b/plug-ins/vdx/vdx-export.c
@@ -115,12 +115,6 @@ static void draw_polyline(DiaRenderer *self,
static void draw_polygon(DiaRenderer *self,
Point *points, int num_points,
Color *fill, Color *stroke);
-static void draw_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color);
-static void fill_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color);
static void draw_arc(DiaRenderer *self,
Point *center,
real width, real height,
@@ -232,9 +226,6 @@ vdx_renderer_class_init (VDXRendererClass *klass)
renderer_class->draw_polygon = draw_polygon;
- renderer_class->draw_rect = draw_rect;
- renderer_class->fill_rect = fill_rect;
-
renderer_class->draw_arc = draw_arc;
renderer_class->fill_arc = fill_arc;
@@ -888,53 +879,6 @@ draw_polygon(DiaRenderer *self,
stroke_polygon (self, points, num_points, stroke);
}
-/** Render a Dia rectangle
- * @param self a renderer
- * @param ul_corner Upper-left corner
- * @param lr_corner Loower-right corner
- * @param color line colour
- */
-static void
-draw_rect (DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color)
-{
- Point points[5]; /* 5 so we close path */
-
- g_debug("draw_rect((%f,%f), (%f,%f)) -> draw_polyline",
- ul_corner->x, ul_corner->y, lr_corner->x, lr_corner->y);
- points[0].x = ul_corner->x; points[0].y = lr_corner->y;
- points[1] = *lr_corner;
- points[2].x = lr_corner->x; points[2].y = ul_corner->y;
- points[3] = *ul_corner;
- points[4] = points[0];
-
- draw_polygon(self, points, 5, NULL, color);
-}
-
-/** Render a Dia filled rectangle
- * @param self a renderer
- * @param ul_corner Upper-left corner
- * @param lr_corner Lower-right corner
- * @param color line colour
- */
-
-static void fill_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color)
-{
- Point points[5]; /* 5 so we close path */
-
- g_debug("fill_rect -> fill_polygon");
- points[0].x = ul_corner->x; points[0].y = lr_corner->y;
- points[1] = *lr_corner;
- points[2].x = lr_corner->x; points[2].y = ul_corner->y;
- points[3] = *ul_corner;
- points[4] = points[0];
-
- fill_polygon(self, points, 5, color);
-}
-
/** Render a Dia arc
* @param self a renderer
* @param center centre of arc
@@ -945,7 +889,6 @@ static void fill_rect(DiaRenderer *self,
* @param color line colour
* @todo Not done yet
*/
-
static void draw_arc(DiaRenderer *self,
Point *center,
real width, real height,
diff --git a/plug-ins/wmf/wmf.cpp b/plug-ins/wmf/wmf.cpp
index fe50454..1f319d4 100644
--- a/plug-ins/wmf/wmf.cpp
+++ b/plug-ins/wmf/wmf.cpp
@@ -706,7 +706,7 @@ draw_polygon(DiaRenderer *self,
static void
draw_rect(DiaRenderer *self,
Point *ul_corner, Point *lr_corner,
- Color *colour)
+ Color *fill, Color *stroke)
{
WmfRenderer *renderer = WMF_RENDERER (self);
@@ -715,35 +715,27 @@ draw_rect(DiaRenderer *self,
DIAG_NOTE(renderer, "draw_rect %f,%f -> %f,%f\n",
ul_corner->x, ul_corner->y, lr_corner->x, lr_corner->y);
- hPen = UsePen(renderer, colour);
-
- W32::Rectangle(renderer->hFileDC,
- SCX(ul_corner->x), SCY(ul_corner->y),
- SCX(lr_corner->x), SCY(lr_corner->y));
-
- DonePen(renderer, hPen);
-}
-
-static void
-fill_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *colour)
-{
- WmfRenderer *renderer = WMF_RENDERER (self);
- W32::HGDIOBJ hBrush, hBrOld;
- W32::COLORREF rgb = W32COLOR(colour);
-
- DIAG_NOTE(renderer, "fill_rect %f,%f -> %f,%f\n",
- ul_corner->x, ul_corner->y, lr_corner->x, lr_corner->y);
-
- hBrush = W32::CreateSolidBrush(rgb);
- hBrOld = W32::SelectObject(renderer->hFileDC, hBrush);
+ if (fill) {
+ W32::HGDIOBJ hBrush, hBrOld;
+ W32::COLORREF rgb = W32COLOR(fill);
+ hBrush = W32::CreateSolidBrush(rgb);
+ hBrOld = W32::SelectObject(renderer->hFileDC, hBrush);
+ W32::Rectangle (renderer->hFileDC,
+ SCX(ul_corner->x), SCY(ul_corner->y),
+ SCX(lr_corner->x), SCY(lr_corner->y));
+ W32::SelectObject (renderer->hFileDC,
+ W32::GetStockObject (HOLLOW_BRUSH) );
+ W32::DeleteObject(hBrush);
+ }
+ if (stroke) {
+ hPen = UsePen(renderer, stroke);
- draw_rect(self, ul_corner, lr_corner, NULL);
+ W32::Rectangle (renderer->hFileDC,
+ SCX(ul_corner->x), SCY(ul_corner->y),
+ SCX(lr_corner->x), SCY(lr_corner->y));
- W32::SelectObject(renderer->hFileDC,
- W32::GetStockObject (HOLLOW_BRUSH) );
- W32::DeleteObject(hBrush);
+ DonePen(renderer, hPen);
+ }
}
static void
@@ -1287,8 +1279,7 @@ wmf_renderer_class_init (WmfRendererClass *klass)
renderer_class->set_font = set_font;
renderer_class->draw_line = draw_line;
- renderer_class->draw_rect = draw_rect;
- renderer_class->fill_rect = fill_rect;
+ renderer_class->draw_polygon = draw_polygon;
renderer_class->draw_arc = draw_arc;
#ifndef HAVE_LIBEMF
renderer_class->fill_arc = fill_arc;
@@ -1303,7 +1294,6 @@ wmf_renderer_class_init (WmfRendererClass *klass)
/* medium level functions */
renderer_class->draw_rect = draw_rect;
renderer_class->draw_polyline = draw_polyline;
- renderer_class->draw_polygon = draw_polygon;
renderer_class->draw_bezier = draw_bezier;
#ifndef DIRECT_WMF
diff --git a/plug-ins/wpg/wpg-import.c b/plug-ins/wpg/wpg-import.c
index 67a14a7..9536b41 100644
--- a/plug-ins/wpg/wpg-import.c
+++ b/plug-ins/wpg/wpg-import.c
@@ -155,12 +155,11 @@ _do_polygon (WpgImportRenderer *ren, Point *points, int iNum)
static void
_do_rect (WpgImportRenderer *ren, Point *points)
{
- if (ren->LineAttr.Type != WPG_LA_NONE)
+ if (ren->LineAttr.Type != WPG_LA_NONE || ren->FillAttr.Type != WPG_FA_HOLLOW)
DIA_RENDERER_GET_CLASS(ren)->draw_rect (DIA_RENDERER(ren),
- &points[0], &points[1], &ren->stroke);
- if (ren->FillAttr.Type != WPG_FA_HOLLOW)
- DIA_RENDERER_GET_CLASS(ren)->fill_rect (DIA_RENDERER(ren),
- &points[0], &points[1], &ren->fill);
+ &points[0], &points[1],
+ (ren->FillAttr.Type != WPG_FA_HOLLOW) ? &ren->fill : NULL,
+ (ren->LineAttr.Type != WPG_LA_NONE) ? &ren->stroke : NULL);
}
static void
_do_bezier (WpgImportRenderer *ren, WPGPoint *pts, int iNum)
diff --git a/plug-ins/wpg/wpg.c b/plug-ins/wpg/wpg.c
index e1a4cf2..10bd7c6 100644
--- a/plug-ins/wpg/wpg.c
+++ b/plug-ins/wpg/wpg.c
@@ -563,14 +563,24 @@ draw_polygon(DiaRenderer *self,
static void
draw_rect(DiaRenderer *self,
Point *ul_corner, Point *lr_corner,
- Color *colour)
+ Color *fill, Color *stroke)
{
WpgRenderer *renderer = WPG_RENDERER (self);
gint16* pData;
+ WPG_LineAttr lt = renderer->LineAttr.Type;
+
DIAG_NOTE(g_message("draw_rect %f,%f -> %f,%f",
ul_corner->x, ul_corner->y, lr_corner->x, lr_corner->y));
- WriteLineAttr(renderer, colour);
+ g_return_if_fail (fill || stroke);
+
+ if (!stroke)
+ renderer->LineAttr.Type = WPG_LA_NONE;
+ WriteLineAttr(renderer, stroke ? stroke : fill);
+ if (fill)
+ WriteFillAttr(renderer, fill, TRUE);
+ else
+ WriteFillAttr(renderer, stroke, FALSE);
WriteRecHead(renderer, WPG_RECTANGLE, 4*sizeof(gint16));
pData = g_new(gint16, 4);
@@ -580,26 +590,14 @@ draw_rect(DiaRenderer *self,
pData[3] = SC(lr_corner->y - ul_corner->y); /* height */
fwrite_le(pData, sizeof(gint16), 4, renderer->file);
-
+ if (!stroke)
+ renderer->LineAttr.Type = lt;
+ /* switch off fill */
+ WriteFillAttr(renderer, fill ? fill : stroke, FALSE);
g_free(pData);
}
static void
-fill_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *colour)
-{
- WpgRenderer *renderer = WPG_RENDERER (self);
-
- DIAG_NOTE(g_message("fill_rect %f,%f -> %f,%f",
- ul_corner->x, ul_corner->y, lr_corner->x, lr_corner->y));
-
- WriteFillAttr(renderer, colour, TRUE);
- draw_rect(self, ul_corner, lr_corner, colour);
- WriteFillAttr(renderer, colour, FALSE);
-}
-
-static void
draw_arc(DiaRenderer *self,
Point *center,
real width, real height,
@@ -1033,8 +1031,7 @@ wpg_renderer_class_init (WpgRendererClass *klass)
renderer_class->set_font = set_font;
renderer_class->draw_line = draw_line;
- renderer_class->draw_rect = draw_rect;
- renderer_class->fill_rect = fill_rect;
+ renderer_class->draw_polygon = draw_polygon;
renderer_class->draw_arc = draw_arc;
renderer_class->fill_arc = fill_arc;
renderer_class->draw_ellipse = draw_ellipse;
@@ -1044,9 +1041,8 @@ wpg_renderer_class_init (WpgRendererClass *klass)
renderer_class->draw_image = draw_image;
/* medium level functions */
- renderer_class->draw_rect = draw_rect;
+ renderer_class->draw_rect = draw_rect;
renderer_class->draw_polyline = draw_polyline;
- renderer_class->draw_polygon = draw_polygon;
renderer_class->draw_bezier = draw_bezier;
renderer_class->draw_beziergon = draw_beziergon;
diff --git a/plug-ins/xfig/xfig-export.c b/plug-ins/xfig/xfig-export.c
index b0bb6f5..68f9e3e 100644
--- a/plug-ins/xfig/xfig-export.c
+++ b/plug-ins/xfig/xfig-export.c
@@ -134,10 +134,7 @@ static void draw_polygon(DiaRenderer *self,
Color *fill, Color *stroke);
static void draw_rect(DiaRenderer *self,
Point *ul_corner, Point *lr_corner,
- Color *colour);
-static void fill_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *colour);
+ Color *fill, Color *stroke);
static void draw_arc(DiaRenderer *self,
Point *center,
real width, real height,
@@ -256,15 +253,13 @@ xfig_renderer_class_init (XfigRendererClass *klass)
renderer_class->draw_polygon = draw_polygon;
- renderer_class->draw_rect = draw_rect;
- renderer_class->fill_rect = fill_rect;
-
renderer_class->draw_arc = draw_arc;
renderer_class->fill_arc = fill_arc;
renderer_class->draw_ellipse = draw_ellipse;
renderer_class->fill_ellipse = fill_ellipse;
+ renderer_class->draw_rect = draw_rect;
renderer_class->draw_bezier = draw_bezier;
renderer_class->draw_beziergon = draw_beziergon;
@@ -776,9 +771,9 @@ draw_polygon(DiaRenderer *self,
}
static void
-draw_rect(DiaRenderer *self,
- Point *ul_corner, Point *lr_corner,
- Color *color)
+stroke_rect(DiaRenderer *self,
+ Point *ul_corner, Point *lr_corner,
+ Color *color)
{
XfigRenderer *renderer = XFIG_RENDERER(self);
gchar d_buf[DTOSTR_BUF_SIZE];
@@ -805,7 +800,7 @@ draw_rect(DiaRenderer *self,
static void
fill_rect(DiaRenderer *self,
Point *ul_corner, Point *lr_corner,
- Color *color)
+ Color *color)
{
XfigRenderer *renderer = XFIG_RENDERER(self);
gchar d_buf[DTOSTR_BUF_SIZE];
@@ -829,7 +824,17 @@ fill_rect(DiaRenderer *self,
(int)figCoord(renderer, ul_corner->x), (int)figCoord(renderer, lr_corner->y),
(int)figCoord(renderer, ul_corner->x), (int)figCoord(renderer, ul_corner->y));
}
-
+static void
+draw_rect(DiaRenderer *self,
+ Point *ul_corner, Point *lr_corner,
+ Color *fill, Color *stroke)
+{
+ /* XXX: optimize to one call? */
+ if (fill)
+ fill_rect (self, ul_corner, lr_corner, fill);
+ if (stroke)
+ stroke_rect (self, ul_corner, lr_corner, stroke);
+}
static void
draw_arc(DiaRenderer *self,
Point *center,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]