Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
cfwl_widgettp.cpp
Go to the documentation of this file.
1// Copyright 2014 The PDFium Authors
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/fwl/theme/cfwl_widgettp.h"
8
9#include <algorithm>
10#include <utility>
11
12#include "xfa/fde/cfde_textout.h"
13#include "xfa/fgas/font/cfgas_gefont.h"
14#include "xfa/fgas/graphics/cfgas_gecolor.h"
15#include "xfa/fgas/graphics/cfgas_gegraphics.h"
16#include "xfa/fgas/graphics/cfgas_gepath.h"
17#include "xfa/fwl/cfwl_themebackground.h"
18#include "xfa/fwl/cfwl_themepart.h"
19#include "xfa/fwl/cfwl_themetext.h"
20#include "xfa/fwl/cfwl_widget.h"
21#include "xfa/fwl/cfwl_widgetmgr.h"
22#include "xfa/fwl/ifwl_themeprovider.h"
23
24CFWL_WidgetTP::CFWL_WidgetTP() = default;
25
26CFWL_WidgetTP::~CFWL_WidgetTP() = default;
27
28void CFWL_WidgetTP::Trace(cppgc::Visitor* visitor) const {}
29
30void CFWL_WidgetTP::DrawBackground(const CFWL_ThemeBackground& pParams) {}
31
32void CFWL_WidgetTP::DrawText(const CFWL_ThemeText& pParams) {
33 EnsureTTOInitialized(pParams.GetWidget()->GetThemeProvider());
34 if (pParams.m_wsText.IsEmpty())
35 return;
36
37 CFGAS_GEGraphics* pGraphics = pParams.GetGraphics();
38 m_pTextOut->SetStyles(pParams.m_dwTTOStyles);
39 m_pTextOut->SetAlignment(pParams.m_iTTOAlign);
40
41 CFX_Matrix matrix = pParams.m_matrix;
42 matrix.Concat(*pGraphics->GetMatrix());
43 m_pTextOut->SetMatrix(matrix);
44 m_pTextOut->DrawLogicText(pGraphics->GetRenderDevice(), pParams.m_wsText,
45 pParams.m_PartRect);
46}
47
49 if (m_pColorData)
50 return;
51
52 m_pColorData = std::make_unique<CColorData>();
53 m_pColorData->clrBorder[0] = ArgbEncode(255, 202, 216, 249);
54 m_pColorData->clrBorder[1] = ArgbEncode(255, 171, 190, 233);
55 m_pColorData->clrBorder[2] = ArgbEncode(255, 135, 147, 219);
56 m_pColorData->clrBorder[3] = ArgbEncode(255, 172, 168, 153);
57 m_pColorData->clrStart[0] = ArgbEncode(255, 225, 234, 254);
58 m_pColorData->clrStart[1] = ArgbEncode(255, 253, 255, 255);
59 m_pColorData->clrStart[2] = ArgbEncode(255, 110, 142, 241);
60 m_pColorData->clrStart[3] = ArgbEncode(255, 254, 254, 251);
61 m_pColorData->clrEnd[0] = ArgbEncode(255, 175, 204, 251);
62 m_pColorData->clrEnd[1] = ArgbEncode(255, 185, 218, 251);
63 m_pColorData->clrEnd[2] = ArgbEncode(255, 210, 222, 235);
64 m_pColorData->clrEnd[3] = ArgbEncode(255, 243, 241, 236);
65 m_pColorData->clrSign[0] = ArgbEncode(255, 77, 97, 133);
66 m_pColorData->clrSign[1] = ArgbEncode(255, 77, 97, 133);
67 m_pColorData->clrSign[2] = ArgbEncode(255, 77, 97, 133);
68 m_pColorData->clrSign[3] = ArgbEncode(255, 128, 128, 128);
69}
70
72 if (m_pTextOut)
73 return;
74
75 m_pTextOut = std::make_unique<CFDE_TextOut>();
76 m_pTextOut->SetFont(pProvider->GetFWLFont());
77 m_pTextOut->SetFontSize(FWLTHEME_CAPACITY_FontSize);
78 m_pTextOut->SetTextColor(FWLTHEME_CAPACITY_TextColor);
79}
80
82 const CFX_RectF& rect,
83 const CFX_Matrix& matrix) {
84 if (!pGraphics)
85 return;
86
87 CFGAS_GEPath path;
88 path.AddRectangle(rect.left, rect.top, rect.width, rect.height);
89 path.AddRectangle(rect.left + 1, rect.top + 1, rect.width - 2,
90 rect.height - 2);
91
92 CFGAS_GEGraphics::StateRestorer restorer(pGraphics);
95}
96
98 const CFX_RectF& rect,
99 const CFX_Matrix& matrix) {
101}
102
104 FX_ARGB fillColor,
105 const CFX_RectF& rect,
106 const CFX_Matrix& matrix) {
107 if (!pGraphics)
108 return;
109
110 CFGAS_GEPath path;
111 path.AddRectangle(rect.left, rect.top, rect.width, rect.height);
112
113 CFGAS_GEGraphics::StateRestorer restorer(pGraphics);
114 pGraphics->SetFillColor(CFGAS_GEColor(fillColor));
116}
117
119 const CFX_RectF& rect,
120 const CFX_Matrix& matrix) {
121 if (!pGraphics)
122 return;
123
124 CFGAS_GEPath path;
125 path.AddRectangle(rect.left, rect.top, rect.width, rect.height);
126
127 CFGAS_GEGraphics::StateRestorer restorer(pGraphics);
128 pGraphics->SetStrokeColor(CFGAS_GEColor(0xFF000000));
129 static constexpr float kDashPattern[2] = {1, 1};
130 pGraphics->SetLineDash(0.0f, kDashPattern);
131 pGraphics->StrokePath(path, matrix);
132}
133
135 const CFX_RectF& rect,
136 FWLTHEME_DIRECTION eDict,
137 FX_ARGB argSign,
138 const CFX_Matrix& matrix) {
139 bool bVert =
141 float fLeft = ((rect.width - (bVert ? 9 : 6)) / 2 + rect.left) + 0.5f;
142 float fTop = ((rect.height - (bVert ? 6 : 9)) / 2 + rect.top) + 0.5f;
143 CFGAS_GEPath path;
144 switch (eDict) {
146 path.MoveTo(CFX_PointF(fLeft, fTop + 1));
147 path.LineTo(CFX_PointF(fLeft + 4, fTop + 5));
148 path.LineTo(CFX_PointF(fLeft + 8, fTop + 1));
149 path.LineTo(CFX_PointF(fLeft + 7, fTop));
150 path.LineTo(CFX_PointF(fLeft + 4, fTop + 3));
151 path.LineTo(CFX_PointF(fLeft + 1, fTop));
152 break;
154 path.MoveTo(CFX_PointF(fLeft, fTop + 4));
155 path.LineTo(CFX_PointF(fLeft + 4, fTop));
156 path.LineTo(CFX_PointF(fLeft + 8, fTop + 4));
157 path.LineTo(CFX_PointF(fLeft + 7, fTop + 5));
158 path.LineTo(CFX_PointF(fLeft + 4, fTop + 2));
159 path.LineTo(CFX_PointF(fLeft + 1, fTop + 5));
160 break;
162 path.MoveTo(CFX_PointF(fLeft + 1, fTop));
163 path.LineTo(CFX_PointF(fLeft + 5, fTop + 4));
164 path.LineTo(CFX_PointF(fLeft + 1, fTop + 8));
165 path.LineTo(CFX_PointF(fLeft, fTop + 7));
166 path.LineTo(CFX_PointF(fLeft + 3, fTop + 4));
167 path.LineTo(CFX_PointF(fLeft, fTop + 1));
168 break;
170 path.MoveTo(CFX_PointF(fLeft, fTop + 4));
171 path.LineTo(CFX_PointF(fLeft + 4, fTop));
172 path.LineTo(CFX_PointF(fLeft + 5, fTop + 1));
173 path.LineTo(CFX_PointF(fLeft + 2, fTop + 4));
174 path.LineTo(CFX_PointF(fLeft + 5, fTop + 7));
175 path.LineTo(CFX_PointF(fLeft + 4, fTop + 8));
176 break;
177 }
178 pGraphics->SetFillColor(CFGAS_GEColor(argSign));
180}
181
183 const CFX_RectF& rect,
184 FWLTHEME_STATE eState,
185 const CFX_Matrix& matrix) {
187 FillSolidRect(pGraphics,
188 m_pColorData->clrEnd[static_cast<size_t>(eState) - 1], rect,
189 matrix);
190
191 CFGAS_GEPath path;
192 path.AddRectangle(rect.left, rect.top, rect.width, rect.height);
193 pGraphics->SetStrokeColor(
194 CFGAS_GEColor(m_pColorData->clrBorder[static_cast<size_t>(eState) - 1]));
195 pGraphics->StrokePath(path, matrix);
196}
197
199 const CFX_RectF& rect,
200 FWLTHEME_DIRECTION eDict,
201 FWLTHEME_STATE eState,
202 const CFX_Matrix& matrix) {
203 DrawBtn(pGraphics, rect, eState, matrix);
205 DrawArrow(pGraphics, rect, eDict,
206 m_pColorData->clrSign[static_cast<size_t>(eState) - 1], matrix);
207}
FWLTHEME_DIRECTION
Definition cfwl_utils.h:17
FWLTHEME_STATE
Definition cfwl_utils.h:15
#define FWLTHEME_CAPACITY_TextColor
Definition cfwl_utils.h:24
#define FWLTHEME_CAPACITY_FontSize
Definition cfwl_utils.h:23
#define FWLTHEME_COLOR_Background
Definition cfwl_utils.h:20
CFGAS_GEColor(const FX_ARGB argb)
StateRestorer(CFGAS_GEGraphics *graphics)
void FillPath(const CFGAS_GEPath &path, CFX_FillRenderOptions::FillType fill_type, const CFX_Matrix &matrix)
void SetLineDash(float dashPhase, pdfium::span< const float > dashArray)
void SetStrokeColor(const CFGAS_GEColor &color)
const CFX_Matrix * GetMatrix() const
void SetFillColor(const CFGAS_GEColor &color)
void StrokePath(const CFGAS_GEPath &path, const CFX_Matrix &matrix)
void MoveTo(const CFX_PointF &point)
void AddRectangle(float left, float top, float width, float height)
void LineTo(const CFX_PointF &point)
CFWL_Widget * GetWidget() const
CFX_Matrix m_matrix
CFGAS_GEGraphics * GetGraphics() const
void Trace(cppgc::Visitor *visitor) const
void InitializeArrowColorData()
void EnsureTTOInitialized(IFWL_ThemeProvider *pProvider)
void DrawBorder(CFGAS_GEGraphics *pGraphics, const CFX_RectF &rect, const CFX_Matrix &matrix)
void FillBackground(CFGAS_GEGraphics *pGraphics, const CFX_RectF &rect, const CFX_Matrix &matrix)
virtual void DrawBackground(const CFWL_ThemeBackground &pParams)
void DrawArrow(CFGAS_GEGraphics *pGraphics, const CFX_RectF &rect, FWLTHEME_DIRECTION eDict, FX_ARGB argSign, const CFX_Matrix &matrix)
virtual ~CFWL_WidgetTP()
void DrawFocus(CFGAS_GEGraphics *pGraphics, const CFX_RectF &rect, const CFX_Matrix &matrix)
void DrawBtn(CFGAS_GEGraphics *pGraphics, const CFX_RectF &rect, FWLTHEME_STATE eState, const CFX_Matrix &matrix)
void DrawArrowBtn(CFGAS_GEGraphics *pGraphics, const CFX_RectF &rect, FWLTHEME_DIRECTION eDict, FWLTHEME_STATE eState, const CFX_Matrix &matrix)
virtual void DrawText(const CFWL_ThemeText &pParams)
void FillSolidRect(CFGAS_GEGraphics *pGraphics, FX_ARGB fillColor, const CFX_RectF &rect, const CFX_Matrix &matrix)
void Concat(const CFX_Matrix &right)
constexpr FX_ARGB ArgbEncode(uint32_t a, uint32_t r, uint32_t g, uint32_t b)
Definition fx_dib.h:118