summaryrefslogtreecommitdiffstats
path: root/src/sp-filter-primitive.cpp
diff options
context:
space:
mode:
authorMarkus Engel <markus.engel@tum.de>2013-03-29 23:46:23 +0000
committerMarkus Engel <markus.engel@tum.de>2013-03-29 23:46:23 +0000
commitcbee151d9455d50fc58b1c5b82383dcd85ec7278 (patch)
treecbf3941db66091d35d6079135c40f9eb5941a37f /src/sp-filter-primitive.cpp
parentAdded "virtual pads" for (diff)
downloadinkscape-cbee151d9455d50fc58b1c5b82383dcd85ec7278.tar.gz
inkscape-cbee151d9455d50fc58b1c5b82383dcd85ec7278.zip
Added "virtual pads" to
- SPFilterPrimitive and all subclasses All subclasses of SPObject now have got virtual pads. (bzr r11608.1.52)
Diffstat (limited to 'src/sp-filter-primitive.cpp')
-rw-r--r--src/sp-filter-primitive.cpp186
1 files changed, 163 insertions, 23 deletions
diff --git a/src/sp-filter-primitive.cpp b/src/sp-filter-primitive.cpp
index 6d36aaa45..b3926a695 100644
--- a/src/sp-filter-primitive.cpp
+++ b/src/sp-filter-primitive.cpp
@@ -76,8 +76,24 @@ static void sp_filter_primitive_class_init(SPFilterPrimitiveClass *klass)
klass->build_renderer = NULL;
}
+CFilterPrimitive::CFilterPrimitive(SPFilterPrimitive* fp) : CObject(fp) {
+ this->spfilterprimitive = fp;
+}
+
+CFilterPrimitive::~CFilterPrimitive() {
+}
+
+// CPPIFY: Make pure virtual.
+void CFilterPrimitive::onBuildRenderer(Inkscape::Filters::Filter* filter) {
+ // throw;
+}
+
+
static void sp_filter_primitive_init(SPFilterPrimitive *filter_primitive)
{
+ filter_primitive->cfilterprimitive = new CFilterPrimitive(filter_primitive);
+ filter_primitive->cobject = filter_primitive->cfilterprimitive;
+
filter_primitive->image_in = Inkscape::Filters::NR_FILTER_SLOT_NOT_SET;
filter_primitive->image_out = Inkscape::Filters::NR_FILTER_SLOT_NOT_SET;
@@ -97,20 +113,35 @@ static void sp_filter_primitive_init(SPFilterPrimitive *filter_primitive)
* our name must be associated with a repr via "sp_object_type_register". Best done through
* sp-object-repr.cpp's repr_name_entries array.
*/
-static void
-sp_filter_primitive_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
-{
+//static void
+//sp_filter_primitive_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+//{
// if ((static_cast<SPObjectClass *>(filter_primitive_parent_class))->build) {
// (static_cast<SPObjectClass *>(filter_primitive_parent_class))->build(object, document, repr);
// }
- // CPPIFY: todo
-
- object->readAttr( "in" );
- object->readAttr( "result" );
- object->readAttr( "x" );
- object->readAttr( "y" );
- object->readAttr( "width" );
- object->readAttr( "height" );
+//
+// object->readAttr( "in" );
+// object->readAttr( "result" );
+// object->readAttr( "x" );
+// object->readAttr( "y" );
+// object->readAttr( "width" );
+// object->readAttr( "height" );
+//}
+
+void CFilterPrimitive::onBuild(SPDocument *document, Inkscape::XML::Node *repr) {
+ SPFilterPrimitive* object = this->spfilterprimitive;
+
+ // if ((static_cast<SPObjectClass *>(filter_primitive_parent_class))->build) {
+ // (static_cast<SPObjectClass *>(filter_primitive_parent_class))->build(object, document, repr);
+ // }
+ CObject::onBuild(document, repr);
+
+ object->readAttr( "in" );
+ object->readAttr( "result" );
+ object->readAttr( "x" );
+ object->readAttr( "y" );
+ object->readAttr( "width" );
+ object->readAttr( "height" );
}
/**
@@ -118,9 +149,14 @@ sp_filter_primitive_build(SPObject *object, SPDocument *document, Inkscape::XML:
*/
static void sp_filter_primitive_release(SPObject *object)
{
- /* deal with our children and our selves here */
- if ((static_cast<SPObjectClass *>(filter_primitive_parent_class))->release)
- (static_cast<SPObjectClass *>(filter_primitive_parent_class))->release(object);
+// /* deal with our children and our selves here */
+// if ((static_cast<SPObjectClass *>(filter_primitive_parent_class))->release)
+// (static_cast<SPObjectClass *>(filter_primitive_parent_class))->release(object);
+ ((SPFilterPrimitive*)object)->cfilterprimitive->onRelease();
+}
+
+void CFilterPrimitive::onRelease() {
+ CObject::onRelease();
}
/**
@@ -129,6 +165,62 @@ static void sp_filter_primitive_release(SPObject *object)
static void
sp_filter_primitive_set(SPObject *object, unsigned int key, gchar const *value)
{
+// SPFilterPrimitive *filter_primitive = SP_FILTER_PRIMITIVE(object);
+// (void)filter_primitive;
+// int image_nr;
+// switch (key) {
+// case SP_ATTR_IN:
+// if (value) {
+// image_nr = sp_filter_primitive_read_in(filter_primitive, value);
+// } else {
+// image_nr = Inkscape::Filters::NR_FILTER_SLOT_NOT_SET;
+// }
+// if (image_nr != filter_primitive->image_in) {
+// filter_primitive->image_in = image_nr;
+// object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+// }
+// break;
+// case SP_ATTR_RESULT:
+// if (value) {
+// image_nr = sp_filter_primitive_read_result(filter_primitive, value);
+// } else {
+// image_nr = Inkscape::Filters::NR_FILTER_SLOT_NOT_SET;
+// }
+// if (image_nr != filter_primitive->image_out) {
+// filter_primitive->image_out = image_nr;
+// object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+// }
+// break;
+//
+// /* Filter primitive sub-region */
+// case SP_ATTR_X:
+// filter_primitive->x.readOrUnset(value);
+// object->requestModified(SP_OBJECT_MODIFIED_FLAG);
+// break;
+// case SP_ATTR_Y:
+// filter_primitive->y.readOrUnset(value);
+// object->requestModified(SP_OBJECT_MODIFIED_FLAG);
+// break;
+// case SP_ATTR_WIDTH:
+// filter_primitive->width.readOrUnset(value);
+// object->requestModified(SP_OBJECT_MODIFIED_FLAG);
+// break;
+// case SP_ATTR_HEIGHT:
+// filter_primitive->height.readOrUnset(value);
+// object->requestModified(SP_OBJECT_MODIFIED_FLAG);
+// break;
+// }
+//
+// /* See if any parents need this value. */
+// if (((SPObjectClass *) filter_primitive_parent_class)->set) {
+// ((SPObjectClass *) filter_primitive_parent_class)->set(object, key, value);
+// }
+ ((SPFilterPrimitive*)object)->cfilterprimitive->onSet(key, value);
+}
+
+void CFilterPrimitive::onSet(unsigned int key, gchar const *value) {
+ SPFilterPrimitive* object = this->spfilterprimitive;
+
SPFilterPrimitive *filter_primitive = SP_FILTER_PRIMITIVE(object);
(void)filter_primitive;
int image_nr;
@@ -176,9 +268,10 @@ sp_filter_primitive_set(SPObject *object, unsigned int key, gchar const *value)
}
/* See if any parents need this value. */
- if (((SPObjectClass *) filter_primitive_parent_class)->set) {
- ((SPObjectClass *) filter_primitive_parent_class)->set(object, key, value);
- }
+// if (((SPObjectClass *) filter_primitive_parent_class)->set) {
+// ((SPObjectClass *) filter_primitive_parent_class)->set(object, key, value);
+// }
+ CObject::onSet(key, value);
}
/**
@@ -187,6 +280,26 @@ sp_filter_primitive_set(SPObject *object, unsigned int key, gchar const *value)
static void
sp_filter_primitive_update(SPObject *object, SPCtx *ctx, guint flags)
{
+// //SPFilterPrimitive *filter_primitive = SP_FILTER_PRIMITIVE(object);
+//
+// if (flags & SP_OBJECT_MODIFIED_FLAG) {
+// object->readAttr( "in" );
+// object->readAttr( "result" );
+// object->readAttr( "x" );
+// object->readAttr( "y" );
+// object->readAttr( "width" );
+// object->readAttr( "height" );
+// }
+//
+// if (((SPObjectClass *) filter_primitive_parent_class)->update) {
+// ((SPObjectClass *) filter_primitive_parent_class)->update(object, ctx, flags);
+// }
+ ((SPFilterPrimitive*)object)->cfilterprimitive->onUpdate(ctx, flags);
+}
+
+void CFilterPrimitive::onUpdate(SPCtx *ctx, guint flags) {
+ SPFilterPrimitive* object = this->spfilterprimitive;
+
//SPFilterPrimitive *filter_primitive = SP_FILTER_PRIMITIVE(object);
if (flags & SP_OBJECT_MODIFIED_FLAG) {
@@ -198,9 +311,10 @@ sp_filter_primitive_update(SPObject *object, SPCtx *ctx, guint flags)
object->readAttr( "height" );
}
- if (((SPObjectClass *) filter_primitive_parent_class)->update) {
- ((SPObjectClass *) filter_primitive_parent_class)->update(object, ctx, flags);
- }
+// if (((SPObjectClass *) filter_primitive_parent_class)->update) {
+// ((SPObjectClass *) filter_primitive_parent_class)->update(object, ctx, flags);
+// }
+ CObject::onUpdate(ctx, flags);
}
/**
@@ -209,6 +323,31 @@ sp_filter_primitive_update(SPObject *object, SPCtx *ctx, guint flags)
static Inkscape::XML::Node *
sp_filter_primitive_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
{
+// SPFilterPrimitive *prim = SP_FILTER_PRIMITIVE(object);
+// SPFilter *parent = SP_FILTER(object->parent);
+//
+// if (!repr) {
+// repr = object->getRepr()->duplicate(doc);
+// }
+//
+// gchar const *in_name = sp_filter_name_for_image(parent, prim->image_in);
+// repr->setAttribute("in", in_name);
+//
+// gchar const *out_name = sp_filter_name_for_image(parent, prim->image_out);
+// repr->setAttribute("result", out_name);
+//
+// /* Do we need to add x,y,width,height? */
+// if (((SPObjectClass *) filter_primitive_parent_class)->write) {
+// ((SPObjectClass *) filter_primitive_parent_class)->write(object, doc, repr, flags);
+// }
+//
+// return repr;
+ return ((SPFilterPrimitive*)object)->cfilterprimitive->onWrite(doc, repr, flags);
+}
+
+Inkscape::XML::Node* CFilterPrimitive::onWrite(Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags) {
+ SPFilterPrimitive* object = this->spfilterprimitive;
+
SPFilterPrimitive *prim = SP_FILTER_PRIMITIVE(object);
SPFilter *parent = SP_FILTER(object->parent);
@@ -223,9 +362,10 @@ sp_filter_primitive_write(SPObject *object, Inkscape::XML::Document *doc, Inksca
repr->setAttribute("result", out_name);
/* Do we need to add x,y,width,height? */
- if (((SPObjectClass *) filter_primitive_parent_class)->write) {
- ((SPObjectClass *) filter_primitive_parent_class)->write(object, doc, repr, flags);
- }
+// if (((SPObjectClass *) filter_primitive_parent_class)->write) {
+// ((SPObjectClass *) filter_primitive_parent_class)->write(object, doc, repr, flags);
+// }
+ CObject::onWrite(doc, repr, flags);
return repr;
}