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

Side by Side Diff: ui/views/style/typography.h

Issue 2734113006: "Bootstrap" a toolkit-views Typography spec. (Closed)
Patch Set: ExtendableEnum Created 3 years, 9 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 unified diff | Download patch
« no previous file with comments | « ui/views/controls/textfield/textfield.cc ('k') | ui/views/style/typography.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef UI_VIEWS_STYLE_TYPOGRAPHY_H_
6 #define UI_VIEWS_STYLE_TYPOGRAPHY_H_
7
8 #include <memory>
9
10 #include "base/macros.h"
11 #include "third_party/skia/include/core/SkColor.h"
12 #include "ui/views/views_export.h"
13
14 namespace gfx {
15 class FontList;
16 }
17
18 namespace views {
19
20 template <class ENUM>
21 class ExtendableEnum {
22 public:
23 class Value;
24 explicit constexpr ExtendableEnum(int value) : value_(value) {}
25 constexpr int value() const { return value_; }
26
27 private:
28 int value_;
29 };
30
31 template <class ENUM>
32 class ExtendableEnum<ENUM>::Value : public ExtendableEnum<ENUM> {
33 public:
34 // Allows use in switch statements.
35 constexpr operator int() const { return this->value(); }
36
37 // Allow implicit initialization from an integer literal.
38 constexpr Value(int const_value) : ExtendableEnum<ENUM>(const_value) {}
39 };
40
41 // Where a piece of text appears in the UI. This influences size and weight, but
42 // typically not style or color.
43 class VIEWS_EXPORT TextContext : public ExtendableEnum<TextContext> {
tapted 2017/03/15 00:30:05 Still working on the rest, but I came up with this
Peter Kasting 2017/03/15 06:38:48 Hmm. My take on this is that overall this feels m
tapted 2017/03/15 08:26:25 The problem I see is that TextContext and TextStyl
Peter Kasting 2017/03/15 10:01:48 Hmm. The confusion between those two is a fair th
tapted 2017/03/15 11:04:07 I think if we split the class like that we never b
tapted 2017/03/15 22:43:35 I dreamed up a way that would let us have an enum
Peter Kasting 2017/03/16 00:17:47 Yeah, that'd work. Heck, make it a bitfield and j
44 public:
45 // Headline text. Usually 20pt. Never multi-line.
46 static constexpr const Value HEADLINE = 1;
47
48 // A title for a dialog window. Usually 15pt. Multi-line OK.
49 static constexpr const Value DIALOG_TITLE = 2;
50
51 // "Body 1". Usually 13pt.
52 static constexpr const Value DIALOG_MESSAGE = 3;
53
54 // "Body 2". Usually 12pt.
55 static constexpr const Value CONTROL_LABEL = 4;
56
57 // A text field. Usually matches CONTROL_LABEL.
58 static constexpr const Value FIELD = 5;
59
60 // Text that appears on a button control. Usually 12pt.
61 static constexpr const Value BUTTON_TEXT = 6;
62
63 // Allow implicit conversion from the constants above.
64 constexpr TextContext(const Value& value) : ExtendableEnum(value.value()) {}
65
66 // Allow declaration without assignment.
67 constexpr TextContext() : ExtendableEnum(0) {}
68
69 protected:
70 enum { VIEWS_MAX = 20 };
71 };
72
73 // How a piece of text should be presented. This influences color and style, but
74 // typically not size.
75 enum class TextStyle {
76 // Primary text: solid black, normal weight. Converts to DISABLED in some
77 // contexts (e.g. BUTTON_TEXT, FIELD).
78 PRIMARY,
79
80 // Secondary text: may be lighter.
81 SECONDARY,
82
83 // "Hint" text, usually a line that gives context to something more important.
84 HINT,
85
86 DISABLED, // Disabled "greyed out" text.
87 RED, // A solid shade of red.
88 GREEN, // A solid shade of green.
89 LINK, // A solid shade of blue.
90
91 // Legacy styles start here.
92
93 ACTIVE_TAB, // Active tab in a tabbed pane.
94 INACTIVE_TAB, // Inactive tab in a tabbed pane.
95 HOVERED_TAB, // Hovered tab in a tabbed pane.
96 WEB_DOMAIN, // Used to draw attention to a web domain.
97 EXTENSION_NAME, // Used to draw attention to an extension name.
98 };
99
100 // Provides fonts to use in toolkit-views UI.
101 class VIEWS_EXPORT TypographyProvider {
102 public:
103 // Gets the FontList for the given |context| and |style|.
104 virtual const gfx::FontList& GetFont(TextContext context,
105 TextStyle style) = 0;
106
107 // Gets the color for the given |context| and |style|. This may consult
108 // ui::NativeTheme.
109 virtual SkColor GetColor(TextContext context, TextStyle style) = 0;
110
111 // Gets the line spacing, or 0 if it should be provided by gfx::FontList.
112 virtual int GetLineSpacing(TextContext context, TextStyle style) = 0;
113
114 virtual ~TypographyProvider() {}
115
116 protected:
117 TypographyProvider() {}
118
119 private:
120 DISALLOW_COPY_AND_ASSIGN(TypographyProvider);
121 };
122
123 // Helper class to query (or change) the current TypographyProvider.
124 class VIEWS_EXPORT Typography {
125 public:
126 static void SetProvider(std::unique_ptr<TypographyProvider> provider);
127
128 static const gfx::FontList& GetFont(TextContext context, TextStyle style);
129 static SkColor GetColor(TextContext context, TextStyle style);
130 static int GetLineSpacing(TextContext context, TextStyle style);
131
132 private:
133 DISALLOW_IMPLICIT_CONSTRUCTORS(Typography);
134 };
135
136 } // namespace views
137
138 #endif // UI_VIEWS_STYLE_TYPOGRAPHY_PROVIDER_H_
OLDNEW
« no previous file with comments | « ui/views/controls/textfield/textfield.cc ('k') | ui/views/style/typography.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698