11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/* 31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2006 The Android Open Source Project 41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * 51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file. 71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */ 81cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 90910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawRectangle.h" 110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkAnimateMaker.h" 120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkCanvas.h" 130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkMatrixParts.h" 140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkPaint.h" 150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkScript.h" 160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectenum SkRectangle_Properties { 180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_PROPERTY(height), 190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_PROPERTY(needsRedraw), 200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_PROPERTY(width) 210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if SK_USE_CONDENSED_INFO == 0 240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkMemberInfo SkDrawRect::fInfo[] = { 260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER_ALIAS(bottom, fRect.fBottom, Float), 270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER_PROPERTY(height, Float), 280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER_ALIAS(left, fRect.fLeft, Float), 290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER_PROPERTY(needsRedraw, Boolean), 300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER_ALIAS(right, fRect.fRight, Float), 310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER_ALIAS(top, fRect.fTop, Float), 320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER_PROPERTY(width, Float) 330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectDEFINE_GET_MEMBER(SkDrawRect); 380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDrawRect::SkDrawRect() : fParent(NULL) { 400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fRect.setEmpty(); 410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkDrawRect::dirty() { 440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fParent) 450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fParent->dirty(); 460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkDrawRect::draw(SkAnimateMaker& maker) { 490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkBoundableAuto boundable(this, maker); 500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project maker.fCanvas->drawRect(fRect, *maker.fPaint); 510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef SK_DUMP_ENABLED 550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkDrawRect::dump(SkAnimateMaker* maker) { 560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dumpBase(maker); 570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf("left=\"%g\" top=\"%g\" right=\"%g\" bottom=\"%g\" />\n", 580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalarToFloat(fRect.fLeft), SkScalarToFloat(fRect.fTop), SkScalarToFloat(fRect.fRight), 590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalarToFloat(fRect.fBottom)); 600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDisplayable* SkDrawRect::getParent() const { 640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return fParent; 650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkDrawRect::getProperty(int index, SkScriptValue* value) const { 680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar result; 690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project switch (index) { 700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SK_PROPERTY(height): 710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project result = fRect.height(); 720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SK_PROPERTY(needsRedraw): 740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project value->fType = SkType_Boolean; 750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project value->fOperand.fS32 = fBounds.isEmpty() == false; 760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SK_PROPERTY(width): 780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project result = fRect.width(); 790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project default: 810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(0); 820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project value->fType = SkType_Float; 850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project value->fOperand.fScalar = result; 860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkDrawRect::setParent(SkDisplayable* parent) { 910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fParent = parent; 920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkDrawRect::setProperty(int index, SkScriptValue& value) { 960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar scalar = value.fOperand.fScalar; 970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project switch (index) { 980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SK_PROPERTY(height): 990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(value.fType == SkType_Float); 1000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fRect.fBottom = scalar + fRect.fTop; 1010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 1020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SK_PROPERTY(needsRedraw): 1030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 1040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SK_PROPERTY(width): 1050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(value.fType == SkType_Float); 1060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fRect.fRight = scalar + fRect.fLeft; 1070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 1080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project default: 1090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(0); 1100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 1120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if SK_USE_CONDENSED_INFO == 0 1150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkMemberInfo SkRoundRect::fInfo[] = { 1170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER_INHERITED, 1180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(rx, Float), 1190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(ry, Float), 1200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 1210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 1230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectDEFINE_GET_MEMBER(SkRoundRect); 1250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkRoundRect::SkRoundRect() : rx(0), ry(0) { 1270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkRoundRect::draw(SkAnimateMaker& maker) { 1300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkBoundableAuto boundable(this, maker); 1310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project maker.fCanvas->drawRoundRect(fRect, rx, ry, *maker.fPaint); 1320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 1330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef SK_DUMP_ENABLED 1360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkRoundRect::dump(SkAnimateMaker* maker) { 1370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dumpBase(maker); 1380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf("left=\"%g\" top=\"%g\" right=\"%g\" bottom=\"%g\" rx=\"%g\" ry=\"%g\" />\n", 1390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalarToFloat(fRect.fLeft), SkScalarToFloat(fRect.fTop), SkScalarToFloat(fRect.fRight), 1400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalarToFloat(fRect.fBottom), SkScalarToFloat(rx), SkScalarToFloat(ry)); 1410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 1430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 146