From 3cc158ecff4f2420590ab102d7f3a84d7ca2a711 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Thu, 23 Dec 2010 00:10:28 -0800 Subject: Split SPCanvasItem and SPCanvasGroup to individual .h files. Removed forward header. (bzr r9978.1.1) --- src/display/Makefile_insert | 3 +- src/display/canvas-arena.cpp | 3 - src/display/canvas-arena.h | 2 +- src/display/canvas-axonomgrid.cpp | 3 - src/display/canvas-bpath.cpp | 22 ++----- src/display/canvas-bpath.h | 9 ++- src/display/canvas-grid.cpp | 4 +- src/display/canvas-grid.h | 3 +- src/display/canvas-temporary-item-list.h | 3 +- src/display/canvas-temporary-item.h | 4 +- src/display/canvas-text.cpp | 1 - src/display/canvas-text.h | 13 ++-- src/display/display-forward.h | 52 --------------- src/display/gnome-canvas-acetate.cpp | 1 - src/display/gnome-canvas-acetate.h | 19 ++++-- src/display/guideline.cpp | 3 - src/display/guideline.h | 8 +-- src/display/nr-arena-glyphs.h | 27 +++++--- src/display/nr-arena-shape.cpp | 34 +++++----- src/display/nr-arena-shape.h | 1 - src/display/snap-indicator.h | 3 +- src/display/sodipodi-ctrl.cpp | 1 - src/display/sodipodi-ctrl.h | 5 +- src/display/sodipodi-ctrlrect.cpp | 1 - src/display/sodipodi-ctrlrect.h | 11 ++-- src/display/sp-canvas-group.h | 45 +++++++++++++ src/display/sp-canvas-item.h | 110 +++++++++++++++++++++++++++++++ src/display/sp-canvas-util.cpp | 3 +- src/display/sp-canvas.cpp | 8 +-- src/display/sp-canvas.h | 60 +++-------------- src/display/sp-ctrlline.cpp | 1 - src/display/sp-ctrlline.h | 8 +-- src/display/sp-ctrlpoint.cpp | 1 - src/display/sp-ctrlpoint.h | 10 +-- src/display/sp-ctrlquadr.cpp | 9 +-- 35 files changed, 275 insertions(+), 216 deletions(-) delete mode 100644 src/display/display-forward.h create mode 100644 src/display/sp-canvas-group.h create mode 100644 src/display/sp-canvas-item.h (limited to 'src/display') diff --git a/src/display/Makefile_insert b/src/display/Makefile_insert index 58e667402..b50a71033 100644 --- a/src/display/Makefile_insert +++ b/src/display/Makefile_insert @@ -35,7 +35,6 @@ ink_common_sources += \ display/canvas-text.cpp \ display/curve.cpp \ display/curve.h \ - display/display-forward.h \ display/gnome-canvas-acetate.cpp \ display/gnome-canvas-acetate.h \ display/guideline.cpp \ @@ -53,6 +52,8 @@ ink_common_sources += \ display/sodipodi-ctrl.h \ display/sodipodi-ctrlrect.cpp \ display/sodipodi-ctrlrect.h \ + display/sp-canvas-group.h \ + display/sp-canvas-item.h \ display/sp-canvas-util.cpp \ display/sp-canvas-util.h \ display/sp-canvas.cpp \ diff --git a/src/display/canvas-arena.cpp b/src/display/canvas-arena.cpp index af9a38281..fb7ca9d78 100644 --- a/src/display/canvas-arena.cpp +++ b/src/display/canvas-arena.cpp @@ -1,5 +1,3 @@ -#define __SP_CANVAS_ARENA_C__ - /* * RGBA display list system for inkscape * @@ -15,7 +13,6 @@ #include #include -#include #include #include "helper/sp-marshal.h" #include diff --git a/src/display/canvas-arena.h b/src/display/canvas-arena.h index 34bc19946..7267583f0 100644 --- a/src/display/canvas-arena.h +++ b/src/display/canvas-arena.h @@ -13,7 +13,7 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "../display/sp-canvas.h" +#include "sp-canvas-item.h" #include "nr-arena-item.h" G_BEGIN_DECLS diff --git a/src/display/canvas-axonomgrid.cpp b/src/display/canvas-axonomgrid.cpp index 9dfde969d..550fd3559 100644 --- a/src/display/canvas-axonomgrid.cpp +++ b/src/display/canvas-axonomgrid.cpp @@ -1,5 +1,3 @@ -#define CANVAS_AXONOMGRID_C - /* * Copyright (C) 2006-2008 Johan Engelen */ @@ -21,7 +19,6 @@ #include "canvas-axonomgrid.h" #include "util/mathfns.h" #include "2geom/line.h" -#include "display-forward.h" #include #include "canvas-grid.h" diff --git a/src/display/canvas-bpath.cpp b/src/display/canvas-bpath.cpp index 063bdab66..f8a8ef22c 100644 --- a/src/display/canvas-bpath.cpp +++ b/src/display/canvas-bpath.cpp @@ -1,5 +1,3 @@ -#define __SP_CANVAS_BPATH_C__ - /* * Simple bezier bpath CanvasItem for inkscape * @@ -15,28 +13,20 @@ #ifdef HAVE_CONFIG_H # include "config.h" #endif +#include +#include +#include + #include "color.h" #include "sp-canvas-util.h" #include "inkscape-cairo.h" #include "canvas-bpath.h" -#include "display/display-forward.h" +#include "display/sp-canvas-group.h" #include "display/curve.h" #include "display/inkscape-cairo.h" -#include +#include "libnr/nr-pixops.h" #include "helper/geom.h" -#include -#include -#include - -/** -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif -#include - -#include -**/ void nr_pixblock_render_bpath_rgba (Shape* theS,uint32_t color,NRRectL &area,char* destBuf,int stride); diff --git a/src/display/canvas-bpath.h b/src/display/canvas-bpath.h index 65ad4aa00..0760baef6 100644 --- a/src/display/canvas-bpath.h +++ b/src/display/canvas-bpath.h @@ -1,13 +1,15 @@ -#ifndef __SP_CANVAS_BPATH_H__ -#define __SP_CANVAS_BPATH_H__ +#ifndef SEEN_SP_CANVAS_BPATH_H +#define SEEN_SP_CANVAS_BPATH_H /* * Simple bezier bpath CanvasItem for inkscape * * Authors: * Lauris Kaplinski + * Jon A. Cruz * * Copyright (C) 2001 Lauris Kaplinski and Ximian, Inc. + * Copyright (C) 2010 authors * * Released under GNU GPL * @@ -15,10 +17,11 @@ #include -#include +#include "sp-canvas-item.h" struct SPCanvasBPath; struct SPCanvasBPathClass; +struct SPCanvasGroup; struct SPCurve; #define SP_TYPE_CANVAS_BPATH (sp_canvas_bpath_get_type ()) diff --git a/src/display/canvas-grid.cpp b/src/display/canvas-grid.cpp index df73eb78e..5892e1dc7 100644 --- a/src/display/canvas-grid.cpp +++ b/src/display/canvas-grid.cpp @@ -12,10 +12,10 @@ * Don't be shy to correct things. */ +#include "sp-canvas-group.h" #include "sp-canvas-util.h" #include "util/mathfns.h" -#include "display-forward.h" -#include +#include "libnr/nr-pixops.h" #include "desktop-handles.h" #include "helper/units.h" #include "svg/svg-color.h" diff --git a/src/display/canvas-grid.h b/src/display/canvas-grid.h index a11d77d1d..b8f313948 100644 --- a/src/display/canvas-grid.h +++ b/src/display/canvas-grid.h @@ -14,7 +14,7 @@ #include #include -#include "display/sp-canvas.h" +#include "sp-canvas-item.h" #include "xml/repr.h" #include "ui/widget/color-picker.h" #include "ui/widget/scalar-unit.h" @@ -26,6 +26,7 @@ struct SPDesktop; struct SPNamedView; +struct SPCanvasBuf; class SPDocument; namespace Inkscape { diff --git a/src/display/canvas-temporary-item-list.h b/src/display/canvas-temporary-item-list.h index 4d712e216..47556b9f1 100644 --- a/src/display/canvas-temporary-item-list.h +++ b/src/display/canvas-temporary-item-list.h @@ -13,9 +13,10 @@ */ #include "forward.h" -#include "display/display-forward.h" #include +struct SPCanvasItem; + namespace Inkscape { namespace Display { diff --git a/src/display/canvas-temporary-item.h b/src/display/canvas-temporary-item.h index 5077fb55b..692f9d85b 100644 --- a/src/display/canvas-temporary-item.h +++ b/src/display/canvas-temporary-item.h @@ -12,9 +12,11 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "display/display-forward.h" #include +#include + +struct SPCanvasItem; namespace Inkscape { namespace Display { diff --git a/src/display/canvas-text.cpp b/src/display/canvas-text.cpp index 94312bacb..e2bc09679 100644 --- a/src/display/canvas-text.cpp +++ b/src/display/canvas-text.cpp @@ -13,7 +13,6 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "display-forward.h" #include "sp-canvas-util.h" #include "canvas-text.h" #include "display/inkscape-cairo.h" diff --git a/src/display/canvas-text.h b/src/display/canvas-text.h index e5d634985..cc194ccc4 100644 --- a/src/display/canvas-text.h +++ b/src/display/canvas-text.h @@ -1,5 +1,5 @@ -#ifndef __SP_CANVASTEXT_H__ -#define __SP_CANVASTEXT_H__ +#ifndef SEEN_SP_CANVASTEXT_H +#define SEEN_SP_CANVASTEXT_H /* * Canvas text. @@ -14,10 +14,7 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -/* - * FIXME: The following code should actually be in a separate file called display/canvas-text.h. It - * temporarily had to be moved here because of linker errors. - */ +#include "sp-canvas-item.h" struct SPItem; struct SPDesktop; @@ -26,7 +23,7 @@ struct SPDesktop; #define SP_CANVASTEXT(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_CANVASTEXT, SPCanvasText)) #define SP_IS_CANVASTEXT(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_CANVASTEXT)) -struct SPCanvasText : public SPCanvasItem{ +struct SPCanvasText : public SPCanvasItem { SPItem *item; // the item to which this line belongs in some sense; may be NULL for some users guint32 rgba; guint32 rgba_stroke; @@ -53,7 +50,7 @@ void sp_canvastext_set_number_as_text (SPCanvasText *ct, int num); void sp_canvastext_set_fontsize (SPCanvasText *ct, double size); void sp_canvastext_set_anchor (SPCanvasText *ct, double anchor_x, double anchor_y); -#endif +#endif // SEEN_SP_CANVASTEXT_H /* diff --git a/src/display/display-forward.h b/src/display/display-forward.h deleted file mode 100644 index 25c4a6e3d..000000000 --- a/src/display/display-forward.h +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef SEEN_DISPLAY_DISPLAY_FORWARD_H -#define SEEN_DISPLAY_DISPLAY_FORWARD_H - -#include - -struct SPCanvas; -struct SPCanvasClass; -struct SPCanvasItem; -typedef struct _SPCanvasItemClass SPCanvasItemClass; -struct SPCanvasGroup; -struct SPCanvasGroupClass; -class SPCurve; - -namespace Inkscape { -namespace Display { - class TemporaryItem; - class TemporaryItemList; -} -} - -#define SP_TYPE_CANVAS_ITEM (sp_canvas_item_get_type()) -#define SP_CANVAS_ITEM(obj) (GTK_CHECK_CAST((obj), SP_TYPE_CANVAS_ITEM, SPCanvasItem)) -#define SP_IS_CANVAS_ITEM(obj) (GTK_CHECK_TYPE((obj), SP_TYPE_CANVAS_ITEM)) -#define SP_CANVAS_ITEM_GET_CLASS(o) (GTK_CHECK_GET_CLASS((o), SP_TYPE_CANVAS_ITEM, SPCanvasItemClass)) - -GType sp_canvas_item_get_type(); - -#define SP_TYPE_CANVAS_GROUP (sp_canvas_group_get_type()) -#define SP_CANVAS_GROUP(obj) (GTK_CHECK_CAST((obj), SP_TYPE_CANVAS_GROUP, SPCanvasGroup)) -#define SP_IS_CANVAS_GROUP(obj) (GTK_CHECK_TYPE((obj), SP_TYPE_CANVAS_GROUP)) - -GType sp_canvas_group_get_type(); - -#define SP_TYPE_CANVAS (sp_canvas_get_type()) -#define SP_CANVAS(obj) (GTK_CHECK_CAST((obj), SP_TYPE_CANVAS, SPCanvas)) -#define SP_IS_CANVAS(obj) (GTK_CHECK_TYPE((obj), SP_TYPE_CANVAS)) - -GType sp_canvas_get_type(); - - -#endif /* !SEEN_DISPLAY_DISPLAY_FORWARD_H */ - -/* - Local Variables: - mode:c++ - c-file-style:"stroustrup" - c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) - indent-tabs-mode:nil - fill-column:99 - End: -*/ -// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 : diff --git a/src/display/gnome-canvas-acetate.cpp b/src/display/gnome-canvas-acetate.cpp index fdb137e27..c257f1f92 100644 --- a/src/display/gnome-canvas-acetate.cpp +++ b/src/display/gnome-canvas-acetate.cpp @@ -14,7 +14,6 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "display-forward.h" #include "gnome-canvas-acetate.h" static void sp_canvas_acetate_class_init (SPCanvasAcetateClass *klass); diff --git a/src/display/gnome-canvas-acetate.h b/src/display/gnome-canvas-acetate.h index 40574e1bf..8c284291c 100644 --- a/src/display/gnome-canvas-acetate.h +++ b/src/display/gnome-canvas-acetate.h @@ -1,5 +1,5 @@ -#ifndef __SP_CANVAS_ACETATE_H__ -#define __SP_CANVAS_ACETATE_H__ +#ifndef SEEN_SP_CANVAS_ACETATE_H +#define SEEN_SP_CANVAS_ACETATE_H /* * Infinite invisible canvas item @@ -16,7 +16,7 @@ */ #include -#include "display/sp-canvas.h" +#include "display/sp-canvas-item.h" #define GNOME_TYPE_CANVAS_ACETATE (sp_canvas_acetate_get_type ()) @@ -38,4 +38,15 @@ GtkType sp_canvas_acetate_get_type (void); -#endif +#endif // SEEN_SP_CANVAS_ACETATE_H + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 : diff --git a/src/display/guideline.cpp b/src/display/guideline.cpp index 0141692f2..ce1289faf 100644 --- a/src/display/guideline.cpp +++ b/src/display/guideline.cpp @@ -1,5 +1,3 @@ -#define __SP_GUIDELINE_C__ - /* * Horizontal/vertical but can also be angled line * @@ -18,7 +16,6 @@ #include #include <2geom/transforms.h> -#include "display-forward.h" #include "sp-canvas-util.h" #include "sp-ctrlpoint.h" #include "guideline.h" diff --git a/src/display/guideline.h b/src/display/guideline.h index a6ce57113..9654d04a1 100644 --- a/src/display/guideline.h +++ b/src/display/guideline.h @@ -1,5 +1,5 @@ -#ifndef __SP_GUIDELINE_H__ -#define __SP_GUIDELINE_H__ +#ifndef SEEN_SP_GUIDELINE_H +#define SEEN_SP_GUIDELINE_H /* * The visual representation of SPGuide. @@ -14,8 +14,8 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "sp-canvas.h" #include <2geom/point.h> +#include "sp-canvas-item.h" #define SP_TYPE_GUIDELINE (sp_guideline_get_type()) #define SP_GUIDELINE(o) (GTK_CHECK_CAST((o), SP_TYPE_GUIDELINE, SPGuideLine)) @@ -53,7 +53,7 @@ void sp_guideline_set_color(SPGuideLine *gl, unsigned int rgba); void sp_guideline_set_sensitive(SPGuideLine *gl, int sensitive); void sp_guideline_delete(SPGuideLine *gl); -#endif +#endif // SEEN_SP_GUIDELINE_H /* Local Variables: diff --git a/src/display/nr-arena-glyphs.h b/src/display/nr-arena-glyphs.h index 5bf94f3fc..1d15fef81 100644 --- a/src/display/nr-arena-glyphs.h +++ b/src/display/nr-arena-glyphs.h @@ -1,5 +1,5 @@ -#ifndef __NR_ARENA_GLYPHS_H__ -#define __NR_ARENA_GLYPHS_H__ +#ifndef SEEN_NR_ARENA_GLYPHS_H +#define SEEN_NR_ARENA_GLYPHS_H /* * RGBA display list system for inkscape @@ -17,15 +17,15 @@ #define NR_ARENA_GLYPHS(obj) (NR_CHECK_INSTANCE_CAST ((obj), NR_TYPE_ARENA_GLYPHS, NRArenaGlyphs)) #define NR_IS_ARENA_GLYPHS(obj) (NR_CHECK_INSTANCE_TYPE ((obj), NR_TYPE_ARENA_GLYPHS)) -#include +#include "libnrtype/nrtype-forward.h" -#include -#include -#include -#include +#include "forward.h" +#include "sp-paint-server.h" +#include "display/nr-arena-item.h" #define test_glyph_liv +struct SPCurve; class Shape; NRType nr_arena_glyphs_get_type (void); @@ -106,4 +106,15 @@ void nr_arena_glyphs_group_set_style (NRArenaGlyphsGroup *group, SPStyle *style) void nr_arena_glyphs_group_set_paintbox (NRArenaGlyphsGroup *group, const NRRect *pbox); -#endif +#endif // SEEN_NR_ARENA_GLYPHS_H + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 : diff --git a/src/display/nr-arena-shape.cpp b/src/display/nr-arena-shape.cpp index 6aaf395b3..6f38fd97d 100644 --- a/src/display/nr-arena-shape.cpp +++ b/src/display/nr-arena-shape.cpp @@ -1,5 +1,3 @@ -#define __NR_ARENA_SHAPE_C__ - /* * RGBA display list system for inkscape * @@ -12,34 +10,36 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ +#include +#include +#include +#include + #include <2geom/svg-path.h> #include <2geom/svg-path-parser.h> -#include -#include -#include -#include "display/curve.h" -#include -#include -#include #include <2geom/pathvector.h> #include <2geom/curves.h> -#include -#include -#include -#include +#include "display/sp-canvas.h" +#include "display/canvas-arena.h" +#include "display/nr-arena.h" +#include "display/nr-arena-shape.h" +#include "display/curve.h" +#include "libnr/nr-pixops.h" +#include "libnr/nr-blit.h" +#include "libnr/nr-convert2geom.h" +#include "livarot/Path.h" +#include "livarot/float-line.h" +#include "livarot/int-line.h" +#include "style.h" #include "inkscape-cairo.h" #include "helper/geom.h" #include "helper/geom-curves.h" #include "sp-filter.h" #include "sp-filter-reference.h" #include "display/nr-filter.h" -#include -#include #include "preferences.h" -#include #include "svg/svg.h" -#include //int showRuns=0; void nr_pixblock_render_shape_mask_or(NRPixBlock &m,Shape* theS); diff --git a/src/display/nr-arena-shape.h b/src/display/nr-arena-shape.h index 03505cfc2..d484615a9 100644 --- a/src/display/nr-arena-shape.h +++ b/src/display/nr-arena-shape.h @@ -17,7 +17,6 @@ #define NR_ARENA_SHAPE(obj) (NR_CHECK_INSTANCE_CAST ((obj), NR_TYPE_ARENA_SHAPE, NRArenaShape)) #define NR_IS_ARENA_SHAPE(obj) (NR_CHECK_INSTANCE_TYPE ((obj), NR_TYPE_ARENA_SHAPE)) -#include "display/display-forward.h" #include "display/canvas-bpath.h" #include "forward.h" #include "sp-paint-server.h" diff --git a/src/display/snap-indicator.h b/src/display/snap-indicator.h index 5475f9f60..d60ff1481 100644 --- a/src/display/snap-indicator.h +++ b/src/display/snap-indicator.h @@ -15,12 +15,13 @@ */ #include "forward.h" -#include "display/display-forward.h" #include "snapped-point.h" namespace Inkscape { namespace Display { +class TemporaryItem; + class SnapIndicator { public: SnapIndicator(SPDesktop *desktop); diff --git a/src/display/sodipodi-ctrl.cpp b/src/display/sodipodi-ctrl.cpp index 6084ff898..a63f570cf 100644 --- a/src/display/sodipodi-ctrl.cpp +++ b/src/display/sodipodi-ctrl.cpp @@ -10,7 +10,6 @@ #include <2geom/transforms.h> #include "sp-canvas-util.h" -#include "display-forward.h" #include "sodipodi-ctrl.h" #include "libnr/nr-pixops.h" diff --git a/src/display/sodipodi-ctrl.h b/src/display/sodipodi-ctrl.h index 945d94807..a708ad41b 100644 --- a/src/display/sodipodi-ctrl.h +++ b/src/display/sodipodi-ctrl.h @@ -8,10 +8,9 @@ */ #include -#include "sp-canvas.h" #include #include - +#include "sp-canvas-item.h" #define SP_TYPE_CTRL (sp_ctrl_get_type ()) @@ -35,7 +34,7 @@ typedef enum { SP_CTRL_MODE_XOR } SPCtrlModeType; -struct SPCtrl : public SPCanvasItem{ +struct SPCtrl : public SPCanvasItem { SPCtrlShapeType shape; SPCtrlModeType mode; GtkAnchorType anchor; diff --git a/src/display/sodipodi-ctrlrect.cpp b/src/display/sodipodi-ctrlrect.cpp index 46d83c208..6d9c40858 100644 --- a/src/display/sodipodi-ctrlrect.cpp +++ b/src/display/sodipodi-ctrlrect.cpp @@ -15,7 +15,6 @@ * */ -#include "display-forward.h" #include "sp-canvas-util.h" #include "sodipodi-ctrlrect.h" #include "libnr/nr-pixops.h" diff --git a/src/display/sodipodi-ctrlrect.h b/src/display/sodipodi-ctrlrect.h index 70dcf1f30..9ecba47c8 100644 --- a/src/display/sodipodi-ctrlrect.h +++ b/src/display/sodipodi-ctrlrect.h @@ -1,5 +1,5 @@ -#ifndef __INKSCAPE_CTRLRECT_H__ -#define __INKSCAPE_CTRLRECT_H__ +#ifndef SEEN_INKSCAPE_CTRLRECT_H +#define SEEN_INKSCAPE_CTRLRECT_H /** * \file sodipodi-ctrlrect.h @@ -17,7 +17,10 @@ */ #include -#include "sp-canvas.h" +#include "sp-canvas-item.h" +#include "libnr/nr-rect-l.h" + +struct SPCanvasBuf; #define SP_TYPE_CTRLRECT (sp_ctrlrect_get_type ()) #define SP_CTRLRECT(obj) (GTK_CHECK_CAST((obj), SP_TYPE_CTRLRECT, CtrlRect)) @@ -56,7 +59,7 @@ struct SPCtrlRectClass : public SPCanvasItemClass {}; GtkType sp_ctrlrect_get_type(); -#endif +#endif // SEEN_RUBBERBAND_H /* Local Variables: diff --git a/src/display/sp-canvas-group.h b/src/display/sp-canvas-group.h new file mode 100644 index 000000000..10bf0fa6c --- /dev/null +++ b/src/display/sp-canvas-group.h @@ -0,0 +1,45 @@ +#ifndef SEEN_SP_CANVAS_GROUP_H +#define SEEN_SP_CANVAS_GROUP_H + +/** \file + * SPCanvasGroup + * + * Authors: + * Federico Mena + * Raph Levien + * Lauris Kaplinski + * Jon A. Cruz + * + * Copyright (C) 1998 The Free Software Foundation + * Copyright (C) 2002 Lauris Kaplinski + * Copyright (C) 2010 authors + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#define SP_TYPE_CANVAS_GROUP (sp_canvas_group_get_type()) +#define SP_CANVAS_GROUP(obj) (GTK_CHECK_CAST((obj), SP_TYPE_CANVAS_GROUP, SPCanvasGroup)) +#define SP_IS_CANVAS_GROUP(obj) (GTK_CHECK_TYPE((obj), SP_TYPE_CANVAS_GROUP)) + +GType sp_canvas_group_get_type(); + + + +#endif // SEEN_SP_CANVAS_GROUP_H + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 : diff --git a/src/display/sp-canvas-item.h b/src/display/sp-canvas-item.h new file mode 100644 index 000000000..1ae2ff2d1 --- /dev/null +++ b/src/display/sp-canvas-item.h @@ -0,0 +1,110 @@ +#ifndef SEEN_SP_CANVAS_ITEM_H +#define SEEN_SP_CANVAS_ITEM_H + +/** \file + * SPCanvasItem. + * + * Authors: + * Federico Mena + * Raph Levien + * Lauris Kaplinski + * Jon A. Cruz + * + * Copyright (C) 1998 The Free Software Foundation + * Copyright (C) 2002 Lauris Kaplinski + * Copyright (C) 2010 authors + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + +#include "2geom/rect.h" + +G_BEGIN_DECLS + +struct SPCanvas; +struct SPCanvasBuf; +struct SPCanvasGroup; + +typedef struct _SPCanvasItemClass SPCanvasItemClass; + +#define SP_TYPE_CANVAS_ITEM (sp_canvas_item_get_type()) +#define SP_CANVAS_ITEM(obj) (GTK_CHECK_CAST((obj), SP_TYPE_CANVAS_ITEM, SPCanvasItem)) +#define SP_IS_CANVAS_ITEM(obj) (GTK_CHECK_TYPE((obj), SP_TYPE_CANVAS_ITEM)) +#define SP_CANVAS_ITEM_GET_CLASS(o) (GTK_CHECK_GET_CLASS((o), SP_TYPE_CANVAS_ITEM, SPCanvasItemClass)) + +GType sp_canvas_item_get_type(); + +/** + * An SPCanvasItem refers to a SPCanvas and to its parent item; it has + * four coordinates, a bounding rectangle, and a transformation matrix. + */ +struct SPCanvasItem : public GtkObject { + SPCanvas *canvas; + SPCanvasItem *parent; + + double x1, y1, x2, y2; + Geom::Rect bounds; + Geom::Matrix xform; +}; + +/** + * The vtable of an SPCanvasItem. + */ +struct _SPCanvasItemClass : public GtkObjectClass { + void (* update) (SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags); + + void (* render) (SPCanvasItem *item, SPCanvasBuf *buf); + double (* point) (SPCanvasItem *item, Geom::Point p, SPCanvasItem **actual_item); + + int (* event) (SPCanvasItem *item, GdkEvent *event); +}; + +SPCanvasItem *sp_canvas_item_new(SPCanvasGroup *parent, GtkType type, const gchar *first_arg_name, ...); + +G_END_DECLS + + +#define sp_canvas_item_set gtk_object_set + +void sp_canvas_item_affine_absolute(SPCanvasItem *item, Geom::Matrix const &aff); + +void sp_canvas_item_raise(SPCanvasItem *item, int positions); +void sp_canvas_item_lower(SPCanvasItem *item, int positions); +bool sp_canvas_item_is_visible(SPCanvasItem *item); +void sp_canvas_item_show(SPCanvasItem *item); +void sp_canvas_item_hide(SPCanvasItem *item); +int sp_canvas_item_grab(SPCanvasItem *item, unsigned int event_mask, GdkCursor *cursor, guint32 etime); +void sp_canvas_item_ungrab(SPCanvasItem *item, guint32 etime); + +Geom::Matrix sp_canvas_item_i2w_affine(SPCanvasItem const *item); + +void sp_canvas_item_grab_focus(SPCanvasItem *item); + +void sp_canvas_item_request_update(SPCanvasItem *item); + +/* get item z-order in parent group */ + +gint sp_canvas_item_order(SPCanvasItem * item); + + + +#endif // SEEN_SP_CANVAS_ITEM_H + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 : diff --git a/src/display/sp-canvas-util.cpp b/src/display/sp-canvas-util.cpp index a06d93074..af80eed44 100644 --- a/src/display/sp-canvas-util.cpp +++ b/src/display/sp-canvas-util.cpp @@ -13,10 +13,11 @@ */ +#include // for memset #include <2geom/matrix.h> #include "libnr/nr-pixops.h" +#include "sp-canvas-item.h" #include "sp-canvas-util.h" -#include /* for memset */ void diff --git a/src/display/sp-canvas.cpp b/src/display/sp-canvas.cpp index 2319f82f6..fc68bcfc0 100644 --- a/src/display/sp-canvas.cpp +++ b/src/display/sp-canvas.cpp @@ -1,5 +1,3 @@ -#define __SP_CANVAS_C__ - /** \file * Port of GnomeCanvas for Inkscape needs * @@ -30,10 +28,10 @@ #include "helper/sp-marshal.h" #include -#include -#include "display-forward.h" +#include "display/sp-canvas.h" +#include "display/sp-canvas-group.h" #include <2geom/matrix.h> -#include +#include "libnr/nr-convex-hull.h" #include "preferences.h" #include "inkscape.h" #include "sodipodi-ctrlrect.h" diff --git a/src/display/sp-canvas.h b/src/display/sp-canvas.h index 5cd201618..9c8b19982 100644 --- a/src/display/sp-canvas.h +++ b/src/display/sp-canvas.h @@ -2,7 +2,7 @@ #define SEEN_SP_CANVAS_H /** \file - * SPCanvas, SPCanvasBuf, and SPCanvasItem. + * SPCanvas, SPCanvasBuf. * * Authors: * Federico Mena @@ -42,9 +42,15 @@ G_BEGIN_DECLS +#define SP_TYPE_CANVAS sp_canvas_get_type() +#define SP_CANVAS(obj) (GTK_CHECK_CAST((obj), SP_TYPE_CANVAS, SPCanvas)) +#define SP_IS_CANVAS(obj) (GTK_CHECK_TYPE((obj), SP_TYPE_CANVAS)) + +GType sp_canvas_get_type(); + struct SPCanvas; +struct SPCanvasItem; struct SPCanvasGroup; -typedef struct _SPCanvasItemClass SPCanvasItemClass; enum { SP_CANVAS_UPDATE_REQUESTED = 1 << 0, @@ -66,58 +72,8 @@ struct SPCanvasBuf{ cairo_t *ct; }; -/** - * An SPCanvasItem refers to a SPCanvas and to its parent item; it has - * four coordinates, a bounding rectangle, and a transformation matrix. - */ -struct SPCanvasItem : public GtkObject { - SPCanvas *canvas; - SPCanvasItem *parent; - - double x1, y1, x2, y2; - Geom::Rect bounds; - Geom::Matrix xform; -}; - -/** - * The vtable of an SPCanvasItem. - */ -struct _SPCanvasItemClass : public GtkObjectClass { - void (* update) (SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags); - - void (* render) (SPCanvasItem *item, SPCanvasBuf *buf); - double (* point) (SPCanvasItem *item, Geom::Point p, SPCanvasItem **actual_item); - - int (* event) (SPCanvasItem *item, GdkEvent *event); -}; - -SPCanvasItem *sp_canvas_item_new(SPCanvasGroup *parent, GtkType type, const gchar *first_arg_name, ...); - G_END_DECLS -#define sp_canvas_item_set gtk_object_set - -void sp_canvas_item_affine_absolute(SPCanvasItem *item, Geom::Matrix const &aff); - -void sp_canvas_item_raise(SPCanvasItem *item, int positions); -void sp_canvas_item_lower(SPCanvasItem *item, int positions); -bool sp_canvas_item_is_visible(SPCanvasItem *item); -void sp_canvas_item_show(SPCanvasItem *item); -void sp_canvas_item_hide(SPCanvasItem *item); -int sp_canvas_item_grab(SPCanvasItem *item, unsigned int event_mask, GdkCursor *cursor, guint32 etime); -void sp_canvas_item_ungrab(SPCanvasItem *item, guint32 etime); - -Geom::Matrix sp_canvas_item_i2w_affine(SPCanvasItem const *item); - -void sp_canvas_item_grab_focus(SPCanvasItem *item); - -void sp_canvas_item_request_update(SPCanvasItem *item); - -/* get item z-order in parent group */ - -gint sp_canvas_item_order(SPCanvasItem * item); - - // SPCanvas ------------------------------------------------- /** * Port of GnomeCanvas for inkscape needs. diff --git a/src/display/sp-ctrlline.cpp b/src/display/sp-ctrlline.cpp index d8a622d90..0ef23812e 100644 --- a/src/display/sp-ctrlline.cpp +++ b/src/display/sp-ctrlline.cpp @@ -19,7 +19,6 @@ * */ -#include "display-forward.h" #include "sp-canvas-util.h" #include "sp-ctrlline.h" diff --git a/src/display/sp-ctrlline.h b/src/display/sp-ctrlline.h index 64497c464..a13907a70 100644 --- a/src/display/sp-ctrlline.h +++ b/src/display/sp-ctrlline.h @@ -1,5 +1,5 @@ -#ifndef __INKSCAPE_CTRLLINE_H__ -#define __INKSCAPE_CTRLLINE_H__ +#ifndef SEEN_INKSCAPE_CTRLLINE_H +#define SEEN_INKSCAPE_CTRLLINE_H /* * Simple straight line @@ -14,7 +14,7 @@ * Released under GNU GPL */ -#include "sp-canvas.h" +#include "sp-canvas-item.h" struct SPItem; @@ -38,7 +38,7 @@ void sp_ctrlline_set_coords (SPCtrlLine *cl, const Geom::Point start, const Geom -#endif +#endif // SEEN_INKSCAPE_CTRLLINE_H /* Local Variables: diff --git a/src/display/sp-ctrlpoint.cpp b/src/display/sp-ctrlpoint.cpp index 1f8c145a8..ba40192a9 100644 --- a/src/display/sp-ctrlpoint.cpp +++ b/src/display/sp-ctrlpoint.cpp @@ -11,7 +11,6 @@ * Released under GNU GPL */ -#include "display-forward.h" #include "sp-canvas-util.h" #include "sp-ctrlpoint.h" diff --git a/src/display/sp-ctrlpoint.h b/src/display/sp-ctrlpoint.h index d0e72f518..1b7b7ba1e 100644 --- a/src/display/sp-ctrlpoint.h +++ b/src/display/sp-ctrlpoint.h @@ -1,5 +1,5 @@ -#ifndef __INKSCAPE_CTRLPOINT_H__ -#define __INKSCAPE_CTRLPOINT_H__ +#ifndef SEEN_INKSCAPE_CTRLPOINT_H +#define SEEN_INKSCAPE_CTRLPOINT_H /* * A simple point @@ -12,7 +12,7 @@ * Released under GNU GPL */ -#include "sp-canvas.h" +#include "sp-canvas-item.h" struct SPItem; @@ -20,7 +20,7 @@ struct SPItem; #define SP_CTRLPOINT(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_CTRLPOINT, SPCtrlPoint)) #define SP_IS_CTRLPOINT(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_CTRLPOINT)) -struct SPCtrlPoint : public SPCanvasItem{ +struct SPCtrlPoint : public SPCanvasItem { SPItem *item; // the item to which this line belongs in some sense; may be NULL for some users guint32 rgba; Geom::Point pt; @@ -38,7 +38,7 @@ void sp_ctrlpoint_set_radius (SPCtrlPoint *cp, const double r); -#endif +#endif // SEEN_INKSCAPE_CTRLPOINT_H /* Local Variables: diff --git a/src/display/sp-ctrlquadr.cpp b/src/display/sp-ctrlquadr.cpp index 54b9bc3e1..c29aecb96 100644 --- a/src/display/sp-ctrlquadr.cpp +++ b/src/display/sp-ctrlquadr.cpp @@ -1,5 +1,3 @@ -#define __INKSCAPE_CTRLQUADR_C__ - /* * Quadrilateral * @@ -11,13 +9,12 @@ * Released under GNU GPL */ -#include "display-forward.h" -#include "sp-canvas-util.h" -#include "sp-ctrlquadr.h" - #ifdef HAVE_CONFIG_H # include "config.h" #endif +#include "sp-canvas-util.h" +#include "sp-canvas-item.h" +#include "sp-ctrlquadr.h" #include "display/inkscape-cairo.h" #include "color.h" -- cgit v1.2.3 From 53933f5fea9d07d1ba6304b88439fba257ee8c34 Mon Sep 17 00:00:00 2001 From: "Johan B. C. Engelen" Date: Wed, 2 Feb 2011 22:24:36 +0100 Subject: update to latest 2geom ! (bzr r10025) --- src/display/canvas-arena.cpp | 4 ++-- src/display/canvas-axonomgrid.cpp | 2 +- src/display/canvas-axonomgrid.h | 2 +- src/display/canvas-bpath.cpp | 4 ++-- src/display/canvas-bpath.h | 2 +- src/display/canvas-grid.cpp | 6 ++--- src/display/canvas-grid.h | 4 ++-- src/display/canvas-text.cpp | 4 ++-- src/display/canvas-text.h | 2 +- src/display/curve.cpp | 2 +- src/display/curve.h | 2 +- src/display/gnome-canvas-acetate.cpp | 4 ++-- src/display/guideline.cpp | 8 +++---- src/display/inkscape-cairo.cpp | 12 +++++----- src/display/inkscape-cairo.h | 2 +- src/display/nr-3dutils.cpp | 2 +- src/display/nr-3dutils.h | 2 +- src/display/nr-arena-glyphs.cpp | 12 +++++----- src/display/nr-arena-glyphs.h | 8 +++---- src/display/nr-arena-group.cpp | 6 ++--- src/display/nr-arena-group.h | 6 ++--- src/display/nr-arena-image.cpp | 4 ++-- src/display/nr-arena-image.h | 2 +- src/display/nr-arena-item.cpp | 12 +++++----- src/display/nr-arena-item.h | 12 +++++----- src/display/nr-arena-shape.cpp | 14 +++++------ src/display/nr-arena-shape.h | 6 ++--- src/display/nr-filter-colormatrix.cpp | 2 +- src/display/nr-filter-colormatrix.h | 2 +- src/display/nr-filter-component-transfer.cpp | 2 +- src/display/nr-filter-component-transfer.h | 2 +- src/display/nr-filter-convolve-matrix.cpp | 2 +- src/display/nr-filter-convolve-matrix.h | 2 +- src/display/nr-filter-diffuselighting.cpp | 4 ++-- src/display/nr-filter-diffuselighting.h | 2 +- src/display/nr-filter-displacement-map.cpp | 4 ++-- src/display/nr-filter-displacement-map.h | 2 +- src/display/nr-filter-flood.cpp | 2 +- src/display/nr-filter-flood.h | 2 +- src/display/nr-filter-gaussian.cpp | 6 ++--- src/display/nr-filter-gaussian.h | 2 +- src/display/nr-filter-image.cpp | 8 +++---- src/display/nr-filter-morphology.cpp | 4 ++-- src/display/nr-filter-morphology.h | 2 +- src/display/nr-filter-offset.cpp | 4 ++-- src/display/nr-filter-offset.h | 2 +- src/display/nr-filter-primitive.cpp | 2 +- src/display/nr-filter-primitive.h | 2 +- src/display/nr-filter-slot.cpp | 4 ++-- src/display/nr-filter-specularlighting.cpp | 4 ++-- src/display/nr-filter-specularlighting.h | 2 +- src/display/nr-filter-tile.cpp | 2 +- src/display/nr-filter-tile.h | 2 +- src/display/nr-filter-turbulence.cpp | 2 +- src/display/nr-filter-units.cpp | 36 ++++++++++++++-------------- src/display/nr-filter-units.h | 24 +++++++++---------- src/display/nr-filter.cpp | 6 ++--- src/display/nr-filter.h | 2 +- src/display/nr-light.cpp | 4 ++-- src/display/nr-light.h | 4 ++-- src/display/nr-svgfonts.cpp | 2 +- src/display/pixblock-scaler.cpp | 6 ++--- src/display/pixblock-scaler.h | 2 +- src/display/pixblock-transform.cpp | 10 ++++---- src/display/pixblock-transform.h | 4 ++-- src/display/sodipodi-ctrl.cpp | 6 ++--- src/display/sodipodi-ctrlrect.cpp | 6 ++--- src/display/sodipodi-ctrlrect.h | 2 +- src/display/sp-canvas-item.h | 8 +++---- src/display/sp-canvas-util.cpp | 8 +++---- src/display/sp-canvas-util.h | 6 ++--- src/display/sp-canvas.cpp | 18 +++++++------- src/display/sp-canvas.h | 2 +- src/display/sp-ctrlline.cpp | 4 ++-- src/display/sp-ctrlline.h | 2 +- src/display/sp-ctrlpoint.cpp | 4 ++-- src/display/sp-ctrlpoint.h | 2 +- src/display/sp-ctrlquadr.cpp | 6 ++--- 78 files changed, 198 insertions(+), 198 deletions(-) (limited to 'src/display') diff --git a/src/display/canvas-arena.cpp b/src/display/canvas-arena.cpp index fb7ca9d78..f3e1b0f0c 100644 --- a/src/display/canvas-arena.cpp +++ b/src/display/canvas-arena.cpp @@ -29,7 +29,7 @@ static void sp_canvas_arena_class_init(SPCanvasArenaClass *klass); static void sp_canvas_arena_init(SPCanvasArena *group); static void sp_canvas_arena_destroy(GtkObject *object); -static void sp_canvas_arena_update (SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags); +static void sp_canvas_arena_update (SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags); static void sp_canvas_arena_render (SPCanvasItem *item, SPCanvasBuf *buf); static double sp_canvas_arena_point (SPCanvasItem *item, Geom::Point p, SPCanvasItem **actual_item); static gint sp_canvas_arena_event (SPCanvasItem *item, GdkEvent *event); @@ -134,7 +134,7 @@ sp_canvas_arena_destroy (GtkObject *object) } static void -sp_canvas_arena_update (SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags) +sp_canvas_arena_update (SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags) { SPCanvasArena *arena = SP_CANVAS_ARENA (item); diff --git a/src/display/canvas-axonomgrid.cpp b/src/display/canvas-axonomgrid.cpp index 550fd3559..845c4e077 100644 --- a/src/display/canvas-axonomgrid.cpp +++ b/src/display/canvas-axonomgrid.cpp @@ -511,7 +511,7 @@ CanvasAxonomGrid::updateWidgets() void -CanvasAxonomGrid::Update (Geom::Matrix const &affine, unsigned int /*flags*/) +CanvasAxonomGrid::Update (Geom::Affine const &affine, unsigned int /*flags*/) { ow = origin * affine; sw = Geom::Point(fabs(affine[0]),fabs(affine[3])); diff --git a/src/display/canvas-axonomgrid.h b/src/display/canvas-axonomgrid.h index 58185e2e6..282524c74 100644 --- a/src/display/canvas-axonomgrid.h +++ b/src/display/canvas-axonomgrid.h @@ -34,7 +34,7 @@ public: CanvasAxonomGrid(SPNamedView * nv, Inkscape::XML::Node * in_repr, SPDocument * in_doc); virtual ~CanvasAxonomGrid(); - void Update (Geom::Matrix const &affine, unsigned int flags); + void Update (Geom::Affine const &affine, unsigned int flags); void Render (SPCanvasBuf *buf); void readRepr(); diff --git a/src/display/canvas-bpath.cpp b/src/display/canvas-bpath.cpp index f8a8ef22c..725a1d0ff 100644 --- a/src/display/canvas-bpath.cpp +++ b/src/display/canvas-bpath.cpp @@ -34,7 +34,7 @@ static void sp_canvas_bpath_class_init (SPCanvasBPathClass *klass); static void sp_canvas_bpath_init (SPCanvasBPath *path); static void sp_canvas_bpath_destroy (GtkObject *object); -static void sp_canvas_bpath_update (SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags); +static void sp_canvas_bpath_update (SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags); static void sp_canvas_bpath_render (SPCanvasItem *item, SPCanvasBuf *buf); static double sp_canvas_bpath_point (SPCanvasItem *item, Geom::Point p, SPCanvasItem **actual_item); @@ -103,7 +103,7 @@ sp_canvas_bpath_destroy (GtkObject *object) } static void -sp_canvas_bpath_update (SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags) +sp_canvas_bpath_update (SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags) { SPCanvasBPath *cbp = SP_CANVAS_BPATH (item); diff --git a/src/display/canvas-bpath.h b/src/display/canvas-bpath.h index 0760baef6..7f8b75dfe 100644 --- a/src/display/canvas-bpath.h +++ b/src/display/canvas-bpath.h @@ -67,7 +67,7 @@ struct SPCanvasBPath { /* Line def */ SPCurve *curve; - Geom::Matrix affine; + Geom::Affine affine; /* Fill attributes */ guint32 fill_rgba; diff --git a/src/display/canvas-grid.cpp b/src/display/canvas-grid.cpp index 5892e1dc7..79bfc31ad 100644 --- a/src/display/canvas-grid.cpp +++ b/src/display/canvas-grid.cpp @@ -52,7 +52,7 @@ static void grid_canvasitem_class_init (GridCanvasItemClass *klass); static void grid_canvasitem_init (GridCanvasItem *grid); static void grid_canvasitem_destroy (GtkObject *object); -static void grid_canvasitem_update (SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags); +static void grid_canvasitem_update (SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags); static void grid_canvasitem_render (SPCanvasItem *item, SPCanvasBuf *buf); static SPCanvasItemClass * parent_class; @@ -124,7 +124,7 @@ grid_canvasitem_render (SPCanvasItem * item, SPCanvasBuf * buf) } static void -grid_canvasitem_update (SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags) +grid_canvasitem_update (SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags) { GridCanvasItem *gridcanvasitem = INKSCAPE_GRID_CANVASITEM (item); @@ -803,7 +803,7 @@ CanvasXYGrid::updateWidgets() void -CanvasXYGrid::Update (Geom::Matrix const &affine, unsigned int /*flags*/) +CanvasXYGrid::Update (Geom::Affine const &affine, unsigned int /*flags*/) { ow = origin * affine; sw = spacing * affine; diff --git a/src/display/canvas-grid.h b/src/display/canvas-grid.h index b8f313948..f386fe05e 100644 --- a/src/display/canvas-grid.h +++ b/src/display/canvas-grid.h @@ -79,7 +79,7 @@ public: GridCanvasItem * createCanvasItem(SPDesktop * desktop); - virtual void Update (Geom::Matrix const &affine, unsigned int flags) = 0; + virtual void Update (Geom::Affine const &affine, unsigned int flags) = 0; virtual void Render (SPCanvasBuf *buf) = 0; virtual void readRepr() = 0; @@ -129,7 +129,7 @@ public: CanvasXYGrid(SPNamedView * nv, Inkscape::XML::Node * in_repr, SPDocument * in_doc); virtual ~CanvasXYGrid(); - void Update (Geom::Matrix const &affine, unsigned int flags); + void Update (Geom::Affine const &affine, unsigned int flags); void Render (SPCanvasBuf *buf); void readRepr(); diff --git a/src/display/canvas-text.cpp b/src/display/canvas-text.cpp index e2bc09679..70196b307 100644 --- a/src/display/canvas-text.cpp +++ b/src/display/canvas-text.cpp @@ -31,7 +31,7 @@ static void sp_canvastext_class_init (SPCanvasTextClass *klass); static void sp_canvastext_init (SPCanvasText *canvastext); static void sp_canvastext_destroy (GtkObject *object); -static void sp_canvastext_update (SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags); +static void sp_canvastext_update (SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags); static void sp_canvastext_render (SPCanvasItem *item, SPCanvasBuf *buf); static SPCanvasItemClass *parent_class_ct; @@ -133,7 +133,7 @@ sp_canvastext_render (SPCanvasItem *item, SPCanvasBuf *buf) } static void -sp_canvastext_update (SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags) +sp_canvastext_update (SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags) { SPCanvasText *cl = SP_CANVASTEXT (item); diff --git a/src/display/canvas-text.h b/src/display/canvas-text.h index cc194ccc4..d8bd86b7d 100644 --- a/src/display/canvas-text.h +++ b/src/display/canvas-text.h @@ -31,7 +31,7 @@ struct SPCanvasText : public SPCanvasItem { gchar* text; Geom::Point s; - Geom::Matrix affine; + Geom::Affine affine; double fontsize; double anchor_x; double anchor_y; diff --git a/src/display/curve.cpp b/src/display/curve.cpp index 303d1bb4d..5c18324eb 100644 --- a/src/display/curve.cpp +++ b/src/display/curve.cpp @@ -180,7 +180,7 @@ SPCurve::split() const * Transform all paths in curve using matrix. */ void -SPCurve::transform(Geom::Matrix const &m) +SPCurve::transform(Geom::Affine const &m) { _pathv *= m; } diff --git a/src/display/curve.h b/src/display/curve.h index e6387a9f0..ec828e674 100644 --- a/src/display/curve.h +++ b/src/display/curve.h @@ -67,7 +67,7 @@ public: void closepath_current(); void backspace(); - void transform(Geom::Matrix const &m); + void transform(Geom::Affine const &m); void stretch_endpoints(Geom::Point const &, Geom::Point const &); void move_endpoints(Geom::Point const &, Geom::Point const &); void last_point_additive_move(Geom::Point const & p); diff --git a/src/display/gnome-canvas-acetate.cpp b/src/display/gnome-canvas-acetate.cpp index c257f1f92..b86892e32 100644 --- a/src/display/gnome-canvas-acetate.cpp +++ b/src/display/gnome-canvas-acetate.cpp @@ -20,7 +20,7 @@ static void sp_canvas_acetate_class_init (SPCanvasAcetateClass *klass); static void sp_canvas_acetate_init (SPCanvasAcetate *acetate); static void sp_canvas_acetate_destroy (GtkObject *object); -static void sp_canvas_acetate_update (SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags); +static void sp_canvas_acetate_update (SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags); static double sp_canvas_acetate_point (SPCanvasItem *item, Geom::Point p, SPCanvasItem **actual_item); static SPCanvasItemClass *parent_class; @@ -81,7 +81,7 @@ sp_canvas_acetate_destroy (GtkObject *object) } static void -sp_canvas_acetate_update( SPCanvasItem *item, Geom::Matrix const &/*affine*/, unsigned int /*flags*/ ) +sp_canvas_acetate_update( SPCanvasItem *item, Geom::Affine const &/*affine*/, unsigned int /*flags*/ ) { item->x1 = -G_MAXINT; item->y1 = -G_MAXINT; diff --git a/src/display/guideline.cpp b/src/display/guideline.cpp index ce1289faf..bebec2852 100644 --- a/src/display/guideline.cpp +++ b/src/display/guideline.cpp @@ -24,7 +24,7 @@ static void sp_guideline_class_init(SPGuideLineClass *c); static void sp_guideline_init(SPGuideLine *guideline); static void sp_guideline_destroy(GtkObject *object); -static void sp_guideline_update(SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags); +static void sp_guideline_update(SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags); static void sp_guideline_render(SPCanvasItem *item, SPCanvasBuf *buf); static double sp_guideline_point(SPCanvasItem *item, Geom::Point p, SPCanvasItem **actual_item); @@ -183,7 +183,7 @@ static void sp_guideline_render(SPCanvasItem *item, SPCanvasBuf *buf) } } -static void sp_guideline_update(SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags) +static void sp_guideline_update(SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags) { SPGuideLine *gl = SP_GUIDELINE(item); @@ -243,8 +243,8 @@ SPCanvasItem *sp_guideline_new(SPCanvasGroup *parent, Geom::Point point_on_line, void sp_guideline_set_position(SPGuideLine *gl, Geom::Point point_on_line) { - sp_canvas_item_affine_absolute(SP_CANVAS_ITEM (gl), Geom::Matrix(Geom::Translate(point_on_line))); - sp_canvas_item_affine_absolute(SP_CANVAS_ITEM (gl->origin), Geom::Matrix(Geom::Translate(point_on_line))); + sp_canvas_item_affine_absolute(SP_CANVAS_ITEM (gl), Geom::Affine(Geom::Translate(point_on_line))); + sp_canvas_item_affine_absolute(SP_CANVAS_ITEM (gl->origin), Geom::Affine(Geom::Translate(point_on_line))); } void sp_guideline_set_normal(SPGuideLine *gl, Geom::Point normal_to_line) diff --git a/src/display/inkscape-cairo.cpp b/src/display/inkscape-cairo.cpp index fdbd49727..4fc492ba8 100644 --- a/src/display/inkscape-cairo.cpp +++ b/src/display/inkscape-cairo.cpp @@ -22,7 +22,7 @@ #include <2geom/pathvector.h> #include <2geom/bezier-curve.h> #include <2geom/hvlinesegment.h> -#include <2geom/matrix.h> +#include <2geom/affine.h> #include <2geom/point.h> #include <2geom/path.h> #include <2geom/transforms.h> @@ -73,7 +73,7 @@ nr_create_cairo_context (NRRectL *area, NRPixBlock *pb) * If optimize_stroke == false, the view Rect is not used. */ static void -feed_curve_to_cairo(cairo_t *cr, Geom::Curve const &c, Geom::Matrix const & trans, Geom::Rect view, bool optimize_stroke) +feed_curve_to_cairo(cairo_t *cr, Geom::Curve const &c, Geom::Affine const & trans, Geom::Rect view, bool optimize_stroke) { if( is_straight_curve(c) ) { @@ -163,7 +163,7 @@ feed_path_to_cairo (cairo_t *ct, Geom::Path const &path) /** Feeds path-creating calls to the cairo context translating them from the Path, with the given transform and shift */ static void -feed_path_to_cairo (cairo_t *ct, Geom::Path const &path, Geom::Matrix trans, Geom::OptRect area, bool optimize_stroke, double stroke_width) +feed_path_to_cairo (cairo_t *ct, Geom::Path const &path, Geom::Affine trans, Geom::OptRect area, bool optimize_stroke, double stroke_width) { if (!area) return; @@ -174,9 +174,9 @@ feed_path_to_cairo (cairo_t *ct, Geom::Path const &path, Geom::Matrix trans, Geo Geom::Point shift = area->min(); Geom::Rect view = *area; view.expandBy (stroke_width); - view = view * (Geom::Matrix)Geom::Translate(-shift); + view = view * (Geom::Affine)Geom::Translate(-shift); // Pass transformation to feed_curve, so that we don't need to create a whole new path. - Geom::Matrix transshift(trans * Geom::Translate(-shift)); + Geom::Affine transshift(trans * Geom::Translate(-shift)); Geom::Point initial = path.initialPoint() * transshift; cairo_move_to(ct, initial[0], initial[1] ); @@ -211,7 +211,7 @@ feed_path_to_cairo (cairo_t *ct, Geom::Path const &path, Geom::Matrix trans, Geo /** Feeds path-creating calls to the cairo context translating them from the PathVector, with the given transform and shift * One must have done cairo_new_path(ct); before calling this function. */ void -feed_pathvector_to_cairo (cairo_t *ct, Geom::PathVector const &pathv, Geom::Matrix trans, Geom::OptRect area, bool optimize_stroke, double stroke_width) +feed_pathvector_to_cairo (cairo_t *ct, Geom::PathVector const &pathv, Geom::Affine trans, Geom::OptRect area, bool optimize_stroke, double stroke_width) { if (!area) return; diff --git a/src/display/inkscape-cairo.h b/src/display/inkscape-cairo.h index 0b3c99a7f..4133661fe 100644 --- a/src/display/inkscape-cairo.h +++ b/src/display/inkscape-cairo.h @@ -21,7 +21,7 @@ class SPCanvasBuf; cairo_t *nr_create_cairo_context_canvasbuf (NRRectL *area, SPCanvasBuf *b); cairo_t *nr_create_cairo_context (NRRectL *area, NRPixBlock *pb); -void feed_pathvector_to_cairo (cairo_t *ct, Geom::PathVector const &pathv, Geom::Matrix trans, Geom::OptRect area, bool optimize_stroke, double stroke_width); +void feed_pathvector_to_cairo (cairo_t *ct, Geom::PathVector const &pathv, Geom::Affine trans, Geom::OptRect area, bool optimize_stroke, double stroke_width); void feed_pathvector_to_cairo (cairo_t *ct, Geom::PathVector const &pathv); #endif diff --git a/src/display/nr-3dutils.cpp b/src/display/nr-3dutils.cpp index de97c2e04..c5e7b4c1b 100644 --- a/src/display/nr-3dutils.cpp +++ b/src/display/nr-3dutils.cpp @@ -137,7 +137,7 @@ void compute_surface_normal(Fvector &N, gdouble ss, NRPixBlock *in, int i, int j //std::cout << "(" << N[X_3D] << ", " << N[Y_3D] << ", " << N[Z_3D] << ")" << std::endl; } -void convert_coord(gdouble &x, gdouble &y, gdouble &z, Geom::Matrix const &trans) { +void convert_coord(gdouble &x, gdouble &y, gdouble &z, Geom::Affine const &trans) { Point p = Point(x, y); p *= trans; x = p[Geom::X]; diff --git a/src/display/nr-3dutils.h b/src/display/nr-3dutils.h index 01138cf1f..56bed6ba2 100644 --- a/src/display/nr-3dutils.h +++ b/src/display/nr-3dutils.h @@ -94,7 +94,7 @@ void compute_surface_normal(Fvector &N, gdouble ss, NRPixBlock *in, int i, int j * \param z a reference to a z coordinate * \param z a reference to a transformation matrix */ -void convert_coord(gdouble &x, gdouble &y, gdouble &z, Geom::Matrix const &trans); +void convert_coord(gdouble &x, gdouble &y, gdouble &z, Geom::Affine const &trans); } /* namespace NR */ diff --git a/src/display/nr-arena-glyphs.cpp b/src/display/nr-arena-glyphs.cpp index fb7f57272..440a87012 100644 --- a/src/display/nr-arena-glyphs.cpp +++ b/src/display/nr-arena-glyphs.cpp @@ -18,7 +18,7 @@ #endif #include #include -#include <2geom/matrix.h> +#include <2geom/affine.h> #include "../style.h" #include "nr-arena.h" #include "nr-arena-glyphs.h" @@ -143,7 +143,7 @@ nr_arena_glyphs_update(NRArenaItem *item, NRRectL */*area*/, NRGC *gc, guint /*s float const scale = gc->transform.descrim(); if (!glyphs->style->fill.isNone()) { - Geom::Matrix t; + Geom::Affine t; t = glyphs->g_transform * gc->transform; glyphs->x = t[4]; glyphs->y = t[5]; @@ -165,7 +165,7 @@ nr_arena_glyphs_update(NRArenaItem *item, NRRectL */*area*/, NRGC *gc, guint /*s if (!glyphs->style->stroke.isNone()) { /* Build state data */ - Geom::Matrix t; + Geom::Affine t; t = glyphs->g_transform * gc->transform; glyphs->x = t[4]; glyphs->y = t[5]; @@ -252,7 +252,7 @@ nr_arena_glyphs_pick(NRArenaItem *item, Geom::Point p, gdouble delta, unsigned i } void -nr_arena_glyphs_set_path(NRArenaGlyphs *glyphs, SPCurve */*curve*/, unsigned int /*lieutenant*/, font_instance *font, gint glyph, Geom::Matrix const *transform) +nr_arena_glyphs_set_path(NRArenaGlyphs *glyphs, SPCurve */*curve*/, unsigned int /*lieutenant*/, font_instance *font, gint glyph, Geom::Affine const *transform) { nr_return_if_fail(glyphs != NULL); nr_return_if_fail(NR_IS_ARENA_GLYPHS(glyphs)); @@ -463,7 +463,7 @@ nr_arena_glyphs_group_render(cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPi Geom::PathVector const * pathv = g->font->PathVector(g->glyph); cairo_new_path(ct); - Geom::Matrix transform = g->g_transform * group->ctm; + Geom::Affine transform = g->g_transform * group->ctm; feed_pathvector_to_cairo (ct, *pathv, transform, to_2geom((pb->area).upgrade()), false, 0); cairo_fill(ct); pb->empty = FALSE; @@ -613,7 +613,7 @@ nr_arena_glyphs_group_clear(NRArenaGlyphsGroup *sg) } void -nr_arena_glyphs_group_add_component(NRArenaGlyphsGroup *sg, font_instance *font, int glyph, Geom::Matrix const &transform) +nr_arena_glyphs_group_add_component(NRArenaGlyphsGroup *sg, font_instance *font, int glyph, Geom::Affine const &transform) { NRArenaGroup *group; diff --git a/src/display/nr-arena-glyphs.h b/src/display/nr-arena-glyphs.h index 1d15fef81..d04fdb4dc 100644 --- a/src/display/nr-arena-glyphs.h +++ b/src/display/nr-arena-glyphs.h @@ -33,7 +33,7 @@ NRType nr_arena_glyphs_get_type (void); struct NRArenaGlyphs : public NRArenaItem { /* Glyphs data */ SPStyle *style; - Geom::Matrix g_transform; + Geom::Affine g_transform; font_instance *font; gint glyph; @@ -41,7 +41,7 @@ struct NRArenaGlyphs : public NRArenaItem { raster_font *sfont; float x, y; -// Geom::Matrix cached_tr; +// Geom::Affine cached_tr; // Shape *cached_shp; // bool cached_shp_dirty; // bool cached_style_dirty; @@ -62,7 +62,7 @@ struct NRArenaGlyphsClass { void nr_arena_glyphs_set_path ( NRArenaGlyphs *glyphs, SPCurve *curve, unsigned int lieutenant, font_instance *font, int glyph, - Geom::Matrix const *transform ); + Geom::Affine const *transform ); void nr_arena_glyphs_set_style (NRArenaGlyphs *glyphs, SPStyle *style); /* Integrated group of component glyphss */ @@ -100,7 +100,7 @@ struct NRArenaGlyphsGroupClass { void nr_arena_glyphs_group_clear (NRArenaGlyphsGroup *group); -void nr_arena_glyphs_group_add_component (NRArenaGlyphsGroup *group, font_instance *font, int glyph, Geom::Matrix const &transform); +void nr_arena_glyphs_group_add_component (NRArenaGlyphsGroup *group, font_instance *font, int glyph, Geom::Affine const &transform); void nr_arena_glyphs_group_set_style (NRArenaGlyphsGroup *group, SPStyle *style); diff --git a/src/display/nr-arena-group.cpp b/src/display/nr-arena-group.cpp index e339fe5a7..6c6043b2c 100644 --- a/src/display/nr-arena-group.cpp +++ b/src/display/nr-arena-group.cpp @@ -271,13 +271,13 @@ nr_arena_group_set_transparent (NRArenaGroup *group, unsigned int transparent) group->transparent = transparent; } -void nr_arena_group_set_child_transform(NRArenaGroup *group, Geom::Matrix const &t) +void nr_arena_group_set_child_transform(NRArenaGroup *group, Geom::Affine const &t) { - Geom::Matrix nt(t); + Geom::Affine nt(t); nr_arena_group_set_child_transform(group, &nt); } -void nr_arena_group_set_child_transform(NRArenaGroup *group, Geom::Matrix const *t) +void nr_arena_group_set_child_transform(NRArenaGroup *group, Geom::Affine const *t) { if (!t) t = &GEOM_MATRIX_IDENTITY; diff --git a/src/display/nr-arena-group.h b/src/display/nr-arena-group.h index 4579d068f..58394643c 100644 --- a/src/display/nr-arena-group.h +++ b/src/display/nr-arena-group.h @@ -26,7 +26,7 @@ struct NRArenaGroup : public NRArenaItem{ unsigned int transparent : 1; NRArenaItem *children; NRArenaItem *last; - Geom::Matrix child_transform; + Geom::Affine child_transform; SPStyle *style; static NRArenaGroup *create(NRArena *arena) { @@ -42,8 +42,8 @@ struct NRArenaGroupClass { void nr_arena_group_set_transparent(NRArenaGroup *group, unsigned int transparent); -void nr_arena_group_set_child_transform(NRArenaGroup *group, Geom::Matrix const &t); -void nr_arena_group_set_child_transform(NRArenaGroup *group, Geom::Matrix const *t); +void nr_arena_group_set_child_transform(NRArenaGroup *group, Geom::Affine const &t); +void nr_arena_group_set_child_transform(NRArenaGroup *group, Geom::Affine const *t); void nr_arena_group_set_style(NRArenaGroup *group, SPStyle *style); #endif diff --git a/src/display/nr-arena-image.cpp b/src/display/nr-arena-image.cpp index 4132ada78..6539ae4d2 100644 --- a/src/display/nr-arena-image.cpp +++ b/src/display/nr-arena-image.cpp @@ -108,7 +108,7 @@ nr_arena_image_finalize (NRObject *object) static unsigned int nr_arena_image_update( NRArenaItem *item, NRRectL */*area*/, NRGC *gc, unsigned int /*state*/, unsigned int /*reset*/ ) { - Geom::Matrix grid2px; + Geom::Affine grid2px; // clear old bbox nr_arena_item_request_render(item); @@ -180,7 +180,7 @@ nr_arena_image_render( cairo_t *ct, NRArenaItem *item, NRRectL */*area*/, NRPixB NRArenaImage *image = NR_ARENA_IMAGE (item); - Geom::Matrix d2s; + Geom::Affine d2s; d2s[0] = b2i[0]; d2s[1] = b2i[1]; diff --git a/src/display/nr-arena-image.h b/src/display/nr-arena-image.h index 48ebc5bd0..c8d1525dc 100644 --- a/src/display/nr-arena-image.h +++ b/src/display/nr-arena-image.h @@ -34,7 +34,7 @@ struct NRArenaImage : public NRArenaItem { Geom::Point c00, c01, c11, c10; // all 4 corners of the image, for outline mode rect /* From GRID to PIXELS */ - Geom::Matrix grid2px; + Geom::Affine grid2px; SPStyle *style; diff --git a/src/display/nr-arena-item.cpp b/src/display/nr-arena-item.cpp index 5598efa32..c74e2baa0 100644 --- a/src/display/nr-arena-item.cpp +++ b/src/display/nr-arena-item.cpp @@ -735,14 +735,14 @@ nr_arena_item_append_child (NRArenaItem *parent, NRArenaItem *child) } void -nr_arena_item_set_transform (NRArenaItem *item, Geom::Matrix const &transform) +nr_arena_item_set_transform (NRArenaItem *item, Geom::Affine const &transform) { - Geom::Matrix const t (transform); + Geom::Affine const t (transform); nr_arena_item_set_transform (item, &t); } void -nr_arena_item_set_transform (NRArenaItem *item, Geom::Matrix const *transform) +nr_arena_item_set_transform (NRArenaItem *item, Geom::Affine const *transform) { nr_return_if_fail (item != NULL); nr_return_if_fail (NR_IS_ARENA_ITEM (item)); @@ -750,8 +750,8 @@ nr_arena_item_set_transform (NRArenaItem *item, Geom::Matrix const *transform) if (!transform && !item->transform) return; - const Geom::Matrix *md = (item->transform) ? item->transform : &GEOM_MATRIX_IDENTITY; - const Geom::Matrix *ms = (transform) ? transform : &GEOM_MATRIX_IDENTITY; + const Geom::Affine *md = (item->transform) ? item->transform : &GEOM_MATRIX_IDENTITY; + const Geom::Affine *ms = (transform) ? transform : &GEOM_MATRIX_IDENTITY; if (!Geom::matrix_equalp(*md, *ms, NR_EPSILON)) { nr_arena_item_request_render (item); @@ -760,7 +760,7 @@ nr_arena_item_set_transform (NRArenaItem *item, Geom::Matrix const *transform) item->transform = NULL; } else { if (!item->transform) - item->transform = new (GC::ATOMIC) Geom::Matrix (); + item->transform = new (GC::ATOMIC) Geom::Affine (); *item->transform = *transform; } nr_arena_item_request_update (item, NR_ARENA_ITEM_STATE_ALL, TRUE); diff --git a/src/display/nr-arena-item.h b/src/display/nr-arena-item.h index d1b157775..ff9965b85 100644 --- a/src/display/nr-arena-item.h +++ b/src/display/nr-arena-item.h @@ -52,7 +52,7 @@ #define NR_ARENA_ITEM_RENDER_NO_CACHE (1 << 0) -#include <2geom/matrix.h> +#include <2geom/affine.h> #include #include #include @@ -64,7 +64,7 @@ struct NRGC { NRGC(NRGC const *p) : parent(p) {} NRGC const *parent; - Geom::Matrix transform; + Geom::Affine transform; }; struct NRArenaItem : public NRObject { @@ -95,7 +95,7 @@ struct NRArenaItem : public NRObject { * specified in SVG standard. Required by filters. */ Geom::OptRect item_bbox; /* Our affine */ - Geom::Matrix *transform; + Geom::Affine *transform; /* Clip item */ NRArenaItem *clip; /* Mask item */ @@ -109,7 +109,7 @@ struct NRArenaItem : public NRObject { void *data; /* Current Transformation Matrix */ - Geom::Matrix ctm; + Geom::Affine ctm; /* These hold background buffer state for filter rendering */ NRPixBlock *background_pb; @@ -171,8 +171,8 @@ NRArenaItem *nr_arena_item_unparent (NRArenaItem *item); void nr_arena_item_append_child (NRArenaItem *parent, NRArenaItem *child); -void nr_arena_item_set_transform(NRArenaItem *item, Geom::Matrix const &transform); -void nr_arena_item_set_transform(NRArenaItem *item, Geom::Matrix const *transform); +void nr_arena_item_set_transform(NRArenaItem *item, Geom::Affine const &transform); +void nr_arena_item_set_transform(NRArenaItem *item, Geom::Affine const *transform); void nr_arena_item_set_opacity (NRArenaItem *item, double opacity); void nr_arena_item_set_sensitive (NRArenaItem *item, unsigned int sensitive); void nr_arena_item_set_visible (NRArenaItem *item, unsigned int visible); diff --git a/src/display/nr-arena-shape.cpp b/src/display/nr-arena-shape.cpp index 6f38fd97d..1f516c066 100644 --- a/src/display/nr-arena-shape.cpp +++ b/src/display/nr-arena-shape.cpp @@ -401,8 +401,8 @@ nr_arena_shape_update(NRArenaItem *item, NRRectL *area, NRGC *gc, guint state, g return NR_ARENA_ITEM_STATE_ALL; } -int matrix_is_isometry(Geom::Matrix p) { - Geom::Matrix tp; +int matrix_is_isometry(Geom::Affine p) { + Geom::Affine tp; // transposition tp[0]=p[0]; tp[1]=p[2]; @@ -410,7 +410,7 @@ int matrix_is_isometry(Geom::Matrix p) { tp[3]=p[3]; for (int i = 4; i < 6; i++) // shut valgrind up :) tp[i] = p[i] = 0; - Geom::Matrix isom = tp*p; // A^T * A = adjunct? + Geom::Affine isom = tp*p; // A^T * A = adjunct? // Is the adjunct nearly an identity function? if (isom.isTranslation(0.01)) { // the transformation is an isometry -> no need to recompute @@ -453,7 +453,7 @@ nr_arena_shape_update_fill(NRArenaShape *shape, NRGC *gc, NRRectL *area, bool fo if ((shape->_fill.paint.type() != NRArenaShape::Paint::NONE || force_shape) && has_inner_area(shape->curve->get_pathvector()) ) { - Geom::Matrix cached_to_new = Geom::identity(); + Geom::Affine cached_to_new = Geom::identity(); int isometry = 0; if ( shape->cached_fill ) { if (shape->cached_fctm == gc->transform) { @@ -472,7 +472,7 @@ nr_arena_shape_update_fill(NRArenaShape *shape, NRGC *gc, NRRectL *area, bool fo Path* thePath=new Path; Shape* theShape=new Shape; { - Geom::Matrix tempMat(gc->transform); + Geom::Affine tempMat(gc->transform); thePath->LoadPathVector(shape->curve->get_pathvector(), tempMat, true); } @@ -562,7 +562,7 @@ nr_arena_shape_update_stroke(NRArenaShape *shape,NRGC* gc, NRRectL *area) width = style_width; } - Geom::Matrix cached_to_new = Geom::identity(); + Geom::Affine cached_to_new = Geom::identity(); int isometry = 0; if ( shape->cached_stroke ) { @@ -586,7 +586,7 @@ nr_arena_shape_update_stroke(NRArenaShape *shape,NRGC* gc, NRRectL *area) Path* thePath = new Path; Shape* theShape = new Shape; { - Geom::Matrix tempMat( gc->transform ); + Geom::Affine tempMat( gc->transform ); thePath->LoadPathVector(shape->curve->get_pathvector(), tempMat, true); } diff --git a/src/display/nr-arena-shape.h b/src/display/nr-arena-shape.h index d484615a9..e00993901 100644 --- a/src/display/nr-arena-shape.h +++ b/src/display/nr-arena-shape.h @@ -112,7 +112,7 @@ struct NRArenaShape : public NRArenaItem { SPStyle *style; NRRect paintbox; /* State data */ - Geom::Matrix ctm; + Geom::Affine ctm; SPPainter *fill_painter; SPPainter *stroke_painter; @@ -135,8 +135,8 @@ struct NRArenaShape : public NRArenaItem { // polygon to get the *_shp polygon. Otherwise, recompute so this // works fine for translation and rotation, but not scaling and // skewing - Geom::Matrix cached_fctm; - Geom::Matrix cached_sctm; + Geom::Affine cached_fctm; + Geom::Affine cached_sctm; NRRectL cached_farea; NRRectL cached_sarea; bool cached_fpartialy; diff --git a/src/display/nr-filter-colormatrix.cpp b/src/display/nr-filter-colormatrix.cpp index 7d0792325..54d5dfd69 100644 --- a/src/display/nr-filter-colormatrix.cpp +++ b/src/display/nr-filter-colormatrix.cpp @@ -195,7 +195,7 @@ int FilterColorMatrix::render(FilterSlot &slot, FilterUnits const &/*units*/) { return 0; } -void FilterColorMatrix::area_enlarge(NRRectL &/*area*/, Geom::Matrix const &/*trans*/) +void FilterColorMatrix::area_enlarge(NRRectL &/*area*/, Geom::Affine const &/*trans*/) { } diff --git a/src/display/nr-filter-colormatrix.h b/src/display/nr-filter-colormatrix.h index 8507f8a63..7a2395f5d 100644 --- a/src/display/nr-filter-colormatrix.h +++ b/src/display/nr-filter-colormatrix.h @@ -35,7 +35,7 @@ public: virtual ~FilterColorMatrix(); virtual int render(FilterSlot &slot, FilterUnits const &units); - virtual void area_enlarge(NRRectL &area, Geom::Matrix const &trans); + virtual void area_enlarge(NRRectL &area, Geom::Affine const &trans); virtual void set_type(FilterColorMatrixType type); virtual void set_value(gdouble value); virtual void set_values(std::vector &values); diff --git a/src/display/nr-filter-component-transfer.cpp b/src/display/nr-filter-component-transfer.cpp index 2b6f0c722..3fe8cbf4a 100644 --- a/src/display/nr-filter-component-transfer.cpp +++ b/src/display/nr-filter-component-transfer.cpp @@ -198,7 +198,7 @@ int FilterComponentTransfer::render(FilterSlot &slot, FilterUnits const &/*units return 0; } -void FilterComponentTransfer::area_enlarge(NRRectL &/*area*/, Geom::Matrix const &/*trans*/) +void FilterComponentTransfer::area_enlarge(NRRectL &/*area*/, Geom::Affine const &/*trans*/) { } diff --git a/src/display/nr-filter-component-transfer.h b/src/display/nr-filter-component-transfer.h index 2fda2692a..65b4d4079 100644 --- a/src/display/nr-filter-component-transfer.h +++ b/src/display/nr-filter-component-transfer.h @@ -36,7 +36,7 @@ public: virtual ~FilterComponentTransfer(); virtual int render(FilterSlot &slot, FilterUnits const &units); - virtual void area_enlarge(NRRectL &area, Geom::Matrix const &trans); + virtual void area_enlarge(NRRectL &area, Geom::Affine const &trans); FilterComponentTransferType type[4]; std::vector tableValues[4]; diff --git a/src/display/nr-filter-convolve-matrix.cpp b/src/display/nr-filter-convolve-matrix.cpp index 4b88aa929..f5cc7175a 100644 --- a/src/display/nr-filter-convolve-matrix.cpp +++ b/src/display/nr-filter-convolve-matrix.cpp @@ -246,7 +246,7 @@ void FilterConvolveMatrix::set_preserveAlpha(bool pa){ preserveAlpha = pa; } -void FilterConvolveMatrix::area_enlarge(NRRectL &area, Geom::Matrix const &/*trans*/) +void FilterConvolveMatrix::area_enlarge(NRRectL &area, Geom::Affine const &/*trans*/) { //Seems to me that since this filter's operation is resolution dependent, // some spurious pixels may still appear at the borders when low zooming or rotating. Needs a better fix. diff --git a/src/display/nr-filter-convolve-matrix.h b/src/display/nr-filter-convolve-matrix.h index 846ef5685..50d97f1a0 100644 --- a/src/display/nr-filter-convolve-matrix.h +++ b/src/display/nr-filter-convolve-matrix.h @@ -35,7 +35,7 @@ public: virtual ~FilterConvolveMatrix(); virtual int render(FilterSlot &slot, FilterUnits const &units); - virtual void area_enlarge(NRRectL &area, Geom::Matrix const &trans); + virtual void area_enlarge(NRRectL &area, Geom::Affine const &trans); virtual FilterTraits get_input_traits(); void set_targetY(int coord); diff --git a/src/display/nr-filter-diffuselighting.cpp b/src/display/nr-filter-diffuselighting.cpp index 7443039f6..8e764f6d4 100644 --- a/src/display/nr-filter-diffuselighting.cpp +++ b/src/display/nr-filter-diffuselighting.cpp @@ -62,7 +62,7 @@ int FilterDiffuseLighting::render(FilterSlot &slot, FilterUnits const &units) { int dx = 1; //TODO setup int dy = 1; //TODO setup //surface scale - Geom::Matrix trans = units.get_matrix_primitiveunits2pb(); + Geom::Affine trans = units.get_matrix_primitiveunits2pb(); gdouble ss = surfaceScale * trans[0]; gdouble kd = diffuseConstant; //diffuse lighting constant @@ -168,7 +168,7 @@ int FilterDiffuseLighting::render(FilterSlot &slot, FilterUnits const &units) { return 0; } -void FilterDiffuseLighting::area_enlarge(NRRectL &area, Geom::Matrix const &trans) +void FilterDiffuseLighting::area_enlarge(NRRectL &area, Geom::Affine const &trans) { // TODO: support kernelUnitLength double scalex = std::fabs(trans[0]) + std::fabs(trans[1]); diff --git a/src/display/nr-filter-diffuselighting.h b/src/display/nr-filter-diffuselighting.h index 5141d0b61..8dc7a1818 100644 --- a/src/display/nr-filter-diffuselighting.h +++ b/src/display/nr-filter-diffuselighting.h @@ -42,7 +42,7 @@ public: static FilterPrimitive *create(); virtual ~FilterDiffuseLighting(); virtual int render(FilterSlot &slot, FilterUnits const &units); - virtual void area_enlarge(NRRectL &area, Geom::Matrix const &trans); + virtual void area_enlarge(NRRectL &area, Geom::Affine const &trans); virtual FilterTraits get_input_traits(); private: diff --git a/src/display/nr-filter-displacement-map.cpp b/src/display/nr-filter-displacement-map.cpp index 863927f4b..d71a691ef 100644 --- a/src/display/nr-filter-displacement-map.cpp +++ b/src/display/nr-filter-displacement-map.cpp @@ -190,7 +190,7 @@ int FilterDisplacementMap::render(FilterSlot &slot, FilterUnits const &units) { bool map_premultiplied = (map->mode == NR_PIXBLOCK_MODE_R8G8B8A8P); bool data_premultiplied = (out->mode == NR_PIXBLOCK_MODE_R8G8B8A8P); - Geom::Matrix trans = units.get_matrix_primitiveunits2pb(); + Geom::Affine trans = units.get_matrix_primitiveunits2pb(); double scalex = scale * trans.expansionX(); double scaley = scale * trans.expansionY(); @@ -237,7 +237,7 @@ void FilterDisplacementMap::set_channel_selector(int s, FilterDisplacementMapCha if (s == 1) Ychannel = channel; } -void FilterDisplacementMap::area_enlarge(NRRectL &area, Geom::Matrix const &trans) +void FilterDisplacementMap::area_enlarge(NRRectL &area, Geom::Affine const &trans) { //I assume scale is in user coordinates (?!?) //FIXME: trans should be multiplied by some primitiveunits2user, shouldn't it? diff --git a/src/display/nr-filter-displacement-map.h b/src/display/nr-filter-displacement-map.h index e76e47fec..1dad1873a 100644 --- a/src/display/nr-filter-displacement-map.h +++ b/src/display/nr-filter-displacement-map.h @@ -32,7 +32,7 @@ public: virtual void set_scale(double s); virtual void set_channel_selector(int s, FilterDisplacementMapChannelSelector channel); virtual int render(FilterSlot &slot, FilterUnits const &units); - virtual void area_enlarge(NRRectL &area, Geom::Matrix const &trans); + virtual void area_enlarge(NRRectL &area, Geom::Affine const &trans); virtual FilterTraits get_input_traits(); private: diff --git a/src/display/nr-filter-flood.cpp b/src/display/nr-filter-flood.cpp index 3f4951dd6..ca073cfd8 100644 --- a/src/display/nr-filter-flood.cpp +++ b/src/display/nr-filter-flood.cpp @@ -87,7 +87,7 @@ void FilterFlood::set_icc(SVGICCColor *icc_color) { icc = icc_color; } -void FilterFlood::area_enlarge(NRRectL &/*area*/, Geom::Matrix const &/*trans*/) +void FilterFlood::area_enlarge(NRRectL &/*area*/, Geom::Affine const &/*trans*/) { } diff --git a/src/display/nr-filter-flood.h b/src/display/nr-filter-flood.h index b11fa117d..ebb7d4506 100644 --- a/src/display/nr-filter-flood.h +++ b/src/display/nr-filter-flood.h @@ -30,7 +30,7 @@ public: virtual void set_color(guint32 c); virtual void set_icc(SVGICCColor *icc_color); virtual int render(FilterSlot &slot, FilterUnits const &units); - virtual void area_enlarge(NRRectL &area, Geom::Matrix const &trans); + virtual void area_enlarge(NRRectL &area, Geom::Affine const &trans); private: double opacity; guint32 color; diff --git a/src/display/nr-filter-gaussian.cpp b/src/display/nr-filter-gaussian.cpp index 5cfaab54d..3f7bea35d 100644 --- a/src/display/nr-filter-gaussian.cpp +++ b/src/display/nr-filter-gaussian.cpp @@ -33,7 +33,7 @@ #include "display/nr-filter-units.h" #include "libnr/nr-blit.h" #include "libnr/nr-pixblock.h" -#include <2geom/matrix.h> +#include <2geom/affine.h> #include "util/fixed_point.h" #include "preferences.h" @@ -582,7 +582,7 @@ int FilterGaussian::render(FilterSlot &slot, FilterUnits const &units) nr_blit_pixblock_pixblock(in, original_in); } - Geom::Matrix trans = units.get_matrix_primitiveunits2pb(); + Geom::Affine trans = units.get_matrix_primitiveunits2pb(); // Some common constants int const width_org = in->area.x1-in->area.x0, height_org = in->area.y1-in->area.y0; @@ -847,7 +847,7 @@ int FilterGaussian::render(FilterSlot &slot, FilterUnits const &units) return 0; } -void FilterGaussian::area_enlarge(NRRectL &area, Geom::Matrix const &trans) +void FilterGaussian::area_enlarge(NRRectL &area, Geom::Affine const &trans) { int area_x = _effect_area_scr(_deviation_x * trans.expansionX()); int area_y = _effect_area_scr(_deviation_y * trans.expansionY()); diff --git a/src/display/nr-filter-gaussian.h b/src/display/nr-filter-gaussian.h index 1dcb07d67..87d74ac63 100644 --- a/src/display/nr-filter-gaussian.h +++ b/src/display/nr-filter-gaussian.h @@ -39,7 +39,7 @@ public: virtual ~FilterGaussian(); virtual int render(FilterSlot &slot, FilterUnits const &units); - virtual void area_enlarge(NRRectL &area, Geom::Matrix const &m); + virtual void area_enlarge(NRRectL &area, Geom::Affine const &m); virtual FilterTraits get_input_traits(); /** diff --git a/src/display/nr-filter-image.cpp b/src/display/nr-filter-image.cpp index 9a39168c2..cc6dc18fa 100644 --- a/src/display/nr-filter-image.cpp +++ b/src/display/nr-filter-image.cpp @@ -85,7 +85,7 @@ int FilterImage::render(FilterSlot &slot, FilterUnits const &units) { NRGC gc(NULL); /* Update to renderable state */ double sf = 1.0; - Geom::Matrix t(Geom::Scale(sf, sf)); + Geom::Affine t(Geom::Scale(sf, sf)); nr_arena_item_set_transform(ai, &t); gc.transform.setIdentity(); nr_arena_item_invoke_update( ai, NULL, &gc, @@ -166,7 +166,7 @@ int FilterImage::render(FilterSlot &slot, FilterUnits const &units) { // Get the object bounding box. Image is placed with respect to box. // Array values: 0: width; 3: height; 4: -x; 5: -y. - Geom::Matrix object_bbox = units.get_matrix_user2filterunits().inverse(); + Geom::Affine object_bbox = units.get_matrix_user2filterunits().inverse(); // feImage is suppose to use the same parameters as a normal SVG image. // If a width or height is set to zero, the image is not suppose to be displayed. @@ -181,8 +181,8 @@ int FilterImage::render(FilterSlot &slot, FilterUnits const &units) { int coordx,coordy; unsigned char *out_data = NR_PIXBLOCK_PX(out); - Geom::Matrix unit_trans = units.get_matrix_primitiveunits2pb().inverse(); - Geom::Matrix d2s = Geom::Translate(x0, y0) * unit_trans * Geom::Translate(object_bbox[4]-feImageX, object_bbox[5]-feImageY) * Geom::Scale(scaleX, scaleY); + Geom::Affine unit_trans = units.get_matrix_primitiveunits2pb().inverse(); + Geom::Affine d2s = Geom::Translate(x0, y0) * unit_trans * Geom::Translate(object_bbox[4]-feImageX, object_bbox[5]-feImageY) * Geom::Scale(scaleX, scaleY); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); int nr_arena_image_x_sample = prefs->getInt("/options/bitmapoversample/value", 1); diff --git a/src/display/nr-filter-morphology.cpp b/src/display/nr-filter-morphology.cpp index 6902bacc6..ceb2a2b9d 100644 --- a/src/display/nr-filter-morphology.cpp +++ b/src/display/nr-filter-morphology.cpp @@ -51,7 +51,7 @@ int FilterMorphology::render(FilterSlot &slot, FilterUnits const &units) { free_in_on_exit = true; } - Geom::Matrix p2pb = units.get_matrix_primitiveunits2pb(); + Geom::Affine p2pb = units.get_matrix_primitiveunits2pb(); int const xradius = (int)round(this->xradius * p2pb.expansionX()); int const yradius = (int)round(this->yradius * p2pb.expansionY()); @@ -112,7 +112,7 @@ int FilterMorphology::render(FilterSlot &slot, FilterUnits const &units) { return 0; } -void FilterMorphology::area_enlarge(NRRectL &area, Geom::Matrix const &trans) +void FilterMorphology::area_enlarge(NRRectL &area, Geom::Affine const &trans) { int const enlarge_x = (int)std::ceil(this->xradius * (std::fabs(trans[0]) + std::fabs(trans[1]))); int const enlarge_y = (int)std::ceil(this->yradius * (std::fabs(trans[2]) + std::fabs(trans[3]))); diff --git a/src/display/nr-filter-morphology.h b/src/display/nr-filter-morphology.h index 867a6a391..c8d8b2f50 100644 --- a/src/display/nr-filter-morphology.h +++ b/src/display/nr-filter-morphology.h @@ -32,7 +32,7 @@ public: virtual ~FilterMorphology(); virtual int render(FilterSlot &slot, FilterUnits const &units); - virtual void area_enlarge(NRRectL &area, Geom::Matrix const &trans); + virtual void area_enlarge(NRRectL &area, Geom::Affine const &trans); virtual FilterTraits get_input_traits(); void set_operator(FilterMorphologyOperator &o); void set_xradius(double x); diff --git a/src/display/nr-filter-offset.cpp b/src/display/nr-filter-offset.cpp index bee73c998..7c924b7b7 100644 --- a/src/display/nr-filter-offset.cpp +++ b/src/display/nr-filter-offset.cpp @@ -43,7 +43,7 @@ int FilterOffset::render(FilterSlot &slot, FilterUnits const &units) { NRPixBlock *out = new NRPixBlock; - Geom::Matrix trans = units.get_matrix_primitiveunits2pb(); + Geom::Affine trans = units.get_matrix_primitiveunits2pb(); Geom::Point offset(dx, dy); offset *= trans; offset[X] -= trans[4]; @@ -74,7 +74,7 @@ void FilterOffset::set_dy(double amount) { dy = amount; } -void FilterOffset::area_enlarge(NRRectL &area, Geom::Matrix const &trans) +void FilterOffset::area_enlarge(NRRectL &area, Geom::Affine const &trans) { Geom::Point offset(dx, dy); offset *= trans; diff --git a/src/display/nr-filter-offset.h b/src/display/nr-filter-offset.h index 7c2b33742..a78450e17 100644 --- a/src/display/nr-filter-offset.h +++ b/src/display/nr-filter-offset.h @@ -27,7 +27,7 @@ public: virtual ~FilterOffset(); virtual int render(FilterSlot &slot, FilterUnits const &units); - virtual void area_enlarge(NRRectL &area, Geom::Matrix const &trans); + virtual void area_enlarge(NRRectL &area, Geom::Affine const &trans); void set_dx(double amount); void set_dy(double amount); diff --git a/src/display/nr-filter-primitive.cpp b/src/display/nr-filter-primitive.cpp index f79af8bd8..f53ff4a7f 100644 --- a/src/display/nr-filter-primitive.cpp +++ b/src/display/nr-filter-primitive.cpp @@ -37,7 +37,7 @@ FilterPrimitive::~FilterPrimitive() // Nothing to do here } -void FilterPrimitive::area_enlarge(NRRectL &/*area*/, Geom::Matrix const &/*m*/) +void FilterPrimitive::area_enlarge(NRRectL &/*area*/, Geom::Affine const &/*m*/) { // This doesn't need to do anything by default } diff --git a/src/display/nr-filter-primitive.h b/src/display/nr-filter-primitive.h index 87fe21f31..7639a9d1d 100644 --- a/src/display/nr-filter-primitive.h +++ b/src/display/nr-filter-primitive.h @@ -44,7 +44,7 @@ public: virtual ~FilterPrimitive(); virtual int render(FilterSlot &slot, FilterUnits const &units) = 0; - virtual void area_enlarge(NRRectL &area, Geom::Matrix const &m); + virtual void area_enlarge(NRRectL &area, Geom::Affine const &m); /** * Sets the input slot number 'slot' to be used as input in rendering diff --git a/src/display/nr-filter-slot.cpp b/src/display/nr-filter-slot.cpp index 96e2a92e9..b019b194f 100644 --- a/src/display/nr-filter-slot.cpp +++ b/src/display/nr-filter-slot.cpp @@ -151,7 +151,7 @@ NRPixBlock *FilterSlot::get(int slot_nr) void FilterSlot::get_final(int slot_nr, NRPixBlock *result) { NRPixBlock *final_usr = get(slot_nr); - Geom::Matrix trans = units.get_matrix_pb2display(); + Geom::Affine trans = units.get_matrix_pb2display(); int size = (result->area.x1 - result->area.x0) * (result->area.y1 - result->area.y0) @@ -188,7 +188,7 @@ void FilterSlot::set(int slot_nr, NRPixBlock *pb, bool takeOwnership) assert(slot_nr == NR_FILTER_SLOT_NOT_SET ||_slots[index].number == slot_nr); if (slot_nr == NR_FILTER_SOURCEGRAPHIC || slot_nr == NR_FILTER_BACKGROUNDIMAGE) { - Geom::Matrix trans = units.get_matrix_display2pb(); + Geom::Affine trans = units.get_matrix_display2pb(); if (fabs(trans[1]) > 1e-6 || fabs(trans[2]) > 1e-6) { NRPixBlock *trans_pb = new NRPixBlock; int x0 = pb->area.x0; diff --git a/src/display/nr-filter-specularlighting.cpp b/src/display/nr-filter-specularlighting.cpp index 354695dd7..8ecee24e6 100644 --- a/src/display/nr-filter-specularlighting.cpp +++ b/src/display/nr-filter-specularlighting.cpp @@ -80,7 +80,7 @@ int FilterSpecularLighting::render(FilterSlot &slot, FilterUnits const &units) { int dx = 1; //TODO setup int dy = 1; //TODO setup //surface scale - Geom::Matrix trans = units.get_matrix_primitiveunits2pb(); + Geom::Affine trans = units.get_matrix_primitiveunits2pb(); gdouble ss = surfaceScale * trans[0]; gdouble ks = specularConstant; //diffuse lighting constant NR::Fvector L, N, LC, H; @@ -188,7 +188,7 @@ int FilterSpecularLighting::render(FilterSlot &slot, FilterUnits const &units) { return 0; } -void FilterSpecularLighting::area_enlarge(NRRectL &area, Geom::Matrix const &trans) +void FilterSpecularLighting::area_enlarge(NRRectL &area, Geom::Affine const &trans) { // TODO: support kernelUnitLength double scalex = std::fabs(trans[0]) + std::fabs(trans[1]); diff --git a/src/display/nr-filter-specularlighting.h b/src/display/nr-filter-specularlighting.h index 5d31b09f1..a5d29588a 100644 --- a/src/display/nr-filter-specularlighting.h +++ b/src/display/nr-filter-specularlighting.h @@ -43,7 +43,7 @@ public: static FilterPrimitive *create(); virtual ~FilterSpecularLighting(); virtual int render(FilterSlot &slot, FilterUnits const &units); - virtual void area_enlarge(NRRectL &area, Geom::Matrix const &trans); + virtual void area_enlarge(NRRectL &area, Geom::Affine const &trans); virtual FilterTraits get_input_traits(); private: diff --git a/src/display/nr-filter-tile.cpp b/src/display/nr-filter-tile.cpp index 8eca6b18f..b1ca5d191 100644 --- a/src/display/nr-filter-tile.cpp +++ b/src/display/nr-filter-tile.cpp @@ -53,7 +53,7 @@ int FilterTile::render(FilterSlot &slot, FilterUnits const &/*units*/) { return 0; } -void FilterTile::area_enlarge(NRRectL &/*area*/, Geom::Matrix const &/*trans*/) +void FilterTile::area_enlarge(NRRectL &/*area*/, Geom::Affine const &/*trans*/) { } diff --git a/src/display/nr-filter-tile.h b/src/display/nr-filter-tile.h index 505fb9948..4a2a0dddc 100644 --- a/src/display/nr-filter-tile.h +++ b/src/display/nr-filter-tile.h @@ -27,7 +27,7 @@ public: virtual ~FilterTile(); virtual int render(FilterSlot &slot, FilterUnits const &units); - virtual void area_enlarge(NRRectL &area, Geom::Matrix const &trans); + virtual void area_enlarge(NRRectL &area, Geom::Affine const &trans); virtual FilterTraits get_input_traits(); }; diff --git a/src/display/nr-filter-turbulence.cpp b/src/display/nr-filter-turbulence.cpp index dde92c0a5..a91de0460 100644 --- a/src/display/nr-filter-turbulence.cpp +++ b/src/display/nr-filter-turbulence.cpp @@ -87,7 +87,7 @@ void FilterTurbulence::render_area(NRPixBlock *pix, NR::IRect &full_area, Filter const int bbox_x1 = full_area.max()[NR::X]; const int bbox_y1 = full_area.max()[NR::Y]; - Geom::Matrix unit_trans = units.get_matrix_primitiveunits2pb().inverse(); + Geom::Affine unit_trans = units.get_matrix_primitiveunits2pb().inverse(); double point[2]; diff --git a/src/display/nr-filter-units.cpp b/src/display/nr-filter-units.cpp index 4cf165800..b1c475c41 100644 --- a/src/display/nr-filter-units.cpp +++ b/src/display/nr-filter-units.cpp @@ -35,7 +35,7 @@ FilterUnits::FilterUnits(SPFilterUnits const filterUnits, SPFilterUnits const pr paraller_axis(false), automatic_resolution(true) {} -void FilterUnits::set_ctm(Geom::Matrix const &ctm) { +void FilterUnits::set_ctm(Geom::Affine const &ctm) { this->ctm = ctm; } @@ -63,12 +63,12 @@ void FilterUnits::set_automatic_resolution(bool const automatic) { automatic_resolution = automatic; } -Geom::Matrix FilterUnits::get_matrix_user2pb() const { +Geom::Affine FilterUnits::get_matrix_user2pb() const { g_assert(resolution_x > 0); g_assert(resolution_y > 0); g_assert(filter_area); - Geom::Matrix u2pb = ctm; + Geom::Affine u2pb = ctm; if (paraller_axis || !automatic_resolution) { u2pb[0] = resolution_x / (filter_area->max()[X] - filter_area->min()[X]); @@ -82,9 +82,9 @@ Geom::Matrix FilterUnits::get_matrix_user2pb() const { return u2pb; } -Geom::Matrix FilterUnits::get_matrix_units2pb(SPFilterUnits units) const { +Geom::Affine FilterUnits::get_matrix_units2pb(SPFilterUnits units) const { if ( item_bbox && (units == SP_FILTER_UNITS_OBJECTBOUNDINGBOX) ) { - Geom::Matrix u2pb = get_matrix_user2pb(); + Geom::Affine u2pb = get_matrix_user2pb(); Geom::Point origo(item_bbox->min()); origo *= u2pb; Geom::Point i_end(item_bbox->max()[X], item_bbox->min()[Y]); @@ -106,31 +106,31 @@ Geom::Matrix FilterUnits::get_matrix_units2pb(SPFilterUnits units) const { return get_matrix_user2pb(); } else { g_warning("Error in Inkscape::Filters::FilterUnits::get_matrix_units2pb: unrecognized unit type (%d)", units); - return Geom::Matrix(); + return Geom::Affine(); } } -Geom::Matrix FilterUnits::get_matrix_filterunits2pb() const { +Geom::Affine FilterUnits::get_matrix_filterunits2pb() const { return get_matrix_units2pb(filterUnits); } -Geom::Matrix FilterUnits::get_matrix_primitiveunits2pb() const { +Geom::Affine FilterUnits::get_matrix_primitiveunits2pb() const { return get_matrix_units2pb(primitiveUnits); } -Geom::Matrix FilterUnits::get_matrix_display2pb() const { - Geom::Matrix d2pb = ctm.inverse(); +Geom::Affine FilterUnits::get_matrix_display2pb() const { + Geom::Affine d2pb = ctm.inverse(); d2pb *= get_matrix_user2pb(); return d2pb; } -Geom::Matrix FilterUnits::get_matrix_pb2display() const { - Geom::Matrix pb2d = get_matrix_user2pb().inverse(); +Geom::Affine FilterUnits::get_matrix_pb2display() const { + Geom::Affine pb2d = get_matrix_user2pb().inverse(); pb2d *= ctm; return pb2d; } -Geom::Matrix FilterUnits::get_matrix_user2units(SPFilterUnits units) const { +Geom::Affine FilterUnits::get_matrix_user2units(SPFilterUnits units) const { if (item_bbox && units == SP_FILTER_UNITS_OBJECTBOUNDINGBOX) { /* No need to worry about rotations: bounding box coordinates * always have base vectors paraller with userspace coordinates */ @@ -139,22 +139,22 @@ Geom::Matrix FilterUnits::get_matrix_user2units(SPFilterUnits units) const { double scale_x = 1.0 / (max[X] - min[X]); double scale_y = 1.0 / (max[Y] - min[Y]); //return Geom::Translate(min) * Geom::Scale(scale_x,scale_y); ? - return Geom::Matrix(scale_x, 0, + return Geom::Affine(scale_x, 0, 0, scale_y, min[X] * scale_x, min[Y] * scale_y); } else if (units == SP_FILTER_UNITS_USERSPACEONUSE) { return Geom::identity(); } else { g_warning("Error in Inkscape::Filters::FilterUnits::get_matrix_user2units: unrecognized unit type (%d)", units); - return Geom::Matrix(); + return Geom::Affine(); } } -Geom::Matrix FilterUnits::get_matrix_user2filterunits() const { +Geom::Affine FilterUnits::get_matrix_user2filterunits() const { return get_matrix_user2units(filterUnits); } -Geom::Matrix FilterUnits::get_matrix_user2primitiveunits() const { +Geom::Affine FilterUnits::get_matrix_user2primitiveunits() const { return get_matrix_user2units(primitiveUnits); } @@ -162,7 +162,7 @@ NR::IRect FilterUnits::get_pixblock_filterarea_paraller() const { g_assert(filter_area); int min_x = INT_MAX, min_y = INT_MAX, max_x = INT_MIN, max_y = INT_MIN; - Geom::Matrix u2pb = get_matrix_user2pb(); + Geom::Affine u2pb = get_matrix_user2pb(); for (int i = 0 ; i < 4 ; i++) { Geom::Point p = filter_area->corner(i); diff --git a/src/display/nr-filter-units.h b/src/display/nr-filter-units.h index 2a64b1afc..9a0d8ea83 100644 --- a/src/display/nr-filter-units.h +++ b/src/display/nr-filter-units.h @@ -16,7 +16,7 @@ #include "libnr/nr-matrix.h" #include "libnr/nr-rect.h" #include "libnr/nr-rect-l.h" -#include <2geom/matrix.h> +#include <2geom/affine.h> #include <2geom/rect.h> namespace Inkscape { @@ -31,7 +31,7 @@ public: * Sets the current transformation matrix, i.e. transformation matrix * from object's user coordinates to screen coordinates */ - void set_ctm(Geom::Matrix const &ctm); + void set_ctm(Geom::Affine const &ctm); /** * Sets the resolution, the filter should be rendered with. @@ -64,39 +64,39 @@ public: /** * Gets the user coordinates to pixblock coordinates transformation matrix. */ - Geom::Matrix get_matrix_user2pb() const; + Geom::Affine get_matrix_user2pb() const; /** * Gets the filterUnits to pixblock coordinates transformation matrix. */ - Geom::Matrix get_matrix_filterunits2pb() const; + Geom::Affine get_matrix_filterunits2pb() const; /** * Gets the primitiveUnits to pixblock coordinates transformation matrix. */ - Geom::Matrix get_matrix_primitiveunits2pb() const; + Geom::Affine get_matrix_primitiveunits2pb() const; /** * Gets the display coordinates to pixblock coordinates transformation * matrix. */ - Geom::Matrix get_matrix_display2pb() const; + Geom::Affine get_matrix_display2pb() const; /** * Gets the pixblock coordinates to display coordinates transformation * matrix */ - Geom::Matrix get_matrix_pb2display() const; + Geom::Affine get_matrix_pb2display() const; /** * Gets the user coordinates to filterUnits transformation matrix. */ - Geom::Matrix get_matrix_user2filterunits() const; + Geom::Affine get_matrix_user2filterunits() const; /** * Gets the user coordinates to primitiveUnits transformation matrix. */ - Geom::Matrix get_matrix_user2primitiveunits() const; + Geom::Affine get_matrix_user2primitiveunits() const; /** * Returns the filter area in pixblock coordinates. @@ -108,14 +108,14 @@ public: FilterUnits& operator=(FilterUnits const &other); private: - Geom::Matrix get_matrix_units2pb(SPFilterUnits units) const; - Geom::Matrix get_matrix_user2units(SPFilterUnits units) const; + Geom::Affine get_matrix_units2pb(SPFilterUnits units) const; + Geom::Affine get_matrix_user2units(SPFilterUnits units) const; SPFilterUnits filterUnits, primitiveUnits; double resolution_x, resolution_y; bool paraller_axis; bool automatic_resolution; - Geom::Matrix ctm; + Geom::Affine ctm; Geom::OptRect item_bbox; Geom::OptRect filter_area; diff --git a/src/display/nr-filter.cpp b/src/display/nr-filter.cpp index 5ff9d2da5..ea9b4f7da 100644 --- a/src/display/nr-filter.cpp +++ b/src/display/nr-filter.cpp @@ -43,7 +43,7 @@ #include "display/nr-arena-item.h" #include "libnr/nr-pixblock.h" #include "libnr/nr-blit.h" -#include <2geom/matrix.h> +#include <2geom/affine.h> #include <2geom/rect.h> #include "svg/svg-length.h" #include "sp-filter-units.h" @@ -139,7 +139,7 @@ int Filter::render(NRArenaItem const *item, NRPixBlock *pb) FilterQuality const filterquality = (FilterQuality)item->arena->filterquality; int const blurquality = item->arena->blurquality; - Geom::Matrix trans = item->ctm; + Geom::Affine trans = item->ctm; FilterSlot slot(_slot_count, item); slot.set_quality(filterquality); slot.set_blurquality(blurquality); @@ -508,7 +508,7 @@ int Filter::_resolution_limit(FilterQuality const quality) const { } std::pair Filter::_filter_resolution( - Geom::Rect const &area, Geom::Matrix const &trans, + Geom::Rect const &area, Geom::Affine const &trans, FilterQuality const filterquality) const { std::pair resolution; diff --git a/src/display/nr-filter.h b/src/display/nr-filter.h index a7cf932b1..23acea99f 100644 --- a/src/display/nr-filter.h +++ b/src/display/nr-filter.h @@ -201,7 +201,7 @@ private: void _common_init(); int _resolution_limit(FilterQuality const quality) const; std::pair _filter_resolution(Geom::Rect const &area, - Geom::Matrix const &trans, + Geom::Affine const &trans, FilterQuality const q) const; }; diff --git a/src/display/nr-light.cpp b/src/display/nr-light.cpp index a8a31734d..74d83da70 100644 --- a/src/display/nr-light.cpp +++ b/src/display/nr-light.cpp @@ -43,7 +43,7 @@ void DistantLight::light_components(NR::Fvector &lc) { lc[LIGHT_BLUE] = NR_RGBA32_B(color); } -PointLight::PointLight(SPFePointLight *light, guint32 lighting_color, const Geom::Matrix &trans) { +PointLight::PointLight(SPFePointLight *light, guint32 lighting_color, const Geom::Affine &trans) { color = lighting_color; l_x = light->x; l_y = light->y; @@ -66,7 +66,7 @@ void PointLight::light_components(NR::Fvector &lc) { lc[LIGHT_BLUE] = NR_RGBA32_B(color); } -SpotLight::SpotLight(SPFeSpotLight *light, guint32 lighting_color, const Geom::Matrix &trans) { +SpotLight::SpotLight(SPFeSpotLight *light, guint32 lighting_color, const Geom::Affine &trans) { gdouble p_x, p_y, p_z; color = lighting_color; l_x = light->x; diff --git a/src/display/nr-light.h b/src/display/nr-light.h index 65c341a7e..49130cc4e 100644 --- a/src/display/nr-light.h +++ b/src/display/nr-light.h @@ -68,7 +68,7 @@ class PointLight { * employed in the sp light object) and current coordinate (those * employed in the rendering) */ - PointLight(SPFePointLight *light, guint32 lighting_color, const Geom::Matrix &trans); + PointLight(SPFePointLight *light, guint32 lighting_color, const Geom::Affine &trans); virtual ~PointLight(); /** * Computes the light vector of the distant light at point (x,y,z). @@ -108,7 +108,7 @@ class SpotLight { * employed in the sp light object) and current coordinate (those * employed in the rendering) */ - SpotLight(SPFeSpotLight *light, guint32 lighting_color, const Geom::Matrix &trans); + SpotLight(SPFeSpotLight *light, guint32 lighting_color, const Geom::Affine &trans); virtual ~SpotLight(); /** diff --git a/src/display/nr-svgfonts.cpp b/src/display/nr-svgfonts.cpp index 2b724246a..62d52b04b 100644 --- a/src/display/nr-svgfonts.cpp +++ b/src/display/nr-svgfonts.cpp @@ -253,7 +253,7 @@ SvgFont::scaled_font_render_glyph (cairo_scaled_font_t */*scaled_font*/, // Geom::Scale s(1.0/((SPFont*) node->parent)->horiz_adv_x); Geom::Scale s(1.0/1000);//TODO: use here the units-per-em attribute? //This matrix flips the glyph vertically - Geom::Matrix m(Geom::Coord(1),Geom::Coord(0),Geom::Coord(0),Geom::Coord(-1),Geom::Coord(0),Geom::Coord(0)); + Geom::Affine m(Geom::Coord(1),Geom::Coord(0),Geom::Coord(0),Geom::Coord(-1),Geom::Coord(0),Geom::Coord(0)); //then we offset it // pathv += Geom::Point(Geom::Coord(0),Geom::Coord(-((SPFont*) node->parent)->horiz_adv_x)); pathv += Geom::Point(Geom::Coord(0),Geom::Coord(-1000));//TODO: use here the units-per-em attribute? diff --git a/src/display/pixblock-scaler.cpp b/src/display/pixblock-scaler.cpp index c9df0c833..5af5230d8 100644 --- a/src/display/pixblock-scaler.cpp +++ b/src/display/pixblock-scaler.cpp @@ -70,7 +70,7 @@ inline static void _check_index(NRPixBlock const * const pb, int const location, } static void scale_bicubic_rgba(NRPixBlock *to, NRPixBlock *from, - Geom::Matrix const &trans) + Geom::Affine const &trans) { if (NR_PIXBLOCK_BPP(from) != 4 || NR_PIXBLOCK_BPP(to) != 4) { g_warning("A non-32-bpp image passed to scale_bicubic_rgba: scaling aborted."); @@ -203,7 +203,7 @@ static void scale_bicubic_rgba(NRPixBlock *to, NRPixBlock *from, } void scale_bicubic_alpha(NRPixBlock *to, NRPixBlock *from, - Geom::Matrix const &trans) + Geom::Affine const &trans) { if (NR_PIXBLOCK_BPP(from) != 1 || NR_PIXBLOCK_BPP(to) != 1) { g_warning("A non-8-bpp image passed to scale_bicubic_alpha: scaling aborted."); @@ -275,7 +275,7 @@ void scale_bicubic_alpha(NRPixBlock *to, NRPixBlock *from, } } -void scale_bicubic(NRPixBlock *to, NRPixBlock *from, Geom::Matrix const &trans) +void scale_bicubic(NRPixBlock *to, NRPixBlock *from, Geom::Affine const &trans) { if (NR_PIXBLOCK_BPP(to) == 4 && NR_PIXBLOCK_BPP(from) == 4) { scale_bicubic_rgba(to, from, trans); diff --git a/src/display/pixblock-scaler.h b/src/display/pixblock-scaler.h index f7cbcb0be..ff9613ab8 100644 --- a/src/display/pixblock-scaler.h +++ b/src/display/pixblock-scaler.h @@ -23,7 +23,7 @@ namespace NR { * Source pixblock is not modified in process. * Only works for 32-bpp images. */ -void scale_bicubic(NRPixBlock *to, NRPixBlock *from, Geom::Matrix const &trans); +void scale_bicubic(NRPixBlock *to, NRPixBlock *from, Geom::Affine const &trans); } /* namespace NR */ diff --git a/src/display/pixblock-transform.cpp b/src/display/pixblock-transform.cpp index 78324434a..5d5b8a9cf 100644 --- a/src/display/pixblock-transform.cpp +++ b/src/display/pixblock-transform.cpp @@ -23,7 +23,7 @@ using std::floor; #include "libnr/nr-blit.h" #include "libnr/nr-pixblock.h" -#include <2geom/matrix.h> +#include <2geom/affine.h> namespace NR { @@ -48,7 +48,7 @@ inline void _check_index(NRPixBlock const * const pb, int const location, int co } } -void transform_nearest(NRPixBlock *to, NRPixBlock *from, Geom::Matrix const &trans) +void transform_nearest(NRPixBlock *to, NRPixBlock *from, Geom::Affine const &trans) { if (NR_PIXBLOCK_BPP(from) != 4 || NR_PIXBLOCK_BPP(to) != 4) { g_warning("A non-32-bpp image passed to transform_nearest: scaling aborted."); @@ -70,7 +70,7 @@ void transform_nearest(NRPixBlock *to, NRPixBlock *from, Geom::Matrix const &tra int to_width = to->area.x1 - to->area.x0; int to_height = to->area.y1 - to->area.y0; - Geom::Matrix itrans = trans.inverse(); + Geom::Affine itrans = trans.inverse(); // Loop through every pixel of destination image, a line at a time for (int to_y = 0 ; to_y < to_height ; to_y++) { @@ -133,7 +133,7 @@ inline static double sample(double const a, double const b, return sum; } -void transform_bicubic(NRPixBlock *to, NRPixBlock *from, Geom::Matrix const &trans) +void transform_bicubic(NRPixBlock *to, NRPixBlock *from, Geom::Affine const &trans) { if (NR_PIXBLOCK_BPP(from) != 4 || NR_PIXBLOCK_BPP(to) != 4) { g_warning("A non-32-bpp image passed to transform_bicubic: scaling aborted."); @@ -160,7 +160,7 @@ void transform_bicubic(NRPixBlock *to, NRPixBlock *from, Geom::Matrix const &tra int to_width = to->area.x1 - to->area.x0; int to_height = to->area.y1 - to->area.y0; - Geom::Matrix itrans = trans.inverse(); + Geom::Affine itrans = trans.inverse(); // Loop through every pixel of destination image, a line at a time for (int to_y = 0 ; to_y < to_height ; to_y++) { diff --git a/src/display/pixblock-transform.h b/src/display/pixblock-transform.h index 6c322835c..b73435fdf 100644 --- a/src/display/pixblock-transform.h +++ b/src/display/pixblock-transform.h @@ -17,8 +17,8 @@ namespace NR { -void transform_nearest(NRPixBlock *to, NRPixBlock *from, Geom::Matrix const &trans); -void transform_bicubic(NRPixBlock *to, NRPixBlock *from, Geom::Matrix const &trans); +void transform_nearest(NRPixBlock *to, NRPixBlock *from, Geom::Affine const &trans); +void transform_bicubic(NRPixBlock *to, NRPixBlock *from, Geom::Affine const &trans); } /* namespace NR */ diff --git a/src/display/sodipodi-ctrl.cpp b/src/display/sodipodi-ctrl.cpp index a63f570cf..202fc206e 100644 --- a/src/display/sodipodi-ctrl.cpp +++ b/src/display/sodipodi-ctrl.cpp @@ -32,7 +32,7 @@ static void sp_ctrl_init (SPCtrl *ctrl); static void sp_ctrl_destroy (GtkObject *object); static void sp_ctrl_set_arg (GtkObject *object, GtkArg *arg, guint arg_id); -static void sp_ctrl_update (SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags); +static void sp_ctrl_update (SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags); static void sp_ctrl_render (SPCanvasItem *item, SPCanvasBuf *buf); static double sp_ctrl_point (SPCanvasItem *item, Geom::Point p, SPCanvasItem **actual_item); @@ -210,7 +210,7 @@ sp_ctrl_set_arg (GtkObject *object, GtkArg *arg, guint arg_id) } static void -sp_ctrl_update (SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags) +sp_ctrl_update (SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags) { SPCtrl *ctrl; gint x, y; @@ -552,7 +552,7 @@ sp_ctrl_render (SPCanvasItem *item, SPCanvasBuf *buf) void SPCtrl::moveto (Geom::Point const p) { if (p != _point) { - sp_canvas_item_affine_absolute (SP_CANVAS_ITEM (this), Geom::Matrix(Geom::Translate (p))); + sp_canvas_item_affine_absolute (SP_CANVAS_ITEM (this), Geom::Affine(Geom::Translate (p))); _moved = true; } _point = p; diff --git a/src/display/sodipodi-ctrlrect.cpp b/src/display/sodipodi-ctrlrect.cpp index 6d9c40858..380039798 100644 --- a/src/display/sodipodi-ctrlrect.cpp +++ b/src/display/sodipodi-ctrlrect.cpp @@ -30,7 +30,7 @@ static void sp_ctrlrect_class_init(SPCtrlRectClass *c); static void sp_ctrlrect_init(CtrlRect *ctrlrect); static void sp_ctrlrect_destroy(GtkObject *object); -static void sp_ctrlrect_update(SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags); +static void sp_ctrlrect_update(SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags); static void sp_ctrlrect_render(SPCanvasItem *item, SPCanvasBuf *buf); static SPCanvasItemClass *parent_class; @@ -160,7 +160,7 @@ static void sp_ctrlrect_render(SPCanvasItem *item, SPCanvasBuf *buf) } -static void sp_ctrlrect_update(SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags) +static void sp_ctrlrect_update(SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags) { SP_CTRLRECT(item)->update(affine, flags); } @@ -220,7 +220,7 @@ void CtrlRect::render(SPCanvasBuf *buf) } -void CtrlRect::update(Geom::Matrix const &affine, unsigned int flags) +void CtrlRect::update(Geom::Affine const &affine, unsigned int flags) { if (((SPCanvasItemClass *) parent_class)->update) { ((SPCanvasItemClass *) parent_class)->update(this, affine, flags); diff --git a/src/display/sodipodi-ctrlrect.h b/src/display/sodipodi-ctrlrect.h index 9ecba47c8..2ba73a4c9 100644 --- a/src/display/sodipodi-ctrlrect.h +++ b/src/display/sodipodi-ctrlrect.h @@ -39,7 +39,7 @@ public: void setDashed(bool d); void render(SPCanvasBuf *buf); - void update(Geom::Matrix const &affine, unsigned int flags); + void update(Geom::Affine const &affine, unsigned int flags); private: void _requestUpdate(); diff --git a/src/display/sp-canvas-item.h b/src/display/sp-canvas-item.h index 1ae2ff2d1..cc0bdfc77 100644 --- a/src/display/sp-canvas-item.h +++ b/src/display/sp-canvas-item.h @@ -52,14 +52,14 @@ struct SPCanvasItem : public GtkObject { double x1, y1, x2, y2; Geom::Rect bounds; - Geom::Matrix xform; + Geom::Affine xform; }; /** * The vtable of an SPCanvasItem. */ struct _SPCanvasItemClass : public GtkObjectClass { - void (* update) (SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags); + void (* update) (SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags); void (* render) (SPCanvasItem *item, SPCanvasBuf *buf); double (* point) (SPCanvasItem *item, Geom::Point p, SPCanvasItem **actual_item); @@ -74,7 +74,7 @@ G_END_DECLS #define sp_canvas_item_set gtk_object_set -void sp_canvas_item_affine_absolute(SPCanvasItem *item, Geom::Matrix const &aff); +void sp_canvas_item_affine_absolute(SPCanvasItem *item, Geom::Affine const &aff); void sp_canvas_item_raise(SPCanvasItem *item, int positions); void sp_canvas_item_lower(SPCanvasItem *item, int positions); @@ -84,7 +84,7 @@ void sp_canvas_item_hide(SPCanvasItem *item); int sp_canvas_item_grab(SPCanvasItem *item, unsigned int event_mask, GdkCursor *cursor, guint32 etime); void sp_canvas_item_ungrab(SPCanvasItem *item, guint32 etime); -Geom::Matrix sp_canvas_item_i2w_affine(SPCanvasItem const *item); +Geom::Affine sp_canvas_item_i2w_affine(SPCanvasItem const *item); void sp_canvas_item_grab_focus(SPCanvasItem *item); diff --git a/src/display/sp-canvas-util.cpp b/src/display/sp-canvas-util.cpp index af80eed44..7eac32e2d 100644 --- a/src/display/sp-canvas-util.cpp +++ b/src/display/sp-canvas-util.cpp @@ -14,7 +14,7 @@ #include // for memset -#include <2geom/matrix.h> +#include <2geom/affine.h> #include "libnr/nr-pixops.h" #include "sp-canvas-item.h" #include "sp-canvas-util.h" @@ -77,7 +77,7 @@ sp_canvas_clear_buffer (SPCanvasBuf *buf) } } -Geom::Matrix sp_canvas_item_i2p_affine (SPCanvasItem * item) +Geom::Affine sp_canvas_item_i2p_affine (SPCanvasItem * item) { g_assert (item != NULL); /* this may be overly zealous - it is * plausible that this gets called @@ -86,7 +86,7 @@ Geom::Matrix sp_canvas_item_i2p_affine (SPCanvasItem * item) return item->xform; } -Geom::Matrix sp_canvas_item_i2i_affine (SPCanvasItem * from, SPCanvasItem * to) +Geom::Affine sp_canvas_item_i2i_affine (SPCanvasItem * from, SPCanvasItem * to) { g_assert (from != NULL); g_assert (to != NULL); @@ -94,7 +94,7 @@ Geom::Matrix sp_canvas_item_i2i_affine (SPCanvasItem * from, SPCanvasItem * to) return sp_canvas_item_i2w_affine(from) * sp_canvas_item_i2w_affine(to).inverse(); } -void sp_canvas_item_set_i2w_affine (SPCanvasItem * item, Geom::Matrix const &i2w) +void sp_canvas_item_set_i2w_affine (SPCanvasItem * item, Geom::Affine const &i2w) { g_assert (item != NULL); diff --git a/src/display/sp-canvas-util.h b/src/display/sp-canvas-util.h index 639163a28..f0aa15cb9 100644 --- a/src/display/sp-canvas-util.h +++ b/src/display/sp-canvas-util.h @@ -28,15 +28,15 @@ sp_canvas_clear_buffer (SPCanvasBuf * buf); /* get i2p (item to parent) affine transformation as general 6-element array */ -Geom::Matrix sp_canvas_item_i2p_affine (SPCanvasItem * item); +Geom::Affine sp_canvas_item_i2p_affine (SPCanvasItem * item); /* get i2i (item to item) affine transformation as general 6-element array */ -Geom::Matrix sp_canvas_item_i2i_affine (SPCanvasItem * from, SPCanvasItem * to); +Geom::Affine sp_canvas_item_i2i_affine (SPCanvasItem * from, SPCanvasItem * to); /* set item affine matrix to achieve given i2w matrix */ -void sp_canvas_item_set_i2w_affine (SPCanvasItem * item, Geom::Matrix const & aff); +void sp_canvas_item_set_i2w_affine (SPCanvasItem * item, Geom::Affine const & aff); void sp_canvas_item_move_to_z (SPCanvasItem * item, gint z); diff --git a/src/display/sp-canvas.cpp b/src/display/sp-canvas.cpp index fc68bcfc0..caf1ecbcc 100644 --- a/src/display/sp-canvas.cpp +++ b/src/display/sp-canvas.cpp @@ -30,7 +30,7 @@ #include #include "display/sp-canvas.h" #include "display/sp-canvas-group.h" -#include <2geom/matrix.h> +#include <2geom/affine.h> #include "libnr/nr-convex-hull.h" #include "preferences.h" #include "inkscape.h" @@ -171,7 +171,7 @@ sp_canvas_item_init (SPCanvasItem *item) // that should be initially invisible; examples of such items: node handles, the CtrlRect // used for rubberbanding, path outline, etc. item->flags |= SP_CANVAS_ITEM_VISIBLE; - item->xform = Geom::Matrix(Geom::identity()); + item->xform = Geom::Affine(Geom::identity()); } /** @@ -284,10 +284,10 @@ sp_canvas_item_dispose (GObject *object) * NB! affine is parent2canvas. */ static void -sp_canvas_item_invoke_update (SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags) +sp_canvas_item_invoke_update (SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags) { /* Apply the child item's transform */ - Geom::Matrix child_affine = item->xform * affine; + Geom::Affine child_affine = item->xform * affine; /* apply object flags to child flags */ int child_flags = flags & ~SP_CANVAS_UPDATE_REQUESTED; @@ -331,7 +331,7 @@ sp_canvas_item_invoke_point (SPCanvasItem *item, Geom::Point p, SPCanvasItem **a * @affine: An affine transformation matrix. */ void -sp_canvas_item_affine_absolute (SPCanvasItem *item, Geom::Matrix const &affine) +sp_canvas_item_affine_absolute (SPCanvasItem *item, Geom::Affine const &affine) { item->xform = affine; @@ -598,11 +598,11 @@ sp_canvas_item_ungrab (SPCanvasItem *item, guint32 etime) * Returns the product of all transformation matrices from the root item down * to the item. */ -Geom::Matrix sp_canvas_item_i2w_affine(SPCanvasItem const *item) +Geom::Affine sp_canvas_item_i2w_affine(SPCanvasItem const *item) { g_assert (SP_IS_CANVAS_ITEM (item)); // should we get this? - Geom::Matrix affine = Geom::identity(); + Geom::Affine affine = Geom::identity(); while (item) { affine *= item->xform; @@ -697,7 +697,7 @@ static void sp_canvas_group_class_init (SPCanvasGroupClass *klass); static void sp_canvas_group_init (SPCanvasGroup *group); static void sp_canvas_group_destroy (GtkObject *object); -static void sp_canvas_group_update (SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags); +static void sp_canvas_group_update (SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags); static double sp_canvas_group_point (SPCanvasItem *item, Geom::Point p, SPCanvasItem **actual_item); static void sp_canvas_group_render (SPCanvasItem *item, SPCanvasBuf *buf); @@ -782,7 +782,7 @@ sp_canvas_group_destroy (GtkObject *object) * Update handler for canvas groups */ static void -sp_canvas_group_update (SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags) +sp_canvas_group_update (SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags) { SPCanvasGroup const *group = SP_CANVAS_GROUP (item); Geom::RectHull corners(Geom::Point(0, 0)); diff --git a/src/display/sp-canvas.h b/src/display/sp-canvas.h index 9c8b19982..7ecbe0451 100644 --- a/src/display/sp-canvas.h +++ b/src/display/sp-canvas.h @@ -35,7 +35,7 @@ #include -#include <2geom/matrix.h> +#include <2geom/affine.h> #include #include <2geom/rect.h> diff --git a/src/display/sp-ctrlline.cpp b/src/display/sp-ctrlline.cpp index 0ef23812e..ef71c0a16 100644 --- a/src/display/sp-ctrlline.cpp +++ b/src/display/sp-ctrlline.cpp @@ -33,7 +33,7 @@ static void sp_ctrlline_class_init (SPCtrlLineClass *klass); static void sp_ctrlline_init (SPCtrlLine *ctrlline); static void sp_ctrlline_destroy (GtkObject *object); -static void sp_ctrlline_update (SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags); +static void sp_ctrlline_update (SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags); static void sp_ctrlline_render (SPCanvasItem *item, SPCanvasBuf *buf); static SPCanvasItemClass *parent_class; @@ -123,7 +123,7 @@ sp_ctrlline_render (SPCanvasItem *item, SPCanvasBuf *buf) } static void -sp_ctrlline_update (SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags) +sp_ctrlline_update (SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags) { SPCtrlLine *cl = SP_CTRLLINE (item); diff --git a/src/display/sp-ctrlline.h b/src/display/sp-ctrlline.h index a13907a70..e69c478fb 100644 --- a/src/display/sp-ctrlline.h +++ b/src/display/sp-ctrlline.h @@ -26,7 +26,7 @@ struct SPCtrlLine : public SPCanvasItem{ SPItem *item; // the item to which this line belongs in some sense; may be NULL for some users guint32 rgba; Geom::Point s, e; - Geom::Matrix affine; + Geom::Affine affine; }; struct SPCtrlLineClass : public SPCanvasItemClass{}; diff --git a/src/display/sp-ctrlpoint.cpp b/src/display/sp-ctrlpoint.cpp index ba40192a9..9f2ecb937 100644 --- a/src/display/sp-ctrlpoint.cpp +++ b/src/display/sp-ctrlpoint.cpp @@ -25,7 +25,7 @@ static void sp_ctrlpoint_class_init (SPCtrlPointClass *klass); static void sp_ctrlpoint_init (SPCtrlPoint *ctrlpoint); static void sp_ctrlpoint_destroy (GtkObject *object); -static void sp_ctrlpoint_update (SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags); +static void sp_ctrlpoint_update (SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags); static void sp_ctrlpoint_render (SPCanvasItem *item, SPCanvasBuf *buf); static SPCanvasItemClass *parent_class; @@ -110,7 +110,7 @@ sp_ctrlpoint_render (SPCanvasItem *item, SPCanvasBuf *buf) } static void -sp_ctrlpoint_update (SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags) +sp_ctrlpoint_update (SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags) { SPCtrlPoint *cp = SP_CTRLPOINT (item); diff --git a/src/display/sp-ctrlpoint.h b/src/display/sp-ctrlpoint.h index 1b7b7ba1e..b98d48f67 100644 --- a/src/display/sp-ctrlpoint.h +++ b/src/display/sp-ctrlpoint.h @@ -24,7 +24,7 @@ struct SPCtrlPoint : public SPCanvasItem { SPItem *item; // the item to which this line belongs in some sense; may be NULL for some users guint32 rgba; Geom::Point pt; - Geom::Matrix affine; + Geom::Affine affine; double radius; }; struct SPCtrlPointClass : public SPCanvasItemClass{}; diff --git a/src/display/sp-ctrlquadr.cpp b/src/display/sp-ctrlquadr.cpp index c29aecb96..1ed8d62b8 100644 --- a/src/display/sp-ctrlquadr.cpp +++ b/src/display/sp-ctrlquadr.cpp @@ -21,7 +21,7 @@ struct SPCtrlQuadr : public SPCanvasItem{ guint32 rgba; Geom::Point p1, p2, p3, p4; - Geom::Matrix affine; + Geom::Affine affine; }; struct SPCtrlQuadrClass : public SPCanvasItemClass{}; @@ -30,7 +30,7 @@ static void sp_ctrlquadr_class_init (SPCtrlQuadrClass *klass); static void sp_ctrlquadr_init (SPCtrlQuadr *ctrlquadr); static void sp_ctrlquadr_destroy (GtkObject *object); -static void sp_ctrlquadr_update (SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags); +static void sp_ctrlquadr_update (SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags); static void sp_ctrlquadr_render (SPCanvasItem *item, SPCanvasBuf *buf); static SPCanvasItemClass *parent_class; @@ -136,7 +136,7 @@ sp_ctrlquadr_render (SPCanvasItem *item, SPCanvasBuf *buf) static void -sp_ctrlquadr_update (SPCanvasItem *item, Geom::Matrix const &affine, unsigned int flags) +sp_ctrlquadr_update (SPCanvasItem *item, Geom::Affine const &affine, unsigned int flags) { SPCtrlQuadr *cq = SP_CTRLQUADR (item); -- cgit v1.2.3 From 4a4047fdd90aede6d16c020ddcd70c57ea4aa218 Mon Sep 17 00:00:00 2001 From: "Johan B. C. Engelen" Date: Mon, 21 Feb 2011 23:28:50 +0100 Subject: NEW: Grayscale color display mode. (toggle assigned keybinding: Shift+keypad5) (bzr r10065) --- src/display/Makefile_insert | 2 + src/display/grayscale.cpp | 91 +++++++++++++++++++++++++++++++++++++++++ src/display/grayscale.h | 40 ++++++++++++++++++ src/display/nr-arena-glyphs.cpp | 14 +++++-- src/display/nr-arena-item.cpp | 2 +- src/display/nr-arena-shape.cpp | 14 +++++-- src/display/nr-arena.cpp | 3 ++ src/display/nr-arena.h | 1 + src/display/rendermode.h | 9 +++- src/display/sp-canvas.h | 1 + 10 files changed, 168 insertions(+), 9 deletions(-) create mode 100644 src/display/grayscale.cpp create mode 100644 src/display/grayscale.h (limited to 'src/display') diff --git a/src/display/Makefile_insert b/src/display/Makefile_insert index b50a71033..370e28d6d 100644 --- a/src/display/Makefile_insert +++ b/src/display/Makefile_insert @@ -37,6 +37,8 @@ ink_common_sources += \ display/curve.h \ display/gnome-canvas-acetate.cpp \ display/gnome-canvas-acetate.h \ + display/grayscale.cpp \ + display/grayscale.h \ display/guideline.cpp \ display/guideline.h \ display/nr-plain-stuff-gdk.cpp \ diff --git a/src/display/grayscale.cpp b/src/display/grayscale.cpp new file mode 100644 index 000000000..af3a781b0 --- /dev/null +++ b/src/display/grayscale.cpp @@ -0,0 +1,91 @@ +/** \file + * Provide methods to calculate grayscale values (e.g. convert rgba value to grayscale rgba value) + */ + +/* + * Author: + * Johan Engelen + * + * Copyright (C) 2011 Author + * + * Released under GNU GPL + */ + +#include "display/grayscale.h" +#include "color.h" + +// for activeDesktopIsGrayscale: +#include "display/rendermode.h" +#include "inkscape.h" +#include "desktop.h" + +namespace Grayscale { + +guint32 process(guint32 rgba) { + return process(SP_RGBA32_R_U(rgba), SP_RGBA32_G_U(rgba), SP_RGBA32_B_U(rgba), SP_RGBA32_A_U(rgba)); +} + +guint32 process(guchar r, guchar g, guchar b, guchar a) { + float red_factor = 0.3; + float green_factor = 0.59; + float blue_factor = 0.11; + + /** To reduce banding in gradients, this calculation is tweaked a bit + * by outputing blue+1 or red+1 or both. The luminance is calculated + * times 4. Then last two bits are used to determine if red and/or blue + * can be increased by one. Then these two bits are discarded. + * So the output color it still looks gray, but has more than 256 steps. + * The assumption is that the eye is most sensitive to green, then red, then blue. + * (hope this trick works :-) Johan) + */ + + guint32 luminance = ( red_factor * (r << 3) + + green_factor * (g << 3) + + blue_factor * (b << 3) ); + unsigned blue_plus_one = (luminance & 0x01) ? 1 : 0; + unsigned red_plus_one = (luminance & 0x02) ? 1 : 0; + unsigned green_plus_one = (luminance & 0x04) ? 1 : 0; + luminance = luminance >> 3; + + if (luminance >= 0xff) { + return SP_RGBA32_U_COMPOSE(0xff, 0xff, 0xff, a); + } else { + return SP_RGBA32_U_COMPOSE(luminance + red_plus_one, luminance + green_plus_one, luminance + blue_plus_one, a); + } +} + +guchar luminance(guchar r, guchar g, guchar b) { + guint32 luminance = ( red_factor * r + + green_factor * g + + blue_factor * b ); + if (luminance > 0xff) { + luminance = 0xff; + } + + return luminance & 0xff; +} + +/** @brief Use this method if there is no other way to find out if grayscale view or not + * + * In some cases, the choice between normal or grayscale is so deep in the code hierarchy, + * that it is not possible to determine whether grayscale is desired or not, without using + * the global SP_ACTIVE_DESKTOP macro. Then use this method, so we know where the abuse is + * happening... + */ +bool activeDesktopIsGrayscale() { + return (SP_ACTIVE_DESKTOP->getColorMode() == Inkscape::COLORRENDERMODE_GRAYSCALE); +} + + +}; + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 : diff --git a/src/display/grayscale.h b/src/display/grayscale.h new file mode 100644 index 000000000..855c9e465 --- /dev/null +++ b/src/display/grayscale.h @@ -0,0 +1,40 @@ +#ifndef SEEN_DISPLAY_GRAYSCALE_H +#define SEEN_DISPLAY_GRAYSCALE_H + +/** \file + * Provide methods to calculate grayscale values (e.g. convert rgba value to grayscale rgba value) + * + * Author: + * Johan Engelen + * + * Copyright (C) 2011 Author + * + * Released under GNU GPL + */ + +#include + +namespace Grayscale { + guint32 process(guint32 rgba); + guint32 process(guchar r, guchar g, guchar b, guchar a); + guchar luminance(guchar r, guchar g, guchar b); + + const float red_factor = 0.3; + const float green_factor = 0.59; + const float blue_factor = 0.11; + + bool activeDesktopIsGrayscale(); +}; + +#endif /* !SEEN_DISPLAY_GRAYSCALE_H */ + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 : diff --git a/src/display/nr-arena-glyphs.cpp b/src/display/nr-arena-glyphs.cpp index 440a87012..42bca7d94 100644 --- a/src/display/nr-arena-glyphs.cpp +++ b/src/display/nr-arena-glyphs.cpp @@ -24,6 +24,7 @@ #include "nr-arena-glyphs.h" #include #include "inkscape-cairo.h" +#include "display/grayscale.h" #ifdef test_glyph_liv #include "../display/canvas-bpath.h" @@ -444,7 +445,8 @@ nr_arena_glyphs_group_render(cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPi SPStyle const *style = ggroup->style; guint ret = item->state; - bool print_colors_preview = (item->arena->rendermode == Inkscape::RENDERMODE_PRINT_COLORS_PREVIEW); + bool print_colors_preview = (item->arena->colorrendermode == Inkscape::COLORRENDERMODE_PRINT_COLORS_PREVIEW); + bool grayscale = (item->arena->colorrendermode == Inkscape::COLORRENDERMODE_GRAYSCALE); if (item->arena->rendermode == Inkscape::RENDERMODE_OUTLINE) { @@ -513,8 +515,11 @@ nr_arena_glyphs_group_render(cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPi rgba = style->fill.value.color.toRGBA32( SP_SCALE24_TO_FLOAT(style->fill_opacity.value) ); } - if (print_colors_preview) + if (print_colors_preview) { nr_arena_separate_color_plates(&rgba); + } else if (grayscale) { + rgba = Grayscale::process(rgba); + } nr_blit_pixblock_mask_rgba32(pb, &m, rgba); pb->empty = FALSE; @@ -557,8 +562,11 @@ nr_arena_glyphs_group_render(cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPi rgba = style->stroke.value.color.toRGBA32( SP_SCALE24_TO_FLOAT(style->stroke_opacity.value) ); } - if (print_colors_preview) + if (print_colors_preview) { nr_arena_separate_color_plates(&rgba); + } else if (grayscale) { + rgba = Grayscale::process(rgba); + } nr_blit_pixblock_mask_rgba32(pb, &m, rgba); pb->empty = FALSE; diff --git a/src/display/nr-arena-item.cpp b/src/display/nr-arena-item.cpp index c74e2baa0..6a5b7b5ba 100644 --- a/src/display/nr-arena-item.cpp +++ b/src/display/nr-arena-item.cpp @@ -314,7 +314,7 @@ nr_arena_item_invoke_render (cairo_t *ct, NRArenaItem *item, NRRectL const *area bool outline = (item->arena->rendermode == Inkscape::RENDERMODE_OUTLINE); bool filter = (item->arena->rendermode != Inkscape::RENDERMODE_OUTLINE && item->arena->rendermode != Inkscape::RENDERMODE_NO_FILTERS); - bool print_colors = (item->arena->rendermode == Inkscape::RENDERMODE_PRINT_COLORS_PREVIEW); + bool print_colors = (item->arena->colorrendermode == Inkscape::COLORRENDERMODE_PRINT_COLORS_PREVIEW); nr_return_val_if_fail (item != NULL, NR_ARENA_ITEM_STATE_INVALID); nr_return_val_if_fail (NR_IS_ARENA_ITEM (item), diff --git a/src/display/nr-arena-shape.cpp b/src/display/nr-arena-shape.cpp index 1f516c066..33a218e99 100644 --- a/src/display/nr-arena-shape.cpp +++ b/src/display/nr-arena-shape.cpp @@ -24,6 +24,7 @@ #include "display/nr-arena.h" #include "display/nr-arena-shape.h" #include "display/curve.h" +#include "display/grayscale.h" #include "libnr/nr-pixops.h" #include "libnr/nr-blit.h" #include "libnr/nr-convert2geom.h" @@ -843,7 +844,8 @@ nr_arena_shape_render(cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPixBlock if (!shape->style) return item->state; bool outline = (NR_ARENA_ITEM(shape)->arena->rendermode == Inkscape::RENDERMODE_OUTLINE); - bool print_colors_preview = (NR_ARENA_ITEM(shape)->arena->rendermode == Inkscape::RENDERMODE_PRINT_COLORS_PREVIEW); + bool print_colors_preview = (NR_ARENA_ITEM(shape)->arena->colorrendermode == Inkscape::COLORRENDERMODE_PRINT_COLORS_PREVIEW); + bool grayscale = (NR_ARENA_ITEM(shape)->arena->colorrendermode == Inkscape::COLORRENDERMODE_GRAYSCALE); if (outline) { // cairo outline rendering @@ -903,8 +905,11 @@ nr_arena_shape_render(cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPixBlock rgba = fill_color->toRGBA32( shape->_fill.opacity ); } - if (print_colors_preview) + if (print_colors_preview) { nr_arena_separate_color_plates(&rgba); + } else if (grayscale) { + rgba = Grayscale::process(rgba); + } nr_blit_pixblock_mask_rgba32(pb, &m, rgba); pb->empty = FALSE; @@ -944,8 +949,11 @@ nr_arena_shape_render(cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPixBlock rgba = stroke_color->toRGBA32( shape->_stroke.opacity ); } - if (print_colors_preview) + if (print_colors_preview) { nr_arena_separate_color_plates(&rgba); + } else if (grayscale) { + rgba = Grayscale::process(rgba); + } nr_blit_pixblock_mask_rgba32(pb, &m, rgba); pb->empty = FALSE; diff --git a/src/display/nr-arena.cpp b/src/display/nr-arena.cpp index 85de5c119..837bc0d86 100644 --- a/src/display/nr-arena.cpp +++ b/src/display/nr-arena.cpp @@ -58,6 +58,7 @@ nr_arena_init (NRArena *arena) arena->delta = 0; // to be set by desktop from prefs arena->renderoffscreen = false; // use render values from preferences otherwise render exact arena->rendermode = Inkscape::RENDERMODE_NORMAL; // default is normal render + arena->colorrendermode = Inkscape::COLORRENDERMODE_NORMAL; // default is normal color arena->blurquality = BLUR_QUALITY_NORMAL; arena->filterquality = Inkscape::Filters::FILTER_QUALITY_NORMAL; arena->outlinecolor = 0xff; // black; to be set by desktop from bg color @@ -88,6 +89,7 @@ nr_arena_request_update (NRArena *arena, NRArenaItem *item) arena->blurquality = BLUR_QUALITY_BEST; arena->filterquality = Inkscape::Filters::FILTER_QUALITY_BEST; arena->rendermode = Inkscape::RENDERMODE_NORMAL; + arena->colorrendermode = Inkscape::COLORRENDERMODE_NORMAL; } if (aobject->callbacks) { @@ -119,6 +121,7 @@ nr_arena_request_render_rect (NRArena *arena, NRRectL *area) arena->blurquality = BLUR_QUALITY_BEST; arena->filterquality = Inkscape::Filters::FILTER_QUALITY_BEST; arena->rendermode = Inkscape::RENDERMODE_NORMAL; + arena->colorrendermode = Inkscape::COLORRENDERMODE_NORMAL; } if (aobject->callbacks && area && !nr_rect_l_test_empty_ptr(area)) { for (unsigned int i = 0; i < aobject->callbacks->length; i++) { diff --git a/src/display/nr-arena.h b/src/display/nr-arena.h index d2f9dc246..bd6c3029d 100644 --- a/src/display/nr-arena.h +++ b/src/display/nr-arena.h @@ -48,6 +48,7 @@ struct NRArena : public NRActiveObject { double delta; bool renderoffscreen; // if true then rendering must be exact Inkscape::RenderMode rendermode; + Inkscape::ColorRenderMode colorrendermode; int blurquality; // will be updated during update from preferences int filterquality; // will be updated during update from preferences diff --git a/src/display/rendermode.h b/src/display/rendermode.h index abcdb3db4..8fc022bfb 100644 --- a/src/display/rendermode.h +++ b/src/display/rendermode.h @@ -12,8 +12,13 @@ namespace Inkscape { enum RenderMode { RENDERMODE_NORMAL, RENDERMODE_NO_FILTERS, - RENDERMODE_OUTLINE, - RENDERMODE_PRINT_COLORS_PREVIEW + RENDERMODE_OUTLINE +}; + +enum ColorRenderMode { + COLORRENDERMODE_NORMAL, + COLORRENDERMODE_GRAYSCALE, + COLORRENDERMODE_PRINT_COLORS_PREVIEW }; } diff --git a/src/display/sp-canvas.h b/src/display/sp-canvas.h index 7ecbe0451..3a0b56585 100644 --- a/src/display/sp-canvas.h +++ b/src/display/sp-canvas.h @@ -143,6 +143,7 @@ struct SPCanvas { bool drawing_disabled; int rendermode; + int colorrendermode; #if ENABLE_LCMS bool enable_cms_display_adj; -- cgit v1.2.3 From 76ad5cbf7bbdd4272b2d49387fdc10ca808767d7 Mon Sep 17 00:00:00 2001 From: Adib Taraben Date: Sun, 27 Feb 2011 21:48:16 +0100 Subject: compatibility patch to compile using gcc 4.6 Fixed bugs: - https://launchpad.net/bugs/707205 (bzr r10070.1.1) --- src/display/canvas-temporary-item.h | 1 + 1 file changed, 1 insertion(+) (limited to 'src/display') diff --git a/src/display/canvas-temporary-item.h b/src/display/canvas-temporary-item.h index 692f9d85b..b73907bad 100644 --- a/src/display/canvas-temporary-item.h +++ b/src/display/canvas-temporary-item.h @@ -13,6 +13,7 @@ */ +#include #include #include -- cgit v1.2.3 From 51537a0fde5e084d6e7282a19b5e53a6b1f62459 Mon Sep 17 00:00:00 2001 From: Diederik van Lierop Date: Sun, 6 Mar 2011 22:26:32 +0100 Subject: Allow the center handle to be selectable for items having a width or height close to zero (i.e. lines, dots) Before I fixed this the center handle used to be burried underneath the other handles (bzr r10081) --- src/display/sp-canvas.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/display') diff --git a/src/display/sp-canvas.cpp b/src/display/sp-canvas.cpp index caf1ecbcc..2d1e57092 100644 --- a/src/display/sp-canvas.cpp +++ b/src/display/sp-canvas.cpp @@ -848,6 +848,12 @@ sp_canvas_group_point (SPCanvasItem *item, Geom::Point p, SPCanvasItem **actual_ } else has_point = FALSE; + // This metric should be improved, because in case of (partly) overlapping items we will now + // always select the last one that has been added to the group. We could instead select the one + // of which the center is the closest, for example. One can then move to the center + // of the item to be focused, and have that one selected. Of course this will only work if the + // centers are not coincident, but at least it's better than what we have now. + // See the extensive comment in Inkscape::SelTrans::_updateHandles() if (has_point && point_item && ((int) (dist + 0.5) <= item->canvas->close_enough)) { best = dist; *actual_item = point_item; -- cgit v1.2.3 From 15221eba482d2f0a57770b2bfb0926ca1869c4c6 Mon Sep 17 00:00:00 2001 From: "Johan B. C. Engelen" Date: Mon, 7 Mar 2011 20:47:04 +0100 Subject: add a check for null desktop Fixed bugs: - https://launchpad.net/bugs/723446 (bzr r10082) --- src/display/grayscale.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/display') diff --git a/src/display/grayscale.cpp b/src/display/grayscale.cpp index af3a781b0..37f2b255c 100644 --- a/src/display/grayscale.cpp +++ b/src/display/grayscale.cpp @@ -73,9 +73,13 @@ guchar luminance(guchar r, guchar g, guchar b) { * happening... */ bool activeDesktopIsGrayscale() { - return (SP_ACTIVE_DESKTOP->getColorMode() == Inkscape::COLORRENDERMODE_GRAYSCALE); + if (SP_ACTIVE_DESKTOP) { + return (SP_ACTIVE_DESKTOP->getColorMode() == Inkscape::COLORRENDERMODE_GRAYSCALE); + } else { + return false; + } } - + }; -- cgit v1.2.3 From 2c93e5fb2d1d7c8bfc72bc11826069686a67b113 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Fri, 11 Mar 2011 16:59:38 +0100 Subject: Add handling filter primitive subregion to filter primitive classes. More correct handling of image placement in feImage filter primitive. (bzr r10092) --- src/display/nr-filter-image.cpp | 156 +++++++++++++++++++++++++++--------- src/display/nr-filter-image.h | 6 +- src/display/nr-filter-primitive.cpp | 112 ++++++++++++++++++++++++-- src/display/nr-filter-primitive.h | 37 ++++----- src/display/nr-filter-units.h | 20 +++++ src/display/nr-filter.cpp | 2 +- src/display/nr-filter.h | 6 +- 7 files changed, 273 insertions(+), 66 deletions(-) (limited to 'src/display') diff --git a/src/display/nr-filter-image.cpp b/src/display/nr-filter-image.cpp index cc6dc18fa..9ecec69bf 100644 --- a/src/display/nr-filter-image.cpp +++ b/src/display/nr-filter-image.cpp @@ -6,7 +6,7 @@ * Tavmjong Bah * Abhishek Sharma * - * Copyright (C) 2007 authors + * Copyright (C) 2007-2011 authors * * Released under GNU GPL, read the file 'COPYING' for more information */ @@ -20,6 +20,8 @@ #include "libnr/nr-compose-transform.h" #include "libnr/nr-rect-l.h" #include "preferences.h" +#include "svg/svg-length.h" +#include "enums.h" namespace Inkscape { namespace Filters { @@ -148,60 +150,139 @@ int FilterImage::render(FilterSlot &slot, FilterUnits const &units) { image_pixbuf = image->get_pixels(); has_alpha = image->get_has_alpha(); } - int w,x,y; + + // Viewport is filter primitive area (in user coordinates). + Geom::Rect vp = filter_primitive_area( units ); + double feImageX = vp.min()[Geom::X]; + double feImageY = vp.min()[Geom::Y]; + double feImageWidth = vp.width(); + double feImageHeight = vp.height(); + + // Now that we have the viewport, we must map image inside. + // Partially copied from sp-image.cpp. + + // Do nothing if preserveAspectRatio is "none". + if( aspect_align != SP_ASPECT_NONE ) { + + // Check aspect ratio of image vs. viewport + double feAspect = feImageHeight/feImageWidth; + double aspect = (double)height/(double)width; + bool ratio = (feAspect < aspect); + + double ax, ay; // Align side + switch( aspect_align ) { + case SP_ASPECT_XMIN_YMIN: + ax = 0.0; + ay = 0.0; + break; + case SP_ASPECT_XMID_YMIN: + ax = 0.5; + ay = 0.0; + break; + case SP_ASPECT_XMAX_YMIN: + ax = 1.0; + ay = 0.0; + break; + case SP_ASPECT_XMIN_YMID: + ax = 0.0; + ay = 0.5; + break; + case SP_ASPECT_XMID_YMID: + ax = 0.5; + ay = 0.5; + break; + case SP_ASPECT_XMAX_YMID: + ax = 1.0; + ay = 0.5; + break; + case SP_ASPECT_XMIN_YMAX: + ax = 0.0; + ay = 1.0; + break; + case SP_ASPECT_XMID_YMAX: + ax = 0.5; + ay = 1.0; + break; + case SP_ASPECT_XMAX_YMAX: + ax = 1.0; + ay = 1.0; + break; + default: + ax = 0.0; + ay = 0.0; + break; + } + + if( aspect_clip == SP_ASPECT_SLICE ) { + // image clipped by viewbox + + if( ratio ) { + // clip top/bottom + feImageY -= ay * (feImageWidth * aspect - feImageHeight); + feImageHeight = feImageWidth * aspect; + } else { + // clip sides + feImageX -= ax * (feImageHeight / aspect - feImageWidth); + feImageWidth = feImageHeight / aspect; + } + + } else { + // image fits into viewbox + + if( ratio ) { + // fit to height + feImageX += ax * (feImageWidth - feImageHeight / aspect ); + feImageWidth = feImageHeight / aspect; + } else { + // fit to width + feImageY += ay * (feImageHeight - feImageWidth * aspect); + feImageHeight = feImageWidth * aspect; + } + } + } + + // Set up user coordinates to pix block transforms + double scaleX = width/feImageWidth; + double scaleY = height/feImageHeight; + Geom::Affine unit_trans = units.get_matrix_user2pb().inverse(); + + // Region being drawn on screen. Corresponds to Filter Region in current screen coordinates. + // Note, that the screen is refreshed in horizontal slices with y-axis inverted. NRPixBlock *in = slot.get(_input); if (!in) { g_warning("Missing source image for feImage (in=%d)", _input); return 1; } - - // This section needs to be fully tested!! - - // Region being drawn on screen int x0 = in->area.x0, y0 = in->area.y0; int x1 = in->area.x1, y1 = in->area.y1; - NRPixBlock *out = new NRPixBlock; - nr_pixblock_setup_fast(out, NR_PIXBLOCK_MODE_R8G8B8A8P, x0, y0, x1, y1, true); - w = x1 - x0; + int w = x1 - x0; - // Get the object bounding box. Image is placed with respect to box. - // Array values: 0: width; 3: height; 4: -x; 5: -y. - Geom::Affine object_bbox = units.get_matrix_user2filterunits().inverse(); - - // feImage is suppose to use the same parameters as a normal SVG image. - // If a width or height is set to zero, the image is not suppose to be displayed. - // This does not seem to be what Firefox or Opera does, nor does the W3C displacement - // filter test expect this behavior. If the width and/or height are zero, we use - // the width and height of the object bounding box. - if( feImageWidth == 0 ) feImageWidth = object_bbox[0]; - if( feImageHeight == 0 ) feImageHeight = object_bbox[3]; - - double scaleX = width/feImageWidth; - double scaleY = height/feImageHeight; + Geom::Affine d2s = Geom::Translate(x0, y0) * unit_trans * Geom::Translate(-feImageX,-feImageY) * Geom::Scale(scaleX, scaleY); - int coordx,coordy; + // Set up pix block + NRPixBlock *out = new NRPixBlock; + nr_pixblock_setup_fast(out, NR_PIXBLOCK_MODE_R8G8B8A8P, x0, y0, x1, y1, true); unsigned char *out_data = NR_PIXBLOCK_PX(out); - Geom::Affine unit_trans = units.get_matrix_primitiveunits2pb().inverse(); - Geom::Affine d2s = Geom::Translate(x0, y0) * unit_trans * Geom::Translate(object_bbox[4]-feImageX, object_bbox[5]-feImageY) * Geom::Scale(scaleX, scaleY); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); int nr_arena_image_x_sample = prefs->getInt("/options/bitmapoversample/value", 1); int nr_arena_image_y_sample = nr_arena_image_x_sample; + if (has_alpha) { nr_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM(out_data, x1-x0, y1-y0, 4*w, image_pixbuf, width, height, rowstride, d2s, 255, nr_arena_image_x_sample, nr_arena_image_y_sample); } else { - for (x=x0; x < x1; x++){ - for (y=y0; y < y1; y++){ + for (int x=x0; x < x1; x++){ + for (int y=y0; y < y1; y++){ //TODO: use interpolation // Temporarily add 0.5 so we sample center of "cell" - double indexX = scaleX * (((x+0.5) * unit_trans[0] + unit_trans[4]) - feImageX + object_bbox[4]); - double indexY = scaleY * (((y+0.5) * unit_trans[3] + unit_trans[5]) - feImageY + object_bbox[5]); + double indexX = scaleX * (((x+0.5) * unit_trans[0] + unit_trans[4]) - feImageX); + double indexY = scaleY * (((y+0.5) * unit_trans[3] + unit_trans[5]) - feImageY); // coordx == 0 and coordy == 0 must be included, but we protect // against negative numbers which round up to 0 with (int). - coordx = ( indexX >= 0 ? int( indexX ) : -1 ); - coordy = ( indexY >= 0 ? int( indexY ) : -1 ); + int coordx = ( indexX >= 0 ? int( indexX ) : -1 ); + int coordy = ( indexY >= 0 ? int( indexY ) : -1 ); if (coordx >= 0 && coordx < width && coordy >= 0 && coordy < height){ out_data[4*((x - x0)+w*(y - y0)) ] = (unsigned char) image_pixbuf[3*coordx + rowstride*coordy ]; //Red out_data[4*((x - x0)+w*(y - y0)) + 1] = (unsigned char) image_pixbuf[3*coordx + rowstride*coordy + 1]; //Green @@ -230,11 +311,12 @@ void FilterImage::set_document(SPDocument *doc){ document = doc; } -void FilterImage::set_region(SVGLength x, SVGLength y, SVGLength width, SVGLength height){ - feImageX=x.computed; - feImageY=y.computed; - feImageWidth=width.computed; - feImageHeight=height.computed; +void FilterImage::set_align( unsigned int align ) { + aspect_align = align; +} + +void FilterImage::set_clip( unsigned int clip ) { + aspect_clip = clip; } FilterTraits FilterImage::get_input_traits() { diff --git a/src/display/nr-filter-image.h b/src/display/nr-filter-image.h index 7b2fa8bc7..ecbc9597d 100644 --- a/src/display/nr-filter-image.h +++ b/src/display/nr-filter-image.h @@ -31,7 +31,8 @@ public: virtual FilterTraits get_input_traits(); void set_document( SPDocument *document ); void set_href(const gchar *href); - void set_region(SVGLength x, SVGLength y, SVGLength width, SVGLength height); + void set_align( unsigned int align ); + void set_clip( unsigned int clip ); bool from_element; SPItem* SVGElem; @@ -41,7 +42,8 @@ private: guint8* image_pixbuf; Glib::RefPtr image; int width, height, rowstride; - float feImageX,feImageY,feImageWidth,feImageHeight; + unsigned int aspect_align : 4; + unsigned int aspect_clip : 1; bool has_alpha; }; diff --git a/src/display/nr-filter-primitive.cpp b/src/display/nr-filter-primitive.cpp index f53ff4a7f..1af86ec3e 100644 --- a/src/display/nr-filter-primitive.cpp +++ b/src/display/nr-filter-primitive.cpp @@ -5,6 +5,7 @@ * * Author: * Niko Kiirala + * Tavmjong Bah (primitive subregion) * * Copyright (C) 2006 Niko Kiirala * @@ -19,17 +20,27 @@ namespace Inkscape { namespace Filters { +using Geom::X; +using Geom::Y; + FilterPrimitive::FilterPrimitive() { _input = NR_FILTER_SLOT_NOT_SET; _output = NR_FILTER_SLOT_NOT_SET; - // These defaults are according to SVG standard. + // Primitive subregion, should default to the union of all subregions of referenced nodes + // (i.e. other filter primitives except feTile). If no referenced nodes, defaults to filter + // region expressed in percent. At the moment, we do not check referenced nodes. + + // We must keep track if a value is set or not, if not set then the region defaults to 0%, 0%, + // 100%, 100% ("x", "y", "width", "height") of the -> filter <- region. If set, then + // percentages are in terms of bounding box or viewbox, depending on value of "primitiveUnits". + // NB: SVGLength.set takes prescaled percent values: 1 means 100% - _region_x.set(SVGLength::PERCENT, 0, 0); - _region_y.set(SVGLength::PERCENT, 0, 0); - _region_width.set(SVGLength::PERCENT, 1, 0); - _region_height.set(SVGLength::PERCENT, 1, 0); + _subregion_x.unset(SVGLength::PERCENT, 0, 0); + _subregion_y.unset(SVGLength::PERCENT, 0, 0); + _subregion_width.unset(SVGLength::PERCENT, 1, 0); + _subregion_height.unset(SVGLength::PERCENT, 1, 0); } FilterPrimitive::~FilterPrimitive() @@ -54,6 +65,97 @@ void FilterPrimitive::set_output(int slot) { if (slot >= 0) _output = slot; } +// We need to copy reference even if unset as we need to know if +// someone has unset a value. +void FilterPrimitive::set_x(SVGLength const &length) +{ + _subregion_x = length; +} + +void FilterPrimitive::set_y(SVGLength const &length) +{ + _subregion_y = length; +} +void FilterPrimitive::set_width(SVGLength const &length) +{ + _subregion_width = length; +} +void FilterPrimitive::set_height(SVGLength const &length) +{ + _subregion_height = length; +} + +void FilterPrimitive::set_subregion(SVGLength const &x, SVGLength const &y, + SVGLength const &width, SVGLength const &height) { + _subregion_x = x; + _subregion_y = y; + _subregion_width = width; + _subregion_height = height; +} + +Geom::Rect FilterPrimitive::filter_primitive_area(FilterUnits const &units) +{ + Geom::OptRect bb = units.get_item_bbox(); + Geom::OptRect fa = units.get_filter_area(); + + /* Update computed values for ex, em, %. For %, assumes primitive unit is objectBoundingBox. */ + /* TODO: fetch somehow the object ex and em lengths; 12, 6 are just dummy values. */ + double len_x = bb->width(); + double len_y = bb->height(); + _subregion_x.update(12, 6, len_x); + _subregion_y.update(12, 6, len_y); + _subregion_width.update(12, 6, len_x); + _subregion_height.update(12, 6, len_y); + + // x, y, width, and height are independently defined (i.e. one can be defined, by default, to + // the filter area while another is defined relative to the bounding box). It is better to keep + // track of them separately and then compose the Rect at the end. + double x = 0; + double y = 0; + double width = 0; + double height = 0; + + // If subregion not set, by special case use filter region. + if( !_subregion_x._set ) x = fa->min()[X]; + if( !_subregion_y._set ) y = fa->min()[Y]; + if( !_subregion_width._set ) width = fa->width(); + if( !_subregion_height._set ) height = fa->height(); + + if( units.get_primitive_units() == SP_FILTER_UNITS_OBJECTBOUNDINGBOX ) { + // Values are in terms of fraction of bounding box. + if( _subregion_x._set && _subregion_x.unit != SVGLength::PERCENT ) x = bb->min()[X] + bb->width() * _subregion_x.value; + if( _subregion_y._set && _subregion_y.unit != SVGLength::PERCENT ) y = bb->min()[Y] + bb->height() * _subregion_y.value; + if( _subregion_width._set && _subregion_width.unit != SVGLength::PERCENT ) width = bb->width() * _subregion_width.value; + if( _subregion_height._set && _subregion_height.unit != SVGLength::PERCENT ) height = bb->height() * _subregion_height.value; + // Values are in terms of percent + if( _subregion_x._set && _subregion_x.unit == SVGLength::PERCENT ) x = bb->min()[X] + _subregion_x.computed; + if( _subregion_y._set && _subregion_y.unit == SVGLength::PERCENT ) y = bb->min()[Y] + _subregion_y.computed; + if( _subregion_width._set && _subregion_width.unit == SVGLength::PERCENT ) width = _subregion_width.computed; + if( _subregion_height._set && _subregion_height.unit == SVGLength::PERCENT ) height = _subregion_height.computed; + } else { + // Values are in terms of user space coordinates or percent of viewbox (yuck!), + // which is usually the size of SVG drawing. Default. + if( _subregion_x._set && _subregion_x.unit != SVGLength::PERCENT ) x = _subregion_x.computed; + if( _subregion_y._set && _subregion_y.unit != SVGLength::PERCENT ) y = _subregion_y.computed; + if( _subregion_width._set && _subregion_width.unit != SVGLength::PERCENT ) width = _subregion_width.computed; + if( _subregion_height._set && _subregion_height.unit != SVGLength::PERCENT ) height = _subregion_height.computed; + // TODO: add percent of viewport TEMPORARY HACK FOR TESTING... + if( _subregion_x._set && _subregion_x.unit == SVGLength::PERCENT ) x = _subregion_x.value * 480; // viewport_x + if( _subregion_y._set && _subregion_y.unit == SVGLength::PERCENT ) y = _subregion_y.value * 360; + if( _subregion_width._set && _subregion_width.unit == SVGLength::PERCENT ) width = _subregion_width.value * 480; + if( _subregion_height._set && _subregion_height.unit == SVGLength::PERCENT ) height = _subregion_height.value * 360; + } + + Geom::Point minp, maxp; + minp[X] = x; + minp[Y] = y; + maxp[X] = x + width; + maxp[Y] = y + height; + + Geom::Rect area(minp, maxp); + return area; +} + FilterTraits FilterPrimitive::get_input_traits() { return TRAIT_ANYTHING; } diff --git a/src/display/nr-filter-primitive.h b/src/display/nr-filter-primitive.h index 7639a9d1d..0e8df3813 100644 --- a/src/display/nr-filter-primitive.h +++ b/src/display/nr-filter-primitive.h @@ -78,27 +78,27 @@ public: */ virtual void set_output(int slot); - void set_x(SVGLength &length); - void set_y(SVGLength &length); - void set_width(SVGLength &length); - void set_height(SVGLength &length); - /** * Sets the filter primitive subregion. Passing an unset length - * (length._set == false) as any parameter results in that parameter - * not being changed. - * Filter primitive will not hold any references to the passed - * SVGLength object after function returns. - * If any of the parameters does not get set the default value, as - * defined in SVG standard, for that parameter is used instead. + * (length._set == false) WILL change the parameter as it is + * important to know if a parameter is unset. */ - void set_region(SVGLength &x, SVGLength &y, - SVGLength &width, SVGLength &height); + void set_x(SVGLength const &length); + void set_y(SVGLength const &length); + void set_width(SVGLength const &length); + void set_height(SVGLength const &length); + void set_subregion(SVGLength const &x, SVGLength const &y, + SVGLength const &width, SVGLength const &height); /** * Resets the filter primitive subregion to its default value */ - void reset_region(); + void reset_subregion(); // Not implemented + + /** + * Returns the filter primitive area in user coordinate system. + */ + Geom::Rect filter_primitive_area(FilterUnits const &units); /** * Queries the filter, which traits it needs from its input buffers. @@ -112,10 +112,11 @@ protected: int _input; int _output; - SVGLength _region_x; - SVGLength _region_y; - SVGLength _region_width; - SVGLength _region_height; + /* Filter primitive subregion */ + SVGLength _subregion_x; + SVGLength _subregion_y; + SVGLength _subregion_width; + SVGLength _subregion_height; }; diff --git a/src/display/nr-filter-units.h b/src/display/nr-filter-units.h index 9a0d8ea83..b78e102cd 100644 --- a/src/display/nr-filter-units.h +++ b/src/display/nr-filter-units.h @@ -61,6 +61,26 @@ public: */ void set_automatic_resolution(bool const automatic); + /** + * Gets the item bounding box in user coordinates + */ + Geom::OptRect get_item_bbox() const { return item_bbox; }; + + /** + * Gets the filter effects area in user coordinates + */ + Geom::OptRect get_filter_area() const { return filter_area; }; + + /** + * Gets Filter Units (userSpaceOnUse or objectBoundingBox) + */ + SPFilterUnits get_filter_units() const { return filterUnits; }; + + /** + * Gets Primitive Units (userSpaceOnUse or objectBoundingBox) + */ + SPFilterUnits get_primitive_units() const { return primitiveUnits; }; + /** * Gets the user coordinates to pixblock coordinates transformation matrix. */ diff --git a/src/display/nr-filter.cpp b/src/display/nr-filter.cpp index ea9b4f7da..85815c31a 100644 --- a/src/display/nr-filter.cpp +++ b/src/display/nr-filter.cpp @@ -326,7 +326,7 @@ Geom::Rect Filter::filter_effect_area(Geom::Rect const &bbox) minp[Y] = _region_y.computed; maxp[Y] = minp[Y] + _region_height.computed; } else { - g_warning("Error in Inkscape::Filters::Filter::bbox_enlarge: unrecognized value of _filter_units"); + g_warning("Error in Inkscape::Filters::Filter::filter_effect_area: unrecognized value of _filter_units"); } Geom::Rect area(minp, maxp); return area; diff --git a/src/display/nr-filter.h b/src/display/nr-filter.h index 23acea99f..ae5f96420 100644 --- a/src/display/nr-filter.h +++ b/src/display/nr-filter.h @@ -92,8 +92,8 @@ public: * If any of these parameters does not get set, the default value, as * defined in SVG standard, for that parameter is used instead. */ - void set_region(SVGLength &x, SVGLength &y, - SVGLength &width, SVGLength &height); + void set_region(SVGLength const &x, SVGLength const &y, + SVGLength const &width, SVGLength const &height); /** * Resets the filter effects region to its default value as defined @@ -131,7 +131,7 @@ public: void set_filter_units(SPFilterUnits unit); /** - * Set the primitiveUnits-properterty. If not set, the default value of + * Set the primitiveUnits-property. If not set, the default value of * userSpaceOnUse is used. If the parameter value is not a valid * enumeration value from SPFilterUnits, no changes to filter state * are made. -- cgit v1.2.3 From ac8b01693af4588db21cc219baa8c5d0fd3d5826 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Sat, 12 Mar 2011 09:23:09 +0100 Subject: Use filter primitive subregion for feFlood per SVG standard. (bzr r10094) --- src/display/nr-filter-flood.cpp | 68 ++++++++++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 24 deletions(-) (limited to 'src/display') diff --git a/src/display/nr-filter-flood.cpp b/src/display/nr-filter-flood.cpp index ca073cfd8..eb1cf13a6 100644 --- a/src/display/nr-filter-flood.cpp +++ b/src/display/nr-filter-flood.cpp @@ -3,8 +3,9 @@ * * Authors: * Felipe CorrĂȘa da Silva Sanches + * Tavmjong Bah (use primitive filter region) * - * Copyright (C) 2007 authors + * Copyright (C) 2007, 2011 authors * * Released under GNU GPL, read the file 'COPYING' for more information */ @@ -31,7 +32,7 @@ FilterPrimitive * FilterFlood::create() { FilterFlood::~FilterFlood() {} -int FilterFlood::render(FilterSlot &slot, FilterUnits const &/*units*/) { +int FilterFlood::render(FilterSlot &slot, FilterUnits const &units) { //g_message("rendering feflood"); NRPixBlock *in = slot.get(_input); if (!in) { @@ -39,35 +40,54 @@ int FilterFlood::render(FilterSlot &slot, FilterUnits const &/*units*/) { return 1; } - int i; - int in_w = in->area.x1 - in->area.x0; - int in_h = in->area.y1 - in->area.y0; - - NRPixBlock *out = new NRPixBlock; - - nr_pixblock_setup_fast(out, NR_PIXBLOCK_MODE_R8G8B8A8N, - in->area.x0, in->area.y0, in->area.x1, in->area.y1, - true); + // Region being drawn on screen in screen coordinates. + int x0 = in->area.x0, y0 = in->area.y0; + int x1 = in->area.x1, y1 = in->area.y1; + int w = x1 - x0; + // Set up pix block + NRPixBlock *out = new NRPixBlock; + nr_pixblock_setup_fast(out, NR_PIXBLOCK_MODE_R8G8B8A8N, x0, y0, x1, y1, true); unsigned char *out_data = NR_PIXBLOCK_PX(out); - unsigned char r,g,b,a; - - r = CLAMP_D_TO_U8((color >> 24) % 256); - g = CLAMP_D_TO_U8((color >> 16) % 256); - b = CLAMP_D_TO_U8((color >> 8) % 256); - a = CLAMP_D_TO_U8(opacity*255); + // Get RGBA values. + unsigned char r,g,b,a; + r = CLAMP_D_TO_U8((color >> 24) % 256); + g = CLAMP_D_TO_U8((color >> 16) % 256); + b = CLAMP_D_TO_U8((color >> 8) % 256); + a = CLAMP_D_TO_U8(opacity*255); #if ENABLE_LCMS - icc_color_to_sRGB(icc, &r, &g, &b); -//g_message("result: r:%d g:%d b:%d", r, g, b); + icc_color_to_sRGB(icc, &r, &g, &b); + //g_message("result: r:%d g:%d b:%d", r, g, b); #endif //ENABLE_LCMS - for(i=0; i < 4*in_h*in_w; i+=4){ - out_data[i]=r; - out_data[i+1]=g; - out_data[i+2]=b; - out_data[i+3]=a; + // Only fill primitive subregion + + // Get subregion in user units + Geom::Rect fp = filter_primitive_area( units ); + + // Need to convert to pixbuff units + Geom::Rect fp_pb = fp * units.get_matrix_user2pb(); + + // Make sure we are in pixbuff area + int fp_x0 = fp_pb.min()[Geom::X]; + int fp_x1 = fp_pb.max()[Geom::X]; + int fp_y0 = fp_pb.min()[Geom::Y]; + int fp_y1 = fp_pb.max()[Geom::Y]; + if( fp_x0 < x0 ) fp_x0 = x0; + if( fp_x1 > x1 ) fp_x1 = x1; + if( fp_y0 < y0 ) fp_y0 = y0; + if( fp_y1 > y1 ) fp_y1 = y1; + + // Do fill + for (int x=fp_x0; x < fp_x1; x++){ + for (int y=fp_y0; y < fp_y1; y++){ + out_data[ 4*((x - x0) + w*(y - y0)) ] = r; + out_data[ 4*((x - x0) + w*(y - y0)) + 1 ] = g; + out_data[ 4*((x - x0) + w*(y - y0)) + 2 ] = b; + out_data[ 4*((x - x0) + w*(y - y0)) + 3 ] = a; + } } out->empty = FALSE; -- cgit v1.2.3 From 2de761f0c46b4f3164d0dc008320da3ad0f35316 Mon Sep 17 00:00:00 2001 From: Nicolas Dufour Date: Fri, 18 Mar 2011 21:29:06 +0100 Subject: D-Bus. Merging branch lp:~joakim-verona/inkscape/dbus-fixes (Bug #666986, Bug #707054 and Bug #707364). (bzr r10114) --- src/display/canvas-text.h | 1 + 1 file changed, 1 insertion(+) (limited to 'src/display') diff --git a/src/display/canvas-text.h b/src/display/canvas-text.h index d8bd86b7d..9a6a93eb4 100644 --- a/src/display/canvas-text.h +++ b/src/display/canvas-text.h @@ -53,6 +53,7 @@ void sp_canvastext_set_anchor (SPCanvasText *ct, double anchor_x, double anchor_ #endif // SEEN_SP_CANVASTEXT_H + /* Local Variables: mode:c++ -- cgit v1.2.3 From 33ab199838791c9b3b7a29a342014ea4716fdd27 Mon Sep 17 00:00:00 2001 From: Jasper van de Gronde Date: Sat, 2 Apr 2011 17:31:36 +0200 Subject: Faster rounding for Gaussian blur (bzr r10144) --- src/display/nr-filter-gaussian.cpp | 43 ++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) (limited to 'src/display') diff --git a/src/display/nr-filter-gaussian.cpp b/src/display/nr-filter-gaussian.cpp index 3f7bea35d..9b83c8647 100644 --- a/src/display/nr-filter-gaussian.cpp +++ b/src/display/nr-filter-gaussian.cpp @@ -78,15 +78,46 @@ template static inline T clip(T const& v, T const& a, T const& b) { } template -static inline Tt round_cast(Ts const& v) { +static inline Tt round_cast(Ts v) { static Ts const rndoffset(.5); return static_cast(v+rndoffset); } +template<> +inline unsigned char round_cast(double v) { + // This (fast) rounding method is based on: + // http://stereopsis.com/sree/fpu2006.html +#if G_BYTE_ORDER==G_LITTLE_ENDIAN + double const dmr = 6755399441055744.0; + v = v + dmr; + return ((unsigned char*)&v)[0]; +#elif G_BYTE_ORDER==G_BIG_ENDIAN + double const dmr = 6755399441055744.0; + v = v + dmr; + return ((unsigned char*)&v)[7]; +#else + static double const rndoffset(.5); + return static_cast(v+rndoffset); +#endif +} + +template +static inline Tt clip_round_cast(Ts const v) { + Ts const minval = std::numeric_limits::min(); + Ts const maxval = std::numeric_limits::max(); + Tt const minval_rounded = std::numeric_limits::min(); + Ts const maxval_rounded = std::numeric_limits::max(); + if ( v < minval ) return minval_rounded; + if ( v > maxval ) return maxval_rounded; + return round_cast(v); +} + template -static inline Tt clip_round_cast(Ts const& v, Tt const minval=std::numeric_limits::min(), Tt const maxval=std::numeric_limits::max()) { - if ( v < minval ) return minval; - if ( v > maxval ) return maxval; +static inline Tt clip_round_cast_varmax(Ts const v, Ts const maxval, Tt const maxval_rounded) { + Ts const minval = std::numeric_limits::min(); + Tt const minval_rounded = std::numeric_limits::min(); + if ( v < minval ) return minval_rounded; + if ( v > maxval ) return maxval_rounded; return round_cast(v); } @@ -320,7 +351,7 @@ filter2D_IIR(PT *const dest, int const dstr1, int const dstr2, dstimg -= dstr1; if ( PREMULTIPLIED_ALPHA ) { dstimg[PC-1] = clip_round_cast(v[0][PC-1]); - for(unsigned int c=0; c(v[0][c], std::numeric_limits::min(), dstimg[PC-1]); + for(unsigned int c=0; c(v[0][c], v[0][PC-1], dstimg[PC-1]); } else { for(unsigned int c=0; c(v[0][c]); } @@ -335,7 +366,7 @@ filter2D_IIR(PT *const dest, int const dstr1, int const dstr2, dstimg -= dstr1; if ( PREMULTIPLIED_ALPHA ) { dstimg[PC-1] = clip_round_cast(v[0][PC-1]); - for(unsigned int c=0; c(v[0][c], std::numeric_limits::min(), dstimg[PC-1]); + for(unsigned int c=0; c(v[0][c], v[0][PC-1], dstimg[PC-1]); } else { for(unsigned int c=0; c(v[0][c]); } -- cgit v1.2.3