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