1ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved. 2ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be 3ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// found in the LICENSE file. 4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 5ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include <algorithm> 8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/foxitlib.h" 10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fee/include/ifde_txtedtbuf.h" 11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fee/include/ifde_txtedtengine.h" 12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fee/include/ifde_txtedtpage.h" 13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fee/include/fx_wordbreak.h" 14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "fde_txtedtpage.h" 15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "fde_txtedtengine.h" 16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "fde_txtedtparag.h" 17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "fde_txtedtbuf.h" 18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FDE_TXTEDT_TOLERANCE 0.1f 19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIFDE_TxtEdtPage* IFDE_TxtEdtPage::Create(IFDE_TxtEdtEngine* pEngine, 20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nIndex) { 21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (IFDE_TxtEdtPage*)new CFDE_TxtEdtPage(pEngine, nIndex); 22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFDE_TxtEdtTextSet::CFDE_TxtEdtTextSet(CFDE_TxtEdtPage* pPage) 24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : m_pPage(pPage) {} 25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFDE_TxtEdtTextSet::~CFDE_TxtEdtTextSet() {} 26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFDE_VISUALOBJTYPE CFDE_TxtEdtTextSet::GetType() { 27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FDE_VISUALOBJ_Text; 28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CFDE_TxtEdtTextSet::GetBBox(FDE_HVISUALOBJ hVisualObj, 30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_RectF& bbox) { 31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CFDE_TxtEdtTextSet::GetMatrix(FDE_HVISUALOBJ hVisualObj, 34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_Matrix& matrix) { 35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CFDE_TxtEdtTextSet::GetRect(FDE_HVISUALOBJ hVisualObj, CFX_RectF& rt) { 38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rt = ((FDE_LPTEXTEDITPIECE)(hVisualObj))->rtPiece; 39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CFDE_TxtEdtTextSet::GetClip(FDE_HVISUALOBJ hVisualObj, CFX_RectF& rt) { 42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CFDE_TxtEdtTextSet::GetString(FDE_HVISUALOBJ hText, 45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString& wsText) { 46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FDE_LPTEXTEDITPIECE pPiece = (FDE_LPTEXTEDITPIECE)hText; 47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WCHAR* pBuffer = wsText.GetBuffer(pPiece->nCount); 48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int32_t i = 0; i < pPiece->nCount; i++) { 49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pBuffer[i] = m_pPage->GetChar((void*)hText, i); 50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann wsText.ReleaseBuffer(pPiece->nCount); 52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pPiece->nCount; 53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIFX_Font* CFDE_TxtEdtTextSet::GetFont(FDE_HVISUALOBJ hText) { 55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pPage->GetEngine()->GetEditParams()->pFont; 56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_FLOAT CFDE_TxtEdtTextSet::GetFontSize(FDE_HVISUALOBJ hText) { 58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pPage->GetEngine()->GetEditParams()->fFontSize; 59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_ARGB CFDE_TxtEdtTextSet::GetFontColor(FDE_HVISUALOBJ hText) { 61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pPage->GetEngine()->GetEditParams()->dwFontColor; 62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CFDE_TxtEdtTextSet::GetDisplayPos(FDE_HVISUALOBJ hText, 64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXTEXT_CHARPOS* pCharPos, 65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bCharCode, 66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString* pWSForms) { 67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (hText == NULL) { 68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FDE_LPTEXTEDITPIECE pPiece = (FDE_LPTEXTEDITPIECE)hText; 71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nLength = pPiece->nCount; 72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (nLength < 1) { 73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFDE_TxtEdtEngine* pEngine = (CFDE_TxtEdtEngine*)(m_pPage->GetEngine()); 76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const FDE_TXTEDTPARAMS* pTextParams = pEngine->GetEditParams(); 77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IFX_TxtBreak* pBreak = pEngine->GetTextBreak(); 78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD dwLayoutStyle = pBreak->GetLayoutStyles(); 79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_TXTRUN tr; 80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tr.pAccess = m_pPage; 81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tr.pIdentity = (void*)hText; 82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tr.pStr = NULL; 83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tr.pWidths = NULL; 84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tr.iLength = nLength; 85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tr.pFont = pTextParams->pFont; 86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tr.fFontSize = pTextParams->fFontSize; 87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tr.dwStyles = dwLayoutStyle; 88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tr.iCharRotation = pTextParams->nCharRotation; 89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tr.dwCharStyles = pPiece->dwCharStyles; 90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tr.pRect = &(pPiece->rtPiece); 91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tr.wLineBreakChar = pTextParams->wLineBreakChar; 92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pBreak->GetDisplayPos(&tr, pCharPos, bCharCode, pWSForms); 93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CFDE_TxtEdtTextSet::GetCharRects(FDE_HVISUALOBJ hText, 95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_RectFArray& rtArray) { 96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return GetCharRects_Impl(hText, rtArray); 97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CFDE_TxtEdtTextSet::GetCharRects_Impl(FDE_HVISUALOBJ hText, 99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_RectFArray& rtArray, 100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bBBox) { 101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (hText == NULL) { 102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FDE_LPTEXTEDITPIECE pPiece = (FDE_LPTEXTEDITPIECE)hText; 105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFDE_TxtEdtEngine* pEngine = (CFDE_TxtEdtEngine*)(m_pPage->GetEngine()); 106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nLength = pPiece->nCount; 107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (nLength < 1) { 108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const FDE_TXTEDTPARAMS* pTextParams = pEngine->GetEditParams(); 111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD dwLayoutStyle = pEngine->GetTextBreak()->GetLayoutStyles(); 112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_TXTRUN tr; 113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tr.pAccess = m_pPage; 114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tr.pIdentity = (void*)hText; 115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tr.pStr = NULL; 116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tr.pWidths = NULL; 117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tr.iLength = nLength; 118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tr.pFont = pTextParams->pFont; 119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tr.fFontSize = pTextParams->fFontSize; 120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tr.dwStyles = dwLayoutStyle; 121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tr.iCharRotation = pTextParams->nCharRotation; 122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tr.dwCharStyles = pPiece->dwCharStyles; 123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tr.pRect = &(pPiece->rtPiece); 124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tr.wLineBreakChar = pTextParams->wLineBreakChar; 125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pEngine->GetTextBreak()->GetCharRects(&tr, rtArray, bBBox); 126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFDE_TxtEdtPage::CFDE_TxtEdtPage(IFDE_TxtEdtEngine* pEngine, int32_t nPageIndex) 128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : m_pIter(nullptr), 129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pTextSet(nullptr), 130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pBgnParag(nullptr), 131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEndParag(nullptr), 132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_nRefCount(0), 133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_nPageStart(-1), 134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_nCharCount(0), 135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_nPageIndex(nPageIndex), 136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bLoaded(FALSE), 137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCharWidth(nullptr) { 138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_memset(&m_rtPage, 0, sizeof(CFX_RectF)); 139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_memset(&m_rtPageMargin, 0, sizeof(CFX_RectF)); 140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_memset(&m_rtPageContents, 0, sizeof(CFX_RectF)); 141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_memset(&m_rtPageCanvas, 0, sizeof(CFX_RectF)); 142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEditEngine = (CFDE_TxtEdtEngine*)pEngine; 143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFDE_TxtEdtPage::~CFDE_TxtEdtPage() { 145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_PieceMassArr.RemoveAll(TRUE); 146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pTextSet) { 147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann delete m_pTextSet; 148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pTextSet = NULL; 149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pCharWidth) { 151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann delete[] m_pCharWidth; 152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCharWidth = NULL; 153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pIter != NULL) { 155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pIter->Release(); 156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pIter = NULL; 157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CFDE_TxtEdtPage::Release() { 160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann delete this; 161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIFDE_TxtEdtEngine* CFDE_TxtEdtPage::GetEngine() const { 163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (IFDE_TxtEdtEngine*)m_pEditEngine; 164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFDE_VISUALOBJTYPE CFDE_TxtEdtPage::GetType() { 166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FDE_VISUALOBJ_Text; 167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CFDE_TxtEdtPage::GetBBox(FDE_HVISUALOBJ hVisualObj, CFX_RectF& bbox) { 169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CFDE_TxtEdtPage::GetMatrix(FDE_HVISUALOBJ hVisualObj, 172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_Matrix& matrix) { 173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CFDE_TxtEdtPage::GetRect(FDE_HVISUALOBJ hVisualObj, CFX_RectF& rt) { 176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CFDE_TxtEdtPage::GetClip(FDE_HVISUALOBJ hVisualObj, CFX_RectF& rt) { 179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CFDE_TxtEdtPage::GetCharRect(int32_t nIndex, 182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_RectF& rect, 183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bBBox) const { 184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_assert(m_nRefCount > 0); 185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_assert(nIndex >= 0 && nIndex < m_nCharCount); 186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_nRefCount < 1) { 187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nCount = m_PieceMassArr.GetSize(); 190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int32_t i = 0; i < nCount; i++) { 191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const FDE_LPTEXTEDITPIECE pPiece = m_PieceMassArr.GetPtrAt(i); 192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (nIndex >= pPiece->nStart && 193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nIndex < (pPiece->nStart + pPiece->nCount)) { 194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_RectFArray rectArr; 195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bBBox) { 196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pTextSet->GetCharRects_Impl((FDE_HVISUALOBJ)pPiece, rectArr, bBBox); 197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pTextSet->GetCharRects((FDE_HVISUALOBJ)pPiece, rectArr); 199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect = rectArr[nIndex - pPiece->nStart]; 201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pPiece->nBidiLevel; 202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_assert(0); 205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CFDE_TxtEdtPage::GetCharIndex(const CFX_PointF& fPoint, 208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL& bBefore) { 209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bVertical = m_pEditEngine->GetEditParams()->dwLayoutStyles & 210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FDE_TEXTEDITLAYOUT_DocVertical; 211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_PointF ptF = fPoint; 212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann NormalizePt2Rect(ptF, m_rtPageContents, FDE_TXTEDT_TOLERANCE); 213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nCount = m_PieceMassArr.GetSize(); 214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_RectF rtLine; 215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nBgn = 0; 216ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nEnd = 0; 217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bInLine = FALSE; 218ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t i = 0; 219ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (i = 0; i < nCount; i++) { 220ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const FDE_LPTEXTEDITPIECE pPiece = m_PieceMassArr.GetPtrAt(i); 221ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!bInLine && (bVertical ? (pPiece->rtPiece.left <= ptF.x && 222ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pPiece->rtPiece.right() > ptF.x) 223ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : (pPiece->rtPiece.top <= ptF.y && 224ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pPiece->rtPiece.bottom() > ptF.y))) { 225ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nBgn = nEnd = i; 226ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rtLine = pPiece->rtPiece; 227ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bInLine = TRUE; 228ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (bInLine) { 229ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bVertical ? (!(pPiece->rtPiece.left <= ptF.x && 230ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pPiece->rtPiece.right() > ptF.x)) 231ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : (pPiece->rtPiece.bottom() <= ptF.y || 232ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pPiece->rtPiece.top > ptF.y)) { 233ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nEnd = i - 1; 234ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 235ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 236ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rtLine.Union(pPiece->rtPiece); 237ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 238ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 239ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 240ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann NormalizePt2Rect(ptF, rtLine, FDE_TXTEDT_TOLERANCE); 241ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nCaret = 0; 242ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FDE_LPTEXTEDITPIECE pPiece = NULL; 243ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (i = nBgn; i <= nEnd; i++) { 244ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pPiece = m_PieceMassArr.GetPtrAt(i); 245ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nCaret = m_nPageStart + pPiece->nStart; 246ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pPiece->rtPiece.Contains(ptF)) { 247ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_RectFArray rectArr; 248ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pTextSet->GetCharRects((FDE_HVISUALOBJ)pPiece, rectArr); 249ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nRtCount = rectArr.GetSize(); 250ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int32_t j = 0; j < nRtCount; j++) { 251ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (rectArr[j].Contains(ptF)) { 252ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nCaret = m_nPageStart + pPiece->nStart + j; 253ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (nCaret >= m_pEditEngine->GetTextBufLength()) { 254ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bBefore = TRUE; 255ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pEditEngine->GetTextBufLength(); 256ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 257ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WCHAR wChar = m_pEditEngine->GetTextBuf()->GetCharByIndex(nCaret); 258ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (wChar == L'\n' || wChar == L'\r') { 259ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (wChar == L'\n') { 260ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pEditEngine->GetTextBuf()->GetCharByIndex(nCaret - 1) == 261ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann L'\r') { 262ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nCaret--; 263ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 264ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 265ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bBefore = TRUE; 266ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return nCaret; 267ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 268ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bVertical 269ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ? (ptF.y > ((rectArr[j].top + rectArr[j].bottom()) / 2)) 270ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : (ptF.x > ((rectArr[j].left + rectArr[j].right()) / 2))) { 271ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bBefore = FX_IsOdd(pPiece->nBidiLevel); 272ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 273ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bBefore = !FX_IsOdd(pPiece->nBidiLevel); 274ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 275ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return nCaret; 276ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 277ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 278ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 279ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 280ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bBefore = TRUE; 281ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return nCaret; 282ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 283ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CFDE_TxtEdtPage::GetCharStart() const { 284ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_nPageStart; 285ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 286ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CFDE_TxtEdtPage::GetCharCount() const { 287ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_nCharCount; 288ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 289ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CFDE_TxtEdtPage::GetDisplayPos(const CFX_RectF& rtClip, 290ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXTEXT_CHARPOS*& pCharPos, 291ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_LPRECTF pBBox) const { 292ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pCharPos = FX_Alloc(FXTEXT_CHARPOS, m_nCharCount); 293ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nCharPosCount = 0; 294ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FDE_HVISUALOBJ hVisualObj = NULL; 295ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nVisualObjCount = m_PieceMassArr.GetSize(); 296ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXTEXT_CHARPOS* pos = pCharPos; 297ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_RectF rtObj; 298ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int32_t i = 0; i < nVisualObjCount; i++) { 299ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann hVisualObj = (FDE_HVISUALOBJ)m_PieceMassArr.GetPtrAt(i); 300ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pTextSet->GetRect(hVisualObj, rtObj); 301ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!rtClip.IntersectWith(rtObj)) { 302ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 303ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 304ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nCount = m_pTextSet->GetDisplayPos(hVisualObj, pos, FALSE); 305ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nCharPosCount += nCount; 306ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pos += nCount; 307ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 308ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if ((nCharPosCount * 5) < (m_nCharCount << 2)) { 309ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXTEXT_CHARPOS* pTemp = FX_Alloc(FXTEXT_CHARPOS, nCharPosCount); 310ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_memcpy(pTemp, pCharPos, sizeof(FXTEXT_CHARPOS) * nCharPosCount); 311ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_Free(pCharPos); 312ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pCharPos = pTemp; 313ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 314ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return nCharPosCount; 315ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 316ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CFDE_TxtEdtPage::CalcRangeRectArray(int32_t nStart, 317ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nCount, 318ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_RectFArray& RectFArr) const { 319ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nPieceCount = m_PieceMassArr.GetSize(); 320ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nEnd = nStart + nCount - 1; 321ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bInRange = FALSE; 322ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int32_t i = 0; i < nPieceCount; i++) { 323ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FDE_LPTEXTEDITPIECE piece = m_PieceMassArr.GetPtrAt(i); 324ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!bInRange) { 325ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (nStart >= piece->nStart && nStart < (piece->nStart + piece->nCount)) { 326ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nRangeEnd = piece->nCount - 1; 327ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bEnd = FALSE; 328ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (nEnd >= piece->nStart && nEnd < (piece->nStart + piece->nCount)) { 329ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nRangeEnd = nEnd - piece->nStart; 330ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bEnd = TRUE; 331ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 332ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_RectFArray rcArr; 333ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pTextSet->GetCharRects((FDE_HVISUALOBJ)piece, rcArr); 334ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_RectF rectPiece = rcArr[nStart - piece->nStart]; 335ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rectPiece.Union(rcArr[nRangeEnd]); 336ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann RectFArr.Add(rectPiece); 337ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bEnd) { 338ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 339ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 340ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bInRange = TRUE; 341ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 342ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 343ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (nEnd >= piece->nStart && nEnd < (piece->nStart + piece->nCount)) { 344ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_RectFArray rcArr; 345ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pTextSet->GetCharRects((FDE_HVISUALOBJ)piece, rcArr); 346ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_RectF rectPiece = rcArr[0]; 347ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rectPiece.Union(rcArr[nEnd - piece->nStart]); 348ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann RectFArr.Add(rectPiece); 349ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 350ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 351ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann RectFArr.Add(piece->rtPiece); 352ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 353ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 354ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 355ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 356ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CFDE_TxtEdtPage::SelectWord(const CFX_PointF& fPoint, int32_t& nCount) { 357ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_nRefCount < 0) { 358ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return -1; 359ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 360ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IFDE_TxtEdtBuf* pBuf = m_pEditEngine->GetTextBuf(); 361ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bBefore; 362ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nIndex = GetCharIndex(fPoint, bBefore); 363ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (nIndex == m_pEditEngine->GetTextBufLength()) { 364ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nIndex = m_pEditEngine->GetTextBufLength() - 1; 365ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 366ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (nIndex < 0) { 367ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return -1; 368ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 369ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IFX_WordBreak* pIter = FX_WordBreak_Create(); 370ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pIter->Attach(new CFDE_TxtEdtBufIter((CFDE_TxtEdtBuf*)pBuf)); 371ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pIter->SetAt(nIndex); 372ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nCount = pIter->GetWordLength(); 373ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nRet = pIter->GetWordPos(); 374ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pIter->Release(); 375ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return nRet; 376ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 377ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CFDE_TxtEdtPage::IsLoaded(FX_LPCRECTF pClipBox) { 378ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_bLoaded; 379ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 380ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CFDE_TxtEdtPage::LoadPage(FX_LPCRECTF pClipBox, IFX_Pause* pPause) { 381ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_nRefCount > 0) { 382ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_nRefCount++; 383ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_nRefCount; 384ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 385ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IFDE_TxtEdtBuf* pBuf = m_pEditEngine->GetTextBuf(); 386ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const FDE_TXTEDTPARAMS* pParams = m_pEditEngine->GetEditParams(); 387ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pIter != NULL) { 388ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pIter->Release(); 389ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 390ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WCHAR wcAlias = 0; 391ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pParams->dwMode & FDE_TEXTEDITMODE_Password) { 392ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann wcAlias = m_pEditEngine->GetAliasChar(); 393ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 394ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pIter = new CFDE_TxtEdtBufIter((CFDE_TxtEdtBuf*)pBuf, wcAlias); 395ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IFX_TxtBreak* pBreak = m_pEditEngine->GetTextBreak(); 396ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); 397ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pBreak->ClearBreakPieces(); 398ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nPageLineCount = m_pEditEngine->GetPageLineCount(); 399ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nStartLine = nPageLineCount * m_nPageIndex; 400ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nEndLine = std::min((nStartLine + nPageLineCount - 1), 401ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (m_pEditEngine->GetLineCount() - 1)); 402ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nPageStart, nPageEnd, nTemp, nBgnParag, nStartLineInParag, nEndParag, 403ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nEndLineInParag; 404ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nBgnParag = m_pEditEngine->Line2Parag(0, 0, nStartLine, nStartLineInParag); 405ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pBgnParag = (CFDE_TxtEdtParag*)m_pEditEngine->GetParag(nBgnParag); 406ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pBgnParag->LoadParag(); 407ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pBgnParag->GetLineRange(nStartLine - nStartLineInParag, nPageStart, nTemp); 408ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nEndParag = m_pEditEngine->Line2Parag(nBgnParag, nStartLineInParag, nEndLine, 409ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nEndLineInParag); 410ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEndParag = (CFDE_TxtEdtParag*)m_pEditEngine->GetParag(nEndParag); 411ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEndParag->LoadParag(); 412ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEndParag->GetLineRange(nEndLine - nEndLineInParag, nPageEnd, nTemp); 413ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nPageEnd += (nTemp - 1); 414ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bVertial = pParams->dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical; 415ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bLineReserve = 416ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pParams->dwLayoutStyles & FDE_TEXTEDITLAYOUT_LineReserve; 417ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fLineStart = 418ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bVertial 419ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ? (bLineReserve ? (pParams->fPlateWidth - pParams->fLineSpace) : 0.0f) 420ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : 0.0f; 421ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fLineStep = 422ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (bVertial && bLineReserve) ? (-pParams->fLineSpace) : pParams->fLineSpace; 423ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fLinePos = fLineStart; 424ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pTextSet == NULL) { 425ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pTextSet = new CFDE_TxtEdtTextSet(this); 426ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 427ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_PieceMassArr.RemoveAll(TRUE); 428ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD dwBreakStatus = FX_TXTBREAK_None; 429ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nPieceStart = 0; 430ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pCharWidth != NULL) { 431ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann delete[] m_pCharWidth; 432ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 433ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCharWidth = new int32_t[nPageEnd - nPageStart + 1]; 434ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); 435ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pBreak->ClearBreakPieces(); 436ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_nPageStart = nPageStart; 437ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_nCharCount = nPageEnd - nPageStart + 1; 438ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bReload = FALSE; 439ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fDefCharWidth = 0; 440ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IFX_CharIter* pIter = m_pIter->Clone(); 441ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pIter->SetAt(nPageStart); 442ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pIter->SetAt(nPageStart); 443ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bFirstPiece = TRUE; 444ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann do { 445ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bReload) { 446ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann dwBreakStatus = pBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); 447ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 448ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WCHAR wAppend = pIter->GetChar(); 449ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann dwBreakStatus = pBreak->AppendChar(wAppend); 450ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 451ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pIter->GetAt() == nPageEnd && dwBreakStatus < FX_TXTBREAK_LineBreak) { 452ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann dwBreakStatus = pBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); 453ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 454ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (dwBreakStatus > FX_TXTBREAK_PieceBreak) { 455ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nPieceCount = pBreak->CountBreakPieces(); 456ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int32_t j = 0; j < nPieceCount; j++) { 457ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_TxtPiece* pPiece = pBreak->GetBreakPiece(j); 458ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FDE_TEXTEDITPIECE TxtEdtPiece; 459ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_memset(&TxtEdtPiece, 0, sizeof(FDE_TEXTEDITPIECE)); 460ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TxtEdtPiece.nBidiLevel = pPiece->m_iBidiLevel; 461ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TxtEdtPiece.nCount = pPiece->GetLength(); 462ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TxtEdtPiece.nStart = nPieceStart; 463ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TxtEdtPiece.dwCharStyles = pPiece->m_dwCharStyles; 464ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (FX_IsOdd(pPiece->m_iBidiLevel)) { 465ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TxtEdtPiece.dwCharStyles |= FX_TXTCHARSTYLE_OddBidiLevel; 466ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 467ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fParaBreakWidth = 0.0f; 468ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pPiece->m_dwStatus > FX_TXTBREAK_PieceBreak) { 469ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WCHAR wRtChar = pParams->wLineBreakChar; 470ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (TxtEdtPiece.nCount >= 2) { 471ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WCHAR wChar = pBuf->GetCharByIndex( 472ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_nPageStart + TxtEdtPiece.nStart + TxtEdtPiece.nCount - 1); 473ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WCHAR wCharPre = pBuf->GetCharByIndex( 474ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_nPageStart + TxtEdtPiece.nStart + TxtEdtPiece.nCount - 2); 475ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (wChar == wRtChar) { 476ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fParaBreakWidth += fDefCharWidth; 477ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 478ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (wCharPre == wRtChar) { 479ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fParaBreakWidth += fDefCharWidth; 480ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 481ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (TxtEdtPiece.nCount >= 1) { 482ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WCHAR wChar = pBuf->GetCharByIndex( 483ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_nPageStart + TxtEdtPiece.nStart + TxtEdtPiece.nCount - 1); 484ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (wChar == wRtChar) { 485ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fParaBreakWidth += fDefCharWidth; 486ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 487ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 488ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 489ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pParams->dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical) { 490ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TxtEdtPiece.rtPiece.left = fLinePos; 491ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TxtEdtPiece.rtPiece.top = (FX_FLOAT)pPiece->m_iStartPos / 20000.0f; 492ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TxtEdtPiece.rtPiece.width = pParams->fLineSpace; 493ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TxtEdtPiece.rtPiece.height = 494ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (FX_FLOAT)pPiece->m_iWidth / 20000.0f + fParaBreakWidth; 495ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 496ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TxtEdtPiece.rtPiece.left = (FX_FLOAT)pPiece->m_iStartPos / 20000.0f; 497ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TxtEdtPiece.rtPiece.top = fLinePos; 498ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TxtEdtPiece.rtPiece.width = 499ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (FX_FLOAT)pPiece->m_iWidth / 20000.0f + fParaBreakWidth; 500ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TxtEdtPiece.rtPiece.height = pParams->fLineSpace; 501ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 502ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bFirstPiece) { 503ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_rtPageContents = TxtEdtPiece.rtPiece; 504ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bFirstPiece = FALSE; 505ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 506ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_rtPageContents.Union(TxtEdtPiece.rtPiece); 507ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 508ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nPieceStart += TxtEdtPiece.nCount; 509ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_PieceMassArr.Add(TxtEdtPiece); 510ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int32_t k = 0; k < TxtEdtPiece.nCount; k++) { 511ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_Char* ptc = pPiece->GetCharPtr(k); 512ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCharWidth[TxtEdtPiece.nStart + k] = ptc->m_iCharWidth; 513ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 514ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 515ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fLinePos += fLineStep; 516ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pBreak->ClearBreakPieces(); 517ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 518ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pIter->GetAt() == nPageEnd && dwBreakStatus == FX_TXTBREAK_LineBreak) { 519ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bReload = TRUE; 520ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pIter->Next(TRUE); 521ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 522ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } while (pIter->Next(FALSE) && (pIter->GetAt() <= nPageEnd)); 523ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_rtPageContents.left != 0) { 524ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fDelta = 0.0f; 525ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_rtPageContents.width < pParams->fPlateWidth) { 526ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pParams->dwAlignment & FDE_TEXTEDITALIGN_Right) { 527ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fDelta = pParams->fPlateWidth - m_rtPageContents.width; 528ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (pParams->dwAlignment & FDE_TEXTEDITALIGN_Center) { 529ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if ((pParams->dwLayoutStyles & FDE_TEXTEDITLAYOUT_CombText) && 530ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_nCharCount > 1) { 531ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nCount = m_nCharCount - 1; 532ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t n = (m_pEditEngine->m_nLimit - nCount) / 2; 533ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fDelta = (m_rtPageContents.width / nCount) * n; 534ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 535ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fDelta = (pParams->fPlateWidth - m_rtPageContents.width) / 2; 536ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 537ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 538ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 539ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fOffset = m_rtPageContents.left - fDelta; 540ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nCount = m_PieceMassArr.GetSize(); 541ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int32_t i = 0; i < nCount; i++) { 542ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FDE_LPTEXTEDITPIECE pPiece = m_PieceMassArr.GetPtrAt(i); 543ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pPiece->rtPiece.Offset(-fOffset, 0.0f); 544ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 545ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_rtPageContents.Offset(-fOffset, 0.0f); 546ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 547ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pEditEngine->GetEditParams()->dwLayoutStyles & 548ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FDE_TEXTEDITLAYOUT_LastLineHeight) { 549ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_rtPageContents.height -= pParams->fLineSpace - pParams->fFontSize; 550ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nCount = m_PieceMassArr.GetSize(); 551ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FDE_LPTEXTEDITPIECE pPiece = m_PieceMassArr.GetPtrAt(nCount - 1); 552ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pPiece->rtPiece.height = pParams->fFontSize; 553ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 554ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pIter->Release(); 555ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_nRefCount = 1; 556ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bLoaded = TRUE; 557ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 558ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 559ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CFDE_TxtEdtPage::UnloadPage(FX_LPCRECTF pClipBox) { 560ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_assert(m_nRefCount > 0); 561ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_nRefCount--; 562ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_nRefCount == 0) { 563ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_PieceMassArr.RemoveAll(); 564ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pTextSet) { 565ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann delete m_pTextSet; 566ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pTextSet = NULL; 567ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 568ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pCharWidth) { 569ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann delete[] m_pCharWidth; 570ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCharWidth = NULL; 571ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 572ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pBgnParag) { 573ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pBgnParag->UnloadParag(); 574ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 575ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pEndParag) { 576ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEndParag->UnloadParag(); 577ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 578ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pIter) { 579ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pIter->Release(); 580ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pIter = NULL; 581ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 582ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pBgnParag = NULL; 583ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEndParag = NULL; 584ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 585ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 586ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 587ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannconst CFX_RectF& CFDE_TxtEdtPage::GetContentsBox() { 588ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_rtPageContents; 589ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 590ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_POSITION CFDE_TxtEdtPage::GetFirstPosition(FDE_HVISUALOBJ hCanvas) { 591ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_PieceMassArr.GetSize() < 1) { 592ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 593ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 594ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (FX_POSITION)1; 595ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 596ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFDE_HVISUALOBJ CFDE_TxtEdtPage::GetNext(FDE_HVISUALOBJ hCanvas, 597ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_POSITION& pos, 598ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IFDE_VisualSet*& pVisualSet) { 599ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pTextSet == NULL) { 600ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pos = NULL; 601ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 602ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 603ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nPos = (int32_t)(uintptr_t)pos; 604ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pVisualSet = m_pTextSet; 605ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (nPos + 1 > m_PieceMassArr.GetSize()) { 606ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pos = NULL; 607ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 608ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pos = (FX_POSITION)(uintptr_t)(nPos + 1); 609ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 610ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (FDE_HVISUALOBJ)(m_PieceMassArr.GetPtrAt(nPos - 1)); 611ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 612ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFDE_HVISUALOBJ CFDE_TxtEdtPage::GetParentCanvas(FDE_HVISUALOBJ hCanvas, 613ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IFDE_VisualSet*& pVisualSet) { 614ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 615ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 616ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_WCHAR CFDE_TxtEdtPage::GetChar(void* pIdentity, int32_t index) const { 617ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nIndex = 618ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_nPageStart + ((FDE_LPTEXTEDITPIECE)pIdentity)->nStart + index; 619ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (nIndex != m_pIter->GetAt()) { 620ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pIter->SetAt(nIndex); 621ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 622ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WCHAR wChar = m_pIter->GetChar(); 623ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pIter->Next(); 624ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return wChar; 625ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 626ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CFDE_TxtEdtPage::GetWidth(void* pIdentity, int32_t index) const { 627ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nWidth = 628ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCharWidth[((FDE_LPTEXTEDITPIECE)pIdentity)->nStart + index]; 629ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return nWidth; 630ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 631ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CFDE_TxtEdtPage::NormalizePt2Rect(CFX_PointF& ptF, 632ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_RectF& rtF, 633ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fTolerance) const { 634ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (rtF.Contains(ptF.x, ptF.y)) { 635ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 636ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 637ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (ptF.x < rtF.left) { 638ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptF.x = rtF.left; 639ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (ptF.x >= rtF.right()) { 640ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptF.x = rtF.right() - fTolerance; 641ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 642ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (ptF.y < rtF.top) { 643ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptF.y = rtF.top; 644ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (ptF.y >= rtF.bottom()) { 645ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptF.y = rtF.bottom() - fTolerance; 646ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 647ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 648