summaryrefslogtreecommitdiff
path: root/core/fxge
diff options
context:
space:
mode:
Diffstat (limited to 'core/fxge')
-rw-r--r--core/fxge/dib/cfx_dibsource.cpp230
1 files changed, 133 insertions, 97 deletions
diff --git a/core/fxge/dib/cfx_dibsource.cpp b/core/fxge/dib/cfx_dibsource.cpp
index c91cd849a8..f96ca1e074 100644
--- a/core/fxge/dib/cfx_dibsource.cpp
+++ b/core/fxge/dib/cfx_dibsource.cpp
@@ -593,6 +593,128 @@ void ConvertBuffer_32bppCmyk2Rgb32(uint8_t* dest_buf,
}
}
+bool ConvertBuffer_8bppMask(int bpp,
+ uint8_t* dest_buf,
+ int dest_pitch,
+ int width,
+ int height,
+ const RetainPtr<CFX_DIBSource>& pSrcBitmap,
+ int src_left,
+ int src_top) {
+ switch (bpp) {
+ case 1:
+ if (pSrcBitmap->GetPalette()) {
+ ConvertBuffer_1bppPlt2Gray(dest_buf, dest_pitch, width, height,
+ pSrcBitmap, src_left, src_top);
+ } else {
+ ConvertBuffer_1bppMask2Gray(dest_buf, dest_pitch, width, height,
+ pSrcBitmap, src_left, src_top);
+ }
+ return true;
+ case 8:
+ if (pSrcBitmap->GetPalette()) {
+ ConvertBuffer_8bppPlt2Gray(dest_buf, dest_pitch, width, height,
+ pSrcBitmap, src_left, src_top);
+ } else {
+ ConvertBuffer_8bppMask2Gray(dest_buf, dest_pitch, width, height,
+ pSrcBitmap, src_left, src_top);
+ }
+ return true;
+ case 24:
+ case 32:
+ ConvertBuffer_RgbOrCmyk2Gray(dest_buf, dest_pitch, width, height,
+ pSrcBitmap, src_left, src_top);
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool ConvertBuffer_Rgb(int bpp,
+ FXDIB_Format dest_format,
+ uint8_t* dest_buf,
+ int dest_pitch,
+ int width,
+ int height,
+ const RetainPtr<CFX_DIBSource>& pSrcBitmap,
+ int src_left,
+ int src_top) {
+ switch (bpp) {
+ case 1:
+ if (pSrcBitmap->GetPalette()) {
+ ConvertBuffer_1bppPlt2Rgb(dest_format, dest_buf, dest_pitch, width,
+ height, pSrcBitmap, src_left, src_top);
+ } else {
+ ConvertBuffer_1bppMask2Rgb(dest_format, dest_buf, dest_pitch, width,
+ height, pSrcBitmap, src_left, src_top);
+ }
+ return true;
+ case 8:
+ if (pSrcBitmap->GetPalette()) {
+ ConvertBuffer_8bppPlt2Rgb(dest_format, dest_buf, dest_pitch, width,
+ height, pSrcBitmap, src_left, src_top);
+ } else {
+ ConvertBuffer_8bppMask2Rgb(dest_format, dest_buf, dest_pitch, width,
+ height, pSrcBitmap, src_left, src_top);
+ }
+ return true;
+ case 24:
+ ConvertBuffer_24bppRgb2Rgb24(dest_buf, dest_pitch, width, height,
+ pSrcBitmap, src_left, src_top);
+ return true;
+ case 32:
+ ConvertBuffer_32bppRgb2Rgb24(dest_buf, dest_pitch, width, height,
+ pSrcBitmap, src_left, src_top);
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool ConvertBuffer_Argb(int bpp,
+ bool cmyk,
+ FXDIB_Format dest_format,
+ uint8_t* dest_buf,
+ int dest_pitch,
+ int width,
+ int height,
+ const RetainPtr<CFX_DIBSource>& pSrcBitmap,
+ int src_left,
+ int src_top) {
+ switch (bpp) {
+ case 1:
+ if (pSrcBitmap->GetPalette()) {
+ ConvertBuffer_1bppPlt2Rgb(dest_format, dest_buf, dest_pitch, width,
+ height, pSrcBitmap, src_left, src_top);
+ } else {
+ ConvertBuffer_1bppMask2Rgb(dest_format, dest_buf, dest_pitch, width,
+ height, pSrcBitmap, src_left, src_top);
+ }
+ return true;
+ case 8:
+ if (pSrcBitmap->GetPalette()) {
+ ConvertBuffer_8bppPlt2Rgb(dest_format, dest_buf, dest_pitch, width,
+ height, pSrcBitmap, src_left, src_top);
+ } else {
+ ConvertBuffer_8bppMask2Rgb(dest_format, dest_buf, dest_pitch, width,
+ height, pSrcBitmap, src_left, src_top);
+ }
+ return true;
+ case 24:
+ case 32:
+ if (cmyk) {
+ ConvertBuffer_32bppCmyk2Rgb32(dest_buf, dest_pitch, width, height,
+ pSrcBitmap, src_left, src_top);
+ } else {
+ ConvertBuffer_Rgb2Rgb32(dest_buf, dest_pitch, width, height, pSrcBitmap,
+ src_left, src_top);
+ }
+ return true;
+ default:
+ return false;
+ }
+}
+
} // namespace
CFX_DIBSource::CFX_DIBSource()
@@ -1095,55 +1217,25 @@ bool CFX_DIBSource::ConvertBuffer(
int src_top,
std::unique_ptr<uint32_t, FxFreeDeleter>* p_pal) {
FXDIB_Format src_format = pSrcBitmap->GetFormat();
+ const int bpp = src_format & 0xff;
switch (dest_format) {
- case FXDIB_Invalid:
- case FXDIB_1bppCmyk:
- case FXDIB_1bppMask:
- case FXDIB_1bppRgb:
- NOTREACHED();
- return false;
case FXDIB_8bppMask: {
- if ((src_format & 0xff) == 1) {
- if (pSrcBitmap->GetPalette()) {
- ConvertBuffer_1bppPlt2Gray(dest_buf, dest_pitch, width, height,
- pSrcBitmap, src_left, src_top);
- return true;
- }
- ConvertBuffer_1bppMask2Gray(dest_buf, dest_pitch, width, height,
+ return ConvertBuffer_8bppMask(bpp, dest_buf, dest_pitch, width, height,
pSrcBitmap, src_left, src_top);
- return true;
- }
- if ((src_format & 0xff) == 8) {
- if (pSrcBitmap->GetPalette()) {
- ConvertBuffer_8bppPlt2Gray(dest_buf, dest_pitch, width, height,
- pSrcBitmap, src_left, src_top);
- return true;
- }
- ConvertBuffer_8bppMask2Gray(dest_buf, dest_pitch, width, height,
- pSrcBitmap, src_left, src_top);
- return true;
- }
- if ((src_format & 0xff) >= 24) {
- ConvertBuffer_RgbOrCmyk2Gray(dest_buf, dest_pitch, width, height,
- pSrcBitmap, src_left, src_top);
- return true;
- }
- return false;
}
case FXDIB_8bppRgb:
case FXDIB_8bppRgba: {
- if ((src_format & 0xff) == 8 && !pSrcBitmap->GetPalette()) {
+ if (bpp == 8 && !pSrcBitmap->GetPalette()) {
return ConvertBuffer(FXDIB_8bppMask, dest_buf, dest_pitch, width,
height, pSrcBitmap, src_left, src_top, p_pal);
}
p_pal->reset(FX_Alloc(uint32_t, 256));
- if (((src_format & 0xff) == 1 || (src_format & 0xff) == 8) &&
- pSrcBitmap->GetPalette()) {
+ if ((bpp == 1 || bpp == 8) && pSrcBitmap->GetPalette()) {
ConvertBuffer_Plt2PltRgb8(dest_buf, dest_pitch, width, height,
pSrcBitmap, src_left, src_top, p_pal->get());
return true;
}
- if ((src_format & 0xff) >= 24) {
+ if (bpp >= 24) {
ConvertBuffer_Rgb2PltRgb8(dest_buf, dest_pitch, width, height,
pSrcBitmap, src_left, src_top, p_pal->get());
return true;
@@ -1152,73 +1244,17 @@ bool CFX_DIBSource::ConvertBuffer(
}
case FXDIB_Rgb:
case FXDIB_Rgba: {
- if ((src_format & 0xff) == 1) {
- if (pSrcBitmap->GetPalette()) {
- ConvertBuffer_1bppPlt2Rgb(dest_format, dest_buf, dest_pitch, width,
- height, pSrcBitmap, src_left, src_top);
- return true;
- }
- ConvertBuffer_1bppMask2Rgb(dest_format, dest_buf, dest_pitch, width,
- height, pSrcBitmap, src_left, src_top);
- return true;
- }
- if ((src_format & 0xff) == 8) {
- if (pSrcBitmap->GetPalette()) {
- ConvertBuffer_8bppPlt2Rgb(dest_format, dest_buf, dest_pitch, width,
- height, pSrcBitmap, src_left, src_top);
- return true;
- }
- ConvertBuffer_8bppMask2Rgb(dest_format, dest_buf, dest_pitch, width,
- height, pSrcBitmap, src_left, src_top);
- return true;
- }
- if ((src_format & 0xff) == 24) {
- ConvertBuffer_24bppRgb2Rgb24(dest_buf, dest_pitch, width, height,
- pSrcBitmap, src_left, src_top);
- return true;
- }
- if ((src_format & 0xff) == 32) {
- ConvertBuffer_32bppRgb2Rgb24(dest_buf, dest_pitch, width, height,
- pSrcBitmap, src_left, src_top);
- return true;
- }
- return false;
+ return ConvertBuffer_Rgb(bpp, dest_format, dest_buf, dest_pitch, width,
+ height, pSrcBitmap, src_left, src_top);
}
case FXDIB_Argb:
case FXDIB_Rgb32: {
- if ((src_format & 0xff) == 1) {
- if (pSrcBitmap->GetPalette()) {
- ConvertBuffer_1bppPlt2Rgb(dest_format, dest_buf, dest_pitch, width,
- height, pSrcBitmap, src_left, src_top);
- return true;
- }
- ConvertBuffer_1bppMask2Rgb(dest_format, dest_buf, dest_pitch, width,
- height, pSrcBitmap, src_left, src_top);
- return true;
- }
- if ((src_format & 0xff) == 8) {
- if (pSrcBitmap->GetPalette()) {
- ConvertBuffer_8bppPlt2Rgb(dest_format, dest_buf, dest_pitch, width,
- height, pSrcBitmap, src_left, src_top);
- return true;
- }
- ConvertBuffer_8bppMask2Rgb(dest_format, dest_buf, dest_pitch, width,
- height, pSrcBitmap, src_left, src_top);
- return true;
- }
- if ((src_format & 0xff) >= 24) {
- if (src_format & 0x0400) {
- ConvertBuffer_32bppCmyk2Rgb32(dest_buf, dest_pitch, width, height,
- pSrcBitmap, src_left, src_top);
- return true;
- }
- ConvertBuffer_Rgb2Rgb32(dest_buf, dest_pitch, width, height, pSrcBitmap,
- src_left, src_top);
- return true;
- }
- return false;
+ const bool cmyk = src_format & 0x0400;
+ return ConvertBuffer_Argb(bpp, cmyk, dest_format, dest_buf, dest_pitch,
+ width, height, pSrcBitmap, src_left, src_top);
}
default:
+ NOTREACHED();
return false;
}
}