diff options
Diffstat (limited to 'ui/views/view_text_utils.h')
-rw-r--r-- | ui/views/view_text_utils.h | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/ui/views/view_text_utils.h b/ui/views/view_text_utils.h new file mode 100644 index 0000000..c0141a5 --- /dev/null +++ b/ui/views/view_text_utils.h @@ -0,0 +1,76 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef UI_VIEWS_VIEW_TEXT_UTILS_H_ +#define UI_VIEWS_VIEW_TEXT_UTILS_H_ +#pragma once + +#include "base/string16.h" +#include "ui/views/views_export.h" + +namespace gfx { +class Canvas; +class Font; +class Rect; +class Size; +} + +namespace views { +class Label; +class Link; +} + +// This file defines utility functions for working with text in views. + +namespace view_text_utils { + +// Draws a string onto the canvas (wrapping if needed) while also keeping +// track of where it ends so we can position a URL after the text. The +// parameter |bounds| represents the boundary we have to work with, |position| +// specifies where to draw the string (relative to the top left corner of the +// |bounds| rectangle and |font| specifies the font to use when drawing. When +// the function returns, the parameter |rect| contains where to draw the URL +// (to the right of where we just drew the text) and |position| is updated to +// reflect where to draw the next string after the URL. |label| is a dummy +// label with the correct width and origin for the text to be written; it's +// used so that the x position can be correctly mirrored in RTL languages. +// |text_direction_is_rtl| is true if an RTL language is being used. +// NOTE: The reason why we need this function is because while Skia knows how +// to wrap text appropriately, it doesn't tell us where it drew the last +// character, which we need to position the URLs within the text. +VIEWS_EXPORT void DrawTextAndPositionUrl(gfx::Canvas* canvas, + views::Label* label, + const string16& text, + views::Link* link, + gfx::Rect* rect, + gfx::Size* position, + bool text_direction_is_rtl, + const gfx::Rect& bounds, + const gfx::Font& font); + +// A helper function for DrawTextAndPositionUrl, which simply draws the text +// from a certain starting point |position| and wraps within bounds. +// |word_for_word| specifies whether to draw the text word for word or whether +// to treat the text as one blurb (similar to the way URL's are treated inside +// RTL text. For details on the other parameters, see DrawTextAndPositionUrl. +void DrawTextStartingFrom(gfx::Canvas* canvas, + views::Label* label, + const string16& text, + gfx::Size* position, + const gfx::Rect& bounds, + const gfx::Font& font, + bool text_direction_is_rtl, + bool word_for_word); + +// A simply utility function that calculates whether a word of width +// |word_width| fits at position |position| within the |bounds| rectangle. If +// not, |position| is updated to wrap to the beginning of the next line. +void WrapIfWordDoesntFit(int word_width, + int font_height, + gfx::Size* position, + const gfx::Rect& bounds); + +} // namespace view_text_utils + +#endif // UI_VIEWS_VIEW_TEXT_UTILS_H_ |