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

Side by Side Diff: xfa/fwl/theme/cfwl_widgettp.cpp

Issue 2154843002: Clean up singleton implementation (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: rebase Created 4 years, 5 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/fwl/theme/cfwl_widgettp.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "xfa/fwl/theme/cfwl_widgettp.h" 7 #include "xfa/fwl/theme/cfwl_widgettp.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
11 #include "xfa/fde/tto/fde_textout.h" 11 #include "xfa/fde/tto/fde_textout.h"
12 #include "xfa/fgas/font/fgas_gefont.h" 12 #include "xfa/fgas/font/fgas_gefont.h"
13 #include "xfa/fgas/font/fgas_stdfontmgr.h" 13 #include "xfa/fgas/font/fgas_stdfontmgr.h"
14 #include "xfa/fwl/core/cfwl_themebackground.h" 14 #include "xfa/fwl/core/cfwl_themebackground.h"
15 #include "xfa/fwl/core/cfwl_themepart.h" 15 #include "xfa/fwl/core/cfwl_themepart.h"
16 #include "xfa/fwl/core/cfwl_themetext.h" 16 #include "xfa/fwl/core/cfwl_themetext.h"
17 #include "xfa/fwl/core/cfwl_widgetmgr.h" 17 #include "xfa/fwl/core/cfwl_widgetmgr.h"
18 #include "xfa/fwl/core/ifwl_themeprovider.h" 18 #include "xfa/fwl/core/ifwl_themeprovider.h"
19 #include "xfa/fwl/core/ifwl_widget.h" 19 #include "xfa/fwl/core/ifwl_widget.h"
20 #include "xfa/fwl/theme/cfwl_arrowdata.h"
20 #include "xfa/fxgraphics/cfx_color.h" 21 #include "xfa/fxgraphics/cfx_color.h"
21 #include "xfa/fxgraphics/cfx_path.h" 22 #include "xfa/fxgraphics/cfx_path.h"
22 #include "xfa/fxgraphics/cfx_shading.h" 23 #include "xfa/fxgraphics/cfx_shading.h"
23 24
24 namespace { 25 namespace {
25 26
26 const float kEdgeFlat = 2.0f; 27 const float kEdgeFlat = 2.0f;
27 const float kEdgeRaised = 2.0f; 28 const float kEdgeRaised = 2.0f;
28 const float kEdgeSunken = 2.0f; 29 const float kEdgeSunken = 2.0f;
29 const float kLineHeight = 12.0f; 30 const float kLineHeight = 12.0f;
(...skipping 24 matching lines...) Expand all
54 55
55 uint32_t CFWL_WidgetTP::GetThemeID(IFWL_Widget* pWidget) { 56 uint32_t CFWL_WidgetTP::GetThemeID(IFWL_Widget* pWidget) {
56 return m_dwThemeID; 57 return m_dwThemeID;
57 } 58 }
58 59
59 uint32_t CFWL_WidgetTP::SetThemeID(IFWL_Widget* pWidget, 60 uint32_t CFWL_WidgetTP::SetThemeID(IFWL_Widget* pWidget,
60 uint32_t dwThemeID, 61 uint32_t dwThemeID,
61 FX_BOOL bChildren) { 62 FX_BOOL bChildren) {
62 uint32_t dwOld = m_dwThemeID; 63 uint32_t dwOld = m_dwThemeID;
63 m_dwThemeID = dwThemeID; 64 m_dwThemeID = dwThemeID;
64 if (CFWL_ArrowData::IsInstance()) { 65 if (CFWL_ArrowData::HasInstance()) {
65 CFWL_ArrowData::GetInstance()->SetColorData(FWL_GetThemeColor(dwThemeID)); 66 CFWL_ArrowData::GetInstance()->SetColorData(FWL_GetThemeColor(dwThemeID));
66 } 67 }
67 if (bChildren) { 68 if (bChildren) {
68 FWL_SetChildThemeID(pWidget, dwThemeID); 69 FWL_SetChildThemeID(pWidget, dwThemeID);
69 } 70 }
70 return dwOld; 71 return dwOld;
71 } 72 }
73
72 FWL_Error CFWL_WidgetTP::GetThemeMatrix(IFWL_Widget* pWidget, 74 FWL_Error CFWL_WidgetTP::GetThemeMatrix(IFWL_Widget* pWidget,
73 CFX_Matrix& matrix) { 75 CFX_Matrix& matrix) {
74 matrix.Set(_ctm.a, _ctm.b, _ctm.c, _ctm.d, _ctm.e, _ctm.f); 76 matrix.Set(_ctm.a, _ctm.b, _ctm.c, _ctm.d, _ctm.e, _ctm.f);
75 return FWL_Error::Succeeded; 77 return FWL_Error::Succeeded;
76 } 78 }
79
77 FWL_Error CFWL_WidgetTP::SetThemeMatrix(IFWL_Widget* pWidget, 80 FWL_Error CFWL_WidgetTP::SetThemeMatrix(IFWL_Widget* pWidget,
78 const CFX_Matrix& matrix) { 81 const CFX_Matrix& matrix) {
79 _ctm.Set(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f); 82 _ctm.Set(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f);
80 return FWL_Error::Succeeded; 83 return FWL_Error::Succeeded;
81 } 84 }
85
82 FX_BOOL CFWL_WidgetTP::DrawBackground(CFWL_ThemeBackground* pParams) { 86 FX_BOOL CFWL_WidgetTP::DrawBackground(CFWL_ThemeBackground* pParams) {
83 return TRUE; 87 return TRUE;
84 } 88 }
89
85 FX_BOOL CFWL_WidgetTP::DrawText(CFWL_ThemeText* pParams) { 90 FX_BOOL CFWL_WidgetTP::DrawText(CFWL_ThemeText* pParams) {
86 if (!m_pTextOut) 91 if (!m_pTextOut)
87 InitTTO(); 92 InitTTO();
88 93
89 int32_t iLen = pParams->m_wsText.GetLength(); 94 int32_t iLen = pParams->m_wsText.GetLength();
90 if (iLen <= 0) 95 if (iLen <= 0)
91 return FALSE; 96 return FALSE;
92 CFX_Graphics* pGraphics = pParams->m_pGraphics; 97 CFX_Graphics* pGraphics = pParams->m_pGraphics;
93 m_pTextOut->SetRenderDevice(pGraphics->GetRenderDevice()); 98 m_pTextOut->SetRenderDevice(pGraphics->GetRenderDevice());
94 m_pTextOut->SetStyles(pParams->m_dwTTOStyles); 99 m_pTextOut->SetStyles(pParams->m_dwTTOStyles);
95 m_pTextOut->SetAlignment(pParams->m_iTTOAlign); 100 m_pTextOut->SetAlignment(pParams->m_iTTOAlign);
96 CFX_Matrix* pMatrix = &pParams->m_matrix; 101 CFX_Matrix* pMatrix = &pParams->m_matrix;
97 pMatrix->Concat(*pGraphics->GetMatrix()); 102 pMatrix->Concat(*pGraphics->GetMatrix());
98 m_pTextOut->SetMatrix(*pMatrix); 103 m_pTextOut->SetMatrix(*pMatrix);
99 m_pTextOut->DrawLogicText(pParams->m_wsText.c_str(), iLen, pParams->m_rtPart); 104 m_pTextOut->DrawLogicText(pParams->m_wsText.c_str(), iLen, pParams->m_rtPart);
100 return TRUE; 105 return TRUE;
101 } 106 }
107
102 void* CFWL_WidgetTP::GetCapacity(CFWL_ThemePart* pThemePart, 108 void* CFWL_WidgetTP::GetCapacity(CFWL_ThemePart* pThemePart,
103 CFWL_WidgetCapacity dwCapacity) { 109 CFWL_WidgetCapacity dwCapacity) {
104 switch (dwCapacity) { 110 switch (dwCapacity) {
105 case CFWL_WidgetCapacity::CXBorder: { 111 case CFWL_WidgetCapacity::CXBorder: {
106 m_fValue = kCXBorder; 112 m_fValue = kCXBorder;
107 break; 113 break;
108 } 114 }
109 case CFWL_WidgetCapacity::CYBorder: { 115 case CFWL_WidgetCapacity::CYBorder: {
110 m_fValue = kCYBorder; 116 m_fValue = kCYBorder;
111 break; 117 break;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 break; 153 break;
148 } 154 }
149 case CFWL_WidgetCapacity::UIMargin: { 155 case CFWL_WidgetCapacity::UIMargin: {
150 m_rtMargin.Set(0, 0, 0, 0); 156 m_rtMargin.Set(0, 0, 0, 0);
151 return &m_rtMargin; 157 return &m_rtMargin;
152 } 158 }
153 default: { return nullptr; } 159 default: { return nullptr; }
154 } 160 }
155 return &m_fValue; 161 return &m_fValue;
156 } 162 }
163
157 FX_BOOL CFWL_WidgetTP::IsCustomizedLayout(IFWL_Widget* pWidget) { 164 FX_BOOL CFWL_WidgetTP::IsCustomizedLayout(IFWL_Widget* pWidget) {
158 return FWL_GetThemeLayout(m_dwThemeID); 165 return FWL_GetThemeLayout(m_dwThemeID);
159 } 166 }
167
160 FWL_Error CFWL_WidgetTP::GetPartRect(CFWL_ThemePart* pThemePart, 168 FWL_Error CFWL_WidgetTP::GetPartRect(CFWL_ThemePart* pThemePart,
161 CFX_RectF& rect) { 169 CFX_RectF& rect) {
162 return FWL_Error::Succeeded; 170 return FWL_Error::Succeeded;
163 } 171 }
172
164 FX_BOOL CFWL_WidgetTP::IsInPart(CFWL_ThemePart* pThemePart, 173 FX_BOOL CFWL_WidgetTP::IsInPart(CFWL_ThemePart* pThemePart,
165 FX_FLOAT fx, 174 FX_FLOAT fx,
166 FX_FLOAT fy) { 175 FX_FLOAT fy) {
167 return TRUE; 176 return TRUE;
168 } 177 }
178
169 FX_BOOL CFWL_WidgetTP::CalcTextRect(CFWL_ThemeText* pParams, CFX_RectF& rect) { 179 FX_BOOL CFWL_WidgetTP::CalcTextRect(CFWL_ThemeText* pParams, CFX_RectF& rect) {
170 if (!pParams) 180 if (!pParams)
171 return FALSE; 181 return FALSE;
172 if (!m_pTextOut) 182 if (!m_pTextOut)
173 return FALSE; 183 return FALSE;
174 m_pTextOut->SetAlignment(pParams->m_iTTOAlign); 184 m_pTextOut->SetAlignment(pParams->m_iTTOAlign);
175 m_pTextOut->SetStyles(pParams->m_dwTTOStyles | FDE_TTOSTYLE_ArabicContext); 185 m_pTextOut->SetStyles(pParams->m_dwTTOStyles | FDE_TTOSTYLE_ArabicContext);
176 m_pTextOut->CalcLogicSize(pParams->m_wsText.c_str(), 186 m_pTextOut->CalcLogicSize(pParams->m_wsText.c_str(),
177 pParams->m_wsText.GetLength(), rect); 187 pParams->m_wsText.GetLength(), rect);
178 return TRUE; 188 return TRUE;
179 } 189 }
190
180 FWL_Error CFWL_WidgetTP::Initialize() { 191 FWL_Error CFWL_WidgetTP::Initialize() {
181 m_dwThemeID = 0; 192 m_dwThemeID = 0;
182 _ctm.SetIdentity(); 193 _ctm.SetIdentity();
183 return FWL_Error::Succeeded; 194 return FWL_Error::Succeeded;
184 } 195 }
196
185 FWL_Error CFWL_WidgetTP::Finalize() { 197 FWL_Error CFWL_WidgetTP::Finalize() {
186 if (!m_pTextOut) 198 if (!m_pTextOut)
187 FinalizeTTO(); 199 FinalizeTTO();
188 return FWL_Error::Succeeded; 200 return FWL_Error::Succeeded;
189 } 201 }
202
190 CFWL_WidgetTP::~CFWL_WidgetTP() {} 203 CFWL_WidgetTP::~CFWL_WidgetTP() {}
204
191 FWL_Error CFWL_WidgetTP::SetFont(IFWL_Widget* pWidget, 205 FWL_Error CFWL_WidgetTP::SetFont(IFWL_Widget* pWidget,
192 const FX_WCHAR* strFont, 206 const FX_WCHAR* strFont,
193 FX_FLOAT fFontSize, 207 FX_FLOAT fFontSize,
194 FX_ARGB rgbFont) { 208 FX_ARGB rgbFont) {
195 if (!m_pTextOut) 209 if (!m_pTextOut)
196 return FWL_Error::Succeeded; 210 return FWL_Error::Succeeded;
197 211
198 m_pFDEFont = CFWL_FontManager::GetInstance()->FindFont(strFont, 0, 0); 212 m_pFDEFont = CFWL_FontManager::GetInstance()->FindFont(strFont, 0, 0);
199 m_pTextOut->SetFont(m_pFDEFont); 213 m_pTextOut->SetFont(m_pFDEFont);
200 m_pTextOut->SetFontSize(fFontSize); 214 m_pTextOut->SetFontSize(fFontSize);
201 m_pTextOut->SetTextColor(rgbFont); 215 m_pTextOut->SetTextColor(rgbFont);
202 return FWL_Error::Succeeded; 216 return FWL_Error::Succeeded;
203 } 217 }
218
204 FWL_Error CFWL_WidgetTP::SetFont(IFWL_Widget* pWidget, 219 FWL_Error CFWL_WidgetTP::SetFont(IFWL_Widget* pWidget,
205 CFGAS_GEFont* pFont, 220 CFGAS_GEFont* pFont,
206 FX_FLOAT fFontSize, 221 FX_FLOAT fFontSize,
207 FX_ARGB rgbFont) { 222 FX_ARGB rgbFont) {
208 if (!m_pTextOut) 223 if (!m_pTextOut)
209 return FWL_Error::Succeeded; 224 return FWL_Error::Succeeded;
210 225
211 m_pTextOut->SetFont(pFont); 226 m_pTextOut->SetFont(pFont);
212 m_pTextOut->SetFontSize(fFontSize); 227 m_pTextOut->SetFontSize(fFontSize);
213 m_pTextOut->SetTextColor(rgbFont); 228 m_pTextOut->SetTextColor(rgbFont);
214 return FWL_Error::Succeeded; 229 return FWL_Error::Succeeded;
215 } 230 }
231
216 CFGAS_GEFont* CFWL_WidgetTP::GetFont(IFWL_Widget* pWidget) { 232 CFGAS_GEFont* CFWL_WidgetTP::GetFont(IFWL_Widget* pWidget) {
217 return m_pFDEFont; 233 return m_pFDEFont;
218 } 234 }
219 235
220 CFWL_WidgetTP::CFWL_WidgetTP() 236 CFWL_WidgetTP::CFWL_WidgetTP()
221 : m_dwRefCount(1), m_pFDEFont(nullptr), m_dwThemeID(0) {} 237 : m_dwRefCount(1), m_pFDEFont(nullptr), m_dwThemeID(0) {}
222 238
223 FWL_Error CFWL_WidgetTP::InitTTO() { 239 FWL_Error CFWL_WidgetTP::InitTTO() {
224 if (m_pTextOut) 240 if (m_pTextOut)
225 return FWL_Error::Succeeded; 241 return FWL_Error::Succeeded;
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 pathRB.LineTo(fRight, fBottom); 361 pathRB.LineTo(fRight, fBottom);
346 pathRB.LineTo(fLeft, fBottom); 362 pathRB.LineTo(fLeft, fBottom);
347 pathRB.LineTo(fLeft, fBottom - fHalfWidth); 363 pathRB.LineTo(fLeft, fBottom - fHalfWidth);
348 pathRB.LineTo(fRight - fHalfWidth, fBottom - fHalfWidth); 364 pathRB.LineTo(fRight - fHalfWidth, fBottom - fHalfWidth);
349 pathRB.LineTo(fRight - fHalfWidth, fTop); 365 pathRB.LineTo(fRight - fHalfWidth, fTop);
350 pathRB.LineTo(fRight, fTop); 366 pathRB.LineTo(fRight, fTop);
351 pGraphics->FillPath(&pathRB, FXFILL_WINDING, pMatrix); 367 pGraphics->FillPath(&pathRB, FXFILL_WINDING, pMatrix);
352 } 368 }
353 pGraphics->RestoreGraphState(); 369 pGraphics->RestoreGraphState();
354 } 370 }
371
355 void CFWL_WidgetTP::Draw3DCircle(CFX_Graphics* pGraphics, 372 void CFWL_WidgetTP::Draw3DCircle(CFX_Graphics* pGraphics,
356 FWLTHEME_EDGE eType, 373 FWLTHEME_EDGE eType,
357 FX_FLOAT fWidth, 374 FX_FLOAT fWidth,
358 const CFX_RectF* pRect, 375 const CFX_RectF* pRect,
359 FX_ARGB cr1, 376 FX_ARGB cr1,
360 FX_ARGB cr2, 377 FX_ARGB cr2,
361 FX_ARGB cr3, 378 FX_ARGB cr3,
362 FX_ARGB cr4, 379 FX_ARGB cr4,
363 CFX_Matrix* pMatrix) { 380 CFX_Matrix* pMatrix) {
364 if (!pGraphics) 381 if (!pGraphics)
(...skipping 22 matching lines...) Expand all
387 CFX_Color crFill3(eType == FWLTHEME_EDGE_Raised ? cr1 : cr3); 404 CFX_Color crFill3(eType == FWLTHEME_EDGE_Raised ? cr1 : cr3);
388 pGraphics->SetStrokeColor(&crFill3); 405 pGraphics->SetStrokeColor(&crFill3);
389 pGraphics->StrokePath(&path, pMatrix); 406 pGraphics->StrokePath(&path, pMatrix);
390 path.AddArc(rtInner.left, rtInner.top, rtInner.width, rtInner.height, 407 path.AddArc(rtInner.left, rtInner.top, rtInner.width, rtInner.height,
391 FX_PI * 7 / 4, FX_PI); 408 FX_PI * 7 / 4, FX_PI);
392 CFX_Color crFill4(eType == FWLTHEME_EDGE_Raised ? cr2 : cr4); 409 CFX_Color crFill4(eType == FWLTHEME_EDGE_Raised ? cr2 : cr4);
393 pGraphics->SetStrokeColor(&crFill4); 410 pGraphics->SetStrokeColor(&crFill4);
394 pGraphics->StrokePath(&path, pMatrix); 411 pGraphics->StrokePath(&path, pMatrix);
395 pGraphics->RestoreGraphState(); 412 pGraphics->RestoreGraphState();
396 } 413 }
414
397 void CFWL_WidgetTP::DrawBorder(CFX_Graphics* pGraphics, 415 void CFWL_WidgetTP::DrawBorder(CFX_Graphics* pGraphics,
398 const CFX_RectF* pRect, 416 const CFX_RectF* pRect,
399 CFX_Matrix* pMatrix) { 417 CFX_Matrix* pMatrix) {
400 if (!pGraphics) 418 if (!pGraphics)
401 return; 419 return;
402 if (!pRect) 420 if (!pRect)
403 return; 421 return;
404 CFX_Path path; 422 CFX_Path path;
405 path.Create(); 423 path.Create();
406 path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height); 424 path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height);
407 path.AddRectangle(pRect->left + 1, pRect->top + 1, pRect->width - 2, 425 path.AddRectangle(pRect->left + 1, pRect->top + 1, pRect->width - 2,
408 pRect->height - 2); 426 pRect->height - 2);
409 pGraphics->SaveGraphState(); 427 pGraphics->SaveGraphState();
410 CFX_Color crFill(ArgbEncode(255, 0, 0, 0)); 428 CFX_Color crFill(ArgbEncode(255, 0, 0, 0));
411 pGraphics->SetFillColor(&crFill); 429 pGraphics->SetFillColor(&crFill);
412 pGraphics->FillPath(&path, FXFILL_ALTERNATE, pMatrix); 430 pGraphics->FillPath(&path, FXFILL_ALTERNATE, pMatrix);
413 pGraphics->RestoreGraphState(); 431 pGraphics->RestoreGraphState();
414 } 432 }
433
415 void CFWL_WidgetTP::FillBackground(CFX_Graphics* pGraphics, 434 void CFWL_WidgetTP::FillBackground(CFX_Graphics* pGraphics,
416 const CFX_RectF* pRect, 435 const CFX_RectF* pRect,
417 CFX_Matrix* pMatrix) { 436 CFX_Matrix* pMatrix) {
418 FillSoildRect(pGraphics, FWLTHEME_COLOR_Background, pRect, pMatrix); 437 FillSoildRect(pGraphics, FWLTHEME_COLOR_Background, pRect, pMatrix);
419 } 438 }
439
420 void CFWL_WidgetTP::FillSoildRect(CFX_Graphics* pGraphics, 440 void CFWL_WidgetTP::FillSoildRect(CFX_Graphics* pGraphics,
421 FX_ARGB fillColor, 441 FX_ARGB fillColor,
422 const CFX_RectF* pRect, 442 const CFX_RectF* pRect,
423 CFX_Matrix* pMatrix) { 443 CFX_Matrix* pMatrix) {
424 if (!pGraphics) 444 if (!pGraphics)
425 return; 445 return;
426 if (!pRect) 446 if (!pRect)
427 return; 447 return;
428 pGraphics->SaveGraphState(); 448 pGraphics->SaveGraphState();
429 CFX_Color crFill(fillColor); 449 CFX_Color crFill(fillColor);
430 pGraphics->SetFillColor(&crFill); 450 pGraphics->SetFillColor(&crFill);
431 CFX_Path path; 451 CFX_Path path;
432 path.Create(); 452 path.Create();
433 path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height); 453 path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height);
434 pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); 454 pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix);
435 pGraphics->RestoreGraphState(); 455 pGraphics->RestoreGraphState();
436 } 456 }
457
437 void CFWL_WidgetTP::DrawAxialShading(CFX_Graphics* pGraphics, 458 void CFWL_WidgetTP::DrawAxialShading(CFX_Graphics* pGraphics,
438 FX_FLOAT fx1, 459 FX_FLOAT fx1,
439 FX_FLOAT fy1, 460 FX_FLOAT fy1,
440 FX_FLOAT fx2, 461 FX_FLOAT fx2,
441 FX_FLOAT fy2, 462 FX_FLOAT fy2,
442 FX_ARGB beginColor, 463 FX_ARGB beginColor,
443 FX_ARGB endColor, 464 FX_ARGB endColor,
444 CFX_Path* path, 465 CFX_Path* path,
445 int32_t fillMode, 466 int32_t fillMode,
446 CFX_Matrix* pMatrix) { 467 CFX_Matrix* pMatrix) {
447 if (!pGraphics || !path) 468 if (!pGraphics || !path)
448 return; 469 return;
449 470
450 CFX_PointF begPoint(fx1, fy1); 471 CFX_PointF begPoint(fx1, fy1);
451 CFX_PointF endPoint(fx2, fy2); 472 CFX_PointF endPoint(fx2, fy2);
452 CFX_Shading shading(begPoint, endPoint, FALSE, FALSE, beginColor, endColor); 473 CFX_Shading shading(begPoint, endPoint, FALSE, FALSE, beginColor, endColor);
453 pGraphics->SaveGraphState(); 474 pGraphics->SaveGraphState();
454 CFX_Color color1(&shading); 475 CFX_Color color1(&shading);
455 pGraphics->SetFillColor(&color1); 476 pGraphics->SetFillColor(&color1);
456 pGraphics->FillPath(path, fillMode, pMatrix); 477 pGraphics->FillPath(path, fillMode, pMatrix);
457 pGraphics->RestoreGraphState(); 478 pGraphics->RestoreGraphState();
458 } 479 }
480
459 void CFWL_WidgetTP::DrawAnnulusRect(CFX_Graphics* pGraphics, 481 void CFWL_WidgetTP::DrawAnnulusRect(CFX_Graphics* pGraphics,
460 FX_ARGB fillColor, 482 FX_ARGB fillColor,
461 const CFX_RectF* pRect, 483 const CFX_RectF* pRect,
462 FX_FLOAT fRingWidth, 484 FX_FLOAT fRingWidth,
463 CFX_Matrix* pMatrix) { 485 CFX_Matrix* pMatrix) {
464 if (!pGraphics) 486 if (!pGraphics)
465 return; 487 return;
466 if (!pRect) 488 if (!pRect)
467 return; 489 return;
468 pGraphics->SaveGraphState(); 490 pGraphics->SaveGraphState();
469 CFX_Color cr(fillColor); 491 CFX_Color cr(fillColor);
470 pGraphics->SetFillColor(&cr); 492 pGraphics->SetFillColor(&cr);
471 CFX_Path path; 493 CFX_Path path;
472 path.Create(); 494 path.Create();
473 CFX_RectF rtInner(*pRect); 495 CFX_RectF rtInner(*pRect);
474 rtInner.Deflate(fRingWidth, fRingWidth); 496 rtInner.Deflate(fRingWidth, fRingWidth);
475 path.AddRectangle(rtInner.left, rtInner.top, rtInner.width, rtInner.height); 497 path.AddRectangle(rtInner.left, rtInner.top, rtInner.width, rtInner.height);
476 path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height); 498 path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height);
477 pGraphics->FillPath(&path, FXFILL_ALTERNATE, pMatrix); 499 pGraphics->FillPath(&path, FXFILL_ALTERNATE, pMatrix);
478 pGraphics->RestoreGraphState(); 500 pGraphics->RestoreGraphState();
479 } 501 }
502
480 void CFWL_WidgetTP::DrawAnnulusCircle(CFX_Graphics* pGraphics, 503 void CFWL_WidgetTP::DrawAnnulusCircle(CFX_Graphics* pGraphics,
481 FX_ARGB fillColor, 504 FX_ARGB fillColor,
482 const CFX_RectF* pRect, 505 const CFX_RectF* pRect,
483 FX_FLOAT fWidth, 506 FX_FLOAT fWidth,
484 CFX_Matrix* pMatrix) { 507 CFX_Matrix* pMatrix) {
485 if (!pGraphics) 508 if (!pGraphics)
486 return; 509 return;
487 if (!pRect) 510 if (!pRect)
488 return; 511 return;
489 if (fWidth > pRect->width / 2) { 512 if (fWidth > pRect->width / 2) {
490 return; 513 return;
491 } 514 }
492 pGraphics->SaveGraphState(); 515 pGraphics->SaveGraphState();
493 CFX_Color cr(fillColor); 516 CFX_Color cr(fillColor);
494 pGraphics->SetFillColor(&cr); 517 pGraphics->SetFillColor(&cr);
495 CFX_Path path; 518 CFX_Path path;
496 path.Create(); 519 path.Create();
497 path.AddEllipse(*pRect); 520 path.AddEllipse(*pRect);
498 CFX_RectF rtIn(*pRect); 521 CFX_RectF rtIn(*pRect);
499 rtIn.Inflate(-fWidth, -fWidth); 522 rtIn.Inflate(-fWidth, -fWidth);
500 path.AddEllipse(rtIn); 523 path.AddEllipse(rtIn);
501 pGraphics->FillPath(&path, FXFILL_ALTERNATE, pMatrix); 524 pGraphics->FillPath(&path, FXFILL_ALTERNATE, pMatrix);
502 pGraphics->RestoreGraphState(); 525 pGraphics->RestoreGraphState();
503 } 526 }
527
504 void CFWL_WidgetTP::DrawFocus(CFX_Graphics* pGraphics, 528 void CFWL_WidgetTP::DrawFocus(CFX_Graphics* pGraphics,
505 const CFX_RectF* pRect, 529 const CFX_RectF* pRect,
506 CFX_Matrix* pMatrix) { 530 CFX_Matrix* pMatrix) {
507 if (!pGraphics) 531 if (!pGraphics)
508 return; 532 return;
509 if (!pRect) 533 if (!pRect)
510 return; 534 return;
511 pGraphics->SaveGraphState(); 535 pGraphics->SaveGraphState();
512 CFX_Color cr(0xFF000000); 536 CFX_Color cr(0xFF000000);
513 pGraphics->SetStrokeColor(&cr); 537 pGraphics->SetStrokeColor(&cr);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 path.LineTo(rtArrow.left + fBtn / 2, rtArrow.bottom()); 591 path.LineTo(rtArrow.left + fBtn / 2, rtArrow.bottom());
568 path.LineTo(rtArrow.left, rtArrow.top); 592 path.LineTo(rtArrow.left, rtArrow.top);
569 } 593 }
570 } 594 }
571 pGraphics->SaveGraphState(); 595 pGraphics->SaveGraphState();
572 CFX_Color cr(argbFill); 596 CFX_Color cr(argbFill);
573 pGraphics->SetFillColor(&cr); 597 pGraphics->SetFillColor(&cr);
574 pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); 598 pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix);
575 pGraphics->RestoreGraphState(); 599 pGraphics->RestoreGraphState();
576 } 600 }
601
577 void CFWL_WidgetTP::DrawArrow(CFX_Graphics* pGraphics, 602 void CFWL_WidgetTP::DrawArrow(CFX_Graphics* pGraphics,
578 const CFX_RectF* pRect, 603 const CFX_RectF* pRect,
579 FWLTHEME_DIRECTION eDict, 604 FWLTHEME_DIRECTION eDict,
580 FX_ARGB argSign, 605 FX_ARGB argSign,
581 CFX_Matrix* pMatrix) { 606 CFX_Matrix* pMatrix) {
582 FX_BOOL bVert = 607 FX_BOOL bVert =
583 (eDict == FWLTHEME_DIRECTION_Up || eDict == FWLTHEME_DIRECTION_Down); 608 (eDict == FWLTHEME_DIRECTION_Up || eDict == FWLTHEME_DIRECTION_Down);
584 FX_FLOAT fLeft = 609 FX_FLOAT fLeft =
585 (FX_FLOAT)(((pRect->width - (bVert ? 9 : 6)) / 2 + pRect->left) + 0.5); 610 (FX_FLOAT)(((pRect->width - (bVert ? 9 : 6)) / 2 + pRect->left) + 0.5);
586 FX_FLOAT fTop = 611 FX_FLOAT fTop =
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 path.LineTo(fLeft + 2, fTop + 4); 647 path.LineTo(fLeft + 2, fTop + 4);
623 path.LineTo(fLeft + 5, fTop + 7); 648 path.LineTo(fLeft + 5, fTop + 7);
624 path.LineTo(fLeft + 4, fTop + 8); 649 path.LineTo(fLeft + 4, fTop + 8);
625 break; 650 break;
626 } 651 }
627 } 652 }
628 CFX_Color cr(argSign); 653 CFX_Color cr(argSign);
629 pGraphics->SetFillColor(&cr); 654 pGraphics->SetFillColor(&cr);
630 pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); 655 pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix);
631 } 656 }
657
632 void CFWL_WidgetTP::DrawBtn(CFX_Graphics* pGraphics, 658 void CFWL_WidgetTP::DrawBtn(CFX_Graphics* pGraphics,
633 const CFX_RectF* pRect, 659 const CFX_RectF* pRect,
634 FWLTHEME_STATE eState, 660 FWLTHEME_STATE eState,
635 CFX_Matrix* pMatrix) { 661 CFX_Matrix* pMatrix) {
636 CFX_Path path; 662 CFX_Path path;
637 path.Create(); 663 path.Create();
638 if (!CFWL_ArrowData::IsInstance()) { 664 if (!CFWL_ArrowData::HasInstance()) {
639 CFWL_ArrowData::GetInstance()->SetColorData(FWL_GetThemeColor(m_dwThemeID)); 665 CFWL_ArrowData::GetInstance()->SetColorData(FWL_GetThemeColor(m_dwThemeID));
640 } 666 }
641 CFWL_ArrowData::CColorData* pColorData = 667 CFWL_ArrowData::CColorData* pColorData =
642 CFWL_ArrowData::GetInstance()->m_pColorData; 668 CFWL_ArrowData::GetInstance()->m_pColorData.get();
643 FX_FLOAT fRight = pRect->right(); 669 FX_FLOAT fRight = pRect->right();
644 FX_FLOAT fBottom = pRect->bottom(); 670 FX_FLOAT fBottom = pRect->bottom();
645 path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height); 671 path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height);
646 DrawAxialShading(pGraphics, pRect->left, pRect->top, fRight, fBottom, 672 DrawAxialShading(pGraphics, pRect->left, pRect->top, fRight, fBottom,
647 pColorData->clrStart[eState - 1], 673 pColorData->clrStart[eState - 1],
648 pColorData->clrEnd[eState - 1], &path, FXFILL_WINDING, 674 pColorData->clrEnd[eState - 1], &path, FXFILL_WINDING,
649 pMatrix); 675 pMatrix);
650 CFX_Color rcStroke; 676 CFX_Color rcStroke;
651 rcStroke.Set(pColorData->clrBorder[eState - 1]); 677 rcStroke.Set(pColorData->clrBorder[eState - 1]);
652 pGraphics->SetStrokeColor(&rcStroke); 678 pGraphics->SetStrokeColor(&rcStroke);
653 pGraphics->StrokePath(&path, pMatrix); 679 pGraphics->StrokePath(&path, pMatrix);
654 } 680 }
681
655 void CFWL_WidgetTP::DrawArrowBtn(CFX_Graphics* pGraphics, 682 void CFWL_WidgetTP::DrawArrowBtn(CFX_Graphics* pGraphics,
656 const CFX_RectF* pRect, 683 const CFX_RectF* pRect,
657 FWLTHEME_DIRECTION eDict, 684 FWLTHEME_DIRECTION eDict,
658 FWLTHEME_STATE eState, 685 FWLTHEME_STATE eState,
659 CFX_Matrix* pMatrix) { 686 CFX_Matrix* pMatrix) {
660 DrawBtn(pGraphics, pRect, eState, pMatrix); 687 DrawBtn(pGraphics, pRect, eState, pMatrix);
661 if (!CFWL_ArrowData::IsInstance()) { 688 if (!CFWL_ArrowData::HasInstance()) {
662 CFWL_ArrowData::GetInstance()->SetColorData(FWL_GetThemeColor(m_dwThemeID)); 689 CFWL_ArrowData::GetInstance()->SetColorData(FWL_GetThemeColor(m_dwThemeID));
663 } 690 }
664 CFWL_ArrowData::CColorData* pColorData = 691 CFWL_ArrowData::CColorData* pColorData =
665 CFWL_ArrowData::GetInstance()->m_pColorData; 692 CFWL_ArrowData::GetInstance()->m_pColorData.get();
666 DrawArrow(pGraphics, pRect, eDict, pColorData->clrSign[eState - 1], pMatrix); 693 DrawArrow(pGraphics, pRect, eDict, pColorData->clrSign[eState - 1], pMatrix);
667 } 694 }
695
668 CFWL_ArrowData::CFWL_ArrowData() : m_pColorData(nullptr) { 696 CFWL_ArrowData::CFWL_ArrowData() : m_pColorData(nullptr) {
669 SetColorData(0); 697 SetColorData(0);
670 } 698 }
699
671 CFWL_FontData::CFWL_FontData() 700 CFWL_FontData::CFWL_FontData()
672 : m_dwStyles(0), 701 : m_dwStyles(0),
673 m_dwCodePage(0), 702 m_dwCodePage(0),
674 m_pFont(0), 703 m_pFont(0),
675 m_pFontMgr(nullptr) 704 m_pFontMgr(nullptr)
676 #if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ 705 #if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_
677 , 706 ,
678 m_pFontSource(nullptr) 707 m_pFontSource(nullptr)
679 #endif 708 #endif
680 { 709 {
681 } 710 }
711
682 CFWL_FontData::~CFWL_FontData() { 712 CFWL_FontData::~CFWL_FontData() {
683 if (m_pFont) { 713 if (m_pFont) {
684 m_pFont->Release(); 714 m_pFont->Release();
685 } 715 }
686 if (m_pFontMgr) { 716 if (m_pFontMgr) {
687 m_pFontMgr->Release(); 717 m_pFontMgr->Release();
688 } 718 }
689 #if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ 719 #if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_
690 if (m_pFontSource) { 720 if (m_pFontSource) {
691 m_pFontSource->Release(); 721 m_pFontSource->Release();
692 } 722 }
693 #endif 723 #endif
694 } 724 }
725
695 FX_BOOL CFWL_FontData::Equal(const CFX_WideStringC& wsFontFamily, 726 FX_BOOL CFWL_FontData::Equal(const CFX_WideStringC& wsFontFamily,
696 uint32_t dwFontStyles, 727 uint32_t dwFontStyles,
697 uint16_t wCodePage) { 728 uint16_t wCodePage) {
698 return m_wsFamily == wsFontFamily && m_dwStyles == dwFontStyles && 729 return m_wsFamily == wsFontFamily && m_dwStyles == dwFontStyles &&
699 m_dwCodePage == wCodePage; 730 m_dwCodePage == wCodePage;
700 } 731 }
732
701 FX_BOOL CFWL_FontData::LoadFont(const CFX_WideStringC& wsFontFamily, 733 FX_BOOL CFWL_FontData::LoadFont(const CFX_WideStringC& wsFontFamily,
702 uint32_t dwFontStyles, 734 uint32_t dwFontStyles,
703 uint16_t dwCodePage) { 735 uint16_t dwCodePage) {
704 m_wsFamily = wsFontFamily; 736 m_wsFamily = wsFontFamily;
705 m_dwStyles = dwFontStyles; 737 m_dwStyles = dwFontStyles;
706 m_dwCodePage = dwCodePage; 738 m_dwCodePage = dwCodePage;
707 if (!m_pFontMgr) { 739 if (!m_pFontMgr) {
708 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ 740 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
709 m_pFontMgr = IFGAS_FontMgr::Create(FX_GetDefFontEnumerator()); 741 m_pFontMgr = IFGAS_FontMgr::Create(FX_GetDefFontEnumerator());
710 #else 742 #else
711 m_pFontSource = new CFX_FontSourceEnum_File; 743 m_pFontSource = new CFX_FontSourceEnum_File;
712 m_pFontMgr = IFGAS_FontMgr::Create(m_pFontSource); 744 m_pFontMgr = IFGAS_FontMgr::Create(m_pFontSource);
713 #endif 745 #endif
714 } 746 }
715 m_pFont = CFGAS_GEFont::LoadFont(wsFontFamily.c_str(), dwFontStyles, 747 m_pFont = CFGAS_GEFont::LoadFont(wsFontFamily.c_str(), dwFontStyles,
716 dwCodePage, m_pFontMgr); 748 dwCodePage, m_pFontMgr);
717 return !!m_pFont; 749 return !!m_pFont;
718 } 750 }
719 751
720 CFWL_FontManager* CFWL_FontManager::s_FontManager = nullptr; 752 CFWL_FontManager* CFWL_FontManager::s_FontManager = nullptr;
721 CFWL_FontManager* CFWL_FontManager::GetInstance() { 753 CFWL_FontManager* CFWL_FontManager::GetInstance() {
722 if (!s_FontManager) 754 if (!s_FontManager)
723 s_FontManager = new CFWL_FontManager; 755 s_FontManager = new CFWL_FontManager;
724 return s_FontManager; 756 return s_FontManager;
725 } 757 }
758
726 void CFWL_FontManager::DestroyInstance() { 759 void CFWL_FontManager::DestroyInstance() {
727 delete s_FontManager; 760 delete s_FontManager;
728 s_FontManager = nullptr; 761 s_FontManager = nullptr;
729 } 762 }
763
730 CFWL_FontManager::CFWL_FontManager() {} 764 CFWL_FontManager::CFWL_FontManager() {}
765
731 CFWL_FontManager::~CFWL_FontManager() {} 766 CFWL_FontManager::~CFWL_FontManager() {}
767
732 CFGAS_GEFont* CFWL_FontManager::FindFont(const CFX_WideStringC& wsFontFamily, 768 CFGAS_GEFont* CFWL_FontManager::FindFont(const CFX_WideStringC& wsFontFamily,
733 uint32_t dwFontStyles, 769 uint32_t dwFontStyles,
734 uint16_t wCodePage) { 770 uint16_t wCodePage) {
735 for (const auto& pData : m_FontsArray) { 771 for (const auto& pData : m_FontsArray) {
736 if (pData->Equal(wsFontFamily, dwFontStyles, wCodePage)) 772 if (pData->Equal(wsFontFamily, dwFontStyles, wCodePage))
737 return pData->GetFont(); 773 return pData->GetFont();
738 } 774 }
739 std::unique_ptr<CFWL_FontData> pFontData(new CFWL_FontData); 775 std::unique_ptr<CFWL_FontData> pFontData(new CFWL_FontData);
740 if (!pFontData->LoadFont(wsFontFamily, dwFontStyles, wCodePage)) 776 if (!pFontData->LoadFont(wsFontFamily, dwFontStyles, wCodePage))
741 return nullptr; 777 return nullptr;
742 m_FontsArray.push_back(std::move(pFontData)); 778 m_FontsArray.push_back(std::move(pFontData));
743 return m_FontsArray.back()->GetFont(); 779 return m_FontsArray.back()->GetFont();
744 } 780 }
781
745 FX_BOOL FWLTHEME_Init() { 782 FX_BOOL FWLTHEME_Init() {
746 return TRUE; 783 return TRUE;
747 } 784 }
785
748 void FWLTHEME_Release() { 786 void FWLTHEME_Release() {
749 CFWL_ArrowData::DestroyInstance(); 787 CFWL_ArrowData::DestroyInstance();
750 CFWL_FontManager::DestroyInstance(); 788 CFWL_FontManager::DestroyInstance();
751 } 789 }
790
752 uint32_t FWL_GetThemeLayout(uint32_t dwThemeID) { 791 uint32_t FWL_GetThemeLayout(uint32_t dwThemeID) {
753 return 0xffff0000 & dwThemeID; 792 return 0xffff0000 & dwThemeID;
754 } 793 }
794
755 uint32_t FWL_GetThemeColor(uint32_t dwThemeID) { 795 uint32_t FWL_GetThemeColor(uint32_t dwThemeID) {
756 return 0x0000ffff & dwThemeID; 796 return 0x0000ffff & dwThemeID;
757 } 797 }
758
759 CFWL_ArrowData* CFWL_ArrowData::m_pInstance = nullptr;
760
761 CFWL_ArrowData* CFWL_ArrowData::GetInstance() {
762 if (!m_pInstance)
763 m_pInstance = new CFWL_ArrowData;
764 return m_pInstance;
765 }
766
767 FX_BOOL CFWL_ArrowData::IsInstance() {
768 return !!m_pInstance;
769 }
770
771 void CFWL_ArrowData::DestroyInstance() {
772 delete m_pInstance;
773 m_pInstance = nullptr;
774 }
775
776 CFWL_ArrowData::~CFWL_ArrowData() {
777 delete m_pColorData;
778 }
779
780 void CFWL_ArrowData::SetColorData(uint32_t dwID) {
781 if (!m_pColorData) {
782 m_pColorData = new CColorData;
783 }
784 if (dwID) {
785 m_pColorData->clrBorder[0] = ArgbEncode(255, 142, 153, 125);
786 m_pColorData->clrBorder[1] = ArgbEncode(255, 157, 171, 119);
787 m_pColorData->clrBorder[2] = ArgbEncode(255, 118, 131, 97);
788 m_pColorData->clrBorder[3] = ArgbEncode(255, 172, 168, 153);
789 m_pColorData->clrStart[0] = ArgbEncode(255, 203, 215, 186);
790 m_pColorData->clrStart[1] = ArgbEncode(255, 218, 232, 185);
791 m_pColorData->clrStart[2] = ArgbEncode(255, 203, 215, 186);
792 m_pColorData->clrStart[3] = ArgbEncode(255, 254, 254, 251);
793 m_pColorData->clrEnd[0] = ArgbEncode(255, 149, 167, 117);
794 m_pColorData->clrEnd[1] = ArgbEncode(255, 198, 211, 155);
795 m_pColorData->clrEnd[2] = ArgbEncode(255, 149, 167, 117);
796 m_pColorData->clrEnd[3] = ArgbEncode(255, 243, 241, 236);
797 m_pColorData->clrSign[0] = ArgbEncode(255, 255, 255, 255);
798 m_pColorData->clrSign[1] = ArgbEncode(255, 255, 255, 255);
799 m_pColorData->clrSign[2] = ArgbEncode(255, 255, 255, 255);
800 m_pColorData->clrSign[3] = ArgbEncode(255, 128, 128, 128);
801 } else {
802 m_pColorData->clrBorder[0] = ArgbEncode(255, 202, 216, 249);
803 m_pColorData->clrBorder[1] = ArgbEncode(255, 171, 190, 233);
804 m_pColorData->clrBorder[2] = ArgbEncode(255, 135, 147, 219);
805 m_pColorData->clrBorder[3] = ArgbEncode(255, 172, 168, 153);
806 m_pColorData->clrStart[0] = ArgbEncode(255, 225, 234, 254);
807 m_pColorData->clrStart[1] = ArgbEncode(255, 253, 255, 255);
808 m_pColorData->clrStart[2] = ArgbEncode(255, 110, 142, 241);
809 m_pColorData->clrStart[3] = ArgbEncode(255, 254, 254, 251);
810 m_pColorData->clrEnd[0] = ArgbEncode(255, 175, 204, 251);
811 m_pColorData->clrEnd[1] = ArgbEncode(255, 185, 218, 251);
812 m_pColorData->clrEnd[2] = ArgbEncode(255, 210, 222, 235);
813 m_pColorData->clrEnd[3] = ArgbEncode(255, 243, 241, 236);
814 m_pColorData->clrSign[0] = ArgbEncode(255, 77, 97, 133);
815 m_pColorData->clrSign[1] = ArgbEncode(255, 77, 97, 133);
816 m_pColorData->clrSign[2] = ArgbEncode(255, 77, 97, 133);
817 m_pColorData->clrSign[3] = ArgbEncode(255, 128, 128, 128);
818 }
819 }
OLDNEW
« no previous file with comments | « xfa/fwl/theme/cfwl_widgettp.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698