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