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

Side by Side Diff: xfa/src/fxfa/app/xfa_ffpushbutton.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/fxfa/app/xfa_ffpushbutton.h ('k') | xfa/src/fxfa/app/xfa_ffsignature.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 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/src/fxfa/app/xfa_ffpushbutton.h"
8
9 #include "xfa/include/fwl/core/fwl_widgetmgr.h"
10 #include "xfa/include/fwl/lightwidget/pushbutton.h"
11 #include "xfa/src/fxfa/app/xfa_ffapp.h"
12 #include "xfa/src/fxfa/app/xfa_fffield.h"
13 #include "xfa/src/fxfa/app/xfa_ffpageview.h"
14 #include "xfa/src/fxfa/app/xfa_ffwidget.h"
15 #include "xfa/src/fxfa/app/xfa_ffwidgetacc.h"
16 #include "xfa/src/fxfa/app/xfa_textlayout.h"
17
18 CXFA_FFPushButton::CXFA_FFPushButton(CXFA_FFPageView* pPageView,
19 CXFA_WidgetAcc* pDataAcc)
20 : CXFA_FFField(pPageView, pDataAcc),
21 m_pRolloverTextLayout(NULL),
22 m_pDownTextLayout(NULL),
23 m_pDownProvider(NULL),
24 m_pRollProvider(NULL),
25 m_pOldDelegate(NULL) {}
26 CXFA_FFPushButton::~CXFA_FFPushButton() {
27 CXFA_FFPushButton::UnloadWidget();
28 }
29 void CXFA_FFPushButton::RenderWidget(CFX_Graphics* pGS,
30 CFX_Matrix* pMatrix,
31 FX_DWORD dwStatus,
32 int32_t iRotate) {
33 if (!IsMatchVisibleStatus(dwStatus)) {
34 return;
35 }
36 CFX_Matrix mtRotate;
37 GetRotateMatrix(mtRotate);
38 if (pMatrix) {
39 mtRotate.Concat(*pMatrix);
40 }
41 CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus);
42 RenderHighlightCaption(pGS, &mtRotate);
43 CFX_RectF rtWidget;
44 GetRectWithoutRotate(rtWidget);
45 CFX_Matrix mt;
46 mt.Set(1, 0, 0, 1, rtWidget.left, rtWidget.top);
47 mt.Concat(mtRotate);
48 GetApp()->GetWidgetMgrDelegate()->OnDrawWidget(m_pNormalWidget->GetWidget(),
49 pGS, &mt);
50 }
51 FX_BOOL CXFA_FFPushButton::LoadWidget() {
52 FXSYS_assert(m_pNormalWidget == NULL);
53 CFWL_PushButton* pPushButton = CFWL_PushButton::Create();
54 if (pPushButton) {
55 pPushButton->Initialize();
56 }
57 m_pOldDelegate = pPushButton->SetDelegate(this);
58 m_pNormalWidget = (CFWL_Widget*)pPushButton;
59 IFWL_Widget* pWidget = m_pNormalWidget->GetWidget();
60 m_pNormalWidget->SetPrivateData(pWidget, this, NULL);
61 IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
62 pNoteDriver->RegisterEventTarget(pWidget, pWidget);
63 m_pNormalWidget->LockUpdate();
64 UpdateWidgetProperty();
65 LoadHighlightCaption();
66 m_pNormalWidget->UnlockUpdate();
67 return CXFA_FFField::LoadWidget();
68 }
69 void CXFA_FFPushButton::UpdateWidgetProperty() {
70 FX_DWORD dwStyleEx = 0;
71 switch (m_pDataAcc->GetButtonHighlight()) {
72 case XFA_ATTRIBUTEENUM_Inverted:
73 dwStyleEx = XFA_FWL_PSBSTYLEEXT_HiliteInverted;
74 break;
75 case XFA_ATTRIBUTEENUM_Outline:
76 dwStyleEx = XFA_FWL_PSBSTYLEEXT_HiliteOutLine;
77 break;
78 case XFA_ATTRIBUTEENUM_Push:
79 dwStyleEx = XFA_FWL_PSBSTYLEEXT_HilitePush;
80 break;
81 default:
82 break;
83 }
84 m_pNormalWidget->ModifyStylesEx(dwStyleEx, 0xFFFFFFFF);
85 }
86 void CXFA_FFPushButton::UnloadWidget() {
87 if (m_pRolloverTextLayout) {
88 delete m_pRolloverTextLayout;
89 m_pRolloverTextLayout = NULL;
90 }
91 if (m_pDownTextLayout) {
92 delete m_pDownTextLayout;
93 m_pDownTextLayout = NULL;
94 }
95 if (m_pDownProvider) {
96 delete m_pDownProvider;
97 m_pDownProvider = NULL;
98 }
99 if (m_pRollProvider) {
100 delete m_pRollProvider;
101 m_pRollProvider = NULL;
102 }
103 CXFA_FFField::UnloadWidget();
104 }
105 FX_BOOL CXFA_FFPushButton::PerformLayout() {
106 CXFA_FFWidget::PerformLayout();
107 CFX_RectF rtWidget;
108 GetRectWithoutRotate(rtWidget);
109 m_rtUI = rtWidget;
110 if (CXFA_Margin mgWidget = m_pDataAcc->GetMargin()) {
111 XFA_RectWidthoutMargin(rtWidget, mgWidget);
112 }
113 CXFA_Caption caption = m_pDataAcc->GetCaption();
114 m_rtCaption.Set(rtWidget.left, rtWidget.top, rtWidget.width, rtWidget.height);
115 if (CXFA_Margin mgCap = caption.GetMargin()) {
116 XFA_RectWidthoutMargin(m_rtCaption, mgCap);
117 }
118 LayoutHighlightCaption();
119 SetFWLRect();
120 if (m_pNormalWidget) {
121 m_pNormalWidget->Update();
122 }
123 return TRUE;
124 }
125 FX_FLOAT CXFA_FFPushButton::GetLineWidth() {
126 CXFA_Border border = m_pDataAcc->GetBorder();
127 if (border && border.GetPresence() == XFA_ATTRIBUTEENUM_Visible) {
128 CXFA_Edge edge = border.GetEdge(0);
129 return edge.GetThickness();
130 }
131 return 0;
132 }
133 FX_ARGB CXFA_FFPushButton::GetLineColor() {
134 return 0xFF000000;
135 }
136 FX_ARGB CXFA_FFPushButton::GetFillColor() {
137 return 0xFFFFFFFF;
138 }
139 void CXFA_FFPushButton::LoadHighlightCaption() {
140 CXFA_Caption caption = m_pDataAcc->GetCaption();
141 if (caption && caption.GetPresence() != XFA_ATTRIBUTEENUM_Hidden) {
142 {
143 CFX_WideString wsRollover;
144 FX_BOOL bRichText;
145 if (m_pDataAcc->GetButtonRollover(wsRollover, bRichText)) {
146 if (m_pRollProvider == NULL) {
147 m_pRollProvider =
148 new CXFA_TextProvider(m_pDataAcc, XFA_TEXTPROVIDERTYPE_Rollover);
149 }
150 m_pRolloverTextLayout = new CXFA_TextLayout(m_pRollProvider);
151 }
152 CFX_WideString wsDown;
153 if (m_pDataAcc->GetButtonDown(wsDown, bRichText)) {
154 if (m_pDownProvider == NULL) {
155 m_pDownProvider =
156 new CXFA_TextProvider(m_pDataAcc, XFA_TEXTPROVIDERTYPE_Down);
157 }
158 m_pDownTextLayout = new CXFA_TextLayout(m_pDownProvider);
159 }
160 }
161 }
162 }
163 void CXFA_FFPushButton::LayoutHighlightCaption() {
164 CFX_SizeF sz(m_rtCaption.width, m_rtCaption.height);
165 LayoutCaption();
166 if (m_pRolloverTextLayout) {
167 m_pRolloverTextLayout->Layout(sz);
168 }
169 if (m_pDownTextLayout) {
170 m_pDownTextLayout->Layout(sz);
171 }
172 }
173 void CXFA_FFPushButton::RenderHighlightCaption(CFX_Graphics* pGS,
174 CFX_Matrix* pMatrix) {
175 CXFA_TextLayout* pCapTextLayout = m_pDataAcc->GetCaptionTextLayout();
176 CXFA_Caption caption = m_pDataAcc->GetCaption();
177 if (caption && caption.GetPresence() == XFA_ATTRIBUTEENUM_Visible) {
178 CFX_RenderDevice* pRenderDevice = pGS->GetRenderDevice();
179 CFX_RectF rtWidget;
180 GetRectWithoutRotate(rtWidget);
181 CFX_RectF rtClip = m_rtCaption;
182 rtClip.Intersect(rtWidget);
183 CFX_Matrix mt;
184 mt.Set(1, 0, 0, 1, m_rtCaption.left, m_rtCaption.top);
185 if (pMatrix) {
186 pMatrix->TransformRect(rtClip);
187 mt.Concat(*pMatrix);
188 }
189 {
190 FX_DWORD dwState = m_pNormalWidget->GetStates();
191 if (m_pDownTextLayout && (dwState & FWL_STATE_PSB_Pressed) &&
192 (dwState & FWL_STATE_PSB_Hovered)) {
193 if (m_pDownTextLayout->DrawString(pRenderDevice, mt, rtClip)) {
194 return;
195 }
196 } else if (m_pRolloverTextLayout && (dwState & FWL_STATE_PSB_Hovered)) {
197 if (m_pRolloverTextLayout->DrawString(pRenderDevice, mt, rtClip)) {
198 return;
199 }
200 }
201 }
202 if (pCapTextLayout) {
203 pCapTextLayout->DrawString(pRenderDevice, mt, rtClip);
204 }
205 }
206 }
207 int32_t CXFA_FFPushButton::OnProcessMessage(CFWL_Message* pMessage) {
208 return m_pOldDelegate->OnProcessMessage(pMessage);
209 }
210 FWL_ERR CXFA_FFPushButton::OnProcessEvent(CFWL_Event* pEvent) {
211 m_pOldDelegate->OnProcessEvent(pEvent);
212 return CXFA_FFField::OnProcessEvent(pEvent);
213 }
214 FWL_ERR CXFA_FFPushButton::OnDrawWidget(CFX_Graphics* pGraphics,
215 const CFX_Matrix* pMatrix) {
216 if (m_pNormalWidget->GetStylesEx() & XFA_FWL_PSBSTYLEEXT_HiliteInverted) {
217 if ((m_pNormalWidget->GetStates() & FWL_STATE_PSB_Pressed) &&
218 (m_pNormalWidget->GetStates() & FWL_STATE_PSB_Hovered)) {
219 CFX_RectF rtFill;
220 m_pNormalWidget->GetWidgetRect(rtFill);
221 rtFill.left = rtFill.top = 0;
222 FX_FLOAT fLineWith = GetLineWidth();
223 rtFill.Deflate(fLineWith, fLineWith);
224 CFX_Color cr(FXARGB_MAKE(128, 128, 255, 255));
225 pGraphics->SetFillColor(&cr);
226 CFX_Path path;
227 path.Create();
228 path.AddRectangle(rtFill.left, rtFill.top, rtFill.width, rtFill.height);
229 pGraphics->FillPath(&path, FXFILL_WINDING, (CFX_Matrix*)pMatrix);
230 }
231 } else if (m_pNormalWidget->GetStylesEx() &
232 XFA_FWL_PSBSTYLEEXT_HiliteOutLine) {
233 if ((m_pNormalWidget->GetStates() & FWL_STATE_PSB_Pressed) &&
234 (m_pNormalWidget->GetStates() & FWL_STATE_PSB_Hovered)) {
235 FX_FLOAT fLineWidth = GetLineWidth();
236 CFX_Color cr(FXARGB_MAKE(255, 128, 255, 255));
237 pGraphics->SetStrokeColor(&cr);
238 pGraphics->SetLineWidth(fLineWidth);
239 CFX_Path path;
240 path.Create();
241 CFX_RectF rect;
242 m_pNormalWidget->GetWidgetRect(rect);
243 path.AddRectangle(0, 0, rect.width, rect.height);
244 pGraphics->StrokePath(&path, (CFX_Matrix*)pMatrix);
245 }
246 } else if (m_pNormalWidget->GetStylesEx() & XFA_FWL_PSBSTYLEEXT_HilitePush) {
247 }
248 return FWL_ERR_Succeeded;
249 }
OLDNEW
« no previous file with comments | « xfa/src/fxfa/app/xfa_ffpushbutton.h ('k') | xfa/src/fxfa/app/xfa_ffsignature.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698