Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1177)

Unified Diff: ui/views/controls/label.h

Issue 329813003: Reland: Use labels to display views tab titles. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Call AddChildView(title_) on Tab to prevent leaks. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/controls/button/label_button.cc ('k') | ui/views/controls/label.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/controls/label.h
diff --git a/ui/views/controls/label.h b/ui/views/controls/label.h
index 9e2881dc69e93262bcc05df9703e7902d3887b19..0f3b922ce0207b48b31ff24f503ad713a5d85235 100644
--- a/ui/views/controls/label.h
+++ b/ui/views/controls/label.h
@@ -1,305 +1,270 @@
-// Copyright (c) 2012 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_CONTROLS_LABEL_H_
-#define UI_VIEWS_CONTROLS_LABEL_H_
-
-#include <string>
-#include <vector>
-
-#include "base/compiler_specific.h"
-#include "base/gtest_prod_util.h"
-#include "base/strings/string16.h"
-#include "third_party/skia/include/core/SkColor.h"
-#include "ui/gfx/font_list.h"
-#include "ui/gfx/text_constants.h"
-#include "ui/views/view.h"
-
-namespace views {
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Label class
-//
-// A label is a view subclass that can display a string.
-//
-/////////////////////////////////////////////////////////////////////////////
-class VIEWS_EXPORT Label : public View {
- public:
- // The following enum is used to indicate whether using the Chrome UI's
- // directionality as the label's directionality, or auto-detecting the label's
- // directionality.
- //
- // If the label text originates from the Chrome UI, we should use the Chrome
- // UI's directionality as the label's directionality.
- //
- // If the text originates from a web page, its directionality is determined
- // based on its first character with strong directionality, disregarding what
- // directionality the Chrome UI is.
- enum DirectionalityMode {
- USE_UI_DIRECTIONALITY = 0,
- AUTO_DETECT_DIRECTIONALITY
- };
-
- // Internal class name.
- static const char kViewClassName[];
-
- // The padding for the focus border when rendering focused text.
- static const int kFocusBorderPadding;
-
- Label();
- explicit Label(const base::string16& text);
- Label(const base::string16& text, const gfx::FontList& font_list);
- virtual ~Label();
-
- // Gets or sets the fonts used by this label.
- const gfx::FontList& font_list() const { return font_list_; }
- virtual void SetFontList(const gfx::FontList& font_list);
-
- // Get or set the label text.
- const base::string16& text() const { return text_; }
- virtual void SetText(const base::string16& text);
-
- // Enables or disables auto-color-readability (enabled by default). If this
- // is enabled, then calls to set any foreground or background color will
- // trigger an automatic mapper that uses color_utils::GetReadableColor() to
- // ensure that the foreground colors are readable over the background color.
- void SetAutoColorReadabilityEnabled(bool enabled);
-
- // Sets the color. This will automatically force the color to be readable
- // over the current background color.
- virtual void SetEnabledColor(SkColor color);
- void SetDisabledColor(SkColor color);
-
- SkColor enabled_color() const { return actual_enabled_color_; }
-
- // Sets the background color. This won't be explicitly drawn, but the label
- // will force the text color to be readable over it.
- void SetBackgroundColor(SkColor color);
- SkColor background_color() const { return background_color_; }
-
- // Enables a drop shadow underneath the text.
- void SetShadowColors(SkColor enabled_color, SkColor disabled_color);
-
- // Sets the drop shadow's offset from the text.
- void SetShadowOffset(int x, int y);
-
- // Sets the shadow blur. Default is zero.
- void set_shadow_blur(double shadow_blur) { shadow_blur_ = shadow_blur; }
-
- // Disables shadows.
- void ClearEmbellishing();
-
- // Set the color of a halo on the painted text (use transparent for none).
- void set_halo_color(SkColor halo_color) { halo_color_ = halo_color; }
-
- // Sets horizontal alignment. If the locale is RTL, and the directionality
- // mode is USE_UI_DIRECTIONALITY, the alignment is flipped around.
- //
- // Caveat: for labels originating from a web page, the directionality mode
- // should be reset to AUTO_DETECT_DIRECTIONALITY before the horizontal
- // alignment is set. Otherwise, the label's alignment specified as a parameter
- // will be flipped in RTL locales.
- void SetHorizontalAlignment(gfx::HorizontalAlignment alignment);
-
- gfx::HorizontalAlignment horizontal_alignment() const {
- return horizontal_alignment_;
- }
-
- // Sets the directionality mode. The directionality mode is initialized to
- // USE_UI_DIRECTIONALITY when the label is constructed. USE_UI_DIRECTIONALITY
- // applies to every label that originates from the Chrome UI. However, if the
- // label originates from a web page, its directionality is auto-detected.
- void set_directionality_mode(DirectionalityMode mode) {
- directionality_mode_ = mode;
- }
-
- DirectionalityMode directionality_mode() const {
- return directionality_mode_;
- }
-
- // Get or set the distance in pixels between baselines of multi-line text.
- // Default is 0, indicating the distance between lines should be the standard
- // one for the label's text, font list, and platform.
- int line_height() const { return line_height_; }
- void SetLineHeight(int height);
-
- // Get or set if the label text can wrap on multiple lines; default is false.
- bool is_multi_line() const { return is_multi_line_; }
- void SetMultiLine(bool multi_line);
-
- // Get or set if the label text should be obscured before rendering (e.g.
- // should "Password!" display as "*********"); default is false.
- bool is_obscured() const { return is_obscured_; }
- void SetObscured(bool obscured);
-
- // Get the text as displayed to the user, respecting the 'obscured' flag.
- const base::string16& layout_text() const { return layout_text_; }
-
- // Sets whether the label text can be split on words.
- // Default is false. This only works when is_multi_line is true.
- void SetAllowCharacterBreak(bool allow_character_break);
-
- // Sets the eliding or fading behavior, applied as necessary. The default is
- // to elide at the end. Eliding is not well supported for multi-line labels.
- void SetElideBehavior(gfx::ElideBehavior elide_behavior);
-
- // Sets the tooltip text. Default behavior for a label (single-line) is to
- // show the full text if it is wider than its bounds. Calling this overrides
- // the default behavior and lets you set a custom tooltip. To revert to
- // default behavior, call this with an empty string.
- void SetTooltipText(const base::string16& tooltip_text);
-
- // Resizes the label so its width is set to the width of the longest line and
- // its height deduced accordingly.
- // This is only intended for multi-line labels and is useful when the label's
- // text contains several lines separated with \n.
- // |max_width| is the maximum width that will be used (longer lines will be
- // wrapped). If 0, no maximum width is enforced.
- void SizeToFit(int max_width);
-
- // Gets/sets the flag to determine whether the label should be collapsed when
- // it's hidden (not visible). If this flag is true, the label will return a
- // preferred size of (0, 0) when it's not visible.
- void set_collapse_when_hidden(bool value) { collapse_when_hidden_ = value; }
- bool collapse_when_hidden() const { return collapse_when_hidden_; }
-
- // View:
- virtual gfx::Insets GetInsets() const OVERRIDE;
- virtual int GetBaseline() const OVERRIDE;
- // Overridden to compute the size required to display this label.
- virtual gfx::Size GetPreferredSize() const OVERRIDE;
- // Returns the width of an ellipsis if the label is non-empty, or 0 otherwise.
- virtual gfx::Size GetMinimumSize() const OVERRIDE;
- // Returns the height necessary to display this label with the provided width.
- // This method is used to layout multi-line labels. It is equivalent to
- // GetPreferredSize().height() if the receiver is not multi-line.
- virtual int GetHeightForWidth(int w) const OVERRIDE;
- virtual const char* GetClassName() const OVERRIDE;
- virtual View* GetTooltipHandlerForPoint(const gfx::Point& point) OVERRIDE;
- virtual bool CanProcessEventsWithinSubtree() const OVERRIDE;
- virtual void GetAccessibleState(ui::AXViewState* state) OVERRIDE;
- // Gets the tooltip text for labels that are wider than their bounds, except
- // when the label is multiline, in which case it just returns false (no
- // tooltip). If a custom tooltip has been specified with SetTooltipText()
- // it is returned instead.
- virtual bool GetTooltipText(const gfx::Point& p,
- base::string16* tooltip) const OVERRIDE;
-
- protected:
- // Called by Paint to paint the text. Override this to change how
- // text is painted.
- virtual void PaintText(gfx::Canvas* canvas,
- const base::string16& text,
- const gfx::Rect& text_bounds,
- int flags);
-
- virtual gfx::Size GetTextSize() const;
-
- SkColor disabled_color() const { return actual_disabled_color_; }
-
- // Overridden from View:
- // Overridden to dirty our text bounds if we're multi-line.
- virtual void OnBoundsChanged(const gfx::Rect& previous_bounds) OVERRIDE;
- virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
- virtual void OnNativeThemeChanged(const ui::NativeTheme* theme) OVERRIDE;
-
- private:
- // These tests call CalculateDrawStringParams in order to verify the
- // calculations done for drawing text.
- FRIEND_TEST_ALL_PREFIXES(LabelTest, DrawSingleLineString);
- FRIEND_TEST_ALL_PREFIXES(LabelTest, DrawMultiLineString);
- FRIEND_TEST_ALL_PREFIXES(LabelTest, DrawSingleLineStringInRTL);
- FRIEND_TEST_ALL_PREFIXES(LabelTest, DrawMultiLineStringInRTL);
- FRIEND_TEST_ALL_PREFIXES(LabelTest, AutoDetectDirectionality);
-
- // Calls ComputeDrawStringFlags().
- FRIEND_TEST_ALL_PREFIXES(LabelTest, DisableSubpixelRendering);
-
- // Sets both |text_| and |layout_text_| to appropriate values, taking
- // the label's 'obscured' status into account.
- void SetTextInternal(const base::string16& text);
-
- void Init(const base::string16& text, const gfx::FontList& font_list);
-
- void RecalculateColors();
-
- // Returns where the text is drawn, in the receivers coordinate system.
- gfx::Rect GetTextBounds() const;
-
- int ComputeDrawStringFlags() const;
-
- gfx::Rect GetAvailableRect() const;
-
- // Returns parameters to be used for the DrawString call.
- void CalculateDrawStringParams(base::string16* paint_text,
- gfx::Rect* text_bounds,
- int* flags) const;
-
- // Updates any colors that have not been explicitly set from the theme.
- void UpdateColorsFromTheme(const ui::NativeTheme* theme);
-
- // Resets |cached_heights_| and |cached_heights_cursor_| and mark
- // |text_size_valid_| as false.
- void ResetCachedSize();
-
- bool ShouldShowDefaultTooltip() const;
-
- base::string16 text_;
- base::string16 layout_text_;
- gfx::FontList font_list_;
- SkColor requested_enabled_color_;
- SkColor actual_enabled_color_;
- SkColor requested_disabled_color_;
- SkColor actual_disabled_color_;
- SkColor background_color_;
-
- // Set to true once the corresponding setter is invoked.
- bool enabled_color_set_;
- bool disabled_color_set_;
- bool background_color_set_;
-
- bool auto_color_readability_;
- mutable gfx::Size text_size_;
- mutable bool text_size_valid_;
- int line_height_;
- bool is_multi_line_;
- bool is_obscured_;
- bool allow_character_break_;
- gfx::ElideBehavior elide_behavior_;
- gfx::HorizontalAlignment horizontal_alignment_;
- base::string16 tooltip_text_;
- // Whether to collapse the label when it's not visible.
- bool collapse_when_hidden_;
- // The following member variable is used to control whether the
- // directionality is auto-detected based on first strong directionality
- // character or is determined by chrome UI's locale.
- DirectionalityMode directionality_mode_;
-
- // Colors for shadow.
- SkColor enabled_shadow_color_;
- SkColor disabled_shadow_color_;
-
- // Space between text and shadow.
- gfx::Point shadow_offset_;
-
- // Should a shadow be drawn behind the text?
- bool has_shadow_;
-
- // Indicates the level of shadow blurring. Default is zero.
- double shadow_blur_;
-
- // The halo color drawn around the text if it is not transparent.
- SkColor halo_color_;
-
- // The cached heights to avoid recalculation in GetHeightForWidth().
- mutable std::vector<gfx::Size> cached_heights_;
- mutable int cached_heights_cursor_;
-
- DISALLOW_COPY_AND_ASSIGN(Label);
-};
-
-} // namespace views
-
-#endif // UI_VIEWS_CONTROLS_LABEL_H_
+// Copyright (c) 2012 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_CONTROLS_LABEL_H_
+#define UI_VIEWS_CONTROLS_LABEL_H_
+
+#include <string>
+#include <vector>
+
+#include "base/compiler_specific.h"
+#include "base/gtest_prod_util.h"
+#include "base/strings/string16.h"
+#include "third_party/skia/include/core/SkColor.h"
+#include "ui/gfx/font_list.h"
+#include "ui/gfx/text_constants.h"
+#include "ui/views/view.h"
+
+namespace views {
+
+// A view subclass that can display a string.
+class VIEWS_EXPORT Label : public View {
+ public:
+ // Internal class name.
+ static const char kViewClassName[];
+
+ // The padding for the focus border when rendering focused text.
+ static const int kFocusBorderPadding;
+
+ Label();
+ explicit Label(const base::string16& text);
+ Label(const base::string16& text, const gfx::FontList& font_list);
+ virtual ~Label();
+
+ // Gets or sets the fonts used by this label.
+ const gfx::FontList& font_list() const { return font_list_; }
+ virtual void SetFontList(const gfx::FontList& font_list);
+
+ // Get or set the label text.
+ const base::string16& text() const { return text_; }
+ virtual void SetText(const base::string16& text);
+
+ // Enables or disables auto-color-readability (enabled by default). If this
+ // is enabled, then calls to set any foreground or background color will
+ // trigger an automatic mapper that uses color_utils::GetReadableColor() to
+ // ensure that the foreground colors are readable over the background color.
+ void SetAutoColorReadabilityEnabled(bool enabled);
+
+ // Sets the color. This will automatically force the color to be readable
+ // over the current background color.
+ virtual void SetEnabledColor(SkColor color);
+ void SetDisabledColor(SkColor color);
+
+ SkColor enabled_color() const { return actual_enabled_color_; }
+
+ // Sets the background color. This won't be explicitly drawn, but the label
+ // will force the text color to be readable over it.
+ void SetBackgroundColor(SkColor color);
+ SkColor background_color() const { return background_color_; }
+
+ // Enables a drop shadow underneath the text.
+ void SetShadowColors(SkColor enabled_color, SkColor disabled_color);
+
+ // Sets the drop shadow's offset from the text.
+ void SetShadowOffset(int x, int y);
+
+ // Sets the shadow blur. Default is zero.
+ void set_shadow_blur(double shadow_blur) { shadow_blur_ = shadow_blur; }
+
+ // Disables shadows.
+ void ClearEmbellishing();
+
+ // Set the color of a halo on the painted text (use transparent for none).
+ void set_halo_color(SkColor halo_color) { halo_color_ = halo_color; }
+
+ // Sets the horizontal alignment; the argument value is mirrored in RTL UI.
+ void SetHorizontalAlignment(gfx::HorizontalAlignment alignment);
+ gfx::HorizontalAlignment GetHorizontalAlignment() const;
+
+ // Sets the directionality mode. The default value is DIRECTIONALITY_FROM_UI,
+ // which should be suitable for most text originating from UI string assets.
+ // Most text originating from web content should use DIRECTIONALITY_FROM_TEXT.
+ void set_directionality_mode(gfx::DirectionalityMode mode) {
+ directionality_mode_ = mode;
+ }
+ gfx::DirectionalityMode directionality_mode() const {
+ return directionality_mode_;
+ }
+
+ // Get or set the distance in pixels between baselines of multi-line text.
+ // Default is 0, indicating the distance between lines should be the standard
+ // one for the label's text, font list, and platform.
+ int line_height() const { return line_height_; }
+ void SetLineHeight(int height);
+
+ // Get or set if the label text can wrap on multiple lines; default is false.
+ bool is_multi_line() const { return is_multi_line_; }
+ void SetMultiLine(bool multi_line);
+
+ // Get or set if the label text should be obscured before rendering (e.g.
+ // should "Password!" display as "*********"); default is false.
+ bool is_obscured() const { return is_obscured_; }
+ void SetObscured(bool obscured);
+
+ // Get the text as displayed to the user, respecting the 'obscured' flag.
+ const base::string16& layout_text() const { return layout_text_; }
+
+ // Sets whether the label text can be split on words.
+ // Default is false. This only works when is_multi_line is true.
+ void SetAllowCharacterBreak(bool allow_character_break);
+
+ // Sets the eliding or fading behavior, applied as necessary. The default is
+ // to elide at the end. Eliding is not well supported for multi-line labels.
+ void SetElideBehavior(gfx::ElideBehavior elide_behavior);
+
+ // Sets the tooltip text. Default behavior for a label (single-line) is to
+ // show the full text if it is wider than its bounds. Calling this overrides
+ // the default behavior and lets you set a custom tooltip. To revert to
+ // default behavior, call this with an empty string.
+ void SetTooltipText(const base::string16& tooltip_text);
+
+ // Resizes the label so its width is set to the width of the longest line and
+ // its height deduced accordingly.
+ // This is only intended for multi-line labels and is useful when the label's
+ // text contains several lines separated with \n.
+ // |max_width| is the maximum width that will be used (longer lines will be
+ // wrapped). If 0, no maximum width is enforced.
+ void SizeToFit(int max_width);
+
+ // Gets/sets the flag to determine whether the label should be collapsed when
+ // it's hidden (not visible). If this flag is true, the label will return a
+ // preferred size of (0, 0) when it's not visible.
+ void set_collapse_when_hidden(bool value) { collapse_when_hidden_ = value; }
+ bool collapse_when_hidden() const { return collapse_when_hidden_; }
+
+ // View:
+ virtual gfx::Insets GetInsets() const OVERRIDE;
+ virtual int GetBaseline() const OVERRIDE;
+ // Overridden to compute the size required to display this label.
+ virtual gfx::Size GetPreferredSize() const OVERRIDE;
+ // Returns the width of an ellipsis if the label is non-empty, or 0 otherwise.
+ virtual gfx::Size GetMinimumSize() const OVERRIDE;
+ // Returns the height necessary to display this label with the provided width.
+ // This method is used to layout multi-line labels. It is equivalent to
+ // GetPreferredSize().height() if the receiver is not multi-line.
+ virtual int GetHeightForWidth(int w) const OVERRIDE;
+ virtual const char* GetClassName() const OVERRIDE;
+ virtual View* GetTooltipHandlerForPoint(const gfx::Point& point) OVERRIDE;
+ virtual bool CanProcessEventsWithinSubtree() const OVERRIDE;
+ virtual void GetAccessibleState(ui::AXViewState* state) OVERRIDE;
+ // Gets the tooltip text for labels that are wider than their bounds, except
+ // when the label is multiline, in which case it just returns false (no
+ // tooltip). If a custom tooltip has been specified with SetTooltipText()
+ // it is returned instead.
+ virtual bool GetTooltipText(const gfx::Point& p,
+ base::string16* tooltip) const OVERRIDE;
+
+ protected:
+ // Called by Paint to paint the text. Override this to change how
+ // text is painted.
+ virtual void PaintText(gfx::Canvas* canvas,
+ const base::string16& text,
+ const gfx::Rect& text_bounds,
+ int flags);
+
+ virtual gfx::Size GetTextSize() const;
+
+ SkColor disabled_color() const { return actual_disabled_color_; }
+
+ // Overridden from View:
+ // Overridden to dirty our text bounds if we're multi-line.
+ virtual void OnBoundsChanged(const gfx::Rect& previous_bounds) OVERRIDE;
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
+ virtual void OnNativeThemeChanged(const ui::NativeTheme* theme) OVERRIDE;
+
+ private:
+ // These tests call CalculateDrawStringParams in order to verify the
+ // calculations done for drawing text.
+ FRIEND_TEST_ALL_PREFIXES(LabelTest, DrawSingleLineString);
+ FRIEND_TEST_ALL_PREFIXES(LabelTest, DrawMultiLineString);
+ FRIEND_TEST_ALL_PREFIXES(LabelTest, DrawSingleLineStringInRTL);
+ FRIEND_TEST_ALL_PREFIXES(LabelTest, DrawMultiLineStringInRTL);
+ FRIEND_TEST_ALL_PREFIXES(LabelTest, DirectionalityFromText);
+ FRIEND_TEST_ALL_PREFIXES(LabelTest, DisableSubpixelRendering);
+
+ // Sets both |text_| and |layout_text_| to appropriate values, taking
+ // the label's 'obscured' status into account.
+ void SetTextInternal(const base::string16& text);
+
+ void Init(const base::string16& text, const gfx::FontList& font_list);
+
+ void RecalculateColors();
+
+ // Returns where the text is drawn, in the receivers coordinate system.
+ gfx::Rect GetTextBounds() const;
+
+ int ComputeDrawStringFlags() const;
+
+ gfx::Rect GetAvailableRect() const;
+
+ // Returns parameters to be used for the DrawString call.
+ void CalculateDrawStringParams(base::string16* paint_text,
+ gfx::Rect* text_bounds,
+ int* flags) const;
+
+ // Updates any colors that have not been explicitly set from the theme.
+ void UpdateColorsFromTheme(const ui::NativeTheme* theme);
+
+ // Resets |cached_heights_| and |cached_heights_cursor_| and mark
+ // |text_size_valid_| as false.
+ void ResetCachedSize();
+
+ bool ShouldShowDefaultTooltip() const;
+
+ base::string16 text_;
+ base::string16 layout_text_;
+ gfx::FontList font_list_;
+ SkColor requested_enabled_color_;
+ SkColor actual_enabled_color_;
+ SkColor requested_disabled_color_;
+ SkColor actual_disabled_color_;
+ SkColor background_color_;
+
+ // Set to true once the corresponding setter is invoked.
+ bool enabled_color_set_;
+ bool disabled_color_set_;
+ bool background_color_set_;
+
+ bool auto_color_readability_;
+ mutable gfx::Size text_size_;
+ mutable bool text_size_valid_;
+ int line_height_;
+ bool is_multi_line_;
+ bool is_obscured_;
+ bool allow_character_break_;
+ gfx::ElideBehavior elide_behavior_;
+ gfx::HorizontalAlignment horizontal_alignment_;
+ base::string16 tooltip_text_;
+ // Whether to collapse the label when it's not visible.
+ bool collapse_when_hidden_;
+ // Controls whether the directionality is auto-detected based on first strong
+ // directionality character or is determined by the application UI's locale.
+ gfx::DirectionalityMode directionality_mode_;
+
+ // Colors for shadow.
+ SkColor enabled_shadow_color_;
+ SkColor disabled_shadow_color_;
+
+ // Space between text and shadow.
+ gfx::Point shadow_offset_;
+
+ // Should a shadow be drawn behind the text?
+ bool has_shadow_;
+
+ // Indicates the level of shadow blurring. Default is zero.
+ double shadow_blur_;
+
+ // The halo color drawn around the text if it is not transparent.
+ SkColor halo_color_;
+
+ // The cached heights to avoid recalculation in GetHeightForWidth().
+ mutable std::vector<gfx::Size> cached_heights_;
+ mutable int cached_heights_cursor_;
+
+ DISALLOW_COPY_AND_ASSIGN(Label);
+};
+
+} // namespace views
+
+#endif // UI_VIEWS_CONTROLS_LABEL_H_
« no previous file with comments | « ui/views/controls/button/label_button.cc ('k') | ui/views/controls/label.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698