blob: bfe32ae8ade30bd8db544deb9e7d4e18f0f8318b [file] [log] [blame]
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -07001// 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.
Lei Zhanga6d9f0e2015-06-13 00:48:38 -07004
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -07005// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#include "../../include/pdfwindow/PDFWindow.h"
8#include "../../include/pdfwindow/PWL_Wnd.h"
9#include "../../include/pdfwindow/PWL_Icon.h"
10#include "../../include/pdfwindow/PWL_Signature.h"
11#include "../../include/pdfwindow/PWL_Label.h"
12#include "../../include/pdfwindow/PWL_Utils.h"
13
Nico Weber9d8ec5a2015-08-04 13:00:21 -070014/* --------------------------------- CPWL_Signature_Image
15 * --------------------------------- */
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070016
Nico Weber9d8ec5a2015-08-04 13:00:21 -070017CPWL_Signature_Image::CPWL_Signature_Image() : m_pImage(NULL) {}
18
19CPWL_Signature_Image::~CPWL_Signature_Image() {}
20
21void CPWL_Signature_Image::SetImage(CFX_DIBSource* pImage) {
22 m_pImage = pImage;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070023}
24
Nico Weber9d8ec5a2015-08-04 13:00:21 -070025CFX_DIBSource* CPWL_Signature_Image::GetImage() {
26 return m_pImage;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070027}
28
Nico Weber9d8ec5a2015-08-04 13:00:21 -070029void CPWL_Signature_Image::DrawThisAppearance(CFX_RenderDevice* pDevice,
30 CPDF_Matrix* pUser2Device) {
31 CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device);
32
33 if (m_pImage) {
34 CPDF_Rect rcClient = GetClientRect();
35
36 FX_FLOAT x, y;
37 pUser2Device->Transform(rcClient.left, rcClient.top, x, y);
38
39 pDevice->StretchDIBits(m_pImage, (int32_t)x, (int32_t)y,
40 (int32_t)rcClient.Width(),
41 (int32_t)rcClient.Height());
42 }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070043}
44
Nico Weber9d8ec5a2015-08-04 13:00:21 -070045void CPWL_Signature_Image::GetThisAppearanceStream(
46 CFX_ByteTextBuf& sAppStream) {
47 sAppStream << CPWL_Image::GetImageAppStream();
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070048}
49
Nico Weber9d8ec5a2015-08-04 13:00:21 -070050void CPWL_Signature_Image::GetScale(FX_FLOAT& fHScale, FX_FLOAT& fVScale) {
51 FX_FLOAT fImageW, fImageH;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070052
Nico Weber9d8ec5a2015-08-04 13:00:21 -070053 GetImageSize(fImageW, fImageH);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070054
Nico Weber9d8ec5a2015-08-04 13:00:21 -070055 CPDF_Rect rcClient = GetClientRect();
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070056
Nico Weber9d8ec5a2015-08-04 13:00:21 -070057 fHScale = rcClient.Width() / fImageW;
58 fVScale = rcClient.Height() / fImageH;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070059}
60
Nico Weber9d8ec5a2015-08-04 13:00:21 -070061/* --------------------------------- CPWL_Signature
62 * --------------------------------- */
63
64CPWL_Signature::CPWL_Signature()
65 : m_pText(NULL),
66 m_pDescription(NULL),
67 m_pImage(NULL),
68 m_bTextExist(TRUE),
69 m_bImageExist(FALSE),
70 m_bFlagExist(TRUE) {}
71
72CPWL_Signature::~CPWL_Signature() {}
73
74void CPWL_Signature::SetTextFlag(FX_BOOL bTextExist) {
75 m_bTextExist = bTextExist;
76
77 RePosChildWnd();
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070078}
79
Nico Weber9d8ec5a2015-08-04 13:00:21 -070080void CPWL_Signature::SetImageFlag(FX_BOOL bImageExist) {
81 m_bImageExist = bImageExist;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070082
Nico Weber9d8ec5a2015-08-04 13:00:21 -070083 RePosChildWnd();
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070084}
85
Nico Weber9d8ec5a2015-08-04 13:00:21 -070086void CPWL_Signature::SetFoxitFlag(FX_BOOL bFlagExist) {
87 m_bFlagExist = bFlagExist;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070088}
89
Nico Weber9d8ec5a2015-08-04 13:00:21 -070090void CPWL_Signature::SetText(const FX_WCHAR* sText) {
91 m_pText->SetText(sText);
92
93 RePosChildWnd();
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070094}
95
Nico Weber9d8ec5a2015-08-04 13:00:21 -070096void CPWL_Signature::SetDescription(const FX_WCHAR* string) {
97 m_pDescription->SetText(string);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070098
Nico Weber9d8ec5a2015-08-04 13:00:21 -070099 RePosChildWnd();
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700100}
101
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700102void CPWL_Signature::SetImage(CFX_DIBSource* pImage) {
103 m_pImage->SetImage(pImage);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700104
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700105 RePosChildWnd();
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700106}
107
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700108void CPWL_Signature::SetImageStream(CPDF_Stream* pStream,
109 const FX_CHAR* sImageAlias) {
110 m_pImage->SetPDFStream(pStream);
111 m_pImage->SetImageAlias(sImageAlias);
112
113 RePosChildWnd();
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700114}
115
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700116void CPWL_Signature::RePosChildWnd() {
117 CPDF_Rect rcClient = GetClientRect();
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700118
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700119 CPDF_Rect rcText = rcClient;
120 CPDF_Rect rcDescription = rcClient;
121
122 FX_BOOL bTextVisible = m_bTextExist && m_pText->GetText().GetLength() > 0;
123
124 if ((bTextVisible || m_bImageExist) &&
125 m_pDescription->GetText().GetLength() > 0) {
126 if (rcClient.Width() >= rcClient.Height()) {
127 rcText.right = rcText.left + rcClient.Width() / 2.0f;
128 rcDescription.left = rcDescription.right - rcClient.Width() / 2.0f;
129 } else {
130 rcText.bottom = rcText.top - rcClient.Height() / 2.0f;
131 rcDescription.top = rcDescription.bottom + rcClient.Height() / 2.0f;
132 }
133 }
134
135 m_pText->SetVisible(bTextVisible);
136 m_pImage->SetVisible(m_bImageExist);
137
138 m_pText->Move(rcText, TRUE, FALSE);
139 m_pImage->Move(rcText, TRUE, FALSE);
140 m_pDescription->Move(rcDescription, TRUE, FALSE);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700141}
142
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700143void CPWL_Signature::CreateChildWnd(const PWL_CREATEPARAM& cp) {
144 m_pImage = new CPWL_Signature_Image;
145 PWL_CREATEPARAM icp = cp;
146 icp.pParentWnd = this;
147 icp.dwFlags = PWS_CHILD | PWS_VISIBLE;
148 icp.sTextColor = CPWL_Color(COLORTYPE_GRAY, 0);
149 m_pImage->Create(icp);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700150
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700151 m_pText = new CPWL_Label;
152 PWL_CREATEPARAM acp = cp;
153 acp.pParentWnd = this;
154 acp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_AUTOFONTSIZE | PES_MULTILINE |
155 PES_AUTORETURN | PES_MIDDLE | PES_CENTER;
156 acp.sTextColor = CPWL_Color(COLORTYPE_GRAY, 0);
157 m_pText->Create(acp);
158
159 m_pDescription = new CPWL_Label;
160 PWL_CREATEPARAM dcp = cp;
161 dcp.pParentWnd = this;
162 dcp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_AUTOFONTSIZE | PES_MULTILINE |
163 PES_AUTORETURN | PES_LEFT | PES_CENTER;
164 dcp.sTextColor = CPWL_Color(COLORTYPE_GRAY, 0);
165 m_pDescription->Create(dcp);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700166}
167
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700168void CPWL_Signature::DrawThisAppearance(CFX_RenderDevice* pDevice,
169 CPDF_Matrix* pUser2Device) {
170 CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700171
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700172 if (m_bFlagExist)
173 CPWL_Utils::DrawIconAppStream(
174 pDevice, pUser2Device, PWL_ICONTYPE_FOXIT,
175 CPWL_Utils::GetCenterSquare(GetClientRect()),
176 CPWL_Color(COLORTYPE_RGB, 0.91f, 0.855f, 0.92f),
177 CPWL_Color(COLORTYPE_TRANSPARENT), 255);
178
179 /*
180 CPDF_Rect rcClient = GetClientRect();
181
182 CFX_PathData path;
183
184 path.SetPointCount(2);
185 path.SetPoint(0, rcClient.left, (rcClient.top + rcClient.bottom) * 0.5f,
186 FXPT_MOVETO);
187 path.SetPoint(1, rcClient.right, (rcClient.top + rcClient.bottom) * 0.5f,
188 FXPT_LINETO);
189
190 CFX_GraphStateData gsd;
191 gsd.SetDashCount(2);
192 gsd.m_DashArray[0] = 6.0f;
193 gsd.m_DashArray[1] = 6.0f;
194 gsd.m_DashPhase = 0;
195
196 gsd.m_LineWidth = 10.0f;
197 pDevice->DrawPath(&path, pUser2Device, &gsd, 0, ArgbEncode(255,255,0,0),
198 FXFILL_ALTERNATE);
199 */
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700200}
201
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700202void CPWL_Signature::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) {
203 CPWL_Wnd::GetThisAppearanceStream(sAppStream);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700204}