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

Side by Side Diff: ui/uilib/node_state.cc

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 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/uilib/node_state.h ('k') | ui/uilib/static_ex.h » ('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 2006-2009 Google Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 // ========================================================================
15
16 //
17
18 #include "omaha/ui/uilib/node_state.h"
19
20 // Add a list item tag
21 NodeState::Tags NodeState::tags_[] = {
22 // name_to_match length_name_to_match action no_parameters;
23 { _T("<b>"), static_cast<int>(_tcslen(_T("<b>"))), BOLD_ON, true }, // NOLINT
24 { _T("</b>"), static_cast<int>(_tcslen(_T("</b>"))), BOLD_OFF, true }, // NOLINT
25 { _T("<i>"), static_cast<int>(_tcslen(_T("<i>"))), ITALIC_ON, true }, // NOLINT
26 { _T("</i>"), static_cast<int>(_tcslen(_T("</i>"))), ITALIC_OFF, true }, // NOLINT
27 { _T("<u>"), static_cast<int>(_tcslen(_T("<u>"))), UNDERLINE_ON, true }, // NOLINT
28 { _T("</u>"), static_cast<int>(_tcslen(_T("</u>"))), UNDERLINE_OFF, true }, // NOLINT
29 { _T("<color="), static_cast<int>(_tcslen(_T("<color="))), TEXTCOLOR_ON, false }, // NOLINT
30 { _T("</color>"), static_cast<int>(_tcslen(_T("</color>"))), TEXTCOLOR_OFF, true }, // NOLINT
31 { _T("<size="), static_cast<int>(_tcslen(_T("<size="))), TEXTSIZE_ON, false }, // NOLINT
32 { _T("</size>"), static_cast<int>(_tcslen(_T("</size>"))), TEXTSIZE_OFF, true }, // NOLINT
33 { _T("<a="), static_cast<int>(_tcslen(_T("<a="))), URL_ON, false }, // NOLINT
34 { _T("</a>"), static_cast<int>(_tcslen(_T("</a>"))), URL_OFF, true }, // NOLINT
35 };
36
37 NodeState::NodeState(HWND window)
38 : default_font_(NULL),
39 font_(NULL),
40 bold_(false),
41 italic_(false),
42 underline_(false),
43 text_color_(0),
44 text_size_(8),
45 owner_window_(window) {
46 }
47
48 NodeState::~NodeState() {
49 }
50
51
52 void NodeState::SetStdFont(HFONT font) {
53 default_font_ = font;
54 }
55
56
57 HFONT NodeState::GetFont() const {
58 if (IsDefaultFont())
59 return default_font_;
60
61 if (font_)
62 return font_;
63
64 if (default_font_) {
65 HDC dc = GetDC(owner_window_);
66
67 LOGFONT log_font;
68 GetObject(default_font_, sizeof(LOGFONT), &log_font);
69 log_font.lfWeight = bold_ ? FW_BOLD : FW_NORMAL;
70 log_font.lfItalic = italic_;
71 log_font.lfUnderline = underline_;
72 log_font.lfHeight =
73 -MulDiv(text_size_, GetDeviceCaps(dc, LOGPIXELSY), 72);
74 font_ = CreateFontIndirect(&log_font);
75 }
76
77 return font_;
78 }
79
80
81 bool NodeState::IsDefaultFont() const {
82 if (bold_ || italic_ || underline_)
83 return false;
84
85 if (text_size_ != 8)
86 return false;
87
88 return true;
89 }
90
91
92 int NodeState::ConsumeTag(const TCHAR* string) {
93 int size = sizeof(tags_) / sizeof(tags_[0]);
94 for (int i = 0; i < size; i++) {
95 if (_tcsnicmp(string, tags_[i].name_to_match,
96 tags_[i].length_name_to_match) == 0) {
97 if (tags_[i].no_parameters) {
98 ApplyAction(tags_[i].action, NULL);
99 return tags_[i].length_name_to_match;
100 } else {
101 return tags_[i].length_name_to_match +
102 ApplyAction(tags_[i].action, string +
103 tags_[i].length_name_to_match) + 1;
104 }
105 }
106 }
107
108 return 0;
109 }
110
111
112 int NodeState::ApplyAction(Actions action, const TCHAR* string/*=NULL*/) {
113 int read = 0;
114 switch (action) {
115 case BOLD_ON :
116 bold_ = true;
117 break;
118
119 case BOLD_OFF :
120 bold_ = false;
121 break;
122
123 case ITALIC_ON :
124 italic_ = true;
125 break;
126
127 case ITALIC_OFF :
128 italic_ = false;
129 break;
130
131 case UNDERLINE_ON :
132 underline_ = true;
133 break;
134
135 case UNDERLINE_OFF :
136 underline_ = false;
137 break;
138
139 case TEXTCOLOR_ON :
140 ATLASSERT(string);
141 if (string) {
142 int nParam = 0;
143 read = ReadColorRef(string, &nParam);
144 text_color_ = nParam;
145 }
146 break;
147
148 case TEXTCOLOR_OFF :
149 text_color_ = 0;
150 break;
151
152 case TEXTSIZE_ON :
153 ATLASSERT(string);
154 if (string)
155 read = ReadNumParameter(string, &text_size_);
156 break;
157
158 case TEXTSIZE_OFF :
159 text_size_ = 8;
160 break;
161
162 case URL_ON :
163 underline_ = true;
164 text_color_ = RGB(0, 0, 0xff);
165 ATLASSERT(string);
166 if (string)
167 read = ReadString(string, &url_);
168 break;
169
170 case URL_OFF :
171 underline_ = false;
172 text_color_ = 0;
173 url_ = _T("");
174 break;
175
176 case UNKNOWN:
177 // fall thru
178
179 default:
180 ATLASSERT(false);
181 }
182 return read;
183 }
184
185 int NodeState::ReadNumParameter(const TCHAR* string, int* param) {
186 if (!param)
187 return 0;
188
189 *param = 0;
190 const TCHAR* current_pos = string;
191 while (current_pos && _istdigit(*current_pos)) {
192 *param *= 10;
193 *param += *current_pos - _T('0');
194 current_pos++;
195 }
196 return static_cast<int>(current_pos - string);
197 }
198
199 int NodeState::ReadHexParameter(const TCHAR* string, int* param) {
200 if (!param)
201 return 0;
202
203 *param = 0;
204 const TCHAR* current_pos = string;
205 while (current_pos && _istxdigit(*current_pos)) {
206 *param = ((*param) << 4);
207 if (_istdigit(*current_pos))
208 *param += *current_pos - _T('0');
209 else
210 *param += (*current_pos | 0x20) - _T('a') + 10;
211 current_pos++;
212 }
213 return static_cast<int>(current_pos - string);
214 }
215
216 int NodeState::ReadColorRef(const TCHAR* string, int* param) {
217 if (!param)
218 return 0;
219
220 int read = ReadHexParameter(string, param);
221 *param = RGB((*param) >> 16, ((*param) >> 8) & 0xff, (*param) & 0xff);
222 return read;
223 }
224
225 int NodeState::ReadString(const TCHAR* string, CString* string_out) {
226 if (!string_out)
227 return 0;
228
229 int length = 0;
230 int position = _tcscspn(string, _T(" >"));
231 if (position >= 0) {
232 *string_out = CString(string, position);
233 length = position;
234 }
235
236 return length;
237 }
OLDNEW
« no previous file with comments | « ui/uilib/node_state.h ('k') | ui/uilib/static_ex.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698