Add bare-minimum extension-reaper-macos REAPER extension skeleton

C/C++ extension built directly against the vendored Cockos reaper-sdk
headers (no Rust/reaper-rs wrapper layer). Loads, registers a test
action, and confirms via REAPER's console — confirmed working in
REAPER 2026-07-15.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Paul Lipscomb
2026-07-15 19:12:33 -04:00
parent 7ecc718f5d
commit cd5ebd84d6
512 changed files with 330043 additions and 1 deletions
@@ -0,0 +1,122 @@
/*
Cockos WDL - LICE - Lightweight Image Compositing Engine
Copyright (C) 2007 and later, Cockos Incorporated
File: lice_bmp.cpp (BMP loading for LICE)
See lice.h for license and other information
*/
#ifndef WDL_NO_DEFINE_MINMAX
#define WDL_NO_DEFINE_MINMAX
#endif
#include "lice.h"
#include "../wdltypes.h"
#ifndef _WIN32
#include "../swell/swell.h"
#endif
static LICE_IBitmap *hbmToBit(HBITMAP hbm, LICE_IBitmap *bmp)
{
BITMAP bm;
GetObject(hbm, sizeof(BITMAP), (LPSTR)&bm);
LICE_SysBitmap sysbitmap(bm.bmWidth,bm.bmHeight);
#ifdef _WIN32
HDC hdc=CreateCompatibleDC(NULL);
HGDIOBJ oldBM=SelectObject(hdc,hbm);
BitBlt(sysbitmap.getDC(),0,0,bm.bmWidth,bm.bmHeight,hdc,0,0,SRCCOPY);
GdiFlush();
if (!bmp) bmp=new WDL_NEW LICE_MemBitmap(bm.bmWidth,bm.bmHeight);
LICE_Copy(bmp,&sysbitmap);
SelectObject(hdc,oldBM);
DeleteDC(hdc);
#else
LICE_Clear(&sysbitmap,0);
RECT r={0,0,bm.bmWidth,bm.bmHeight};
DrawImageInRect(sysbitmap.getDC(),hbm,&r);
if (!bmp) bmp=new WDL_NEW LICE_MemBitmap(bm.bmWidth,bm.bmHeight);
LICE_Copy(bmp,&sysbitmap);
#endif
if (bmp) LICE_FillRect(bmp,0,0,bmp->getWidth(),bmp->getHeight(),LICE_RGBA(0,0,0,255),1.0f,LICE_BLIT_MODE_ADD);
return bmp;
}
LICE_IBitmap *LICE_LoadBMP(const char *filename, LICE_IBitmap *bmp) // returns a bitmap (bmp if nonzero) on success
{
HBITMAP bm=NULL;
#ifdef _WIN32
#ifndef WDL_NO_SUPPORT_UTF8
#ifdef WDL_SUPPORT_WIN9X
if (GetVersion()<0x80000000)
#endif
{
WCHAR wf[2048];
if (MultiByteToWideChar(CP_UTF8,MB_ERR_INVALID_CHARS,filename,-1,wf,2048))
bm = (HBITMAP) LoadImageW(NULL,wf,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_LOADFROMFILE);
}
#endif
if (!bm) bm=(HBITMAP) LoadImage(NULL,filename,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_LOADFROMFILE);
#else
bm=(HBITMAP) LoadNamedImage(filename,false);
#endif
if (!bm) return 0;
LICE_IBitmap *ret=hbmToBit(bm,bmp);
DeleteObject(bm);
return ret;
}
#ifdef _WIN32
LICE_IBitmap *LICE_LoadBMPFromResource(HINSTANCE hInst, const char *resid, LICE_IBitmap *bmp) // returns a bitmap (bmp if nonzero) on success
{
HBITMAP bm=(HBITMAP) LoadImage(hInst,resid,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION);
if (!bm) return 0;
LICE_IBitmap *ret=hbmToBit(bm,bmp);
DeleteObject(bm);
return ret;
}
#endif
class LICE_BMPLoader
{
public:
_LICE_ImageLoader_rec rec;
LICE_BMPLoader()
{
rec.loadfunc = loadfunc;
rec.get_extlist = get_extlist;
rec._next = LICE_ImageLoader_list;
LICE_ImageLoader_list = &rec;
}
static LICE_IBitmap *loadfunc(const char *filename, bool checkFileName, LICE_IBitmap *bmpbase)
{
if (checkFileName)
{
const char *p=filename;
while (*p)p++;
while (p>filename && *p != '\\' && *p != '/' && *p != '.') p--;
if (stricmp(p,".bmp")) return 0;
}
return LICE_LoadBMP(filename,bmpbase);
}
static const char *get_extlist()
{
return "BMP files (*.BMP)\0*.BMP\0";
}
};
LICE_BMPLoader LICE_bmpldr;