| Index: core/fxge/win32/fx_win32_device.cpp
|
| diff --git a/core/fxge/win32/fx_win32_device.cpp b/core/fxge/win32/fx_win32_device.cpp
|
| index a8ad1a37cd75345d51cc4853bb28e5d1cea17aec..c2084f2877a6b9b9c56d61484d2c8489156693af 100644
|
| --- a/core/fxge/win32/fx_win32_device.cpp
|
| +++ b/core/fxge/win32/fx_win32_device.cpp
|
| @@ -753,6 +753,8 @@ CGdiDeviceDriver::CGdiDeviceDriver(HDC hDC, int device_class) {
|
| }
|
| }
|
|
|
| +CGdiDeviceDriver::~CGdiDeviceDriver() {}
|
| +
|
| int CGdiDeviceDriver::GetDeviceCaps(int caps_id) {
|
| switch (caps_id) {
|
| case FXDC_DEVICE_CLASS:
|
| @@ -989,14 +991,12 @@ FX_BOOL CGdiDeviceDriver::DrawPath(const CFX_PathData* pPathData,
|
| uint32_t fill_color,
|
| uint32_t stroke_color,
|
| int fill_mode,
|
| - int alpha_flag,
|
| - void* pIccTransform,
|
| int blend_type) {
|
| - if (blend_type != FXDIB_BLEND_NORMAL) {
|
| + if (blend_type != FXDIB_BLEND_NORMAL)
|
| return FALSE;
|
| - }
|
| - Color2Argb(fill_color, fill_color, alpha_flag | (1 << 24), pIccTransform);
|
| - Color2Argb(stroke_color, stroke_color, alpha_flag, pIccTransform);
|
| +
|
| + Color2Argb(fill_color, fill_color, 1 << 24, nullptr);
|
| + Color2Argb(stroke_color, stroke_color, 0, nullptr);
|
| CWin32Platform* pPlatform =
|
| (CWin32Platform*)CFX_GEModule::Get()->GetPlatformData();
|
| if (!(pGraphState || stroke_color == 0) &&
|
| @@ -1007,24 +1007,23 @@ FX_BOOL CGdiDeviceDriver::DrawPath(const CFX_PathData* pPathData,
|
| }
|
| FX_RECT bbox = bbox_f.GetInnerRect();
|
| if (bbox.Width() <= 0) {
|
| - return DrawCosmeticLine((FX_FLOAT)(bbox.left), (FX_FLOAT)(bbox.top),
|
| - (FX_FLOAT)(bbox.left),
|
| - (FX_FLOAT)(bbox.bottom + 1), fill_color,
|
| - alpha_flag, pIccTransform, FXDIB_BLEND_NORMAL);
|
| - } else if (bbox.Height() <= 0) {
|
| + return DrawCosmeticLine(
|
| + (FX_FLOAT)(bbox.left), (FX_FLOAT)(bbox.top), (FX_FLOAT)(bbox.left),
|
| + (FX_FLOAT)(bbox.bottom + 1), fill_color, FXDIB_BLEND_NORMAL);
|
| + }
|
| + if (bbox.Height() <= 0) {
|
| return DrawCosmeticLine((FX_FLOAT)(bbox.left), (FX_FLOAT)(bbox.top),
|
| (FX_FLOAT)(bbox.right + 1), (FX_FLOAT)(bbox.top),
|
| - fill_color, alpha_flag, pIccTransform,
|
| - FXDIB_BLEND_NORMAL);
|
| + fill_color, FXDIB_BLEND_NORMAL);
|
| }
|
| }
|
| int fill_alpha = FXARGB_A(fill_color);
|
| int stroke_alpha = FXARGB_A(stroke_color);
|
| FX_BOOL bDrawAlpha = (fill_alpha > 0 && fill_alpha < 255) ||
|
| (stroke_alpha > 0 && stroke_alpha < 255 && pGraphState);
|
| - if (!pPlatform->m_GdiplusExt.IsAvailable() && bDrawAlpha) {
|
| + if (!pPlatform->m_GdiplusExt.IsAvailable() && bDrawAlpha)
|
| return FALSE;
|
| - }
|
| +
|
| if (pPlatform->m_GdiplusExt.IsAvailable()) {
|
| if (bDrawAlpha ||
|
| ((m_DeviceClass != FXDC_PRINTER && !(fill_mode & FXFILL_FULLCOVER)) ||
|
| @@ -1092,24 +1091,22 @@ FX_BOOL CGdiDeviceDriver::DrawPath(const CFX_PathData* pPathData,
|
| return TRUE;
|
| }
|
|
|
| -FX_BOOL CGdiDeviceDriver::FillRect(const FX_RECT* pRect,
|
| - uint32_t fill_color,
|
| - int alpha_flag,
|
| - void* pIccTransform,
|
| - int blend_type) {
|
| - if (blend_type != FXDIB_BLEND_NORMAL) {
|
| +FX_BOOL CGdiDeviceDriver::FillRectWithBlend(const FX_RECT* pRect,
|
| + uint32_t fill_color,
|
| + int blend_type) {
|
| + if (blend_type != FXDIB_BLEND_NORMAL)
|
| return FALSE;
|
| - }
|
| - Color2Argb(fill_color, fill_color, alpha_flag | (1 << 24), pIccTransform);
|
| +
|
| + Color2Argb(fill_color, fill_color, 1 << 24, nullptr);
|
| int alpha;
|
| FX_COLORREF rgb;
|
| ArgbDecode(fill_color, alpha, rgb);
|
| - if (alpha == 0) {
|
| + if (alpha == 0)
|
| return TRUE;
|
| - }
|
| - if (alpha < 255) {
|
| +
|
| + if (alpha < 255)
|
| return FALSE;
|
| - }
|
| +
|
| HBRUSH hBrush = CreateSolidBrush(rgb);
|
| ::FillRect(m_hDC, (RECT*)pRect, hBrush);
|
| DeleteObject(hBrush);
|
| @@ -1153,19 +1150,17 @@ FX_BOOL CGdiDeviceDriver::DrawCosmeticLine(FX_FLOAT x1,
|
| FX_FLOAT x2,
|
| FX_FLOAT y2,
|
| uint32_t color,
|
| - int alpha_flag,
|
| - void* pIccTransform,
|
| int blend_type) {
|
| - if (blend_type != FXDIB_BLEND_NORMAL) {
|
| + if (blend_type != FXDIB_BLEND_NORMAL)
|
| return FALSE;
|
| - }
|
| - Color2Argb(color, color, alpha_flag | (1 << 24), pIccTransform);
|
| +
|
| + Color2Argb(color, color, 1 << 24, nullptr);
|
| int a;
|
| FX_COLORREF rgb;
|
| ArgbDecode(color, a, rgb);
|
| - if (a == 0) {
|
| + if (a == 0)
|
| return TRUE;
|
| - }
|
| +
|
| HPEN hPen = CreatePen(PS_SOLID, 1, rgb);
|
| hPen = (HPEN)SelectObject(m_hDC, hPen);
|
| MoveToEx(m_hDC, FXSYS_round(x1), FXSYS_round(y1), nullptr);
|
| @@ -1184,11 +1179,9 @@ CGdiDisplayDriver::CGdiDisplayDriver(HDC hDC)
|
| }
|
| }
|
|
|
| -FX_BOOL CGdiDisplayDriver::GetDIBits(CFX_DIBitmap* pBitmap,
|
| - int left,
|
| - int top,
|
| - void* pIccTransform,
|
| - FX_BOOL bDEdge) {
|
| +CGdiDisplayDriver::~CGdiDisplayDriver() {}
|
| +
|
| +FX_BOOL CGdiDisplayDriver::GetDIBits(CFX_DIBitmap* pBitmap, int left, int top) {
|
| FX_BOOL ret = FALSE;
|
| int width = pBitmap->GetWidth();
|
| int height = pBitmap->GetHeight();
|
| @@ -1204,11 +1197,7 @@ FX_BOOL CGdiDisplayDriver::GetDIBits(CFX_DIBitmap* pBitmap,
|
| bmi.bmiHeader.biHeight = -height;
|
| bmi.bmiHeader.biPlanes = 1;
|
| bmi.bmiHeader.biWidth = width;
|
| - if (!CFX_GEModule::Get()->GetCodecModule() ||
|
| - !CFX_GEModule::Get()->GetCodecModule()->GetIccModule()) {
|
| - pIccTransform = nullptr;
|
| - }
|
| - if (pBitmap->GetBPP() > 8 && !pBitmap->IsCmykImage() && !pIccTransform) {
|
| + if (pBitmap->GetBPP() > 8 && !pBitmap->IsCmykImage()) {
|
| ret = ::GetDIBits(hDCMemory, hbmp, 0, height, pBitmap->GetBuffer(), &bmi,
|
| DIB_RGB_COLORS) == height;
|
| } else {
|
| @@ -1217,15 +1206,15 @@ FX_BOOL CGdiDisplayDriver::GetDIBits(CFX_DIBitmap* pBitmap,
|
| bmi.bmiHeader.biBitCount = 24;
|
| ::GetDIBits(hDCMemory, hbmp, 0, height, bitmap.GetBuffer(), &bmi,
|
| DIB_RGB_COLORS);
|
| - ret = pBitmap->TransferBitmap(0, 0, width, height, &bitmap, 0, 0,
|
| - pIccTransform);
|
| + ret =
|
| + pBitmap->TransferBitmap(0, 0, width, height, &bitmap, 0, 0, nullptr);
|
| } else {
|
| ret = FALSE;
|
| }
|
| }
|
| - if (pBitmap->HasAlpha() && ret) {
|
| + if (pBitmap->HasAlpha() && ret)
|
| pBitmap->LoadChannel(FXDIB_Alpha, 0xff);
|
| - }
|
| +
|
| DeleteObject(hbmp);
|
| DeleteObject(hDCMemory);
|
| return ret;
|
| @@ -1236,54 +1225,48 @@ FX_BOOL CGdiDisplayDriver::SetDIBits(const CFX_DIBSource* pSource,
|
| const FX_RECT* pSrcRect,
|
| int left,
|
| int top,
|
| - int blend_type,
|
| - int alpha_flag,
|
| - void* pIccTransform) {
|
| + int blend_type) {
|
| ASSERT(blend_type == FXDIB_BLEND_NORMAL);
|
| if (pSource->IsAlphaMask()) {
|
| int width = pSource->GetWidth(), height = pSource->GetHeight();
|
| - int alpha = FXGETFLAG_COLORTYPE(alpha_flag)
|
| - ? FXGETFLAG_ALPHA_FILL(alpha_flag)
|
| - : FXARGB_A(color);
|
| + int alpha = FXARGB_A(color);
|
| if (pSource->GetBPP() != 1 || alpha != 255) {
|
| CFX_DIBitmap background;
|
| if (!background.Create(width, height, FXDIB_Rgb32) ||
|
| - !GetDIBits(&background, left, top, nullptr) ||
|
| + !GetDIBits(&background, left, top) ||
|
| !background.CompositeMask(0, 0, width, height, pSource, color, 0, 0,
|
| - FXDIB_BLEND_NORMAL, nullptr, FALSE,
|
| - alpha_flag, pIccTransform)) {
|
| + FXDIB_BLEND_NORMAL, nullptr, FALSE, 0,
|
| + nullptr)) {
|
| return FALSE;
|
| }
|
| FX_RECT src_rect(0, 0, width, height);
|
| - return SetDIBits(&background, 0, &src_rect, left, top, FXDIB_BLEND_NORMAL,
|
| - 0, nullptr);
|
| + return SetDIBits(&background, 0, &src_rect, left, top,
|
| + FXDIB_BLEND_NORMAL);
|
| }
|
| FX_RECT clip_rect(left, top, left + pSrcRect->Width(),
|
| top + pSrcRect->Height());
|
| return StretchDIBits(pSource, color, left - pSrcRect->left,
|
| top - pSrcRect->top, width, height, &clip_rect, 0,
|
| - alpha_flag, pIccTransform, FXDIB_BLEND_NORMAL);
|
| + FXDIB_BLEND_NORMAL);
|
| }
|
| int width = pSrcRect->Width(), height = pSrcRect->Height();
|
| if (pSource->HasAlpha()) {
|
| CFX_DIBitmap bitmap;
|
| if (!bitmap.Create(width, height, FXDIB_Rgb) ||
|
| - !GetDIBits(&bitmap, left, top, nullptr) ||
|
| + !GetDIBits(&bitmap, left, top) ||
|
| !bitmap.CompositeBitmap(0, 0, width, height, pSource, pSrcRect->left,
|
| pSrcRect->top, FXDIB_BLEND_NORMAL, nullptr,
|
| - FALSE, pIccTransform)) {
|
| + FALSE, nullptr)) {
|
| return FALSE;
|
| }
|
| FX_RECT src_rect(0, 0, width, height);
|
| - return SetDIBits(&bitmap, 0, &src_rect, left, top, FXDIB_BLEND_NORMAL, 0,
|
| - nullptr);
|
| + return SetDIBits(&bitmap, 0, &src_rect, left, top, FXDIB_BLEND_NORMAL);
|
| }
|
| CFX_DIBExtractor temp(pSource);
|
| CFX_DIBitmap* pBitmap = temp;
|
| - if (pBitmap) {
|
| - return GDI_SetDIBits(pBitmap, pSrcRect, left, top, pIccTransform);
|
| - }
|
| - return FALSE;
|
| + if (!pBitmap)
|
| + return FALSE;
|
| + return GDI_SetDIBits(pBitmap, pSrcRect, left, top, nullptr);
|
| }
|
|
|
| FX_BOOL CGdiDisplayDriver::UseFoxitStretchEngine(const CFX_DIBSource* pSource,
|
| @@ -1293,17 +1276,14 @@ FX_BOOL CGdiDisplayDriver::UseFoxitStretchEngine(const CFX_DIBSource* pSource,
|
| int dest_width,
|
| int dest_height,
|
| const FX_RECT* pClipRect,
|
| - int render_flags,
|
| - int alpha_flag,
|
| - void* pIccTransform,
|
| - int blend_type) {
|
| + int render_flags) {
|
| FX_RECT bitmap_clip = *pClipRect;
|
| - if (dest_width < 0) {
|
| + if (dest_width < 0)
|
| dest_left += dest_width;
|
| - }
|
| - if (dest_height < 0) {
|
| +
|
| + if (dest_height < 0)
|
| dest_top += dest_height;
|
| - }
|
| +
|
| bitmap_clip.Offset(-dest_left, -dest_top);
|
| std::unique_ptr<CFX_DIBitmap> pStretched(
|
| pSource->StretchTo(dest_width, dest_height, render_flags, &bitmap_clip));
|
| @@ -1312,8 +1292,7 @@ FX_BOOL CGdiDisplayDriver::UseFoxitStretchEngine(const CFX_DIBSource* pSource,
|
|
|
| FX_RECT src_rect(0, 0, pStretched->GetWidth(), pStretched->GetHeight());
|
| return SetDIBits(pStretched.get(), color, &src_rect, pClipRect->left,
|
| - pClipRect->top, FXDIB_BLEND_NORMAL, alpha_flag,
|
| - pIccTransform);
|
| + pClipRect->top, FXDIB_BLEND_NORMAL);
|
| }
|
|
|
| FX_BOOL CGdiDisplayDriver::StretchDIBits(const CFX_DIBSource* pSource,
|
| @@ -1324,15 +1303,12 @@ FX_BOOL CGdiDisplayDriver::StretchDIBits(const CFX_DIBSource* pSource,
|
| int dest_height,
|
| const FX_RECT* pClipRect,
|
| uint32_t flags,
|
| - int alpha_flag,
|
| - void* pIccTransform,
|
| int blend_type) {
|
| ASSERT(pSource && pClipRect);
|
| if (flags || dest_width > 10000 || dest_width < -10000 ||
|
| dest_height > 10000 || dest_height < -10000) {
|
| return UseFoxitStretchEngine(pSource, color, dest_left, dest_top,
|
| - dest_width, dest_height, pClipRect, flags,
|
| - alpha_flag, pIccTransform, blend_type);
|
| + dest_width, dest_height, pClipRect, flags);
|
| }
|
| if (pSource->IsAlphaMask()) {
|
| FX_RECT image_rect;
|
| @@ -1352,23 +1328,22 @@ FX_BOOL CGdiDisplayDriver::StretchDIBits(const CFX_DIBSource* pSource,
|
| CFX_DIBitmap background;
|
| if (!background.Create(clip_width, clip_height, FXDIB_Rgb32) ||
|
| !GetDIBits(&background, image_rect.left + clip_rect.left,
|
| - image_rect.top + clip_rect.top, nullptr) ||
|
| + image_rect.top + clip_rect.top) ||
|
| !background.CompositeMask(
|
| 0, 0, clip_width, clip_height, pStretched.get(), color, 0, 0,
|
| - FXDIB_BLEND_NORMAL, nullptr, FALSE, alpha_flag, pIccTransform)) {
|
| + FXDIB_BLEND_NORMAL, nullptr, FALSE, 0, nullptr)) {
|
| return FALSE;
|
| }
|
|
|
| FX_RECT src_rect(0, 0, clip_width, clip_height);
|
| - return SetDIBits(
|
| - &background, 0, &src_rect, image_rect.left + clip_rect.left,
|
| - image_rect.top + clip_rect.top, FXDIB_BLEND_NORMAL, 0, nullptr);
|
| + return SetDIBits(&background, 0, &src_rect,
|
| + image_rect.left + clip_rect.left,
|
| + image_rect.top + clip_rect.top, FXDIB_BLEND_NORMAL);
|
| }
|
| if (pSource->HasAlpha()) {
|
| CWin32Platform* pPlatform =
|
| (CWin32Platform*)CFX_GEModule::Get()->GetPlatformData();
|
| - if (pPlatform->m_GdiplusExt.IsAvailable() && !pIccTransform &&
|
| - !pSource->IsCmykImage()) {
|
| + if (pPlatform->m_GdiplusExt.IsAvailable() && !pSource->IsCmykImage()) {
|
| CFX_DIBExtractor temp(pSource);
|
| CFX_DIBitmap* pBitmap = temp;
|
| if (!pBitmap)
|
| @@ -1378,16 +1353,14 @@ FX_BOOL CGdiDisplayDriver::StretchDIBits(const CFX_DIBSource* pSource,
|
| pClipRect, flags);
|
| }
|
| return UseFoxitStretchEngine(pSource, color, dest_left, dest_top,
|
| - dest_width, dest_height, pClipRect, flags,
|
| - alpha_flag, pIccTransform, blend_type);
|
| + dest_width, dest_height, pClipRect, flags);
|
| }
|
| CFX_DIBExtractor temp(pSource);
|
| CFX_DIBitmap* pBitmap = temp;
|
| - if (pBitmap) {
|
| - return GDI_StretchDIBits(pBitmap, dest_left, dest_top, dest_width,
|
| - dest_height, flags, pIccTransform);
|
| - }
|
| - return FALSE;
|
| + if (!pBitmap)
|
| + return FALSE;
|
| + return GDI_StretchDIBits(pBitmap, dest_left, dest_top, dest_width,
|
| + dest_height, flags, nullptr);
|
| }
|
|
|
| CFX_WindowsDevice::CFX_WindowsDevice(HDC hDC) {
|
|
|