1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file.
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PDFWindow.h"
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_Wnd.h"
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_Label.h"
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_Utils.h"
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ---------------------------- CPWL_Label ------------------------------ */
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_Label::CPWL_Label() : m_pEdit(NULL)
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit = IFX_Edit::NewEdit();
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pEdit != NULL);
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_Label::~CPWL_Label()
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	IFX_Edit::DelEdit(m_pEdit);
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPWL_Label::GetClassName() const
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return "CPWL_Label";
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Label::OnCreated()
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	SetParamByFlag();
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	SetFontSize(this->GetCreationParam().fFontSize);
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->SetFontMap(this->GetFontMap());
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->Initialize();
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PES_TEXTOVERFLOW))
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		SetClipRect(CPDF_Rect(0.0f,0.0f,0.0f,0.0f));
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->SetTextOverflow(TRUE);
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Label::SetText(FX_LPCWSTR csText)
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->SetText(csText);
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Label::RePosChildWnd()
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->SetPlateRect(GetClientRect());
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Label::SetFontSize(FX_FLOAT fFontSize)
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->SetFontSize(fFontSize);
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_FLOAT CPWL_Label::GetFontSize() const
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return m_pEdit->GetFontSize();
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Label::SetParamByFlag()
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PES_LEFT))
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->SetAlignmentH(0);
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (HasFlag(PES_MIDDLE))
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->SetAlignmentH(1);
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (HasFlag(PES_RIGHT))
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->SetAlignmentH(2);
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->SetAlignmentH(0);
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PES_TOP))
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->SetAlignmentV(0);
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (HasFlag(PES_CENTER))
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->SetAlignmentV(1);
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (HasFlag(PES_BOTTOM))
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->SetAlignmentV(2);
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->SetAlignmentV(0);
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PES_PASSWORD))
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->SetPasswordChar('*');
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->SetMultiLine(HasFlag(PES_MULTILINE));
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->SetAutoReturn(HasFlag(PES_AUTORETURN));
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->SetAutoFontSize(HasFlag(PWS_AUTOFONTSIZE));
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->SetAutoScroll(HasFlag(PES_AUTOSCROLL));
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Label::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Device);
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	GetClientRect();
118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect rcClip;
120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordRange wrRange = m_pEdit->GetVisibleWordRange();
121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordRange* pRange = NULL;
122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!HasFlag(PES_TEXTOVERFLOW))
124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		rcClip = GetClientRect();
126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pRange = &wrRange;
127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
128ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovIFX_SystemHandler* pSysHandler = GetSystemHandler();
129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	IFX_Edit::DrawEdit(pDevice, pUser2Device, m_pEdit,
130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPWL_Utils::PWLColorToFXColor(GetTextColor(), this->GetTransparency()),
131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor(), this->GetTransparency()),
132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		rcClip, CPDF_Point(0.0f,0.0f), pRange,pSysHandler, NULL);
133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Label::SetHorzScale(FX_INT32 nHorzScale)
136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->SetHorzScale(nHorzScale);
138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Label::SetCharSpace(FX_FLOAT fCharSpace)
141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->SetCharSpace(fCharSpace);
143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
145ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Rect CPWL_Label::GetContentRect() const
146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return m_pEdit->GetContentRect();
148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Label::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream)
151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_Wnd::GetThisAppearanceStream(sAppStream);
153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	sAppStream << GetTextAppearanceStream(CPDF_Point(0.0f, 0.0f));
155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
157ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPWL_Label::GetTextAppearanceStream(const CPDF_Point & ptOffset) const
158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteTextBuf sRet;
160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(m_pEdit,ptOffset);
161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (sEdit.GetLength() > 0)
163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		sRet << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) << sEdit << "ET\n";
165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return sRet.GetByteString();
168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
170ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_WideString CPWL_Label::GetText() const
171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return m_pEdit->GetText();
173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Label::SetLimitChar(FX_INT32 nLimitChar)
176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->SetLimitChar(nLimitChar);
178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
180ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_INT32 CPWL_Label::GetTotalWords()
181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pEdit)
183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return m_pEdit->GetTotalWords();
184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return 0;
186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
188