michael@0: michael@0: /* michael@0: * Copyright 2006 The Android Open Source Project michael@0: * michael@0: * Use of this source code is governed by a BSD-style license that can be michael@0: * found in the LICENSE file. michael@0: */ michael@0: michael@0: michael@0: #include "SkDrawRectangle.h" michael@0: #include "SkAnimateMaker.h" michael@0: #include "SkCanvas.h" michael@0: #include "SkMatrixParts.h" michael@0: #include "SkPaint.h" michael@0: #include "SkScript.h" michael@0: michael@0: enum SkRectangle_Properties { michael@0: SK_PROPERTY(height), michael@0: SK_PROPERTY(needsRedraw), michael@0: SK_PROPERTY(width) michael@0: }; michael@0: michael@0: #if SK_USE_CONDENSED_INFO == 0 michael@0: michael@0: const SkMemberInfo SkDrawRect::fInfo[] = { michael@0: SK_MEMBER_ALIAS(bottom, fRect.fBottom, Float), michael@0: SK_MEMBER_PROPERTY(height, Float), michael@0: SK_MEMBER_ALIAS(left, fRect.fLeft, Float), michael@0: SK_MEMBER_PROPERTY(needsRedraw, Boolean), michael@0: SK_MEMBER_ALIAS(right, fRect.fRight, Float), michael@0: SK_MEMBER_ALIAS(top, fRect.fTop, Float), michael@0: SK_MEMBER_PROPERTY(width, Float) michael@0: }; michael@0: michael@0: #endif michael@0: michael@0: DEFINE_GET_MEMBER(SkDrawRect); michael@0: michael@0: SkDrawRect::SkDrawRect() : fParent(NULL) { michael@0: fRect.setEmpty(); michael@0: } michael@0: michael@0: void SkDrawRect::dirty() { michael@0: if (fParent) michael@0: fParent->dirty(); michael@0: } michael@0: michael@0: bool SkDrawRect::draw(SkAnimateMaker& maker) { michael@0: SkBoundableAuto boundable(this, maker); michael@0: maker.fCanvas->drawRect(fRect, *maker.fPaint); michael@0: return false; michael@0: } michael@0: michael@0: #ifdef SK_DUMP_ENABLED michael@0: void SkDrawRect::dump(SkAnimateMaker* maker) { michael@0: dumpBase(maker); michael@0: SkDebugf("left=\"%g\" top=\"%g\" right=\"%g\" bottom=\"%g\" />\n", michael@0: SkScalarToFloat(fRect.fLeft), SkScalarToFloat(fRect.fTop), SkScalarToFloat(fRect.fRight), michael@0: SkScalarToFloat(fRect.fBottom)); michael@0: } michael@0: #endif michael@0: michael@0: SkDisplayable* SkDrawRect::getParent() const { michael@0: return fParent; michael@0: } michael@0: michael@0: bool SkDrawRect::getProperty(int index, SkScriptValue* value) const { michael@0: SkScalar result; michael@0: switch (index) { michael@0: case SK_PROPERTY(height): michael@0: result = fRect.height(); michael@0: break; michael@0: case SK_PROPERTY(needsRedraw): michael@0: value->fType = SkType_Boolean; michael@0: value->fOperand.fS32 = fBounds.isEmpty() == false; michael@0: return true; michael@0: case SK_PROPERTY(width): michael@0: result = fRect.width(); michael@0: break; michael@0: default: michael@0: SkASSERT(0); michael@0: return false; michael@0: } michael@0: value->fType = SkType_Float; michael@0: value->fOperand.fScalar = result; michael@0: return true; michael@0: } michael@0: michael@0: michael@0: bool SkDrawRect::setParent(SkDisplayable* parent) { michael@0: fParent = parent; michael@0: return false; michael@0: } michael@0: michael@0: bool SkDrawRect::setProperty(int index, SkScriptValue& value) { michael@0: SkScalar scalar = value.fOperand.fScalar; michael@0: switch (index) { michael@0: case SK_PROPERTY(height): michael@0: SkASSERT(value.fType == SkType_Float); michael@0: fRect.fBottom = scalar + fRect.fTop; michael@0: return true; michael@0: case SK_PROPERTY(needsRedraw): michael@0: return false; michael@0: case SK_PROPERTY(width): michael@0: SkASSERT(value.fType == SkType_Float); michael@0: fRect.fRight = scalar + fRect.fLeft; michael@0: return true; michael@0: default: michael@0: SkASSERT(0); michael@0: } michael@0: return false; michael@0: } michael@0: michael@0: #if SK_USE_CONDENSED_INFO == 0 michael@0: michael@0: const SkMemberInfo SkRoundRect::fInfo[] = { michael@0: SK_MEMBER_INHERITED, michael@0: SK_MEMBER(rx, Float), michael@0: SK_MEMBER(ry, Float), michael@0: }; michael@0: michael@0: #endif michael@0: michael@0: DEFINE_GET_MEMBER(SkRoundRect); michael@0: michael@0: SkRoundRect::SkRoundRect() : rx(0), ry(0) { michael@0: } michael@0: michael@0: bool SkRoundRect::draw(SkAnimateMaker& maker) { michael@0: SkBoundableAuto boundable(this, maker); michael@0: maker.fCanvas->drawRoundRect(fRect, rx, ry, *maker.fPaint); michael@0: return false; michael@0: } michael@0: michael@0: #ifdef SK_DUMP_ENABLED michael@0: void SkRoundRect::dump(SkAnimateMaker* maker) { michael@0: dumpBase(maker); michael@0: SkDebugf("left=\"%g\" top=\"%g\" right=\"%g\" bottom=\"%g\" rx=\"%g\" ry=\"%g\" />\n", michael@0: SkScalarToFloat(fRect.fLeft), SkScalarToFloat(fRect.fTop), SkScalarToFloat(fRect.fRight), michael@0: SkScalarToFloat(fRect.fBottom), SkScalarToFloat(rx), SkScalarToFloat(ry)); michael@0: } michael@0: #endif