Mercurial > foo_out_sdl
diff foosdk/sdk/libPPUI/gdiplus_helpers.h @ 1:20d02a178406 default tip
*: check in everything else
yay
| author | Paper <paper@tflc.us> |
|---|---|
| date | Mon, 05 Jan 2026 02:15:46 -0500 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/foosdk/sdk/libPPUI/gdiplus_helpers.h Mon Jan 05 02:15:46 2026 -0500 @@ -0,0 +1,53 @@ +#pragma once +#include <GdiPlus.h> +#include <functional> +#include <memory> + +#include "win32_op.h" +#include "win32_utility.h" + +class GdiplusErrorHandler { +public: + static void Handle(Gdiplus::Status code); + void operator<<(Gdiplus::Status p_code) {Handle(p_code);} +}; + +class GdiplusScope { +public: + GdiplusScope() { + Gdiplus::GdiplusStartupInput input; + Gdiplus::GdiplusStartupOutput output; + GdiplusErrorHandler() << Gdiplus::GdiplusStartup(&m_token,&input,&output); + } + ~GdiplusScope() { + Gdiplus::GdiplusShutdown(m_token); + } + static void Once(); +private: + GdiplusScope( const GdiplusScope & ) = delete; + void operator=( const GdiplusScope & ) = delete; + + ULONG_PTR m_token = 0; +}; + +typedef std::function<void(Gdiplus::Bitmap*) > GdiplusBitmapTransform_t; + +struct GdiplusIconArg_t { + CSize size = CSize(0,0); + GdiplusBitmapTransform_t transform = nullptr; +}; + +HBITMAP GdiplusLoadBitmap(UINT id, const TCHAR* resType, CSize size); +std::unique_ptr<Gdiplus::Image> GdiplusImageFromMem(const void* ptr, size_t bytes); +std::unique_ptr<Gdiplus::Bitmap> GdiplusResizeImage(Gdiplus::Image* source, CSize size, Gdiplus::PixelFormat pf = PixelFormat32bppARGB); +HICON GdiplusLoadIconFromMem(const void* ptr, size_t bytes, CSize size); +HICON GdiplusLoadIcon(UINT id, const TCHAR* resType, CSize size); +HICON GdiplusLoadIconEx(UINT id, const TCHAR* resType, GdiplusIconArg_t const & arg); +HICON GdiplusLoadPNGIcon(UINT id, CSize size); +HICON LoadPNGIcon(UINT id, CSize size); + +void GdiplusLoadButtonPNG(CIcon& icon, HWND btn_, UINT image, GdiplusBitmapTransform_t transform = nullptr); +std::unique_ptr<Gdiplus::Bitmap> GdiplusLoadResource(UINT id, const TCHAR* resType); +std::unique_ptr<Gdiplus::Bitmap> GdiplusLoadResourceAsSize(UINT id, const TCHAR* resType, CSize size); +void GdiplusDimImage(Gdiplus::Bitmap* bmp); +void GdiplusInvertImage(Gdiplus::Bitmap* bmp);
