Home | History | Annotate | Download | only in pdfwindow
      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 "../../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 
     14 /* --------------------------------- CPWL_Signature_Image --------------------------------- */
     15 
     16 CPWL_Signature_Image::CPWL_Signature_Image() : m_pImage(NULL)
     17 {
     18 }
     19 
     20 CPWL_Signature_Image::~CPWL_Signature_Image()
     21 {
     22 }
     23 
     24 void CPWL_Signature_Image::SetImage(CFX_DIBSource* pImage)
     25 {
     26 	m_pImage = pImage;
     27 }
     28 
     29 CFX_DIBSource* CPWL_Signature_Image::GetImage()
     30 {
     31 	return m_pImage;
     32 }
     33 
     34 void CPWL_Signature_Image::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
     35 {
     36 	CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device);
     37 
     38 	if (m_pImage)
     39 	{
     40 		CPDF_Rect rcClient = GetClientRect();
     41 
     42 		FX_FLOAT x, y;
     43 		pUser2Device->Transform(rcClient.left, rcClient.top, x, y);
     44 
     45 		pDevice->StretchDIBits(m_pImage, (FX_INT32)x, (FX_INT32)y,
     46 			(FX_INT32)rcClient.Width(), (FX_INT32)rcClient.Height());
     47 	}
     48 }
     49 
     50 void CPWL_Signature_Image::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream)
     51 {
     52 	sAppStream << CPWL_Image::GetImageAppStream();
     53 }
     54 
     55 void CPWL_Signature_Image::GetScale(FX_FLOAT & fHScale,FX_FLOAT & fVScale)
     56 {
     57 	FX_FLOAT fImageW, fImageH;
     58 
     59 	GetImageSize(fImageW, fImageH);
     60 
     61 	CPDF_Rect rcClient = GetClientRect();
     62 
     63 	fHScale = rcClient.Width() / fImageW;
     64 	fVScale = rcClient.Height() / fImageH;
     65 }
     66 
     67 /* --------------------------------- CPWL_Signature --------------------------------- */
     68 
     69 CPWL_Signature::CPWL_Signature() :
     70 	m_pText(NULL),
     71 	m_pDescription(NULL),
     72 	m_pImage(NULL),
     73 	m_bTextExist(TRUE),
     74 	m_bImageExist(FALSE),
     75 	m_bFlagExist(TRUE)
     76 {
     77 }
     78 
     79 CPWL_Signature::~CPWL_Signature()
     80 {
     81 }
     82 
     83 void CPWL_Signature::SetTextFlag(FX_BOOL bTextExist)
     84 {
     85 	m_bTextExist = bTextExist;
     86 
     87 	RePosChildWnd();
     88 }
     89 
     90 void CPWL_Signature::SetImageFlag(FX_BOOL bImageExist)
     91 {
     92 	m_bImageExist = bImageExist;
     93 
     94 	RePosChildWnd();
     95 }
     96 
     97 void CPWL_Signature::SetFoxitFlag(FX_BOOL bFlagExist)
     98 {
     99 	m_bFlagExist = bFlagExist;
    100 }
    101 
    102 void CPWL_Signature::SetText(FX_LPCWSTR sText)
    103 {
    104 	m_pText->SetText(sText);
    105 
    106 	RePosChildWnd();
    107 }
    108 
    109 void CPWL_Signature::SetDescription(FX_LPCWSTR string)
    110 {
    111 	m_pDescription->SetText(string);
    112 
    113 	RePosChildWnd();
    114 }
    115 
    116 void CPWL_Signature::SetImage(CFX_DIBSource* pImage)
    117 {
    118 	m_pImage->SetImage(pImage);
    119 
    120 	RePosChildWnd();
    121 }
    122 
    123 void CPWL_Signature::SetImageStream(CPDF_Stream * pStream, FX_LPCSTR sImageAlias)
    124 {
    125 	m_pImage->SetPDFStream(pStream);
    126 	m_pImage->SetImageAlias(sImageAlias);
    127 
    128 	RePosChildWnd();
    129 }
    130 
    131 void CPWL_Signature::RePosChildWnd()
    132 {
    133 	CPDF_Rect rcClient = GetClientRect();
    134 
    135 	CPDF_Rect rcText = rcClient;
    136 	CPDF_Rect rcDescription = rcClient;
    137 
    138 	FX_BOOL bTextVisible = m_bTextExist && m_pText->GetText().GetLength() > 0;
    139 
    140 	if ((bTextVisible || m_bImageExist) &&
    141 		m_pDescription->GetText().GetLength() > 0)
    142 	{
    143 		if (rcClient.Width() >= rcClient.Height())
    144 		{
    145 			rcText.right = rcText.left + rcClient.Width() / 2.0f;
    146 			rcDescription.left = rcDescription.right - rcClient.Width() / 2.0f;
    147 		}
    148 		else
    149 		{
    150 			rcText.bottom = rcText.top - rcClient.Height() / 2.0f;
    151 			rcDescription.top = rcDescription.bottom + rcClient.Height() / 2.0f;
    152 		}
    153 	}
    154 
    155 	m_pText->SetVisible(bTextVisible);
    156 	m_pImage->SetVisible(m_bImageExist);
    157 
    158 	m_pText->Move(rcText, TRUE, FALSE);
    159 	m_pImage->Move(rcText, TRUE, FALSE);
    160 	m_pDescription->Move(rcDescription, TRUE, FALSE);
    161 }
    162 
    163 void CPWL_Signature::CreateChildWnd(const PWL_CREATEPARAM & cp)
    164 {
    165 	m_pImage = new CPWL_Signature_Image;
    166 	PWL_CREATEPARAM icp = cp;
    167 	icp.pParentWnd = this;
    168 	icp.dwFlags = PWS_CHILD | PWS_VISIBLE;
    169 	icp.sTextColor = CPWL_Color(COLORTYPE_GRAY, 0);
    170 	m_pImage->Create(icp);
    171 
    172 	m_pText = new CPWL_Label;
    173 	PWL_CREATEPARAM acp = cp;
    174 	acp.pParentWnd = this;
    175 	acp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_AUTOFONTSIZE | PES_MULTILINE | PES_AUTORETURN | PES_MIDDLE | PES_CENTER;
    176 	acp.sTextColor = CPWL_Color(COLORTYPE_GRAY, 0);
    177 	m_pText->Create(acp);
    178 
    179 	m_pDescription = new CPWL_Label;
    180 	PWL_CREATEPARAM dcp = cp;
    181 	dcp.pParentWnd = this;
    182 	dcp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_AUTOFONTSIZE | PES_MULTILINE | PES_AUTORETURN | PES_LEFT | PES_CENTER;
    183 	dcp.sTextColor = CPWL_Color(COLORTYPE_GRAY, 0);
    184 	m_pDescription->Create(dcp);
    185 }
    186 
    187 void CPWL_Signature::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
    188 {
    189 	CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device);
    190 
    191 	if (m_bFlagExist)
    192 		CPWL_Utils::DrawIconAppStream(pDevice, pUser2Device, PWL_ICONTYPE_FOXIT, CPWL_Utils::GetCenterSquare(GetClientRect()),
    193 			CPWL_Color(COLORTYPE_RGB,0.91f,0.855f,0.92f), CPWL_Color(COLORTYPE_TRANSPARENT), 255);
    194 
    195 	/*
    196 	CPDF_Rect rcClient = GetClientRect();
    197 
    198 	CFX_PathData path;
    199 
    200 	path.SetPointCount(2);
    201 	path.SetPoint(0, rcClient.left, (rcClient.top + rcClient.bottom) * 0.5f, FXPT_MOVETO);
    202 	path.SetPoint(1, rcClient.right, (rcClient.top + rcClient.bottom) * 0.5f, FXPT_LINETO);
    203 
    204 	CFX_GraphStateData gsd;
    205 	gsd.SetDashCount(2);
    206 	gsd.m_DashArray[0] = 6.0f;
    207 	gsd.m_DashArray[1] = 6.0f;
    208 	gsd.m_DashPhase = 0;
    209 
    210 	gsd.m_LineWidth = 10.0f;
    211 	pDevice->DrawPath(&path, pUser2Device, &gsd, 0, ArgbEncode(255,255,0,0), FXFILL_ALTERNATE);
    212 	*/
    213 }
    214 
    215 void CPWL_Signature::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream)
    216 {
    217 	CPWL_Wnd::GetThisAppearanceStream(sAppStream);
    218 }
    219 
    220 
    221