SkTextBox.h revision 0910916c0f7b951ee55c4b7c6358295b9bca0565
10910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/*
20910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
30910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project *
40910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
50910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * you may not use this file except in compliance with the License.
60910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * You may obtain a copy of the License at
70910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project *
80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
90910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project *
100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * See the License for the specific language governing permissions and
140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * limitations under the License.
150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */
160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifndef SkTextBox_DEFINED
180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkTextBox_DEFINED
190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkCanvas.h"
210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/** \class SkTextBox
230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkTextBox is a helper class for drawing 1 or more lines of text
250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    within a rectangle. The textbox is positioned and clipped by its Frame.
260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    The Margin rectangle controls where the text is drawn relative to
270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    the Frame. Line-breaks occur inside the Margin rectangle.
280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    Spacing is a linear equation used to compute the distance between lines
300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    of text. Spacing consists of two scalars: mul and add, and the spacing
310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    between lines is computed as: spacing = paint.getTextSize() * mul + add
320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project*/
330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkTextBox {
340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic:
350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkTextBox();
360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    enum Mode {
380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kOneLine_Mode,
390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kLineBreak_Mode,
400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kModeCount
420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    };
430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    Mode    getMode() const { return (Mode)fMode; }
440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    void    setMode(Mode);
450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    enum SpacingAlign {
470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kStart_SpacingAlign,
480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kCenter_SpacingAlign,
490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kEnd_SpacingAlign,
500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kSpacingAlignCount
520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    };
530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SpacingAlign    getSpacingAlign() const { return (SpacingAlign)fSpacingAlign; }
540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    void            setSpacingAlign(SpacingAlign);
550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    void    getBox(SkRect*) const;
570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    void    setBox(const SkRect&);
580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    void    setBox(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom);
590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    void    getSpacing(SkScalar* mul, SkScalar* add) const;
610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    void    setSpacing(SkScalar mul, SkScalar add);
620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    void    draw(SkCanvas*, const char text[], size_t len, const SkPaint&);
640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate:
660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkRect      fBox;
670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkScalar    fSpacingMul, fSpacingAdd;
680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    uint8_t     fMode, fSpacingAlign;
690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project};
700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkTextLineBreaker {
720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic:
730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    static int CountLines(const char text[], size_t len, const SkPaint&, SkScalar width);
740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project};
750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
78