1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2006 The Android Open Source Project 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Use of this source code is governed by a BSD-style license that can be 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * found in the LICENSE file. 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "SkDrawTextBox.h" 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "SkAnimateMaker.h" 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "SkCanvas.h" 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "SkPaint.h" 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgenum SkDrawTextBox_Properties { 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org foo = 100, 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SK_PROPERTY(spacingAlign), 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SK_PROPERTY(mode) 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if SK_USE_CONDENSED_INFO == 0 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgconst SkMemberInfo SkDrawTextBox::fInfo[] = { 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SK_MEMBER_INHERITED, 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SK_MEMBER(mode, TextBoxMode), 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SK_MEMBER_ALIAS(spacingAdd, fSpacingAdd, Float), 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SK_MEMBER(spacingAlign, TextBoxAlign), 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SK_MEMBER_ALIAS(spacingMul, fSpacingMul, Float), 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SK_MEMBER_ALIAS(text, fText, String) 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgDEFINE_GET_MEMBER(SkDrawTextBox); 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgSkDrawTextBox::SkDrawTextBox() 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fSpacingMul = SK_Scalar1; 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fSpacingAdd = 0; 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org spacingAlign = SkTextBox::kStart_SpacingAlign; 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mode = SkTextBox::kLineBreak_Mode; 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef SK_DUMP_ENABLED 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid SkDrawTextBox::dump(SkAnimateMaker* maker) 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dumpBase(maker); 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dumpAttrs(maker); 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (mode == 0) 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SkDebugf("mode=\"oneLine\" "); 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (spacingAlign == 1) 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SkDebugf("spacingAlign=\"center\" "); 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (spacingAlign == 2) 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SkDebugf("spacingAlign=\"end\" "); 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SkDebugf("/>\n"); 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbool SkDrawTextBox::getProperty(int index, SkScriptValue* value) const 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return this->INHERITED::getProperty(index, value); 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbool SkDrawTextBox::setProperty(int index, SkScriptValue& scriptValue) 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return this->INHERITED::setProperty(index, scriptValue); 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbool SkDrawTextBox::draw(SkAnimateMaker& maker) 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SkTextBox box; 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org box.setMode((SkTextBox::Mode) mode); 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org box.setSpacingAlign((SkTextBox::SpacingAlign) spacingAlign); 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org box.setBox(fRect); 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org box.setSpacing(fSpacingMul, fSpacingAdd); 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SkBoundableAuto boundable(this, maker); 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org box.draw(maker.fCanvas, fText.c_str(), fText.size(), *maker.fPaint); 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return false; 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org