| // Copyright 2013 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_MESSAGE_CENTER_BOUNDED_LABEL_H_ |
| #define UI_MESSAGE_CENTER_BOUNDED_LABEL_H_ |
| |
| #include <list> |
| #include <map> |
| #include <memory> |
| |
| #include "base/macros.h" |
| #include "third_party/skia/include/core/SkColor.h" |
| #include "ui/message_center/message_center_export.h" |
| #include "ui/views/view.h" |
| |
| namespace gfx { |
| class FontList; |
| } |
| |
| namespace message_center { |
| |
| class InnerBoundedLabel; |
| |
| namespace test { |
| class BoundedLabelTest; |
| } |
| |
| // BoundedLabels display left aligned text up to a maximum number of lines, with |
| // ellipsis at the end of the last line for any omitted text. BoundedLabel is a |
| // direct subclass of views::Views rather than a subclass of views::Label |
| // to avoid exposing some of views::Label's methods that can't be made to work |
| // with BoundedLabel. See the description of InnerBoundedLabel in the |
| // bounded_label.cc file for details. |
| class MESSAGE_CENTER_EXPORT BoundedLabel : public views::View { |
| public: |
| BoundedLabel(const base::string16& text, const gfx::FontList& font_list); |
| BoundedLabel(const base::string16& text); |
| ~BoundedLabel() override; |
| |
| void SetColors(SkColor textColor, SkColor backgroundColor); |
| void SetLineHeight(int height); // Pass in 0 for default height. |
| void SetLineLimit(int lines); // Pass in -1 for no limit. |
| void SetText(const base::string16& text); // Additionally clears caches. |
| |
| int GetLineHeight() const; |
| int GetLineLimit() const; |
| |
| // Pass in a -1 width to use the preferred width, a -1 limit to skip limits. |
| int GetLinesForWidthAndLimit(int width, int limit); |
| gfx::Size GetSizeForWidthAndLines(int width, int lines); |
| |
| // views::View: |
| int GetBaseline() const override; |
| gfx::Size GetPreferredSize() const override; |
| int GetHeightForWidth(int width) const override; |
| void OnPaint(gfx::Canvas* canvas) override; |
| bool CanProcessEventsWithinSubtree() const override; |
| void GetAccessibleNodeData(ui::AXNodeData* node_data) override; |
| |
| protected: |
| // Overridden from views::View. |
| void OnBoundsChanged(const gfx::Rect& previous_bounds) override; |
| void OnNativeThemeChanged(const ui::NativeTheme* theme) override; |
| |
| private: |
| friend class test::BoundedLabelTest; |
| |
| base::string16 GetWrappedTextForTest(int width, int lines); |
| |
| std::unique_ptr<InnerBoundedLabel> label_; |
| int line_limit_; |
| |
| DISALLOW_COPY_AND_ASSIGN(BoundedLabel); |
| }; |
| |
| } // namespace message_center |
| |
| #endif // UI_MESSAGE_CENTER_BOUNDED_LABEL_H_ |