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