コード例 #1
0
static void sp_feComponentTransfer_children_modified(SPFeComponentTransfer *sp_componenttransfer)
{
    if (sp_componenttransfer->renderer) {
        bool set[4] = {false, false, false, false};
        SPObject* node = sp_componenttransfer->children;
        for(;node;node=node->next){
            int i = 4;

            SPFeFuncNode *funcNode = SP_FEFUNCNODE(node);

            switch (funcNode->channel) {
            case SPFeFuncNode::R:
                i = 0;
                break;
            case SPFeFuncNode::G:
                i = 1;
                break;
            case SPFeFuncNode::B:
                i = 2;
                break;
            case SPFeFuncNode::A:
                i = 3;
                break;
            }

            if (i == 4) {
                g_warning("Unrecognized channel for component transfer.");
                break;
            }
            sp_componenttransfer->renderer->type[i] = ((SPFeFuncNode *) node)->type;
            sp_componenttransfer->renderer->tableValues[i] = ((SPFeFuncNode *) node)->tableValues;
            sp_componenttransfer->renderer->slope[i] = ((SPFeFuncNode *) node)->slope;
            sp_componenttransfer->renderer->intercept[i] = ((SPFeFuncNode *) node)->intercept;
            sp_componenttransfer->renderer->amplitude[i] = ((SPFeFuncNode *) node)->amplitude;
            sp_componenttransfer->renderer->exponent[i] = ((SPFeFuncNode *) node)->exponent;
            sp_componenttransfer->renderer->offset[i] = ((SPFeFuncNode *) node)->offset;
            set[i] = true;
        }
        // Set any types not explicitly set to the identity transform
        for(int i=0;i<4;i++) {
            if (!set[i]) {
                sp_componenttransfer->renderer->type[i] = Inkscape::Filters::COMPONENTTRANSFER_TYPE_IDENTITY;
            }
        }
    }
}
コード例 #2
0
/**
 *  * Receives update notifications.
 *   */
static void
sp_fefuncnode_update(SPObject *object, SPCtx *ctx, guint flags)
{
    SPFeFuncNode *feFuncNode = SP_FEFUNCNODE(object);
    (void)feFuncNode;

    if (flags & SP_OBJECT_MODIFIED_FLAG) {
        /* do something to trigger redisplay, updates? */
        //TODO
        //object->readAttr( "azimuth" );
        //object->readAttr( "elevation" );
    }

    if (((SPObjectClass *) feFuncNode_parent_class)->update) {
        ((SPObjectClass *) feFuncNode_parent_class)->update(object, ctx, flags);
    }
}
コード例 #3
0
/**
 * Writes its settings to an incoming repr object, if any.
 */
static Inkscape::XML::Node *
sp_fefuncnode_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
{
    SPFeFuncNode *fefuncnode = SP_FEFUNCNODE(object);

    if (!repr) {
        repr = object->getRepr()->duplicate(doc);
    }

    (void)fefuncnode;
    /*
    TODO: I'm not sure what to do here...

    if (fefuncnode->azimuth_set)
        sp_repr_set_css_double(repr, "azimuth", fefuncnode->azimuth);
    if (fefuncnode->elevation_set)
        sp_repr_set_css_double(repr, "elevation", fefuncnode->elevation);*/

    if (((SPObjectClass *) feFuncNode_parent_class)->write) {
        ((SPObjectClass *) feFuncNode_parent_class)->write(object, doc, repr, flags);
    }

    return repr;
}
コード例 #4
0
/**
 * Sets a specific value in the SPFeFuncNode.
 */
static void
sp_fefuncnode_set(SPObject *object, unsigned int key, gchar const *value)
{
    SPFeFuncNode *feFuncNode = SP_FEFUNCNODE(object);
    Inkscape::Filters::FilterComponentTransferType type;
    double read_num;
    switch(key) {
    case SP_ATTR_TYPE:
        type = sp_feComponenttransfer_read_type(value);
        if(type != feFuncNode->type) {
            feFuncNode->type = type;
            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
        }
        break;
    case SP_ATTR_TABLEVALUES:
        if (value) {
            feFuncNode->tableValues = helperfns_read_vector(value);
            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
        }
        break;
    case SP_ATTR_SLOPE:
        read_num = value ? helperfns_read_number(value) : 1;
        if (read_num != feFuncNode->slope) {
            feFuncNode->slope = read_num;
            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
        }
        break;
    case SP_ATTR_INTERCEPT:
        read_num = value ? helperfns_read_number(value) : 0;
        if (read_num != feFuncNode->intercept) {
            feFuncNode->intercept = read_num;
            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
        }
        break;
    case SP_ATTR_AMPLITUDE:
        read_num = value ? helperfns_read_number(value) : 1;
        if (read_num != feFuncNode->amplitude) {
            feFuncNode->amplitude = read_num;
            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
        }
        break;
    case SP_ATTR_EXPONENT:
        read_num = value ? helperfns_read_number(value) : 1;
        if (read_num != feFuncNode->exponent) {
            feFuncNode->exponent = read_num;
            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
        }
        break;
    case SP_ATTR_OFFSET:
        read_num = value ? helperfns_read_number(value) : 0;
        if (read_num != feFuncNode->offset) {
            feFuncNode->offset = read_num;
            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
        }
        break;
    default:
        if (((SPObjectClass *) feFuncNode_parent_class)->set)
            ((SPObjectClass *) feFuncNode_parent_class)->set(object, key, value);
        break;
    }
}