summaryrefslogtreecommitdiff
path: root/xfa
diff options
context:
space:
mode:
Diffstat (limited to 'xfa')
-rw-r--r--xfa/fde/cfde_rendercontext.cpp61
-rw-r--r--xfa/fde/cfde_rendercontext.h27
-rw-r--r--xfa/fwl/cfwl_edit.cpp52
-rw-r--r--xfa/fwl/cfwl_edit.h4
-rw-r--r--xfa/fxfa/cxfa_ffpageview.cpp1
5 files changed, 50 insertions, 95 deletions
diff --git a/xfa/fde/cfde_rendercontext.cpp b/xfa/fde/cfde_rendercontext.cpp
deleted file mode 100644
index 0b44cb4a27..0000000000
--- a/xfa/fde/cfde_rendercontext.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "xfa/fde/cfde_rendercontext.h"
-
-#include <vector>
-
-#include "third_party/base/logging.h"
-#include "third_party/base/ptr_util.h"
-#include "xfa/fde/cfde_renderdevice.h"
-#include "xfa/fde/cfde_txtedtpage.h"
-#include "xfa/fde/cfde_txtedttextset.h"
-
-CFDE_RenderContext::CFDE_RenderContext(CFDE_RenderDevice* pRenderDevice)
- : m_pRenderDevice(pRenderDevice) {}
-
-CFDE_RenderContext::~CFDE_RenderContext() {}
-
-void CFDE_RenderContext::Render(CFDE_TxtEdtPage* pCanvasSet,
- const CFX_Matrix& tmDoc2Device) {
- if (!m_pRenderDevice || !pCanvasSet)
- return;
-
- CFDE_TxtEdtTextSet* pVisualSet = pCanvasSet->GetTextSet();
- if (!pVisualSet)
- return;
-
- CFX_RetainPtr<CFGAS_GEFont> pFont = pVisualSet->GetFont();
- if (!pFont)
- return;
-
- CFX_RectF rtDocClip = m_pRenderDevice->GetClipRect();
- if (rtDocClip.IsEmpty()) {
- rtDocClip.left = rtDocClip.top = 0;
- rtDocClip.width = static_cast<float>(m_pRenderDevice->GetWidth());
- rtDocClip.height = static_cast<float>(m_pRenderDevice->GetHeight());
- }
- tmDoc2Device.GetInverse().TransformRect(rtDocClip);
-
- std::vector<FXTEXT_CHARPOS> char_pos;
-
- for (size_t i = 0; i < pCanvasSet->GetTextPieceCount(); ++i) {
- const FDE_TEXTEDITPIECE& pText = pCanvasSet->GetTextPiece(i);
- if (!rtDocClip.IntersectWith(pVisualSet->GetRect(pText)))
- continue;
-
- int32_t iCount = pVisualSet->GetDisplayPos(pText, nullptr, false);
- if (iCount < 1)
- continue;
- if (char_pos.size() < static_cast<size_t>(iCount))
- char_pos.resize(iCount, FXTEXT_CHARPOS());
-
- iCount = pVisualSet->GetDisplayPos(pText, char_pos.data(), false);
- m_pRenderDevice->DrawString(pVisualSet->GetFontColor(), pFont,
- char_pos.data(), iCount,
- pVisualSet->GetFontSize(), &tmDoc2Device);
- }
-}
diff --git a/xfa/fde/cfde_rendercontext.h b/xfa/fde/cfde_rendercontext.h
deleted file mode 100644
index 6be77c6453..0000000000
--- a/xfa/fde/cfde_rendercontext.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef XFA_FDE_CFDE_RENDERCONTEXT_H_
-#define XFA_FDE_CFDE_RENDERCONTEXT_H_
-
-#include "core/fxcrt/fx_coordinates.h"
-
-class CFDE_RenderDevice;
-class CFDE_TxtEdtPage;
-class CFDE_TxtEdtTextSet;
-
-class CFDE_RenderContext {
- public:
- explicit CFDE_RenderContext(CFDE_RenderDevice* pRenderDevice);
- ~CFDE_RenderContext();
-
- void Render(CFDE_TxtEdtPage* pCanvasSet, const CFX_Matrix& tmDoc2Device);
-
- private:
- CFDE_RenderDevice* m_pRenderDevice;
-};
-
-#endif // XFA_FDE_CFDE_RENDERCONTEXT_H_
diff --git a/xfa/fwl/cfwl_edit.cpp b/xfa/fwl/cfwl_edit.cpp
index fe4b9dad0c..042e076ab6 100644
--- a/xfa/fwl/cfwl_edit.cpp
+++ b/xfa/fwl/cfwl_edit.cpp
@@ -13,10 +13,10 @@
#include "third_party/base/ptr_util.h"
#include "third_party/base/stl_util.h"
-#include "xfa/fde/cfde_rendercontext.h"
#include "xfa/fde/cfde_renderdevice.h"
#include "xfa/fde/cfde_txtedtengine.h"
#include "xfa/fde/cfde_txtedtpage.h"
+#include "xfa/fde/cfde_txtedttextset.h"
#include "xfa/fgas/font/cfgas_gefont.h"
#include "xfa/fwl/cfwl_app.h"
#include "xfa/fwl/cfwl_caret.h"
@@ -567,11 +567,7 @@ void CFWL_Edit::DrawContent(CXFA_Graphics* pGraphics,
if (!pRenderDev)
return;
- CFDE_RenderDevice renderDevice(pRenderDev);
- renderDevice.SetClipRect(rtClip);
-
- CFDE_RenderContext renderContext(&renderDevice);
- renderContext.Render(pPage, mt);
+ RenderText(pRenderDev, rtClip, *pPage, mt);
if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_CombText) {
pGraphics->RestoreGraphState();
@@ -596,6 +592,50 @@ void CFWL_Edit::DrawContent(CXFA_Graphics* pGraphics,
pGraphics->RestoreGraphState();
}
+void CFWL_Edit::RenderText(CFX_RenderDevice* pRenderDev,
+ const CFX_RectF& clipRect,
+ const CFDE_TxtEdtPage& pPage,
+ const CFX_Matrix& mt) {
+ ASSERT(pRenderDev);
+
+ CFDE_TxtEdtTextSet* pTextSet = pPage.GetTextSet();
+ if (!pTextSet)
+ return;
+
+ CFX_RetainPtr<CFGAS_GEFont> pFont = pTextSet->GetFont();
+ if (!pFont)
+ return;
+
+ CFDE_RenderDevice renderDevice(pRenderDev);
+ renderDevice.SetClipRect(clipRect);
+
+ CFX_RectF rtDocClip = renderDevice.GetClipRect();
+ if (rtDocClip.IsEmpty()) {
+ rtDocClip.left = rtDocClip.top = 0;
+ rtDocClip.width = static_cast<float>(renderDevice.GetWidth());
+ rtDocClip.height = static_cast<float>(renderDevice.GetHeight());
+ }
+ mt.GetInverse().TransformRect(rtDocClip);
+
+ std::vector<FXTEXT_CHARPOS> char_pos;
+
+ for (size_t i = 0; i < pPage.GetTextPieceCount(); ++i) {
+ const FDE_TEXTEDITPIECE& pText = pPage.GetTextPiece(i);
+ if (!rtDocClip.IntersectWith(pTextSet->GetRect(pText)))
+ continue;
+
+ int32_t iCount = pTextSet->GetDisplayPos(pText, nullptr, false);
+ if (iCount < 1)
+ continue;
+ if (char_pos.size() < static_cast<size_t>(iCount))
+ char_pos.resize(iCount, FXTEXT_CHARPOS());
+
+ iCount = pTextSet->GetDisplayPos(pText, char_pos.data(), false);
+ renderDevice.DrawString(pTextSet->GetFontColor(), pFont, char_pos.data(),
+ iCount, pTextSet->GetFontSize(), &mt);
+ }
+}
+
void CFWL_Edit::UpdateEditEngine() {
UpdateEditParams();
UpdateEditLayout();
diff --git a/xfa/fwl/cfwl_edit.h b/xfa/fwl/cfwl_edit.h
index 15d20bf7cb..dd165032a3 100644
--- a/xfa/fwl/cfwl_edit.h
+++ b/xfa/fwl/cfwl_edit.h
@@ -109,6 +109,10 @@ class CFWL_Edit : public CFWL_Widget {
CFDE_TxtEdtEngine* GetTxtEdtEngine() { return &m_EdtEngine; }
private:
+ void RenderText(CFX_RenderDevice* pRenderDev,
+ const CFX_RectF& clipRect,
+ const CFDE_TxtEdtPage& pPage,
+ const CFX_Matrix& mt);
void DrawTextBk(CXFA_Graphics* pGraphics,
IFWL_ThemeProvider* pTheme,
const CFX_Matrix* pMatrix);
diff --git a/xfa/fxfa/cxfa_ffpageview.cpp b/xfa/fxfa/cxfa_ffpageview.cpp
index 9ba4432352..594d71db0d 100644
--- a/xfa/fxfa/cxfa_ffpageview.cpp
+++ b/xfa/fxfa/cxfa_ffpageview.cpp
@@ -12,7 +12,6 @@
#include "third_party/base/ptr_util.h"
#include "third_party/base/stl_util.h"
-#include "xfa/fde/cfde_rendercontext.h"
#include "xfa/fxfa/cxfa_ffcheckbutton.h"
#include "xfa/fxfa/cxfa_ffdoc.h"
#include "xfa/fxfa/cxfa_ffdocview.h"