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

Side by Side Diff: xfa/src/fwl/theme/scrollbartp.cpp

Issue 1803723002: Move xfa/src up to xfa/. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Rebase to master Created 4 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 | « xfa/src/fwl/theme/pushbuttontp.cpp ('k') | xfa/src/fwl/theme/widgettp.cpp » ('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 2014 PDFium 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 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #include "xfa/include/fwl/theme/scrollbartp.h"
8
9 #include "xfa/include/fwl/basewidget/fwl_scrollbar.h"
10 #include "xfa/include/fwl/core/fwl_widget.h"
11
12 #define FWL_SCROLL_PawLen 12.5f
13
14 CFWL_ScrollBarTP::CFWL_ScrollBarTP() {
15 m_pThemeData = new SBThemeData;
16 SetThemeData(0);
17 }
18 CFWL_ScrollBarTP::~CFWL_ScrollBarTP() {
19 if (m_pThemeData) {
20 delete m_pThemeData;
21 m_pThemeData = NULL;
22 }
23 }
24 FX_BOOL CFWL_ScrollBarTP::IsValidWidget(IFWL_Widget* pWidget) {
25 if (!pWidget)
26 return FALSE;
27 return pWidget->GetClassID() == FWL_CLASSHASH_ScrollBar;
28 }
29 void* CFWL_ScrollBarTP::GetCapacity(CFWL_ThemePart* pThemePart,
30 FX_DWORD dwCapacity) {
31 if (dwCapacity == FWL_CAPACITY_SCB_Size) {
32 m_fValue = 5;
33 return &m_fValue;
34 }
35 return CFWL_WidgetTP::GetCapacity(pThemePart, dwCapacity);
36 }
37 FX_DWORD CFWL_ScrollBarTP::SetThemeID(IFWL_Widget* pWidget,
38 FX_DWORD dwThemeID,
39 FX_BOOL bChildren) {
40 if (m_pThemeData) {
41 SetThemeData(FWL_GetThemeColor(dwThemeID));
42 }
43 return CFWL_WidgetTP::SetThemeID(pWidget, dwThemeID, bChildren);
44 }
45 FX_BOOL CFWL_ScrollBarTP::DrawBackground(CFWL_ThemeBackground* pParams) {
46 if (!pParams)
47 return FALSE;
48 IFWL_Widget* pWidget = pParams->m_pWidget;
49 FWLTHEME_STATE eState = FWLTHEME_STATE_Normal;
50 switch (pParams->m_dwStates & 0x03) {
51 case FWL_PARTSTATE_SCB_Hovered: {
52 eState = FWLTHEME_STATE_Hover;
53 break;
54 }
55 case FWL_PARTSTATE_SCB_Pressed: {
56 eState = FWLTHEME_STATE_Pressed;
57 break;
58 }
59 case FWL_PARTSTATE_SCB_Disabled: {
60 eState = FWLTHEME_STATE_Disabale;
61 break;
62 }
63 }
64 CFX_Graphics* pGraphics = pParams->m_pGraphics;
65 CFX_RectF* pRect = &pParams->m_rtPart;
66 FX_BOOL bVert = pWidget->GetStylesEx();
67 switch (pParams->m_iPart) {
68 case FWL_PART_SCB_ForeArrow: {
69 DrawMaxMinBtn(pGraphics, pRect,
70 bVert ? FWLTHEME_DIRECTION_Up : FWLTHEME_DIRECTION_Left,
71 eState, &pParams->m_matrix);
72 break;
73 }
74 case FWL_PART_SCB_BackArrow: {
75 DrawMaxMinBtn(pGraphics, pRect,
76 bVert ? FWLTHEME_DIRECTION_Down : FWLTHEME_DIRECTION_Right,
77 eState, &pParams->m_matrix);
78 break;
79 }
80 case FWL_PART_SCB_Thumb: {
81 DrawThumbBtn(pGraphics, pRect, bVert, eState, TRUE, &pParams->m_matrix);
82 break;
83 }
84 case FWL_PART_SCB_LowerTrack: {
85 DrawTrack(pGraphics, pRect, bVert, eState, TRUE, &pParams->m_matrix);
86 break;
87 }
88 case FWL_PART_SCB_UpperTrack: {
89 DrawTrack(pGraphics, pRect, bVert, eState, FALSE, &pParams->m_matrix);
90 break;
91 }
92 default: {}
93 }
94 return TRUE;
95 }
96 #ifdef THEME_XPSimilar
97 void CFWL_ScrollBarTP::DrawThumbBtn(CFX_Graphics* pGraphics,
98 const CFX_RectF* pRect,
99 FX_BOOL bVert,
100 FWLTHEME_STATE eState,
101 FX_BOOL bPawButton,
102 CFX_Matrix* pMatrix) {
103 if (eState < FWLTHEME_STATE_Normal || eState > FWLTHEME_STATE_Disabale) {
104 return;
105 }
106 CFX_Path path;
107 path.Create();
108 CFX_RectF rect(*pRect);
109 if (bVert) {
110 rect.Deflate(1, 0);
111 if (rect.IsEmpty(0.1f)) {
112 return;
113 }
114 path.AddRectangle(rect.left, rect.top, rect.width, rect.height);
115 DrawAxialShading(pGraphics, rect.left, rect.top, rect.right(), rect.top,
116 m_pThemeData->clrBtnBK[eState - 1][0],
117 m_pThemeData->clrBtnBK[eState - 1][1], &path,
118 FXFILL_WINDING, pMatrix);
119 CFX_Color rcStroke;
120 rcStroke.Set(m_pThemeData->clrBtnBorder[eState - 1]);
121 pGraphics->SaveGraphState();
122 pGraphics->SetStrokeColor(&rcStroke);
123 pGraphics->StrokePath(&path, pMatrix);
124 pGraphics->RestoreGraphState();
125 } else {
126 rect.Deflate(0, 1);
127 if (rect.IsEmpty(0.1f)) {
128 return;
129 }
130 path.AddRectangle(rect.left, rect.top, rect.width, rect.height);
131 DrawAxialShading(pGraphics, rect.left, rect.top, rect.left, rect.bottom(),
132 m_pThemeData->clrBtnBK[eState - 1][0],
133 m_pThemeData->clrBtnBK[eState - 1][1], &path,
134 FXFILL_WINDING, pMatrix);
135 CFX_Color rcStroke;
136 rcStroke.Set(m_pThemeData->clrBtnBorder[eState - 1]);
137 pGraphics->SaveGraphState();
138 pGraphics->SetStrokeColor(&rcStroke);
139 pGraphics->StrokePath(&path, pMatrix);
140 pGraphics->RestoreGraphState();
141 }
142 }
143 void CFWL_ScrollBarTP::DrawPaw(CFX_Graphics* pGraphics,
144 const CFX_RectF* pRect,
145 FX_BOOL bVert,
146 FWLTHEME_STATE eState,
147 CFX_Matrix* pMatrix) {
148 CFX_Path path;
149 path.Create();
150 if (bVert) {
151 FX_FLOAT fPawLen = FWL_SCROLL_PawLen;
152 if (pRect->width / 2 <= fPawLen) {
153 fPawLen = (pRect->width - 6) / 2;
154 }
155 FX_FLOAT fX = pRect->left + pRect->width / 4;
156 FX_FLOAT fY = pRect->top + pRect->height / 2;
157 path.MoveTo(fX, fY - 4);
158 path.LineTo(fX + fPawLen, fY - 4);
159 path.MoveTo(fX, fY - 2);
160 path.LineTo(fX + fPawLen, fY - 2);
161 path.MoveTo(fX, fY);
162 path.LineTo(fX + fPawLen, fY);
163 path.MoveTo(fX, fY + 2);
164 path.LineTo(fX + fPawLen, fY + 2);
165 CFX_Color clrLight(m_pThemeData->clrPawColorLight[eState - 1]);
166 pGraphics->SetLineWidth(1);
167 pGraphics->SetStrokeColor(&clrLight);
168 pGraphics->StrokePath(&path);
169 fX++;
170 path.Clear();
171 path.MoveTo(fX, fY - 3);
172 path.LineTo(fX + fPawLen, fY - 3);
173 path.MoveTo(fX, fY - 1);
174 path.LineTo(fX + fPawLen, fY - 1);
175 path.MoveTo(fX, fY + 1);
176 path.LineTo(fX + fPawLen, fY + 1);
177 path.MoveTo(fX, fY + 3);
178 path.LineTo(fX + fPawLen, fY + 3);
179 CFX_Color clrDark(m_pThemeData->clrPawColorDark[eState - 1]);
180 pGraphics->SetLineWidth(1);
181 pGraphics->SetStrokeColor(&clrDark);
182 pGraphics->StrokePath(&path, pMatrix);
183 } else {
184 FX_FLOAT fPawLen = FWL_SCROLL_PawLen;
185 if (pRect->height / 2 <= fPawLen) {
186 fPawLen = (pRect->height - 6) / 2;
187 }
188 FX_FLOAT fX = pRect->left + pRect->width / 2;
189 FX_FLOAT fY = pRect->top + pRect->height / 4;
190 path.MoveTo(fX - 4, fY);
191 path.LineTo(fX - 4, fY + fPawLen);
192 path.MoveTo(fX - 2, fY);
193 path.LineTo(fX - 2, fY + fPawLen);
194 path.MoveTo(fX, fY);
195 path.LineTo(fX, fY + fPawLen);
196 path.MoveTo(fX + 2, fY);
197 path.LineTo(fX + 2, fY + fPawLen);
198 CFX_Color clrLight(m_pThemeData->clrPawColorLight[eState - 1]);
199 pGraphics->SetLineWidth(1);
200 pGraphics->SetStrokeColor(&clrLight);
201 pGraphics->StrokePath(&path, pMatrix);
202 fY++;
203 path.Clear();
204 path.MoveTo(fX - 3, fY);
205 path.LineTo(fX - 3, fY + fPawLen);
206 path.MoveTo(fX - 1, fY);
207 path.LineTo(fX - 1, fY + fPawLen);
208 path.MoveTo(fX + 1, fY);
209 path.LineTo(fX + 1, fY + fPawLen);
210 path.MoveTo(fX + 3, fY);
211 path.LineTo(fX + 3, fY + fPawLen);
212 CFX_Color clrDark(m_pThemeData->clrPawColorDark[eState - 1]);
213 pGraphics->SetLineWidth(1);
214 pGraphics->SetStrokeColor(&clrDark);
215 pGraphics->StrokePath(&path, pMatrix);
216 }
217 }
218 void CFWL_ScrollBarTP::DrawTrack(CFX_Graphics* pGraphics,
219 const CFX_RectF* pRect,
220 FX_BOOL bVert,
221 FWLTHEME_STATE eState,
222 FX_BOOL bLowerTrack,
223 CFX_Matrix* pMatrix) {
224 if (eState < FWLTHEME_STATE_Normal || eState > FWLTHEME_STATE_Disabale) {
225 return;
226 }
227 pGraphics->SaveGraphState();
228 CFX_Color colorLine(ArgbEncode(255, 238, 237, 229));
229 CFX_Path path;
230 path.Create();
231 FX_FLOAT fRight = pRect->right();
232 FX_FLOAT fBottom = pRect->bottom();
233 if (bVert) {
234 path.AddRectangle(pRect->left, pRect->top, 1, pRect->height);
235 path.AddRectangle(fRight - 1, pRect->top, 1, pRect->height);
236 } else {
237 path.AddRectangle(pRect->left, pRect->top, pRect->width, 1);
238 path.AddRectangle(pRect->left, fBottom - 1, pRect->width, 1);
239 }
240 pGraphics->SetFillColor(&colorLine);
241 pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix);
242 path.Clear();
243 path.AddRectangle(pRect->left + 1, pRect->top, pRect->width - 2,
244 pRect->height);
245 FX_FLOAT x1 = bVert ? pRect->left + 1 : pRect->left;
246 FX_FLOAT y1 = bVert ? pRect->top : pRect->top + 1;
247 FX_FLOAT x2 = bVert ? fRight - 1 : pRect->left;
248 FX_FLOAT y2 = bVert ? pRect->top : fBottom - 1;
249 pGraphics->RestoreGraphState();
250 DrawAxialShading(pGraphics, x1, y1, x2, y2, m_pThemeData->clrTrackBKStart,
251 m_pThemeData->clrTrackBKEnd, &path, FXFILL_WINDING, pMatrix);
252 }
253 void CFWL_ScrollBarTP::DrawMaxMinBtn(CFX_Graphics* pGraphics,
254 const CFX_RectF* pRect,
255 FWLTHEME_DIRECTION eDict,
256 FWLTHEME_STATE eState,
257 CFX_Matrix* pMatrix) {
258 DrawTrack(pGraphics, pRect,
259 eDict == FWLTHEME_DIRECTION_Up || eDict == FWLTHEME_DIRECTION_Down,
260 eState, TRUE, pMatrix);
261 CFX_RectF rtArrowBtn(*pRect);
262 rtArrowBtn.Deflate(1, 1, 1, 1);
263 DrawArrowBtn(pGraphics, &rtArrowBtn, eDict, eState, pMatrix);
264 }
265 #else
266 void CFWL_ScrollBarTP::DrawThumbBtn(CFX_Graphics* pGraphics,
267 const CFX_RectF* pRect,
268 FX_BOOL bVert,
269 FWLTHEME_STATE eState,
270 FX_BOOL bPawButton,
271 CFX_Matrix* pMatrix) {
272 if (pRect->IsEmpty()) {
273 return;
274 }
275 CFX_RectF rtThumb(*pRect);
276 FX_FLOAT fWidth = 2;
277 Draw3DRect(pGraphics, FWLTHEME_EDGE_Raised, fWidth, pRect,
278 FWLTHEME_COLOR_EDGELT1, FWLTHEME_COLOR_EDGELT2,
279 FWLTHEME_COLOR_EDGERB1, FWLTHEME_COLOR_EDGERB2, pMatrix);
280 CFX_Path path;
281 path.Create();
282 path.AddRectangle(pRect->left + fWidth, pRect->top + fWidth,
283 pRect->width - 2 * fWidth, pRect->height - 2 * fWidth);
284 pGraphics->SaveGraphState();
285 CFX_Color crFill(FWLTHEME_COLOR_Background);
286 pGraphics->SetFillColor(&crFill);
287 pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix);
288 pGraphics->RestoreGraphState();
289 }
290 void CFWL_ScrollBarTP::DrawTrack(CFX_Graphics* pGraphics,
291 const CFX_RectF* pRect,
292 FX_BOOL bVert,
293 FWLTHEME_STATE eState,
294 FX_BOOL bLowerTrack,
295 CFX_Matrix* pMatrix) {
296 if (pRect->IsEmpty()) {
297 return;
298 }
299 CFX_Path path;
300 path.Create();
301 path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height);
302 pGraphics->SaveGraphState();
303 CFX_Color clrFill(0xFFF0F0F0);
304 pGraphics->SetFillColor(&clrFill);
305 pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix);
306 pGraphics->RestoreGraphState();
307 }
308 void CFWL_ScrollBarTP::DrawMaxMinBtn(CFX_Graphics* pGraphics,
309 const CFX_RectF* pRect,
310 FWLTHEME_DIRECTION eDict,
311 FWLTHEME_STATE eState,
312 CFX_Matrix* pMatrix) {
313 CFX_RectF rtThumb(*pRect);
314 FX_FLOAT fWidth = eState == FWLTHEME_STATE_Pressed ? 1.0f : 2.0f;
315 FWLTHEME_EDGE eType = eState == FWLTHEME_STATE_Pressed ? FWLTHEME_EDGE_Flat
316 : FWLTHEME_EDGE_Raised;
317 Draw3DRect(pGraphics, eType, fWidth, pRect, FWLTHEME_COLOR_EDGELT1,
318 FWLTHEME_COLOR_EDGELT2, FWLTHEME_COLOR_EDGERB1,
319 FWLTHEME_COLOR_EDGERB2, pMatrix);
320 CFX_Path path;
321 path.Create();
322 path.AddRectangle(pRect->left + fWidth, pRect->top + fWidth,
323 pRect->width - 2 * fWidth, pRect->height - 2 * fWidth);
324 pGraphics->SaveGraphState();
325 CFX_Color crFill(FWLTHEME_COLOR_Background);
326 pGraphics->SetFillColor(&crFill);
327 pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix);
328 pGraphics->RestoreGraphState();
329 DrawArrow(pGraphics, pRect, eDict,
330 eState == FWLTHEME_STATE_Disabale ? 0xFFA0A0A0 : 0xFF000000,
331 eState == FWLTHEME_STATE_Pressed, pMatrix);
332 }
333 #endif
334 void CFWL_ScrollBarTP::SetThemeData(FX_DWORD dwID) {
335 m_pThemeData->clrPawColorLight[3] = ArgbEncode(0xff, 208, 223, 172);
336 m_pThemeData->clrPawColorDark[3] = ArgbEncode(0xff, 140, 157, 115);
337 m_pThemeData->clrBtnBK[3][0] = ArgbEncode(0xff, 164, 180, 139);
338 m_pThemeData->clrBtnBK[3][1] = ArgbEncode(0xff, 141, 157, 115);
339 m_pThemeData->clrBtnBorder[3] = ArgbEncode(0xff, 236, 233, 216);
340 if (dwID) {
341 m_pThemeData->clrPawColorLight[0] = ArgbEncode(0xff, 208, 223, 172);
342 m_pThemeData->clrPawColorDark[0] = ArgbEncode(0xff, 140, 157, 115);
343 m_pThemeData->clrBtnBK[0][0] = ArgbEncode(0xff, 162, 179, 141);
344 m_pThemeData->clrBtnBK[0][1] = ArgbEncode(0xff, 149, 167, 117);
345 m_pThemeData->clrBtnBorder[0] = ArgbEncode(0xff, 142, 153, 125);
346 m_pThemeData->clrPawColorLight[1] = ArgbEncode(0xff, 235, 245, 212);
347 m_pThemeData->clrPawColorDark[1] = ArgbEncode(0xff, 182, 198, 142);
348 m_pThemeData->clrBtnBK[1][0] = ArgbEncode(0xff, 200, 213, 170);
349 m_pThemeData->clrBtnBK[1][1] = ArgbEncode(0xff, 195, 208, 150);
350 m_pThemeData->clrBtnBorder[1] = ArgbEncode(0xff, 189, 203, 150);
351 m_pThemeData->clrPawColorLight[2] = ArgbEncode(0xff, 208, 223, 172);
352 m_pThemeData->clrPawColorDark[2] = ArgbEncode(0xff, 140, 157, 115);
353 m_pThemeData->clrBtnBK[2][0] = ArgbEncode(0xff, 164, 180, 139);
354 m_pThemeData->clrBtnBK[2][1] = ArgbEncode(0xff, 141, 157, 115);
355 m_pThemeData->clrBtnBorder[2] = ArgbEncode(0xff, 128, 146, 102);
356 m_pThemeData->clrTrackBKStart = ArgbEncode(0xff, 243, 241, 236);
357 m_pThemeData->clrTrackBKEnd = ArgbEncode(0xff, 254, 254, 251);
358 } else {
359 m_pThemeData->clrPawColorLight[0] = ArgbEncode(0xff, 238, 244, 254);
360 m_pThemeData->clrPawColorDark[0] = ArgbEncode(0xff, 140, 176, 248);
361 m_pThemeData->clrBtnBK[0][0] = ArgbEncode(0xff, 197, 213, 252);
362 m_pThemeData->clrBtnBK[0][1] = ArgbEncode(0xff, 182, 205, 251);
363 m_pThemeData->clrBtnBorder[0] = ArgbEncode(0xff, 148, 176, 221);
364 m_pThemeData->clrPawColorLight[1] = ArgbEncode(0xff, 252, 253, 255);
365 m_pThemeData->clrPawColorDark[1] = ArgbEncode(0xff, 156, 197, 255);
366 m_pThemeData->clrBtnBK[1][0] = ArgbEncode(0xff, 216, 232, 255);
367 m_pThemeData->clrBtnBK[1][1] = ArgbEncode(0xff, 204, 225, 255);
368 m_pThemeData->clrBtnBorder[1] = ArgbEncode(0xff, 218, 230, 254);
369 m_pThemeData->clrPawColorLight[2] = ArgbEncode(0xff, 207, 221, 253);
370 m_pThemeData->clrPawColorDark[2] = ArgbEncode(0xff, 131, 158, 216);
371 m_pThemeData->clrBtnBK[2][0] = ArgbEncode(0xff, 167, 190, 245);
372 m_pThemeData->clrBtnBK[2][1] = ArgbEncode(0xff, 146, 179, 249);
373 m_pThemeData->clrBtnBorder[2] = ArgbEncode(0xff, 124, 159, 211);
374 m_pThemeData->clrTrackBKStart = ArgbEncode(0xff, 243, 241, 236);
375 m_pThemeData->clrTrackBKEnd = ArgbEncode(0xff, 254, 254, 251);
376 }
377 }
OLDNEW
« no previous file with comments | « xfa/src/fwl/theme/pushbuttontp.cpp ('k') | xfa/src/fwl/theme/widgettp.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698