summaryrefslogtreecommitdiffstats
path: root/src/sp-paint-server.cpp
diff options
context:
space:
mode:
authorAndrew Higginson <at.higginson@gmail.com>2011-12-27 21:04:47 +0000
committerAndrew <at.higginson@gmail.com>2011-12-27 21:04:47 +0000
commit80960b623a99aae1402ab651b2974ef544ed3b03 (patch)
treeba49d42c2789e9e11f805e2d5263e10f9fedeef8 /src/sp-paint-server.cpp
parenttry to fix bug (diff)
parentGDL: Cherry-pick upstream patch 73852 (2011-03-23) - Add missing return value. (diff)
downloadinkscape-80960b623a99aae1402ab651b2974ef544ed3b03.tar.gz
inkscape-80960b623a99aae1402ab651b2974ef544ed3b03.zip
merged with trunk so I can build again...
(bzr r10092.1.36)
Diffstat (limited to 'src/sp-paint-server.cpp')
-rw-r--r--src/sp-paint-server.cpp125
1 files changed, 31 insertions, 94 deletions
diff --git a/src/sp-paint-server.cpp b/src/sp-paint-server.cpp
index b672e4480..ceb36740f 100644
--- a/src/sp-paint-server.cpp
+++ b/src/sp-paint-server.cpp
@@ -14,7 +14,7 @@
*/
#include <string.h>
-#include "libnr/nr-pixblock-pattern.h"
+#include "sp-paint-server-reference.h"
#include "sp-paint-server.h"
#include "sp-gradient.h"
@@ -22,14 +22,21 @@
static void sp_paint_server_class_init(SPPaintServerClass *psc);
-static void sp_paint_server_release(SPObject *object);
-
-static void sp_painter_stale_fill(SPPainter *painter, NRPixBlock *pb);
+static cairo_pattern_t *sp_paint_server_create_dummy_pattern(SPPaintServer *ps, cairo_t *ct, Geom::OptRect const &bbox, double opacity);
static SPObjectClass *parent_class;
-static GSList *stale_painters = NULL;
-GType SPPaintServer::getType(void)
+SPPaintServer *SPPaintServerReference::getObject() const
+{
+ return static_cast<SPPaintServer *>(URIReference::getObject());
+}
+
+bool SPPaintServerReference::_acceptObject(SPObject *obj) const
+{
+ return SP_IS_PAINT_SERVER(obj);
+}
+
+GType SPPaintServer::get_type(void)
{
static GType type = 0;
if (!type) {
@@ -52,107 +59,40 @@ GType SPPaintServer::getType(void)
static void sp_paint_server_class_init(SPPaintServerClass *psc)
{
- SPObjectClass *sp_object_class = (SPObjectClass *) psc;
- sp_object_class->release = sp_paint_server_release;
- parent_class = (SPObjectClass *) g_type_class_ref(SP_TYPE_OBJECT);
-}
+ psc->pattern_new = sp_paint_server_create_dummy_pattern;
-void SPPaintServer::init(SPPaintServer *ps)
-{
- ps->painters = NULL;
- ps->swatch = false;
+ parent_class = (SPObjectClass *) g_type_class_ref(SP_TYPE_OBJECT);
}
-static void sp_paint_server_release(SPObject *object)
+void SPPaintServer::init(SPPaintServer * /*ps*/)
{
- SPPaintServer *ps = SP_PAINT_SERVER(object);
-
- while (ps->painters) {
- SPPainter *painter = ps->painters;
- ps->painters = painter->next;
- stale_painters = g_slist_prepend(stale_painters, painter);
- painter->next = NULL;
- painter->server = NULL;
- painter->fill = sp_painter_stale_fill;
- }
-
- if (((SPObjectClass *) parent_class)->release) {
- ((SPObjectClass *) parent_class)->release(object);
- }
}
-SPPainter *sp_paint_server_painter_new(SPPaintServer *ps,
- Geom::Affine const &full_transform,
- Geom::Affine const &parent_transform,
- const NRRect *bbox)
+cairo_pattern_t *sp_paint_server_create_pattern(SPPaintServer *ps,
+ cairo_t *ct,
+ Geom::OptRect const &bbox,
+ double opacity)
{
g_return_val_if_fail(ps != NULL, NULL);
g_return_val_if_fail(SP_IS_PAINT_SERVER(ps), NULL);
- g_return_val_if_fail(bbox != NULL, NULL);
- SPPainter *painter = NULL;
+ cairo_pattern_t *cp = NULL;
SPPaintServerClass *psc = (SPPaintServerClass *) G_OBJECT_GET_CLASS(ps);
- if ( psc->painter_new ) {
- painter = (*psc->painter_new)(ps, full_transform, parent_transform, bbox);
- }
-
- if (painter) {
- painter->next = ps->painters;
- painter->server = ps;
- painter->type = (SPPainterType) G_OBJECT_TYPE(ps);
- ps->painters = painter;
+ if ( psc->pattern_new ) {
+ cp = (*psc->pattern_new)(ps, ct, bbox, opacity);
}
- return painter;
+ return cp;
}
-static void sp_paint_server_painter_free(SPPaintServer *ps, SPPainter *painter)
+static cairo_pattern_t *
+sp_paint_server_create_dummy_pattern(SPPaintServer */*ps*/,
+ cairo_t */* ct */,
+ Geom::OptRect const &/*bbox*/,
+ double /* opacity */)
{
- g_return_if_fail(ps != NULL);
- g_return_if_fail(SP_IS_PAINT_SERVER(ps));
- g_return_if_fail(painter != NULL);
-
- SPPaintServerClass *psc = (SPPaintServerClass *) G_OBJECT_GET_CLASS(ps);
-
- SPPainter *r = NULL;
- for (SPPainter *p = ps->painters; p != NULL; p = p->next) {
- if (p == painter) {
- if (r) {
- r->next = p->next;
- } else {
- ps->painters = p->next;
- }
- p->next = NULL;
- if (psc->painter_free) {
- (*psc->painter_free) (ps, painter);
- }
- return;
- }
- r = p;
- }
-
- g_assert_not_reached();
-}
-
-SPPainter *sp_painter_free(SPPainter *painter)
-{
- g_return_val_if_fail(painter != NULL, NULL);
-
- if (painter->server) {
- sp_paint_server_painter_free(painter->server, painter);
- } else {
- SPPaintServerClass *psc = (SPPaintServerClass *) g_type_class_ref(painter->type);
- if (psc->painter_free)
- (*psc->painter_free)(NULL, painter);
- stale_painters = g_slist_remove(stale_painters, painter);
- }
-
- return NULL;
-}
-
-static void sp_painter_stale_fill(SPPainter */*painter*/, NRPixBlock *pb)
-{
- nr_pixblock_render_gray_noise(pb, NULL);
+ cairo_pattern_t *cp = cairo_pattern_create_rgb(1.0, 0.0, 1.0);
+ return cp;
}
bool SPPaintServer::isSwatch() const
@@ -172,9 +112,6 @@ bool SPPaintServer::isSolid() const
return solid;
}
-
-
-
/*
Local Variables:
mode:c++