void HSSExpression::setPercentageBase(HSSUnit value) { this->percentageBase = value; //propagate values if (this->left && this->left->isA(HSSParserNodeTypeExpression)) { HSSExpression::p leftExpression = qSharedPointerCast<HSSExpression > (this->left); leftExpression->setPercentageBase(value); } else if (this->left && this->left->isA(HSSParserNodeTypeFunctionCall)) { HSSFunction::p leftFunction = qSharedPointerCast<HSSFunction > (this->left); leftFunction->setPercentageBase(value); } if (this->right && this->right->isA(HSSParserNodeTypeExpression)) { HSSExpression::p rightExpression = qSharedPointerCast<HSSExpression > (this->right); rightExpression->setPercentageBase(value); } else if (this->right && this->right->isA(HSSParserNodeTypeFunctionCall)) { HSSFunction::p rightFunction = qSharedPointerCast<HSSFunction > (this->right); rightFunction->setPercentageBase(value); } this->setDirty(true); }
HSSUnit HSSColorStop::_evaluatePropertyValue( void(HSSColorStop::*callback)(HSSObservableProperty property, void* data), HSSParserNode::p value, HSSUnit percentageBase, HSSObservableProperty observedSourceProperty, HSSObservable * &observedStore, HSSObservableProperty &observedStoreProperty ) { HSSUnit ret; HSSParserNodeType nodeType = value->getType(); switch (nodeType) { case HSSParserNodeTypeNumberConstant: { HSSNumberConstant::p numberValue = qSharedPointerCast<HSSNumberConstant > (value); ret = numberValue->getValue(); break; } case HSSParserNodeTypePercentageConstant: { HSSPercentageConstant::p percentageValue = qSharedPointerCast<HSSPercentageConstant > (value); ret = percentageValue->getValue(percentageBase); break; } case HSSParserNodeTypeExpression: { HSSExpression::p expressionValue = qSharedPointerCast<HSSExpression > (value); expressionValue->setPercentageBase(percentageBase); expressionValue->setScope(this->scope); expressionValue->setThisObj(this->getThisObj()); ret = expressionValue->evaluate(); if (callback) { expressionValue->observe(HSSObservablePropertyValue, observedSourceProperty, this, new HSSValueChangedCallback<HSSColorStop > (this, callback)); } break; } case HSSParserNodeTypeKeywordConstant: break; default: AXRWarning("HSSColorStop", "Unknown parser node type while setting value for HSSLineGradient property").raise(); break; } return ret; }
long double HSSRgb::_setLDProperty( void(HSSRgb::*callback)(HSSObservableProperty property, void* data), HSSParserNode::p value, long double percentageBase, HSSObservableProperty observedSourceProperty, HSSObservable * &observedStore, HSSObservableProperty &observedStoreProperty ) { long double ret; HSSParserNodeType nodeType = value->getType(); switch (nodeType) { case HSSParserNodeTypeNumberConstant: { HSSNumberConstant::p numberValue = boost::static_pointer_cast<HSSNumberConstant>(value); ret = numberValue->getValue(); break; } case HSSParserNodeTypePercentageConstant: { HSSPercentageConstant::p percentageValue = boost::static_pointer_cast<HSSPercentageConstant>(value); ret = percentageValue->getValue(percentageBase); break; } case HSSParserNodeTypeExpression: { HSSExpression::p expressionValue = boost::static_pointer_cast<HSSExpression>(value); expressionValue->setPercentageBase(percentageBase); //expressionValue->setScope(scope); ret = expressionValue->evaluate(); if(callback != NULL){ expressionValue->observe(HSSObservablePropertyValue, observedSourceProperty, this, new HSSValueChangedCallback<HSSRgb>(this, callback)); observedStore = expressionValue.get(); observedStoreProperty = HSSObservablePropertyValue; } break; } case HSSParserNodeTypeKeywordConstant: break; default: throw AXRError::p(new AXRError("HSSRgb", "Unknown parser node type "+HSSParserNode::parserNodeStringRepresentation(nodeType)+" while setting value for HSSRgb property")); break; } return ret; }
long double HSSDisplayObject::_setLDProperty( void(HSSDisplayObject::*callback)(HSSObservableProperty property, void* data), HSSParserNode::p value, long double percentageBase, HSSObservableProperty observedProperty, HSSObservable * observedObject, HSSObservable * &observedStore, HSSObservableProperty &observedStoreProperty, const std::vector<HSSDisplayObject::p> * scope ) { long double ret; HSSParserNodeType nodeType = value->getType(); switch (nodeType) { case HSSParserNodeTypeNumberConstant: { HSSNumberConstant::p numberValue = boost::static_pointer_cast<HSSNumberConstant>(value); ret = numberValue->getValue(); break; } case HSSParserNodeTypePercentageConstant: { HSSPercentageConstant::p percentageValue = boost::static_pointer_cast<HSSPercentageConstant>(value); ret = percentageValue->getValue(percentageBase); if(callback != NULL) { observedObject->observe(observedProperty, this, new HSSValueChangedCallback<HSSDisplayObject>(this, callback)); observedStore = observedObject; observedStoreProperty = observedProperty; } break; } case HSSParserNodeTypeExpression: { HSSExpression::p expressionValue = boost::static_pointer_cast<HSSExpression>(value); expressionValue->setPercentageBase(percentageBase); expressionValue->setPercentageObserved(observedProperty, observedObject); expressionValue->setScope(scope); ret = expressionValue->evaluate(); if(callback != NULL){ expressionValue->observe(HSSObservablePropertyValue, this, new HSSValueChangedCallback<HSSDisplayObject>(this, callback)); observedStore = expressionValue.get(); observedStoreProperty = HSSObservablePropertyValue; } break; } case HSSParserNodeTypeKeywordConstant: break; default: throw "unknown parser node type while setting dHeight"; break; } return ret; }