summaryrefslogtreecommitdiff
path: root/core/fxge/apple
diff options
context:
space:
mode:
Diffstat (limited to 'core/fxge/apple')
-rw-r--r--core/fxge/apple/apple_int.h58
-rw-r--r--core/fxge/apple/fx_apple_platform.cpp125
-rw-r--r--core/fxge/apple/fx_quartz_device.cpp194
3 files changed, 173 insertions, 204 deletions
diff --git a/core/fxge/apple/apple_int.h b/core/fxge/apple/apple_int.h
index 6afda63ee0..5a3c0756db 100644
--- a/core/fxge/apple/apple_int.h
+++ b/core/fxge/apple/apple_int.h
@@ -101,36 +101,24 @@ class CFX_QuartzDeviceDriver : public IFX_RenderDeviceDriver {
uint32_t fill_color,
uint32_t stroke_color,
int fill_mode,
- int alpha_flag = 0,
- void* pIccTransform = nullptr,
- int blend_type = FXDIB_BLEND_NORMAL) override;
- FX_BOOL FillRect(const FX_RECT* pRect,
- uint32_t fill_color,
- int alpha_flag = 0,
- void* pIccTransform = nullptr,
- int blend_type = FXDIB_BLEND_NORMAL) override;
+ int blend_type) override;
+ FX_BOOL FillRectWithBlend(const FX_RECT* pRect,
+ uint32_t fill_color,
+ int blend_type) override;
FX_BOOL DrawCosmeticLine(FX_FLOAT x1,
FX_FLOAT y1,
FX_FLOAT x2,
FX_FLOAT y2,
uint32_t color,
- int alpha_flag = 0,
- void* pIccTransform = nullptr,
- int blend_type = FXDIB_BLEND_NORMAL) override;
+ int blend_type) override;
FX_BOOL GetClipBox(FX_RECT* pRect) override;
- FX_BOOL GetDIBits(CFX_DIBitmap* pBitmap,
- int left,
- int top,
- void* pIccTransform = nullptr,
- FX_BOOL bDEdge = FALSE) override;
+ FX_BOOL GetDIBits(CFX_DIBitmap* pBitmap, int left, int top) override;
FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap,
uint32_t color,
const FX_RECT* pSrcRect,
int dest_left,
int dest_top,
- int blend_type,
- int alpha_flag = 0,
- void* pIccTransform = nullptr) override;
+ int blend_type) override;
FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap,
uint32_t color,
int dest_left,
@@ -139,18 +127,14 @@ class CFX_QuartzDeviceDriver : public IFX_RenderDeviceDriver {
int dest_height,
const FX_RECT* pClipRect,
uint32_t flags,
- int alpha_flag = 0,
- void* pIccTransform = nullptr,
- int blend_type = FXDIB_BLEND_NORMAL) override;
+ int blend_type) override;
FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap,
int bitmap_alpha,
uint32_t color,
const CFX_Matrix* pMatrix,
uint32_t flags,
void*& handle,
- int alpha_flag = 0,
- void* pIccTransform = nullptr,
- int blend_type = FXDIB_BLEND_NORMAL) override {
+ int blend_type) override {
return FALSE;
}
FX_BOOL DrawDeviceText(int nChars,
@@ -159,9 +143,7 @@ class CFX_QuartzDeviceDriver : public IFX_RenderDeviceDriver {
CFX_FontCache* pCache,
const CFX_Matrix* pObject2Device,
FX_FLOAT font_size,
- uint32_t color,
- int alpha_flag = 0,
- void* pIccTransform = nullptr) override;
+ uint32_t color) override;
void ClearDriver() override;
protected:
@@ -172,21 +154,19 @@ class CFX_QuartzDeviceDriver : public IFX_RenderDeviceDriver {
void setPathToContext(const CFX_PathData* pathData);
FX_FLOAT getLineWidth(const CFX_GraphStateData* graphState,
CGAffineTransform ctm);
- FX_BOOL CG_DrawGlypRun(int nChars,
- const FXTEXT_CHARPOS* pCharPos,
- CFX_Font* pFont,
- CFX_FontCache* pCache,
- const CFX_Matrix* pGlyphMatrix,
- const CFX_Matrix* pObject2Device,
- FX_FLOAT font_size,
- uint32_t argb,
- int alpha_flag,
- void* pIccTransform);
+ FX_BOOL CG_DrawGlyphRun(int nChars,
+ const FXTEXT_CHARPOS* pCharPos,
+ CFX_Font* pFont,
+ CFX_FontCache* pCache,
+ const CFX_Matrix* pGlyphMatrix,
+ const CFX_Matrix* pObject2Device,
+ FX_FLOAT font_size,
+ uint32_t argb);
void CG_SetImageTransform(int dest_left,
int dest_top,
int dest_width,
int dest_height,
- CGRect* rect = nullptr);
+ CGRect* rect);
CGContextRef m_context;
CGAffineTransform m_foxitDevice2User;
diff --git a/core/fxge/apple/fx_apple_platform.cpp b/core/fxge/apple/fx_apple_platform.cpp
index 4204e7e6a5..3bddf64280 100644
--- a/core/fxge/apple/fx_apple_platform.cpp
+++ b/core/fxge/apple/fx_apple_platform.cpp
@@ -19,54 +19,31 @@
#include "core/fxge/include/fx_freetype.h"
#include "core/fxge/include/fx_ge_apple.h"
-void CFX_AggDeviceDriver::InitPlatform() {
- CQuartz2D& quartz2d =
- static_cast<CApplePlatform*>(CFX_GEModule::Get()->GetPlatformData())
- ->m_quartz2d;
- m_pPlatformGraphics = quartz2d.createGraphics(m_pBitmap);
-}
-void CFX_AggDeviceDriver::DestroyPlatform() {
- CQuartz2D& quartz2d =
- static_cast<CApplePlatform*>(CFX_GEModule::Get()->GetPlatformData())
- ->m_quartz2d;
- if (m_pPlatformGraphics) {
- quartz2d.destroyGraphics(m_pPlatformGraphics);
- m_pPlatformGraphics = nullptr;
- }
-}
-void CFX_FaceCache::InitPlatform() {}
-void CFX_FaceCache::DestroyPlatform() {}
-CFX_GlyphBitmap* CFX_FaceCache::RenderGlyph_Nativetext(
- CFX_Font* pFont,
- uint32_t glyph_index,
- const CFX_Matrix* pMatrix,
- int dest_width,
- int anti_alias) {
- return nullptr;
-}
-static FX_BOOL _CGDrawGlyphRun(CGContextRef pContext,
- int nChars,
- const FXTEXT_CHARPOS* pCharPos,
- CFX_Font* pFont,
- CFX_FontCache* pCache,
- const CFX_Matrix* pObject2Device,
- FX_FLOAT font_size,
- uint32_t argb,
- int alpha_flag,
- void* pIccTransform) {
- if (nChars == 0) {
+namespace {
+
+void DoNothing(void* info, const void* data, size_t size) {}
+
+FX_BOOL CGDrawGlyphRun(CGContextRef pContext,
+ int nChars,
+ const FXTEXT_CHARPOS* pCharPos,
+ CFX_Font* pFont,
+ CFX_FontCache* pCache,
+ const CFX_Matrix* pObject2Device,
+ FX_FLOAT font_size,
+ uint32_t argb) {
+ if (nChars == 0)
return TRUE;
- }
+
CFX_Matrix new_matrix;
FX_BOOL bNegSize = font_size < 0;
- if (bNegSize) {
+ if (bNegSize)
font_size = -font_size;
- }
+
FX_FLOAT ori_x = pCharPos[0].m_OriginX, ori_y = pCharPos[0].m_OriginY;
new_matrix.Transform(ori_x, ori_y);
- if (pObject2Device) {
+ if (pObject2Device)
new_matrix.Concat(*pObject2Device);
- }
+
CQuartz2D& quartz2d =
static_cast<CApplePlatform*>(CFX_GEModule::Get()->GetPlatformData())
->m_quartz2d;
@@ -76,19 +53,17 @@ static FX_BOOL _CGDrawGlyphRun(CGContextRef pContext,
pFont->SetPlatformFont(
quartz2d.CreateFont(pFont->GetFontData(), pFont->GetSize()));
- if (!pFont->GetPlatformFont()) {
+ if (!pFont->GetPlatformFont())
return FALSE;
- }
}
CFX_FixedBufGrow<uint16_t, 32> glyph_indices(nChars);
CFX_FixedBufGrow<CGPoint, 32> glyph_positions(nChars);
for (int i = 0; i < nChars; i++) {
glyph_indices[i] = pCharPos[i].m_ExtGID;
- if (bNegSize) {
+ if (bNegSize)
glyph_positions[i].x = -pCharPos[i].m_OriginX;
- } else {
+ else
glyph_positions[i].x = pCharPos[i].m_OriginX;
- }
glyph_positions[i].y = pCharPos[i].m_OriginY;
}
if (bNegSize) {
@@ -102,19 +77,45 @@ static FX_BOOL _CGDrawGlyphRun(CGContextRef pContext,
font_size, glyph_indices, glyph_positions,
nChars, argb, nullptr);
}
-static void _DoNothing(void* info, const void* data, size_t size) {}
+
+} // namespace
+
+void CFX_AggDeviceDriver::InitPlatform() {
+ CQuartz2D& quartz2d =
+ static_cast<CApplePlatform*>(CFX_GEModule::Get()->GetPlatformData())
+ ->m_quartz2d;
+ m_pPlatformGraphics = quartz2d.createGraphics(m_pBitmap);
+}
+void CFX_AggDeviceDriver::DestroyPlatform() {
+ CQuartz2D& quartz2d =
+ static_cast<CApplePlatform*>(CFX_GEModule::Get()->GetPlatformData())
+ ->m_quartz2d;
+ if (m_pPlatformGraphics) {
+ quartz2d.destroyGraphics(m_pPlatformGraphics);
+ m_pPlatformGraphics = nullptr;
+ }
+}
+void CFX_FaceCache::InitPlatform() {}
+void CFX_FaceCache::DestroyPlatform() {}
+CFX_GlyphBitmap* CFX_FaceCache::RenderGlyph_Nativetext(
+ CFX_Font* pFont,
+ uint32_t glyph_index,
+ const CFX_Matrix* pMatrix,
+ int dest_width,
+ int anti_alias) {
+ return nullptr;
+}
+
FX_BOOL CFX_AggDeviceDriver::DrawDeviceText(int nChars,
const FXTEXT_CHARPOS* pCharPos,
CFX_Font* pFont,
CFX_FontCache* pCache,
const CFX_Matrix* pObject2Device,
FX_FLOAT font_size,
- uint32_t argb,
- int alpha_flag,
- void* pIccTransform) {
- if (!pFont) {
+ uint32_t argb) {
+ if (!pFont)
return FALSE;
- }
+
FX_BOOL bBold = pFont->IsBold();
if (!bBold && pFont->GetSubstFont() &&
pFont->GetSubstFont()->m_Weight >= 500 &&
@@ -122,9 +123,8 @@ FX_BOOL CFX_AggDeviceDriver::DrawDeviceText(int nChars,
return FALSE;
}
for (int i = 0; i < nChars; i++) {
- if (pCharPos[i].m_bGlyphAdjust) {
+ if (pCharPos[i].m_bGlyphAdjust)
return FALSE;
- }
}
CGContextRef ctx = CGContextRef(m_pPlatformGraphics);
if (!ctx)
@@ -142,7 +142,7 @@ FX_BOOL CFX_AggDeviceDriver::DrawDeviceText(int nChars,
if (pClipMask) {
CGDataProviderRef pClipMaskDataProvider = CGDataProviderCreateWithData(
nullptr, pClipMask->GetBuffer(),
- pClipMask->GetPitch() * pClipMask->GetHeight(), _DoNothing);
+ pClipMask->GetPitch() * pClipMask->GetHeight(), DoNothing);
CGFloat decode_f[2] = {255.f, 0.f};
pImageCG = CGImageMaskCreate(
pClipMask->GetWidth(), pClipMask->GetHeight(), 8, 8,
@@ -153,20 +153,19 @@ FX_BOOL CFX_AggDeviceDriver::DrawDeviceText(int nChars,
rect_cg = CGRectMake(0, 0, m_pBitmap->GetWidth(), m_pBitmap->GetHeight());
}
rect_cg = CGContextConvertRectToDeviceSpace(ctx, rect_cg);
- if (pImageCG) {
+ if (pImageCG)
CGContextClipToMask(ctx, rect_cg, pImageCG);
- } else {
+ else
CGContextClipToRect(ctx, rect_cg);
- }
- FX_BOOL ret =
- _CGDrawGlyphRun(ctx, nChars, pCharPos, pFont, pCache, pObject2Device,
- font_size, argb, alpha_flag, pIccTransform);
- if (pImageCG) {
+
+ FX_BOOL ret = CGDrawGlyphRun(ctx, nChars, pCharPos, pFont, pCache,
+ pObject2Device, font_size, argb);
+ if (pImageCG)
CGImageRelease(pImageCG);
- }
CGContextRestoreGState(ctx);
return ret;
}
+
void CFX_Font::ReleasePlatformResource() {
if (m_pPlatformFont) {
CQuartz2D& quartz2d =
diff --git a/core/fxge/apple/fx_quartz_device.cpp b/core/fxge/apple/fx_quartz_device.cpp
index 154910b69f..4e1e62d6eb 100644
--- a/core/fxge/apple/fx_quartz_device.cpp
+++ b/core/fxge/apple/fx_quartz_device.cpp
@@ -340,14 +340,13 @@ static CGBlendMode GetCGBlendMode(int blend_type) {
}
return mode;
}
+
FX_BOOL CFX_QuartzDeviceDriver::DrawPath(const CFX_PathData* pathData,
const CFX_Matrix* matrix,
const CFX_GraphStateData* graphState,
uint32_t fillArgb,
uint32_t strokeArgb,
int fillMode,
- int alpha_flag,
- void* pIccTransform,
int blend_type) {
SaveState();
CGBlendMode mode = GetCGBlendMode(blend_type);
@@ -394,11 +393,10 @@ FX_BOOL CFX_QuartzDeviceDriver::DrawPath(const CFX_PathData* pathData,
RestoreState(false);
return TRUE;
}
-FX_BOOL CFX_QuartzDeviceDriver::FillRect(const FX_RECT* rect,
- FX_ARGB fillArgb,
- int alphaFlag,
- void* iccTransform,
- int blend_type) {
+
+FX_BOOL CFX_QuartzDeviceDriver::FillRectWithBlend(const FX_RECT* rect,
+ FX_ARGB fillArgb,
+ int blend_type) {
CGBlendMode mode = GetCGBlendMode(blend_type);
if (mode != kCGBlendModeNormal) {
CGContextSetBlendMode(m_context, mode);
@@ -416,13 +414,12 @@ FX_BOOL CFX_QuartzDeviceDriver::FillRect(const FX_RECT* rect,
}
return TRUE;
}
+
FX_BOOL CFX_QuartzDeviceDriver::DrawCosmeticLine(FX_FLOAT x1,
FX_FLOAT y1,
FX_FLOAT x2,
FX_FLOAT y2,
uint32_t argb,
- int alphaFlag,
- void* iccTransform,
int blend_type) {
CGBlendMode mode = GetCGBlendMode(blend_type);
if (mode != kCGBlendModeNormal) {
@@ -447,6 +444,7 @@ FX_BOOL CFX_QuartzDeviceDriver::DrawCosmeticLine(FX_FLOAT x1,
}
return TRUE;
}
+
FX_BOOL CFX_QuartzDeviceDriver::GetClipBox(FX_RECT* rect) {
CGRect r = CGContextGetClipBoundingBox(m_context);
r = CGRectApplyAffineTransform(r, m_user2FoxitDevice);
@@ -456,20 +454,15 @@ FX_BOOL CFX_QuartzDeviceDriver::GetClipBox(FX_RECT* rect) {
rect->bottom = FXSYS_ceil(r.origin.y + r.size.height);
return TRUE;
}
+
FX_BOOL CFX_QuartzDeviceDriver::GetDIBits(CFX_DIBitmap* bitmap,
int32_t left,
- int32_t top,
- void* pIccTransform,
- FX_BOOL bDEdge) {
- if (FXDC_PRINTER == m_deviceClass) {
- return FALSE;
- }
- if (bitmap->GetBPP() < 32) {
- return FALSE;
- }
- if (!(m_renderCaps | FXRC_GET_BITS)) {
+ int32_t top) {
+ if (FXDC_PRINTER == m_deviceClass || bitmap->GetBPP() < 32 ||
+ !(m_renderCaps | FXRC_GET_BITS)) {
return FALSE;
}
+
CGPoint pt = CGPointMake(left, top);
pt = CGPointApplyAffineTransform(pt, m_foxitDevice2User);
CGAffineTransform ctm = CGContextGetCTM(m_context);
@@ -481,12 +474,11 @@ FX_BOOL CFX_QuartzDeviceDriver::GetDIBits(CFX_DIBitmap* bitmap,
CGFloat width = (CGFloat)bitmap->GetWidth();
CGFloat height = (CGFloat)bitmap->GetHeight();
- if (width + pt.x > m_width) {
+ if (width + pt.x > m_width)
width -= (width + pt.x - m_width);
- }
- if (height + pt.y > m_height) {
+ if (height + pt.y > m_height)
height -= (height + pt.y - m_height);
- }
+
CGImageRef subImage = CGImageCreateWithImageInRect(
image, CGRectMake(pt.x, pt.y, width, height));
CGContextRef context = createContextWithBitmap(bitmap);
@@ -496,29 +488,29 @@ FX_BOOL CFX_QuartzDeviceDriver::GetDIBits(CFX_DIBitmap* bitmap,
CGContextRelease(context);
CGImageRelease(subImage);
CGImageRelease(image);
- if (bitmap->HasAlpha()) {
- for (int row = 0; row < bitmap->GetHeight(); row++) {
- uint8_t* pScanline = (uint8_t*)bitmap->GetScanline(row);
- for (int col = 0; col < bitmap->GetWidth(); col++) {
- if (pScanline[3] > 0) {
- pScanline[0] = (pScanline[0] * 255.f / pScanline[3] + .5f);
- pScanline[1] = (pScanline[1] * 255.f / pScanline[3] + .5f);
- pScanline[2] = (pScanline[2] * 255.f / pScanline[3] + .5f);
- }
- pScanline += 4;
+ if (!bitmap->HasAlpha())
+ return TRUE;
+
+ for (int row = 0; row < bitmap->GetHeight(); row++) {
+ uint8_t* pScanline = (uint8_t*)bitmap->GetScanline(row);
+ for (int col = 0; col < bitmap->GetWidth(); col++) {
+ if (pScanline[3] > 0) {
+ pScanline[0] = (pScanline[0] * 255.f / pScanline[3] + .5f);
+ pScanline[1] = (pScanline[1] * 255.f / pScanline[3] + .5f);
+ pScanline[2] = (pScanline[2] * 255.f / pScanline[3] + .5f);
}
+ pScanline += 4;
}
}
return TRUE;
}
+
FX_BOOL CFX_QuartzDeviceDriver::SetDIBits(const CFX_DIBSource* pBitmap,
FX_ARGB argb,
const FX_RECT* srcRect,
int dest_left,
int dest_top,
- int blendType,
- int alphaFlag,
- void* iccTransform) {
+ int blendType) {
SaveState();
CGFloat src_left, src_top, src_width, src_height;
if (srcRect) {
@@ -635,6 +627,7 @@ FX_BOOL CFX_QuartzDeviceDriver::SetDIBits(const CFX_DIBSource* pBitmap,
RestoreState(false);
return TRUE;
}
+
FX_BOOL CFX_QuartzDeviceDriver::StretchDIBits(const CFX_DIBSource* pBitmap,
FX_ARGB argb,
int dest_left,
@@ -643,8 +636,6 @@ FX_BOOL CFX_QuartzDeviceDriver::StretchDIBits(const CFX_DIBSource* pBitmap,
int dest_height,
const FX_RECT* clipRect,
uint32_t flags,
- int alphaFlag,
- void* iccTransform,
int blend_type) {
SaveState();
if (clipRect) {
@@ -657,21 +648,20 @@ FX_BOOL CFX_QuartzDeviceDriver::StretchDIBits(const CFX_DIBSource* pBitmap,
}
CGRect rect = CGRectMake(dest_left, dest_top, dest_width, dest_height);
rect = CGRectApplyAffineTransform(rect, m_foxitDevice2User);
- if (FXDIB_BICUBIC_INTERPOL == flags) {
+ if (FXDIB_BICUBIC_INTERPOL == flags)
CGContextSetInterpolationQuality(m_context, kCGInterpolationHigh);
- } else if (FXDIB_DOWNSAMPLE == flags) {
+ else if (FXDIB_DOWNSAMPLE == flags)
CGContextSetInterpolationQuality(m_context, kCGInterpolationNone);
- } else {
+ else
CGContextSetInterpolationQuality(m_context, kCGInterpolationMedium);
- }
- CG_SetImageTransform(dest_left, dest_top, dest_width, dest_height);
+
+ CG_SetImageTransform(dest_left, dest_top, dest_width, dest_height, nullptr);
CFX_DIBitmap* pBitmap1 = nullptr;
if (pBitmap->IsAlphaMask()) {
- if (pBitmap->GetBuffer()) {
+ if (pBitmap->GetBuffer())
pBitmap1 = (CFX_DIBitmap*)pBitmap;
- } else {
+ else
pBitmap1 = pBitmap->Clone();
- }
if (!pBitmap1) {
RestoreState(false);
return FALSE;
@@ -693,20 +683,19 @@ FX_BOOL CFX_QuartzDeviceDriver::StretchDIBits(const CFX_DIBSource* pBitmap,
CGImageRelease(pImage);
CGColorSpaceRelease(pColorSpace);
CGDataProviderRelease(pBitmapProvider);
- if (pBitmap1 != pBitmap) {
+ if (pBitmap1 != pBitmap)
delete pBitmap1;
- }
+
RestoreState(false);
return TRUE;
}
if (pBitmap->GetBPP() < 32) {
pBitmap1 = pBitmap->CloneConvert(FXDIB_Rgb32);
} else {
- if (pBitmap->GetBuffer()) {
+ if (pBitmap->GetBuffer())
pBitmap1 = (CFX_DIBitmap*)pBitmap;
- } else {
+ else
pBitmap1 = pBitmap->Clone();
- }
}
if (!pBitmap1) {
RestoreState(false);
@@ -735,25 +724,25 @@ FX_BOOL CFX_QuartzDeviceDriver::StretchDIBits(const CFX_DIBSource* pBitmap,
CGContextDrawImage(m_context, rect, image);
CGImageRelease(image);
CGContextRelease(ctx);
- if (pBitmap1 != pBitmap) {
+ if (pBitmap1 != pBitmap)
delete pBitmap1;
- }
+
RestoreState(false);
return TRUE;
}
-FX_BOOL CFX_QuartzDeviceDriver::CG_DrawGlypRun(int nChars,
- const FXTEXT_CHARPOS* pCharPos,
- CFX_Font* pFont,
- CFX_FontCache* pCache,
- const CFX_Matrix* pGlyphMatrix,
- const CFX_Matrix* pObject2Device,
- FX_FLOAT font_size,
- uint32_t argb,
- int alpha_flag,
- void* pIccTransform) {
- if (nChars == 0) {
+
+FX_BOOL CFX_QuartzDeviceDriver::CG_DrawGlyphRun(
+ int nChars,
+ const FXTEXT_CHARPOS* pCharPos,
+ CFX_Font* pFont,
+ CFX_FontCache* pCache,
+ const CFX_Matrix* pGlyphMatrix,
+ const CFX_Matrix* pObject2Device,
+ FX_FLOAT font_size,
+ uint32_t argb) {
+ if (nChars == 0)
return TRUE;
- }
+
CQuartz2D& quartz2d =
static_cast<CApplePlatform*>(CFX_GEModule::Get()->GetPlatformData())
->m_quartz2d;
@@ -775,9 +764,9 @@ FX_BOOL CFX_QuartzDeviceDriver::CG_DrawGlypRun(int nChars,
glyph_positions[i].y = pCharPos[i].m_OriginY;
}
CFX_Matrix text_matrix;
- if (pObject2Device) {
+ if (pObject2Device)
text_matrix.Concat(*pObject2Device);
- }
+
CGAffineTransform matrix_cg =
CGAffineTransformMake(text_matrix.a, text_matrix.b, text_matrix.c,
text_matrix.d, text_matrix.e, text_matrix.f);
@@ -797,9 +786,9 @@ FX_BOOL CFX_QuartzDeviceDriver::CG_DrawGlypRun(int nChars,
CGAffineTransform glyph_matrix = CGAffineTransformMake(
pGlyphMatrix->a, pGlyphMatrix->b, pGlyphMatrix->c, pGlyphMatrix->d,
pGlyphMatrix->e, pGlyphMatrix->f);
- if (m_foxitDevice2User.d < 0) {
+ if (m_foxitDevice2User.d < 0)
glyph_matrix = CGAffineTransformInvert(glyph_matrix);
- }
+
CGContextConcatCTM(m_context, glyph_matrix);
CGContextTranslateCTM(m_context, -origin.x, -origin.y);
}
@@ -808,17 +797,17 @@ FX_BOOL CFX_QuartzDeviceDriver::CG_DrawGlypRun(int nChars,
RestoreState(false);
return TRUE;
}
+
FX_BOOL CFX_QuartzDeviceDriver::DrawDeviceText(int nChars,
const FXTEXT_CHARPOS* pCharPos,
CFX_Font* pFont,
CFX_FontCache* pCache,
const CFX_Matrix* pObject2Device,
FX_FLOAT font_size,
- uint32_t color,
- int alpha_flag,
- void* pIccTransform) {
+ uint32_t color) {
if (!pFont || !m_context)
return FALSE;
+
FX_BOOL bBold = pFont->IsBold();
if (!bBold && pFont->GetSubstFont() &&
pFont->GetSubstFont()->m_Weight >= 500 &&
@@ -832,9 +821,8 @@ FX_BOOL CFX_QuartzDeviceDriver::DrawDeviceText(int nChars,
while (i < nChars) {
if (pCharPos[i].m_bGlyphAdjust || font_size < 0) {
if (i > 0) {
- ret =
- CG_DrawGlypRun(i, pCharPos, pFont, pCache, nullptr, pObject2Device,
- font_size, color, alpha_flag, pIccTransform);
+ ret = CG_DrawGlyphRun(i, pCharPos, pFont, pCache, nullptr,
+ pObject2Device, font_size, color);
if (!ret) {
RestoreState(false);
return ret;
@@ -850,9 +838,8 @@ FX_BOOL CFX_QuartzDeviceDriver::DrawDeviceText(int nChars,
char_pos->m_AdjustMatrix[0], char_pos->m_AdjustMatrix[1],
char_pos->m_AdjustMatrix[2], char_pos->m_AdjustMatrix[3], 0, 0);
}
- ret = CG_DrawGlypRun(1, char_pos, pFont, pCache, &glphy_matrix,
- pObject2Device, font_size, color, alpha_flag,
- pIccTransform);
+ ret = CG_DrawGlyphRun(1, char_pos, pFont, pCache, &glphy_matrix,
+ pObject2Device, font_size, color);
if (!ret) {
RestoreState(false);
return ret;
@@ -866,12 +853,13 @@ FX_BOOL CFX_QuartzDeviceDriver::DrawDeviceText(int nChars,
}
}
if (i > 0) {
- ret = CG_DrawGlypRun(i, pCharPos, pFont, pCache, nullptr, pObject2Device,
- font_size, color, alpha_flag, pIccTransform);
+ ret = CG_DrawGlyphRun(i, pCharPos, pFont, pCache, nullptr, pObject2Device,
+ font_size, color);
}
RestoreState(false);
return ret;
}
+
void CFX_QuartzDeviceDriver::setStrokeInfo(const CFX_GraphStateData* graphState,
FX_ARGB argb,
FX_FLOAT lineWidth) {
@@ -959,6 +947,7 @@ void CFX_QuartzDeviceDriver::setPathToContext(const CFX_PathData* pathData) {
}
}
}
+
void CFX_QuartzDeviceDriver::CG_SetImageTransform(int dest_left,
int dest_top,
int dest_width,
@@ -966,29 +955,30 @@ void CFX_QuartzDeviceDriver::CG_SetImageTransform(int dest_left,
CGRect* rect) {
int flip_y = m_foxitDevice2User.d * dest_height < 0 ? 1 : -1;
int flip_x = m_foxitDevice2User.a * dest_width > 0 ? 1 : -1;
- if (flip_y < 0 || flip_x < 0) {
- if (dest_height < 0) {
- dest_height = -dest_height;
- dest_top -= dest_height;
- }
- CGRect rt = CGRectApplyAffineTransform(
- CGRectMake(dest_left, dest_top, dest_width, dest_height),
- m_foxitDevice2User);
- CGFloat offset_x = (rt.origin.x) + rt.size.width / 2.f,
- offset_y = (rt.origin.y) + rt.size.height / 2.f;
- CGAffineTransform transform = CGAffineTransformIdentity;
- transform = CGAffineTransformConcat(
- transform, CGAffineTransformMake(1, 0, 0, 1, -offset_x, -offset_y));
- transform = CGAffineTransformConcat(
- transform, CGAffineTransformMake(flip_x, 0, 0, flip_y, 0, 0));
- transform = CGAffineTransformConcat(
- transform, CGAffineTransformMake(1, 0, 0, 1, offset_x, offset_y));
- CGContextConcatCTM(m_context, transform);
- if (rect) {
- *rect = CGRectApplyAffineTransform(*rect, transform);
- }
- }
+ if (flip_y >= 0 && flip_x >= 0)
+ return;
+
+ if (dest_height < 0) {
+ dest_height = -dest_height;
+ dest_top -= dest_height;
+ }
+ CGRect rt = CGRectApplyAffineTransform(
+ CGRectMake(dest_left, dest_top, dest_width, dest_height),
+ m_foxitDevice2User);
+ CGFloat offset_x = (rt.origin.x) + rt.size.width / 2.f,
+ offset_y = (rt.origin.y) + rt.size.height / 2.f;
+ CGAffineTransform transform = CGAffineTransformIdentity;
+ transform = CGAffineTransformConcat(
+ transform, CGAffineTransformMake(1, 0, 0, 1, -offset_x, -offset_y));
+ transform = CGAffineTransformConcat(
+ transform, CGAffineTransformMake(flip_x, 0, 0, flip_y, 0, 0));
+ transform = CGAffineTransformConcat(
+ transform, CGAffineTransformMake(1, 0, 0, 1, offset_x, offset_y));
+ CGContextConcatCTM(m_context, transform);
+ if (rect)
+ *rect = CGRectApplyAffineTransform(*rect, transform);
}
+
void CFX_QuartzDeviceDriver::ClearDriver() {
if (!m_context)
return;