sp-fedisplacementmap.cpp revision 02493e1d76c38beb15fee20374afb956e77a677c
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico#define __SP_FEDISPLACEMENTMAP_CPP__
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico/** \file
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico * SVG <feDisplacementMap> implementation.
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico *
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico */
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico/*
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico * Authors:
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico * hugo Rodrigues <haa.rodrigues@gmail.com>
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico *
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico * Copyright (C) 2006 Hugo Rodrigues
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico *
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico * Released under GNU GPL, read the file 'COPYING' for more information
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico */
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico#ifdef HAVE_CONFIG_H
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico# include "config.h"
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico#endif
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico#include "attributes.h"
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico#include "svg/svg.h"
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner#include "sp-fedisplacementmap.h"
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner#include "xml/repr.h"
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner/* FeDisplacementMap base class */
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennerstatic void sp_feDisplacementMap_class_init(SPFeDisplacementMapClass *klass);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennerstatic void sp_feDisplacementMap_init(SPFeDisplacementMap *feDisplacementMap);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennerstatic void sp_feDisplacementMap_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennerstatic void sp_feDisplacementMap_release(SPObject *object);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennerstatic void sp_feDisplacementMap_set(SPObject *object, unsigned int key, gchar const *value);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennerstatic void sp_feDisplacementMap_update(SPObject *object, SPCtx *ctx, guint flags);
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNicostatic Inkscape::XML::Node *sp_feDisplacementMap_write(SPObject *object, Inkscape::XML::Node *repr, guint flags);
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNicostatic SPFilterPrimitiveClass *feDisplacementMap_parent_class;
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNicoGType
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNicosp_feDisplacementMap_get_type()
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico{
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico static GType feDisplacementMap_type = 0;
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico if (!feDisplacementMap_type) {
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico GTypeInfo feDisplacementMap_info = {
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico sizeof(SPFeDisplacementMapClass),
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico NULL, NULL,
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico (GClassInitFunc) sp_feDisplacementMap_class_init,
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico NULL, NULL,
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico sizeof(SPFeDisplacementMap),
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico 16,
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico (GInstanceInitFunc) sp_feDisplacementMap_init,
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico NULL, /* value_table */
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico };
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico feDisplacementMap_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeDisplacementMap", &feDisplacementMap_info, (GTypeFlags)0);
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico }
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico return feDisplacementMap_type;
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico}
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNicostatic void
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNicosp_feDisplacementMap_class_init(SPFeDisplacementMapClass *klass)
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico{
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico SPObjectClass *sp_object_class = (SPObjectClass *)klass;
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico feDisplacementMap_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico sp_object_class->build = sp_feDisplacementMap_build;
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico sp_object_class->release = sp_feDisplacementMap_release;
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico sp_object_class->write = sp_feDisplacementMap_write;
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico sp_object_class->set = sp_feDisplacementMap_set;
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico sp_object_class->update = sp_feDisplacementMap_update;
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico}
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNicostatic void
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNicosp_feDisplacementMap_init(SPFeDisplacementMap *feDisplacementMap)
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico{
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico}
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner/**
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico * Reads the Inkscape::XML::Node, and initializes SPFeDisplacementMap variables. For this to get called,
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico * our name must be associated with a repr via "sp_object_type_register". Best done through
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico * sp-object-repr.cpp's repr_name_entries array.
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico */
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNicostatic void
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNicosp_feDisplacementMap_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico{
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico if (((SPObjectClass *) feDisplacementMap_parent_class)->build) {
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico ((SPObjectClass *) feDisplacementMap_parent_class)->build(object, document, repr);
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico }
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico /*LOAD ATTRIBUTES FROM REPR HERE*/
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico}
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico/**
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico * Drops any allocated memory.
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico */
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNicostatic void
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNicosp_feDisplacementMap_release(SPObject *object)
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner{
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner if (((SPObjectClass *) feDisplacementMap_parent_class)->release)
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner ((SPObjectClass *) feDisplacementMap_parent_class)->release(object);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner}
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner/**
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner * Sets a specific value in the SPFeDisplacementMap.
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner */
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennerstatic void
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennersp_feDisplacementMap_set(SPObject *object, unsigned int key, gchar const *value)
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner{
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner SPFeDisplacementMap *feDisplacementMap = SP_FEDISPLACEMENTMAP(object);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner (void)feDisplacementMap;
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner switch(key) {
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner /*DEAL WITH SETTING ATTRIBUTES HERE*/
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner default:
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner if (((SPObjectClass *) feDisplacementMap_parent_class)->set)
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner ((SPObjectClass *) feDisplacementMap_parent_class)->set(object, key, value);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner break;
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner }
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner}
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner/**
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner * Receives update notifications.
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner */
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennerstatic void
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennersp_feDisplacementMap_update(SPObject *object, SPCtx *ctx, guint flags)
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner{
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner /* do something to trigger redisplay, updates? */
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner }
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner if (((SPObjectClass *) feDisplacementMap_parent_class)->update) {
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner ((SPObjectClass *) feDisplacementMap_parent_class)->update(object, ctx, flags);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner }
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner}
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner/**
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner * Writes its settings to an incoming repr object, if any.
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner */
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennerstatic Inkscape::XML::Node *
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennersp_feDisplacementMap_write(SPObject *object, Inkscape::XML::Node *repr, guint flags)
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner{
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner // Inkscape-only object, not copied during an "plain SVG" dump:
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner if (flags & SP_OBJECT_WRITE_EXT) {
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner if (repr) {
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner // is this sane?
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner repr->mergeFrom(SP_OBJECT_REPR(object), "id");
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner } else {
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner repr = SP_OBJECT_REPR(object)->duplicate();
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner }
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner }
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner if (((SPObjectClass *) feDisplacementMap_parent_class)->write) {
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner ((SPObjectClass *) feDisplacementMap_parent_class)->write(object, repr, flags);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner }
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner return repr;
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner}
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner/*
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner Local Variables:
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner mode:c++
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner c-file-style:"stroustrup"
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner indent-tabs-mode:nil
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner fill-column:99
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner End:
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner*/
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner