OLD | NEW |
| (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 "fpdfsdk/include/pdfwindow/PWL_Label.h" | |
8 #include "fpdfsdk/include/pdfwindow/PWL_Utils.h" | |
9 #include "fpdfsdk/include/pdfwindow/PWL_Wnd.h" | |
10 | |
11 CPWL_Label::CPWL_Label() : m_pEdit(NULL) { | |
12 m_pEdit = IFX_Edit::NewEdit(); | |
13 ASSERT(m_pEdit); | |
14 } | |
15 | |
16 CPWL_Label::~CPWL_Label() { | |
17 IFX_Edit::DelEdit(m_pEdit); | |
18 } | |
19 | |
20 CFX_ByteString CPWL_Label::GetClassName() const { | |
21 return "CPWL_Label"; | |
22 } | |
23 | |
24 void CPWL_Label::OnCreated() { | |
25 SetParamByFlag(); | |
26 SetFontSize(GetCreationParam().fFontSize); | |
27 | |
28 m_pEdit->SetFontMap(GetFontMap()); | |
29 m_pEdit->Initialize(); | |
30 | |
31 if (HasFlag(PES_TEXTOVERFLOW)) { | |
32 SetClipRect(CFX_FloatRect(0.0f, 0.0f, 0.0f, 0.0f)); | |
33 m_pEdit->SetTextOverflow(TRUE); | |
34 } | |
35 } | |
36 | |
37 void CPWL_Label::SetText(const FX_WCHAR* csText) { | |
38 m_pEdit->SetText(csText); | |
39 } | |
40 | |
41 void CPWL_Label::RePosChildWnd() { | |
42 m_pEdit->SetPlateRect(GetClientRect()); | |
43 } | |
44 | |
45 void CPWL_Label::SetFontSize(FX_FLOAT fFontSize) { | |
46 m_pEdit->SetFontSize(fFontSize); | |
47 } | |
48 | |
49 FX_FLOAT CPWL_Label::GetFontSize() const { | |
50 return m_pEdit->GetFontSize(); | |
51 } | |
52 | |
53 void CPWL_Label::SetParamByFlag() { | |
54 if (HasFlag(PES_LEFT)) { | |
55 m_pEdit->SetAlignmentH(0); | |
56 } else if (HasFlag(PES_MIDDLE)) { | |
57 m_pEdit->SetAlignmentH(1); | |
58 } else if (HasFlag(PES_RIGHT)) { | |
59 m_pEdit->SetAlignmentH(2); | |
60 } else { | |
61 m_pEdit->SetAlignmentH(0); | |
62 } | |
63 | |
64 if (HasFlag(PES_TOP)) { | |
65 m_pEdit->SetAlignmentV(0); | |
66 } else if (HasFlag(PES_CENTER)) { | |
67 m_pEdit->SetAlignmentV(1); | |
68 } else if (HasFlag(PES_BOTTOM)) { | |
69 m_pEdit->SetAlignmentV(2); | |
70 } else { | |
71 m_pEdit->SetAlignmentV(0); | |
72 } | |
73 | |
74 if (HasFlag(PES_PASSWORD)) { | |
75 m_pEdit->SetPasswordChar('*'); | |
76 } | |
77 | |
78 m_pEdit->SetMultiLine(HasFlag(PES_MULTILINE)); | |
79 m_pEdit->SetAutoReturn(HasFlag(PES_AUTORETURN)); | |
80 m_pEdit->SetAutoFontSize(HasFlag(PWS_AUTOFONTSIZE)); | |
81 m_pEdit->SetAutoScroll(HasFlag(PES_AUTOSCROLL)); | |
82 } | |
83 | |
84 void CPWL_Label::DrawThisAppearance(CFX_RenderDevice* pDevice, | |
85 CFX_Matrix* pUser2Device) { | |
86 CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device); | |
87 | |
88 GetClientRect(); | |
89 | |
90 CFX_FloatRect rcClip; | |
91 CPVT_WordRange wrRange = m_pEdit->GetVisibleWordRange(); | |
92 CPVT_WordRange* pRange = NULL; | |
93 | |
94 if (!HasFlag(PES_TEXTOVERFLOW)) { | |
95 rcClip = GetClientRect(); | |
96 pRange = &wrRange; | |
97 } | |
98 IFX_SystemHandler* pSysHandler = GetSystemHandler(); | |
99 IFX_Edit::DrawEdit( | |
100 pDevice, pUser2Device, m_pEdit, | |
101 CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), | |
102 CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor(), GetTransparency()), | |
103 rcClip, CFX_FloatPoint(0.0f, 0.0f), pRange, pSysHandler, NULL); | |
104 } | |
105 | |
106 void CPWL_Label::SetHorzScale(int32_t nHorzScale) { | |
107 m_pEdit->SetHorzScale(nHorzScale); | |
108 } | |
109 | |
110 void CPWL_Label::SetCharSpace(FX_FLOAT fCharSpace) { | |
111 m_pEdit->SetCharSpace(fCharSpace); | |
112 } | |
113 | |
114 CFX_FloatRect CPWL_Label::GetContentRect() const { | |
115 return m_pEdit->GetContentRect(); | |
116 } | |
117 | |
118 void CPWL_Label::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) { | |
119 CPWL_Wnd::GetThisAppearanceStream(sAppStream); | |
120 | |
121 sAppStream << GetTextAppearanceStream(CFX_FloatPoint(0.0f, 0.0f)); | |
122 } | |
123 | |
124 CFX_ByteString CPWL_Label::GetTextAppearanceStream( | |
125 const CFX_FloatPoint& ptOffset) const { | |
126 CFX_ByteTextBuf sRet; | |
127 CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(m_pEdit, ptOffset); | |
128 | |
129 if (sEdit.GetLength() > 0) { | |
130 sRet << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) << sEdit | |
131 << "ET\n"; | |
132 } | |
133 | |
134 return sRet.GetByteString(); | |
135 } | |
136 | |
137 CFX_WideString CPWL_Label::GetText() const { | |
138 return m_pEdit->GetText(); | |
139 } | |
140 | |
141 void CPWL_Label::SetLimitChar(int32_t nLimitChar) { | |
142 m_pEdit->SetLimitChar(nLimitChar); | |
143 } | |
144 | |
145 int32_t CPWL_Label::GetTotalWords() { | |
146 if (m_pEdit) | |
147 return m_pEdit->GetTotalWords(); | |
148 | |
149 return 0; | |
150 } | |
OLD | NEW |