1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2006 The Android Open Source Project 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 8ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDrawTextBox.h" 118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkAnimateMaker.h" 128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkCanvas.h" 138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkPaint.h" 148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comenum SkDrawTextBox_Properties { 168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com foo = 100, 178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_PROPERTY(spacingAlign), 188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_PROPERTY(mode) 198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if SK_USE_CONDENSED_INFO == 0 238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comconst SkMemberInfo SkDrawTextBox::fInfo[] = { 258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER_INHERITED, 268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(mode, TextBoxMode), 278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER_ALIAS(spacingAdd, fSpacingAdd, Float), 288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(spacingAlign, TextBoxAlign), 298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER_ALIAS(spacingMul, fSpacingMul, Float), 308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER_ALIAS(text, fText, String) 318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comDEFINE_GET_MEMBER(SkDrawTextBox); 368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkDrawTextBox::SkDrawTextBox() 388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com{ 398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fSpacingMul = SK_Scalar1; 408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fSpacingAdd = 0; 418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com spacingAlign = SkTextBox::kStart_SpacingAlign; 428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com mode = SkTextBox::kLineBreak_Mode; 438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_DUMP_ENABLED 468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid SkDrawTextBox::dump(SkAnimateMaker* maker) 478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com{ 488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com dumpBase(maker); 498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com dumpAttrs(maker); 50d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com if (mode == 0) 518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDebugf("mode=\"oneLine\" "); 528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (spacingAlign == 1) 538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDebugf("spacingAlign=\"center\" "); 548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else if (spacingAlign == 2) 558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDebugf("spacingAlign=\"end\" "); 568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDebugf("/>\n"); 578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.combool SkDrawTextBox::getProperty(int index, SkScriptValue* value) const 618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com{ 628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return this->INHERITED::getProperty(index, value); 638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.combool SkDrawTextBox::setProperty(int index, SkScriptValue& scriptValue) 668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com{ 678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return this->INHERITED::setProperty(index, scriptValue); 688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.combool SkDrawTextBox::draw(SkAnimateMaker& maker) 718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com{ 728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkTextBox box; 738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com box.setMode((SkTextBox::Mode) mode); 748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com box.setSpacingAlign((SkTextBox::SpacingAlign) spacingAlign); 758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com box.setBox(fRect); 768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com box.setSpacing(fSpacingMul, fSpacingAdd); 778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkBoundableAuto boundable(this, maker); 788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com box.draw(maker.fCanvas, fText.c_str(), fText.size(), *maker.fPaint); 798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return false; 808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 81