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