Index: skia/animator/SkDrawPaint.cpp |
=================================================================== |
--- skia/animator/SkDrawPaint.cpp (revision 16859) |
+++ skia/animator/SkDrawPaint.cpp (working copy) |
@@ -1,277 +0,0 @@ |
-/* libs/graphics/animator/SkDrawPaint.cpp |
-** |
-** Copyright 2006, The Android Open Source Project |
-** |
-** Licensed under the Apache License, Version 2.0 (the "License"); |
-** you may not use this file except in compliance with the License. |
-** You may obtain a copy of the License at |
-** |
-** http://www.apache.org/licenses/LICENSE-2.0 |
-** |
-** Unless required by applicable law or agreed to in writing, software |
-** distributed under the License is distributed on an "AS IS" BASIS, |
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-** See the License for the specific language governing permissions and |
-** limitations under the License. |
-*/ |
- |
-#include "SkDrawPaint.h" |
-#include "SkAnimateMaker.h" |
-#include "SkDrawColor.h" |
-#include "SkDrawShader.h" |
-#include "SkMaskFilter.h" |
-#include "SkPaintParts.h" |
-#include "SkPathEffect.h" |
- |
-enum SkPaint_Functions { |
- SK_FUNCTION(measureText) |
-}; |
- |
-enum SkPaint_Properties { |
- SK_PROPERTY(ascent), |
- SK_PROPERTY(descent) |
-}; |
- |
-// !!! in the future, this could be compiled by build-condensed-info into an array of parameters |
-// with a lookup table to find the first parameter -- for now, it is iteratively searched through |
-const SkFunctionParamType SkDrawPaint::fFunctionParameters[] = { |
- (SkFunctionParamType) SkType_String, |
- (SkFunctionParamType) 0 // terminator for parameter list (there may be multiple parameter lists) |
-}; |
- |
- |
-#if SK_USE_CONDENSED_INFO == 0 |
- |
-const SkMemberInfo SkDrawPaint::fInfo[] = { |
- SK_MEMBER(antiAlias, Boolean), |
- SK_MEMBER_PROPERTY(ascent, Float), |
- SK_MEMBER(color, Color), |
- SK_MEMBER_PROPERTY(descent, Float), |
- SK_MEMBER(fakeBold, Boolean), |
- SK_MEMBER(filterBitmap, Boolean), |
- SK_MEMBER(linearText, Boolean), |
- SK_MEMBER(maskFilter, MaskFilter), |
- SK_MEMBER_FUNCTION(measureText, Float), |
- SK_MEMBER(pathEffect, PathEffect), |
- SK_MEMBER(shader, Shader), |
- SK_MEMBER(strikeThru, Boolean), |
- SK_MEMBER(stroke, Boolean), |
- SK_MEMBER(strokeCap, Cap), |
- SK_MEMBER(strokeJoin, Join), |
- SK_MEMBER(strokeMiter, Float), |
- SK_MEMBER(strokeWidth, Float), |
- SK_MEMBER(style, Style), |
- SK_MEMBER(textAlign, Align), |
- SK_MEMBER(textScaleX, Float), |
- SK_MEMBER(textSize, Float), |
- SK_MEMBER(textSkewX, Float), |
- SK_MEMBER(typeface, Typeface), |
- SK_MEMBER(underline, Boolean), |
- SK_MEMBER(xfermode, Xfermode) |
-}; |
- |
-#endif |
- |
-DEFINE_GET_MEMBER(SkDrawPaint); |
- |
-SkDrawPaint::SkDrawPaint() : antiAlias(-1), color(NULL), fakeBold(-1), filterBitmap(-1), |
- linearText(-1), maskFilter((SkDrawMaskFilter*) -1), pathEffect((SkDrawPathEffect*) -1), |
- shader((SkDrawShader*) -1), strikeThru(-1), stroke(-1), |
- strokeCap((SkPaint::Cap) -1), strokeJoin((SkPaint::Join) -1), strokeMiter(SK_ScalarNaN), |
- strokeWidth(SK_ScalarNaN), style((SkPaint::Style) -1), |
- textAlign((SkPaint::Align) -1), textScaleX(SK_ScalarNaN), textSize(SK_ScalarNaN), |
- textSkewX(SK_ScalarNaN), typeface((SkDrawTypeface*) -1), |
- underline(-1), xfermode((SkPorterDuff::Mode) -1), fOwnsColor(false), fOwnsMaskFilter(false), |
- fOwnsPathEffect(false), fOwnsShader(false), fOwnsTypeface(false) { |
-} |
- |
-SkDrawPaint::~SkDrawPaint() { |
- if (fOwnsColor) |
- delete color; |
- if (fOwnsMaskFilter) |
- delete maskFilter; |
- if (fOwnsPathEffect) |
- delete pathEffect; |
- if (fOwnsShader) |
- delete shader; |
- if (fOwnsTypeface) |
- delete typeface; |
-} |
- |
-bool SkDrawPaint::add(SkAnimateMaker& maker, SkDisplayable* child) { |
- SkASSERT(child && child->isPaintPart()); |
- SkPaintPart* part = (SkPaintPart*) child; |
- if (part->add()) |
- maker.setErrorCode(SkDisplayXMLParserError::kErrorAddingToPaint); |
- return true; |
-} |
- |
-SkDisplayable* SkDrawPaint::deepCopy(SkAnimateMaker* maker) { |
- SkDrawColor* tempColor = color; |
- color = NULL; |
- SkDrawPaint* copy = (SkDrawPaint*) INHERITED::deepCopy(maker); |
- color = tempColor; |
- tempColor = (SkDrawColor*) color->deepCopy(maker); |
- tempColor->setParent(copy); |
- tempColor->add(); |
- copy->fOwnsColor = true; |
- return copy; |
-} |
- |
-bool SkDrawPaint::draw(SkAnimateMaker& maker) { |
- SkPaint* paint = maker.fPaint; |
- setupPaint(paint); |
- return false; |
-} |
- |
-#ifdef SK_DUMP_ENABLED |
-void SkDrawPaint::dump(SkAnimateMaker* maker) { |
- dumpBase(maker); |
- dumpAttrs(maker); |
- bool closedYet = false; |
- SkDisplayList::fIndent +=4; |
- //should i say if (maskFilter && ...? |
- if (maskFilter != (SkDrawMaskFilter*)-1) { |
- SkDebugf(">\n"); |
- maskFilter->dump(maker); |
- closedYet = true; |
- } |
- if (pathEffect != (SkDrawPathEffect*) -1) { |
- if (closedYet == false) { |
- SkDebugf(">\n"); |
- closedYet = true; |
- } |
- pathEffect->dump(maker); |
- } |
- if (fOwnsTypeface) { |
- if (closedYet == false) { |
- SkDebugf(">\n"); |
- closedYet = true; |
- } |
- typeface->dump(maker); |
- } |
- SkDisplayList::fIndent -= 4; |
- dumpChildren(maker, closedYet); |
-} |
-#endif |
- |
-void SkDrawPaint::executeFunction(SkDisplayable* target, int index, |
- SkTDArray<SkScriptValue>& parameters, SkDisplayTypes type, |
- SkScriptValue* scriptValue) { |
- if (scriptValue == NULL) |
- return; |
- SkASSERT(target == this); |
- switch (index) { |
- case SK_FUNCTION(measureText): { |
- SkASSERT(parameters.count() == 1); |
- SkASSERT(type == SkType_Float); |
- SkPaint paint; |
- setupPaint(&paint); |
- scriptValue->fType = SkType_Float; |
- SkASSERT(parameters[0].fType == SkType_String); |
- scriptValue->fOperand.fScalar = paint.measureText(parameters[0].fOperand.fString->c_str(), |
- parameters[0].fOperand.fString->size()); |
-// SkDebugf("measureText: %s = %g\n", parameters[0].fOperand.fString->c_str(), |
-// scriptValue->fOperand.fScalar / 65536.0f); |
- } break; |
- default: |
- SkASSERT(0); |
- } |
-} |
- |
-const SkFunctionParamType* SkDrawPaint::getFunctionsParameters() { |
- return fFunctionParameters; |
-} |
- |
-bool SkDrawPaint::getProperty(int index, SkScriptValue* value) const { |
- SkPaint::FontMetrics metrics; |
- SkPaint paint; |
- setupPaint(&paint); |
- paint.getFontMetrics(&metrics); |
- switch (index) { |
- case SK_PROPERTY(ascent): |
- value->fOperand.fScalar = metrics.fAscent; |
- break; |
- case SK_PROPERTY(descent): |
- value->fOperand.fScalar = metrics.fDescent; |
- break; |
- // should consider returning fLeading as well (or roll it into ascent/descent somehow |
- default: |
- SkASSERT(0); |
- return false; |
- } |
- value->fType = SkType_Float; |
- return true; |
-} |
- |
-bool SkDrawPaint::resolveIDs(SkAnimateMaker& maker, SkDisplayable* origDisp, SkApply* ) { |
- SkASSERT(origDisp->isPaint()); |
- SkDrawPaint* original = (SkDrawPaint*) origDisp; |
- if (fOwnsColor && maker.resolveID(color, original->color) == false) |
- return true; |
- if (fOwnsMaskFilter && maker.resolveID(maskFilter, original->maskFilter) == false) |
- return true; |
- if (fOwnsPathEffect && maker.resolveID(pathEffect, original->pathEffect) == false) |
- return true; |
- if (fOwnsShader && maker.resolveID(shader, original->shader) == false) |
- return true; |
- if (fOwnsTypeface && maker.resolveID(typeface, original->typeface) == false) |
- return true; |
- return false; // succeeded |
-} |
- |
-void SkDrawPaint::setupPaint(SkPaint* paint) const { |
- if (antiAlias != -1) |
- paint->setAntiAlias(SkToBool(antiAlias)); |
- if (color != NULL) |
- paint->setColor(color->getColor()); |
- if (fakeBold != -1) |
- paint->setFakeBoldText(SkToBool(fakeBold)); |
- if (filterBitmap != -1) |
- paint->setFilterBitmap(SkToBool(filterBitmap)); |
- // stroke is legacy; style setting if present overrides stroke |
- if (stroke != -1) |
- paint->setStyle(SkToBool(stroke) ? SkPaint::kStroke_Style : SkPaint::kFill_Style); |
- if (style != (SkPaint::Style) -1) |
- paint->setStyle((SkPaint::Style) style); |
- if (linearText != -1) |
- paint->setLinearText(SkToBool(linearText)); |
- if (maskFilter == NULL) |
- paint->setMaskFilter(NULL); |
- else if (maskFilter != (SkDrawMaskFilter*) -1) |
- paint->setMaskFilter(maskFilter->getMaskFilter())->safeUnref(); |
- if (pathEffect == NULL) |
- paint->setPathEffect(NULL); |
- else if (pathEffect != (SkDrawPathEffect*) -1) |
- paint->setPathEffect(pathEffect->getPathEffect())->safeUnref(); |
- if (shader == NULL) |
- paint->setShader(NULL); |
- else if (shader != (SkDrawShader*) -1) |
- paint->setShader(shader->getShader())->safeUnref(); |
- if (strikeThru != -1) |
- paint->setStrikeThruText(SkToBool(strikeThru)); |
- if (strokeCap != (SkPaint::Cap) -1) |
- paint->setStrokeCap((SkPaint::Cap) strokeCap); |
- if (strokeJoin != (SkPaint::Join) -1) |
- paint->setStrokeJoin((SkPaint::Join) strokeJoin); |
- if (SkScalarIsNaN(strokeMiter) == false) |
- paint->setStrokeMiter(strokeMiter); |
- if (SkScalarIsNaN(strokeWidth) == false) |
- paint->setStrokeWidth(strokeWidth); |
- if (textAlign != (SkPaint::Align) -1) |
- paint->setTextAlign((SkPaint::Align) textAlign); |
- if (SkScalarIsNaN(textScaleX) == false) |
- paint->setTextScaleX(textScaleX); |
- if (SkScalarIsNaN(textSize) == false) |
- paint->setTextSize(textSize); |
- if (SkScalarIsNaN(textSkewX) == false) |
- paint->setTextSkewX(textSkewX); |
- if (typeface == NULL) |
- paint->setTypeface(NULL); |
- else if (typeface != (SkDrawTypeface*) -1) |
- paint->setTypeface(typeface->getTypeface())->safeUnref(); |
- if (underline != -1) |
- paint->setUnderlineText(SkToBool(underline)); |
- if (xfermode != (SkPorterDuff::Mode) -1) |
- paint->setPorterDuffXfermode((SkPorterDuff::Mode) xfermode); |
-} |