Remove RenderDeviceDriverIface::GetCTM().
It has no overrides and always returns the identity matrix. Many callers
that use the returned value can be simplified, because they are scaling
by 1 or concatenating an identity matrix.
Change-Id: I7afb7214be210d02638644dfb9b58404420c2ef2
Reviewed-on: https://pdfium-review.googlesource.com/29972
Commit-Queue: Ryan Harrison <rharrison@chromium.org>
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
diff --git a/core/fpdfapi/render/cpdf_devicebuffer.cpp b/core/fpdfapi/render/cpdf_devicebuffer.cpp
index b96d002..7dfa497 100644
--- a/core/fpdfapi/render/cpdf_devicebuffer.cpp
+++ b/core/fpdfapi/render/cpdf_devicebuffer.cpp
@@ -43,9 +43,6 @@
m_Matrix.Scale(1.0f, (float)(max_dpi) / (float)dpiv);
}
#endif
- CFX_Matrix ctm = m_pDevice->GetCTM();
- m_Matrix.Concat(CFX_Matrix(fabs(ctm.a), 0, 0, fabs(ctm.d), 0, 0));
-
FX_RECT bitmap_rect =
m_Matrix.TransformRect(CFX_FloatRect(*pRect)).GetOuterRect();
m_pBitmap = pdfium::MakeRetain<CFX_DIBitmap>();
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index 662377b..2d66f9c 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -1167,17 +1167,7 @@
const CPDF_PageObject* pObj,
const CFX_Matrix* pObj2Device) const {
FX_RECT rect = pObj->GetBBox(pObj2Device);
- FX_RECT rtClip = m_pDevice->GetClipBox();
- CFX_Matrix dCTM = m_pDevice->GetCTM();
- float a = fabs(dCTM.a);
- float d = fabs(dCTM.d);
- if (a != 1.0f || d != 1.0f) {
- rect.right = rect.left + (int32_t)ceil((float)rect.Width() * a);
- rect.bottom = rect.top + (int32_t)ceil((float)rect.Height() * d);
- rtClip.right = rtClip.left + (int32_t)ceil((float)rtClip.Width() * a);
- rtClip.bottom = rtClip.top + (int32_t)ceil((float)rtClip.Height() * d);
- }
- rect.Intersect(rtClip);
+ rect.Intersect(m_pDevice->GetClipBox());
return rect;
}
@@ -1213,27 +1203,16 @@
bool CPDF_RenderStatus::DrawObjWithBlend(CPDF_PageObject* pObj,
const CFX_Matrix* pObj2Device) {
- bool bRet = false;
switch (pObj->GetType()) {
case CPDF_PageObject::PATH:
- bRet = ProcessPath(pObj->AsPath(), pObj2Device);
- break;
+ return ProcessPath(pObj->AsPath(), pObj2Device);
case CPDF_PageObject::IMAGE:
- bRet = ProcessImage(pObj->AsImage(), pObj2Device);
- break;
+ return ProcessImage(pObj->AsImage(), pObj2Device);
case CPDF_PageObject::FORM:
- bRet = ProcessForm(pObj->AsForm(), pObj2Device);
- break;
+ return ProcessForm(pObj->AsForm(), pObj2Device);
default:
- break;
+ return false;
}
- return bRet;
-}
-
-void CPDF_RenderStatus::GetScaledMatrix(CFX_Matrix& matrix) const {
- CFX_Matrix dCTM = m_pDevice->GetCTM();
- matrix.a *= fabs(dCTM.a);
- matrix.d *= fabs(dCTM.d);
}
void CPDF_RenderStatus::DrawObjWithBackground(CPDF_PageObject* pObj,
@@ -1254,7 +1233,6 @@
}
CFX_Matrix matrix = *pObj2Device;
matrix.Concat(*buffer.GetMatrix());
- GetScaledMatrix(matrix);
CPDF_Dictionary* pFormResource = nullptr;
const CPDF_FormObject* pFormObj = pObj->AsForm();
if (pFormObj) {
@@ -1569,11 +1547,8 @@
if (rect.IsEmpty())
return true;
- CFX_Matrix deviceCTM = m_pDevice->GetCTM();
- float scaleX = fabs(deviceCTM.a);
- float scaleY = fabs(deviceCTM.d);
- int width = FXSYS_round((float)rect.Width() * scaleX);
- int height = FXSYS_round((float)rect.Height() * scaleY);
+ int width = rect.Width();
+ int height = rect.Height();
CFX_DefaultRenderDevice bitmap_device;
RetainPtr<CFX_DIBitmap> oriDevice;
if (!isolated && (m_pDevice->GetRenderCaps() & FXRC_GET_BITS)) {
@@ -1590,7 +1565,6 @@
CFX_Matrix new_matrix = *pObj2Device;
new_matrix.Translate(-rect.left, -rect.top);
- new_matrix.Scale(scaleX, scaleY);
RetainPtr<CFX_DIBitmap> pTextMask;
if (bTextClip) {
@@ -1666,11 +1640,8 @@
bbox.Intersect(m_pDevice->GetClipBox());
*left = bbox.left;
*top = bbox.top;
- CFX_Matrix deviceCTM = m_pDevice->GetCTM();
- float scaleX = fabs(deviceCTM.a);
- float scaleY = fabs(deviceCTM.d);
- int width = FXSYS_round(bbox.Width() * scaleX);
- int height = FXSYS_round(bbox.Height() * scaleY);
+ int width = bbox.Width();
+ int height = bbox.Height();
auto pBackdrop = pdfium::MakeRetain<CFX_DIBitmap>();
if (bBackAlphaRequired && !m_bDropObjects)
pBackdrop->Create(width, height, FXDIB_Argb);
@@ -1692,7 +1663,6 @@
}
CFX_Matrix FinalMatrix = m_DeviceMatrix;
FinalMatrix.Translate(-*left, -*top);
- FinalMatrix.Scale(scaleX, scaleY);
pBackdrop->Clear(pBackdrop->HasAlpha() ? 0 : 0xffffffff);
CFX_DefaultRenderDevice device;
@@ -1853,9 +1823,6 @@
if (pdfium::ContainsValue(m_Type3FontCache, pType3Font))
return true;
- CFX_Matrix dCTM = m_pDevice->GetCTM();
- float sa = fabs(dCTM.a);
- float sd = fabs(dCTM.d);
CFX_Matrix text_matrix = textobj->GetTextMatrix();
CFX_Matrix char_matrix = pType3Font->GetFontMatrix();
float font_size = textobj->m_TextState.GetFontSize();
@@ -1927,8 +1894,7 @@
matrix.TransformRect(pType3Char->form()->CalcBoundingBox())
.GetOuterRect();
CFX_DefaultRenderDevice bitmap_device;
- if (!bitmap_device.Create((int)(rect.Width() * sa),
- (int)(rect.Height() * sd), FXDIB_Argb,
+ if (!bitmap_device.Create(rect.Width(), rect.Height(), FXDIB_Argb,
nullptr)) {
return true;
}
@@ -1941,7 +1907,6 @@
status.m_Type3FontCache = m_Type3FontCache;
status.m_Type3FontCache.push_back(pType3Font);
matrix.Translate(-rect.left, -rect.top);
- matrix.Scale(sa, sd);
status.RenderObjectList(pType3Char->form(), &matrix);
m_pDevice->SetDIBits(bitmap_device.GetBitmap(), rect.left, rect.top);
}
@@ -1949,7 +1914,7 @@
if (device_class == FXDC_DISPLAY) {
RetainPtr<CPDF_Type3Cache> pCache = GetCachedType3(pType3Font);
refTypeCache.m_dwCount++;
- CFX_GlyphBitmap* pBitmap = pCache->LoadGlyph(charcode, &matrix, sa, sd);
+ CFX_GlyphBitmap* pBitmap = pCache->LoadGlyph(charcode, &matrix);
if (!pBitmap)
continue;
@@ -1978,12 +1943,11 @@
if (glyphs.empty())
return true;
- FX_RECT rect = FXGE_GetGlyphsBBox(glyphs, 0, sa, sd);
+ FX_RECT rect = FXGE_GetGlyphsBBox(glyphs, 0);
auto pBitmap = pdfium::MakeRetain<CFX_DIBitmap>();
- if (!pBitmap->Create(static_cast<int>(rect.Width() * sa),
- static_cast<int>(rect.Height() * sd), FXDIB_8bppMask)) {
+ if (!pBitmap->Create(rect.Width(), rect.Height(), FXDIB_8bppMask))
return true;
- }
+
pBitmap->Clear(0);
for (const FXTEXT_GLYPHPOS& glyph : glyphs) {
if (!glyph.m_pGlyph)
@@ -1992,14 +1956,12 @@
pdfium::base::CheckedNumeric<int> left = glyph.m_Origin.x;
left += glyph.m_pGlyph->m_Left;
left -= rect.left;
- left *= sa;
if (!left.IsValid())
continue;
pdfium::base::CheckedNumeric<int> top = glyph.m_Origin.y;
top -= glyph.m_pGlyph->m_Top;
top -= rect.top;
- top *= sd;
if (!top.IsValid())
continue;
@@ -2187,7 +2149,6 @@
CFX_Matrix matrix = *pattern->pattern_to_form();
matrix.Concat(*pObj2Device);
- GetScaledMatrix(matrix);
int alpha =
FXSYS_round(255 * (bStroke ? pPageObj->m_GeneralState.GetStrokeAlpha()
: pPageObj->m_GeneralState.GetFillAlpha()));
@@ -2231,15 +2192,8 @@
if (clip_box.IsEmpty())
return;
- CFX_Matrix dCTM = m_pDevice->GetCTM();
- float sa = fabs(dCTM.a);
- float sd = fabs(dCTM.d);
- clip_box.right = clip_box.left + (int32_t)ceil(clip_box.Width() * sa);
- clip_box.bottom = clip_box.top + (int32_t)ceil(clip_box.Height() * sd);
-
CFX_Matrix mtPattern2Device = *pPattern->pattern_to_form();
mtPattern2Device.Concat(*pObj2Device);
- GetScaledMatrix(mtPattern2Device);
bool bAligned =
pPattern->bbox().left == 0 && pPattern->bbox().bottom == 0 &&
diff --git a/core/fpdfapi/render/cpdf_renderstatus.h b/core/fpdfapi/render/cpdf_renderstatus.h
index e5bd872..74d3567 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.h
+++ b/core/fpdfapi/render/cpdf_renderstatus.h
@@ -155,7 +155,6 @@
FX_ARGB GetStrokeArgb(CPDF_PageObject* pObj) const;
FX_RECT GetObjectClippedRect(const CPDF_PageObject* pObj,
const CFX_Matrix* pObj2Device) const;
- void GetScaledMatrix(CFX_Matrix& matrix) const;
static const int kRenderMaxRecursionDepth = 64;
static int s_CurrentRecursionDepth;
diff --git a/core/fpdfapi/render/cpdf_type3cache.cpp b/core/fpdfapi/render/cpdf_type3cache.cpp
index 33a440f..f85e5bb 100644
--- a/core/fpdfapi/render/cpdf_type3cache.cpp
+++ b/core/fpdfapi/render/cpdf_type3cache.cpp
@@ -85,9 +85,7 @@
CPDF_Type3Cache::~CPDF_Type3Cache() {}
CFX_GlyphBitmap* CPDF_Type3Cache::LoadGlyph(uint32_t charcode,
- const CFX_Matrix* pMatrix,
- float retinaScaleX,
- float retinaScaleY) {
+ const CFX_Matrix* pMatrix) {
CPDF_UniqueKeyGen keygen;
keygen.Generate(
4, FXSYS_round(pMatrix->a * 10000), FXSYS_round(pMatrix->b * 10000),
@@ -107,7 +105,7 @@
return it2->second.get();
std::unique_ptr<CFX_GlyphBitmap> pNewBitmap =
- RenderGlyph(pSizeCache, charcode, pMatrix, retinaScaleX, retinaScaleY);
+ RenderGlyph(pSizeCache, charcode, pMatrix);
CFX_GlyphBitmap* pGlyphBitmap = pNewBitmap.get();
pSizeCache->m_GlyphMap[charcode] = std::move(pNewBitmap);
return pGlyphBitmap;
@@ -116,9 +114,7 @@
std::unique_ptr<CFX_GlyphBitmap> CPDF_Type3Cache::RenderGlyph(
CPDF_Type3Glyphs* pSize,
uint32_t charcode,
- const CFX_Matrix* pMatrix,
- float retinaScaleX,
- float retinaScaleY) {
+ const CFX_Matrix* pMatrix) {
const CPDF_Type3Char* pChar = m_pFont->LoadChar(charcode);
if (!pChar || !pChar->GetBitmap())
return nullptr;
@@ -146,24 +142,19 @@
}
pSize->AdjustBlue(top_y, bottom_y, top_line, bottom_line);
pResBitmap = pBitmap->StretchTo(
- static_cast<int>(FXSYS_round(image_matrix.a) * retinaScaleX),
- static_cast<int>(
- (bFlipped ? top_line - bottom_line : bottom_line - top_line) *
- retinaScaleY),
+ static_cast<int>(image_matrix.a),
+ static_cast<int>(bFlipped ? top_line - bottom_line
+ : bottom_line - top_line),
0, nullptr);
top = top_line;
- if (image_matrix.a < 0) {
- image_matrix.Scale(retinaScaleX, retinaScaleY);
+ if (image_matrix.a < 0)
left = FXSYS_round(image_matrix.e + image_matrix.a);
- } else {
+ else
left = FXSYS_round(image_matrix.e);
- }
}
}
- if (!pResBitmap) {
- image_matrix.Scale(retinaScaleX, retinaScaleY);
+ if (!pResBitmap)
pResBitmap = pBitmap->TransformTo(&image_matrix, &left, &top);
- }
if (!pResBitmap)
return nullptr;
diff --git a/core/fpdfapi/render/cpdf_type3cache.h b/core/fpdfapi/render/cpdf_type3cache.h
index 7911785..f0bfbd6 100644
--- a/core/fpdfapi/render/cpdf_type3cache.h
+++ b/core/fpdfapi/render/cpdf_type3cache.h
@@ -23,10 +23,7 @@
template <typename T, typename... Args>
friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
- CFX_GlyphBitmap* LoadGlyph(uint32_t charcode,
- const CFX_Matrix* pMatrix,
- float retinaScaleX,
- float retinaScaleY);
+ CFX_GlyphBitmap* LoadGlyph(uint32_t charcode, const CFX_Matrix* pMatrix);
private:
explicit CPDF_Type3Cache(CPDF_Type3Font* pFont);
@@ -34,9 +31,7 @@
std::unique_ptr<CFX_GlyphBitmap> RenderGlyph(CPDF_Type3Glyphs* pSize,
uint32_t charcode,
- const CFX_Matrix* pMatrix,
- float retinaScaleX,
- float retinaScaleY);
+ const CFX_Matrix* pMatrix);
UnownedPtr<CPDF_Type3Font> const m_pFont;
std::map<ByteString, std::unique_ptr<CPDF_Type3Glyphs>> m_SizeMap;
diff --git a/core/fxge/cfx_renderdevice.cpp b/core/fxge/cfx_renderdevice.cpp
index 2e279d6..2fd48d2 100644
--- a/core/fxge/cfx_renderdevice.cpp
+++ b/core/fxge/cfx_renderdevice.cpp
@@ -425,10 +425,6 @@
return m_pDeviceDriver->GetDeviceCaps(caps_id);
}
-CFX_Matrix CFX_RenderDevice::GetCTM() const {
- return m_pDeviceDriver->GetCTM();
-}
-
RetainPtr<CFX_DIBitmap> CFX_RenderDevice::GetBitmap() const {
return m_pBitmap;
}
@@ -634,16 +630,12 @@
if (pObject2Device)
bbox = pObject2Device->TransformRect(bbox);
- CFX_Matrix ctm = GetCTM();
- float fScaleX = fabs(ctm.a);
- float fScaleY = fabs(ctm.d);
FX_RECT rect = bbox.GetOuterRect();
auto bitmap = pdfium::MakeRetain<CFX_DIBitmap>();
auto Backdrop = pdfium::MakeRetain<CFX_DIBitmap>();
- if (!CreateCompatibleBitmap(bitmap, FXSYS_round(rect.Width() * fScaleX),
- FXSYS_round(rect.Height() * fScaleY))) {
+ if (!CreateCompatibleBitmap(bitmap, rect.Width(), rect.Height()))
return false;
- }
+
if (bitmap->HasAlpha()) {
bitmap->Clear(0);
Backdrop->Copy(bitmap);
@@ -659,7 +651,6 @@
if (pObject2Device)
matrix = *pObject2Device;
matrix.Translate(-rect.left, -rect.top);
- matrix.Concat(CFX_Matrix(fScaleX, 0, 0, fScaleY, 0, 0));
if (!bitmap_device.GetDeviceDriver()->DrawPath(
pPathData, &matrix, pGraphState, fill_color, stroke_color, fill_mode,
blend_type)) {
@@ -668,8 +659,7 @@
#if defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_
bitmap_device.GetDeviceDriver()->Flush();
#endif
- FX_RECT src_rect(0, 0, FXSYS_round(rect.Width() * fScaleX),
- FXSYS_round(rect.Height() * fScaleY));
+ FX_RECT src_rect(0, 0, rect.Width(), rect.Height());
return m_pDeviceDriver->SetDIBits(bitmap, 0, &src_rect, rect.left, rect.top,
FXDIB_BLEND_NORMAL);
}
@@ -734,12 +724,8 @@
int top,
int blend_mode) {
ASSERT(!pBitmap->IsAlphaMask());
- CFX_Matrix ctm = GetCTM();
- float fScaleX = fabs(ctm.a);
- float fScaleY = fabs(ctm.d);
- FX_RECT dest_rect(left, top,
- FXSYS_round(left + pBitmap->GetWidth() / fScaleX),
- FXSYS_round(top + pBitmap->GetHeight() / fScaleY));
+ FX_RECT dest_rect(left, top, left + pBitmap->GetWidth(),
+ top + pBitmap->GetHeight());
dest_rect.Intersect(m_ClipBox);
if (dest_rect.IsEmpty())
return true;
@@ -747,10 +733,6 @@
FX_RECT src_rect(dest_rect.left - left, dest_rect.top - top,
dest_rect.left - left + dest_rect.Width(),
dest_rect.top - top + dest_rect.Height());
- src_rect.left = FXSYS_round(src_rect.left * fScaleX);
- src_rect.top = FXSYS_round(src_rect.top * fScaleY);
- src_rect.right = FXSYS_round(src_rect.right * fScaleX);
- src_rect.bottom = FXSYS_round(src_rect.bottom * fScaleY);
if ((blend_mode == FXDIB_BLEND_NORMAL || (m_RenderCaps & FXRC_BLEND_MODE)) &&
(!pBitmap->HasAlpha() || (m_RenderCaps & FXRC_ALPHA_IMAGE))) {
return m_pDeviceDriver->SetDIBits(pBitmap, 0, &src_rect, dest_rect.left,
@@ -759,8 +741,8 @@
if (!(m_RenderCaps & FXRC_GET_BITS))
return false;
- int bg_pixel_width = FXSYS_round(dest_rect.Width() * fScaleX);
- int bg_pixel_height = FXSYS_round(dest_rect.Height() * fScaleY);
+ int bg_pixel_width = dest_rect.Width();
+ int bg_pixel_height = dest_rect.Height();
auto background = pdfium::MakeRetain<CFX_DIBitmap>();
if (!background->Create(
bg_pixel_width, bg_pixel_height,
@@ -934,13 +916,7 @@
}
}
std::vector<FXTEXT_GLYPHPOS> glyphs(nChars);
- CFX_Matrix matrixCTM = GetCTM();
- float scale_x = fabs(matrixCTM.a);
- float scale_y = fabs(matrixCTM.d);
CFX_Matrix deviceCtm = char2device;
- CFX_Matrix m(scale_x, 0, 0, scale_y, 0, 0);
- deviceCtm.Concat(m);
- text2Device.Concat(m);
for (size_t i = 0; i < glyphs.size(); ++i) {
FXTEXT_GLYPHPOS& glyph = glyphs[i];
@@ -970,25 +946,15 @@
if (anti_alias < FXFT_RENDER_MODE_LCD && glyphs.size() > 1)
AdjustGlyphSpace(&glyphs);
- FX_RECT bmp_rect1 = FXGE_GetGlyphsBBox(glyphs, anti_alias, 1.0f, 1.0f);
- if (scale_x > 1 && scale_y > 1) {
- --bmp_rect1.left;
- --bmp_rect1.top;
- ++bmp_rect1.right;
- ++bmp_rect1.bottom;
- }
- FX_RECT bmp_rect(FXSYS_round((float)(bmp_rect1.left) / scale_x),
- FXSYS_round((float)(bmp_rect1.top) / scale_y),
- FXSYS_round((float)bmp_rect1.right / scale_x),
- FXSYS_round((float)bmp_rect1.bottom / scale_y));
+ FX_RECT bmp_rect = FXGE_GetGlyphsBBox(glyphs, anti_alias);
bmp_rect.Intersect(m_ClipBox);
if (bmp_rect.IsEmpty())
return true;
- int pixel_width = FXSYS_round(bmp_rect.Width() * scale_x);
- int pixel_height = FXSYS_round(bmp_rect.Height() * scale_y);
- int pixel_left = FXSYS_round(bmp_rect.left * scale_x);
- int pixel_top = FXSYS_round(bmp_rect.top * scale_y);
+ int pixel_width = bmp_rect.Width();
+ int pixel_height = bmp_rect.Height();
+ int pixel_left = bmp_rect.left;
+ int pixel_top = bmp_rect.top;
if (anti_alias == FXFT_RENDER_MODE_MONO) {
auto bitmap = pdfium::MakeRetain<CFX_DIBitmap>();
if (!bitmap->Create(pixel_width, pixel_height, FXDIB_1bppMask))
diff --git a/core/fxge/cfx_renderdevice.h b/core/fxge/cfx_renderdevice.h
index eed72eb..124e5e9 100644
--- a/core/fxge/cfx_renderdevice.h
+++ b/core/fxge/cfx_renderdevice.h
@@ -114,7 +114,6 @@
int GetDeviceClass() const { return m_DeviceClass; }
int GetRenderCaps() const { return m_RenderCaps; }
int GetDeviceCaps(int id) const;
- CFX_Matrix GetCTM() const;
RetainPtr<CFX_DIBitmap> GetBitmap() const;
void SetBitmap(const RetainPtr<CFX_DIBitmap>& pBitmap);
bool CreateCompatibleBitmap(const RetainPtr<CFX_DIBitmap>& pDIB,
diff --git a/core/fxge/fx_font.h b/core/fxge/fx_font.h
index c617376..cee870f 100644
--- a/core/fxge/fx_font.h
+++ b/core/fxge/fx_font.h
@@ -95,9 +95,7 @@
};
FX_RECT FXGE_GetGlyphsBBox(const std::vector<FXTEXT_GLYPHPOS>& glyphs,
- int anti_alias,
- float retinaScaleX,
- float retinaScaleY);
+ int anti_alias);
ByteString GetNameFromTT(const uint8_t* name_table,
uint32_t name_table_size,
diff --git a/core/fxge/fx_ge_text.cpp b/core/fxge/fx_ge_text.cpp
index 3739e11..a74b8fb 100644
--- a/core/fxge/fx_ge_text.cpp
+++ b/core/fxge/fx_ge_text.cpp
@@ -43,9 +43,7 @@
}
FX_RECT FXGE_GetGlyphsBBox(const std::vector<FXTEXT_GLYPHPOS>& glyphs,
- int anti_alias,
- float retinaScaleX,
- float retinaScaleY) {
+ int anti_alias) {
FX_RECT rect(0, 0, 0, 0);
bool bStarted = false;
for (const FXTEXT_GLYPHPOS& glyph : glyphs) {
@@ -59,7 +57,6 @@
continue;
FX_SAFE_INT32 char_width = pGlyph->m_pBitmap->GetWidth();
- char_width /= retinaScaleX;
if (anti_alias == FXFT_RENDER_MODE_LCD)
char_width /= 3;
if (!char_width.IsValid())
@@ -75,7 +72,6 @@
continue;
FX_SAFE_INT32 char_height = pGlyph->m_pBitmap->GetHeight();
- char_height /= retinaScaleY;
if (!char_height.IsValid())
continue;
diff --git a/core/fxge/renderdevicedriver_iface.cpp b/core/fxge/renderdevicedriver_iface.cpp
index d1cd65d..b4d7fb0 100644
--- a/core/fxge/renderdevicedriver_iface.cpp
+++ b/core/fxge/renderdevicedriver_iface.cpp
@@ -12,10 +12,6 @@
RenderDeviceDriverIface::~RenderDeviceDriverIface() {}
-CFX_Matrix RenderDeviceDriverIface::GetCTM() const {
- return CFX_Matrix();
-}
-
bool RenderDeviceDriverIface::StartRendering() {
return true;
}
diff --git a/core/fxge/renderdevicedriver_iface.h b/core/fxge/renderdevicedriver_iface.h
index 7dd7a10..2d255f6 100644
--- a/core/fxge/renderdevicedriver_iface.h
+++ b/core/fxge/renderdevicedriver_iface.h
@@ -30,7 +30,6 @@
virtual ~RenderDeviceDriverIface();
virtual int GetDeviceCaps(int caps_id) const = 0;
- virtual CFX_Matrix GetCTM() const;
virtual bool StartRendering();
virtual void EndRendering();