Home | History | Annotate | Download | only in animator
      1 /* libs/graphics/animator/SkDrawRectangle.cpp
      2 **
      3 ** Copyright 2006, The Android Open Source Project
      4 **
      5 ** Licensed under the Apache License, Version 2.0 (the "License");
      6 ** you may not use this file except in compliance with the License.
      7 ** You may obtain a copy of the License at
      8 **
      9 **     http://www.apache.org/licenses/LICENSE-2.0
     10 **
     11 ** Unless required by applicable law or agreed to in writing, software
     12 ** distributed under the License is distributed on an "AS IS" BASIS,
     13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14 ** See the License for the specific language governing permissions and
     15 ** limitations under the License.
     16 */
     17 
     18 #include "SkDrawRectangle.h"
     19 #include "SkAnimateMaker.h"
     20 #include "SkCanvas.h"
     21 #include "SkMatrixParts.h"
     22 #include "SkPaint.h"
     23 #include "SkScript.h"
     24 
     25 enum SkRectangle_Properties {
     26     SK_PROPERTY(height),
     27     SK_PROPERTY(needsRedraw),
     28     SK_PROPERTY(width)
     29 };
     30 
     31 #if SK_USE_CONDENSED_INFO == 0
     32 
     33 const SkMemberInfo SkDrawRect::fInfo[] = {
     34     SK_MEMBER_ALIAS(bottom, fRect.fBottom, Float),
     35     SK_MEMBER_PROPERTY(height, Float),
     36     SK_MEMBER_ALIAS(left, fRect.fLeft, Float),
     37     SK_MEMBER_PROPERTY(needsRedraw, Boolean),
     38     SK_MEMBER_ALIAS(right, fRect.fRight, Float),
     39     SK_MEMBER_ALIAS(top, fRect.fTop, Float),
     40     SK_MEMBER_PROPERTY(width, Float)
     41 };
     42 
     43 #endif
     44 
     45 DEFINE_GET_MEMBER(SkDrawRect);
     46 
     47 SkDrawRect::SkDrawRect() : fParent(NULL) {
     48     fRect.setEmpty();
     49 }
     50 
     51 void SkDrawRect::dirty() {
     52     if (fParent)
     53         fParent->dirty();
     54 }
     55 
     56 bool SkDrawRect::draw(SkAnimateMaker& maker) {
     57     SkBoundableAuto boundable(this, maker);
     58     maker.fCanvas->drawRect(fRect, *maker.fPaint);
     59     return false;
     60 }
     61 
     62 #ifdef SK_DUMP_ENABLED
     63 void SkDrawRect::dump(SkAnimateMaker* maker) {
     64     dumpBase(maker);
     65     SkDebugf("left=\"%g\" top=\"%g\" right=\"%g\" bottom=\"%g\" />\n",
     66         SkScalarToFloat(fRect.fLeft), SkScalarToFloat(fRect.fTop), SkScalarToFloat(fRect.fRight),
     67         SkScalarToFloat(fRect.fBottom));
     68 }
     69 #endif
     70 
     71 SkDisplayable* SkDrawRect::getParent() const {
     72     return fParent;
     73 }
     74 
     75 bool SkDrawRect::getProperty(int index, SkScriptValue* value) const {
     76     SkScalar result;
     77     switch (index) {
     78         case SK_PROPERTY(height):
     79             result = fRect.height();
     80             break;
     81         case SK_PROPERTY(needsRedraw):
     82             value->fType = SkType_Boolean;
     83             value->fOperand.fS32 = fBounds.isEmpty() == false;
     84             return true;
     85         case SK_PROPERTY(width):
     86             result = fRect.width();
     87             break;
     88         default:
     89             SkASSERT(0);
     90             return false;
     91     }
     92     value->fType = SkType_Float;
     93     value->fOperand.fScalar = result;
     94     return true;
     95 }
     96 
     97 
     98 bool SkDrawRect::setParent(SkDisplayable* parent) {
     99     fParent = parent;
    100     return false;
    101 }
    102 
    103 bool SkDrawRect::setProperty(int index, SkScriptValue& value) {
    104     SkScalar scalar = value.fOperand.fScalar;
    105     switch (index) {
    106         case SK_PROPERTY(height):
    107             SkASSERT(value.fType == SkType_Float);
    108             fRect.fBottom = scalar + fRect.fTop;
    109             return true;
    110         case SK_PROPERTY(needsRedraw):
    111             return false;
    112         case SK_PROPERTY(width):
    113             SkASSERT(value.fType == SkType_Float);
    114             fRect.fRight = scalar + fRect.fLeft;
    115             return true;
    116         default:
    117             SkASSERT(0);
    118     }
    119     return false;
    120 }
    121 
    122 #if SK_USE_CONDENSED_INFO == 0
    123 
    124 const SkMemberInfo SkRoundRect::fInfo[] = {
    125     SK_MEMBER_INHERITED,
    126     SK_MEMBER(rx, Float),
    127     SK_MEMBER(ry, Float),
    128 };
    129 
    130 #endif
    131 
    132 DEFINE_GET_MEMBER(SkRoundRect);
    133 
    134 SkRoundRect::SkRoundRect() : rx(0), ry(0) {
    135 }
    136 
    137 bool SkRoundRect::draw(SkAnimateMaker& maker) {
    138     SkBoundableAuto boundable(this, maker);
    139     maker.fCanvas->drawRoundRect(fRect, rx, ry, *maker.fPaint);
    140     return false;
    141 }
    142 
    143 #ifdef SK_DUMP_ENABLED
    144 void SkRoundRect::dump(SkAnimateMaker* maker) {
    145     dumpBase(maker);
    146     SkDebugf("left=\"%g\" top=\"%g\" right=\"%g\" bottom=\"%g\" rx=\"%g\" ry=\"%g\" />\n",
    147             SkScalarToFloat(fRect.fLeft), SkScalarToFloat(fRect.fTop), SkScalarToFloat(fRect.fRight),
    148             SkScalarToFloat(fRect.fBottom), SkScalarToFloat(rx), SkScalarToFloat(ry));
    149 }
    150 #endif
    151 
    152 
    153 
    154