From 35b2cc35723692cb018458f9e0af5f3d6afa9431 Mon Sep 17 00:00:00 2001 From: Joshua Peisach Date: Fri, 11 Aug 2023 15:27:40 -0400 Subject: [PATCH] yolo vtable38 (I can't test the build atm) I moved up ImportColorsToPalette so other functions, including this one can use it --- LEGO1/mxbitmap.cpp | 62 ++++++++++++++++++++++++++-------------------- LEGO1/mxbitmap.h | 2 +- 2 files changed, 36 insertions(+), 28 deletions(-) diff --git a/LEGO1/mxbitmap.cpp b/LEGO1/mxbitmap.cpp index f902e43d..9f004112 100644 --- a/LEGO1/mxbitmap.cpp +++ b/LEGO1/mxbitmap.cpp @@ -63,6 +63,32 @@ MxResult MxBitmap::vtable18(BITMAPINFOHEADER *p_bmiHeader) return result; } + +// OFFSET: LEGO1 0x100bd450 +MxResult ImportColorsToPalette(RGBQUAD* p_rgbquad, MxPalette* p_palette) +{ + MxPalette* local_pal; + MxResult ret = FAILURE; + PALETTEENTRY entries[256]; + MxResult opret; + + if(p_palette == NULL) { + local_pal = new MxPalette; + opret = local_pal->GetEntries(entries); + if(opret != 0) { + delete local_pal; + return ret; + } + } else { + opret = p_palette->GetEntries(entries); + if(opret != 0) return ret; + } + + // FIXME/TODO: the loop here, possibly memcpy + ret = SUCCESS; + return ret; +} + // OFFSET: LEGO1 0x100bcaa0 STUB int MxBitmap::vtable1c(int p_width, int p_height, MxPalette *p_palette, int) { @@ -188,9 +214,16 @@ MxPalette *MxBitmap::CreatePalette() return pal; } -// OFFSET: LEGO1 0x100bd280 STUB -void MxBitmap::vtable38(void*) +// OFFSET: LEGO1 0x100bd280 +void MxBitmap::ImportPalette(MxPalette* p_palette) { + if (this->m_bmiColorsProvided) { + ImportColorsToPalette(this->m_paletteData, p_palette); + } + if (this->m_palette != NULL) { + delete this->m_palette; + } + this->m_palette = p_palette->Clone(); } // OFFSET: LEGO1 0x100bd2d0 STUB @@ -208,29 +241,4 @@ MxResult MxBitmap::CopyColorData(HDC p_hdc, int p_xSrc, int p_ySrc, int p_xDest, } return StretchDIBits(p_hdc, p_xDest, p_yDest, p_destWidth, p_destHeight, p_xSrc, p_ySrc, p_destWidth, p_destHeight, this->m_data, this->m_info, this->m_bmiColorsProvided, SRCCOPY); -} - -// OFFSET: LEGO1 0x100bd450 -MxResult ImportColorsToPalette(RGBQUAD* p_rgbquad, MxPalette* p_palette) -{ - MxPalette* local_pal; - MxResult ret = FAILURE; - PALETTEENTRY entries[256]; - MxResult opret; - - if(p_palette == NULL) { - local_pal = new MxPalette; - opret = local_pal->GetEntries(entries); - if(opret != 0) { - delete local_pal; - return ret; - } - } else { - opret = p_palette->GetEntries(entries); - if(opret != 0) return ret; - } - - // FIXME/TODO: the loop here, possibly memcpy - ret = SUCCESS; - return ret; } \ No newline at end of file diff --git a/LEGO1/mxbitmap.h b/LEGO1/mxbitmap.h index e5669c63..92e66507 100644 --- a/LEGO1/mxbitmap.h +++ b/LEGO1/mxbitmap.h @@ -22,7 +22,7 @@ class MxBitmap : public MxCore virtual void vtable2c(int, int, int, int, int, int, int); virtual void vtable30(int, int, int, int, int, int, int); __declspec(dllexport) virtual MxPalette *CreatePalette(); // vtable+34 - virtual void vtable38(void*); + virtual void ImportPalette(MxPalette* p_palette); virtual int vtable3c(MxBool); virtual MxResult CopyColorData(HDC p_hdc, int p_xSrc, int p_ySrc, int p_xDest, int p_yDest, int p_destWidth, int p_destHeight); // vtable+40