11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 20910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/* 31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2006 The Android Open Source Project 40910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * 51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file. 70910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 91cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifndef SkTextBox_DEFINED 110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkTextBox_DEFINED 120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkCanvas.h" 140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/** \class SkTextBox 160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkTextBox is a helper class for drawing 1 or more lines of text 180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project within a rectangle. The textbox is positioned and clipped by its Frame. 190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project The Margin rectangle controls where the text is drawn relative to 200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project the Frame. Line-breaks occur inside the Margin rectangle. 210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Spacing is a linear equation used to compute the distance between lines 230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project of text. Spacing consists of two scalars: mul and add, and the spacing 240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project between lines is computed as: spacing = paint.getTextSize() * mul + add 250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project*/ 260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkTextBox { 270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkTextBox(); 290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project enum Mode { 310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project kOneLine_Mode, 320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project kLineBreak_Mode, 330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project kModeCount 350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project }; 360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Mode getMode() const { return (Mode)fMode; } 370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void setMode(Mode); 380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project enum SpacingAlign { 400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project kStart_SpacingAlign, 410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project kCenter_SpacingAlign, 420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project kEnd_SpacingAlign, 430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project kSpacingAlignCount 450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project }; 460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SpacingAlign getSpacingAlign() const { return (SpacingAlign)fSpacingAlign; } 470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void setSpacingAlign(SpacingAlign); 480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void getBox(SkRect*) const; 500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void setBox(const SkRect&); 510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void setBox(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom); 520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void getSpacing(SkScalar* mul, SkScalar* add) const; 540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void setSpacing(SkScalar mul, SkScalar add); 550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void draw(SkCanvas*, const char text[], size_t len, const SkPaint&); 570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 5840528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger void setText(const char text[], size_t len, const SkPaint&); 5940528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger void draw(SkCanvas*); 6040528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger int countLines() const; 6140528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger SkScalar getTextHeight() const; 6240528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger 630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkRect fBox; 650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar fSpacingMul, fSpacingAdd; 660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project uint8_t fMode, fSpacingAlign; 6740528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger const char* fText; 6840528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger size_t fLen; 6940528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger const SkPaint* fPaint; 700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkTextLineBreaker { 730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project static int CountLines(const char text[], size_t len, const SkPaint&, SkScalar width); 750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 79