Did a proper migration of d2dscratch.c.
This commit is contained in:
parent
fbef804608
commit
a8b6cab2ab
|
@ -1,5 +1,5 @@
|
||||||
// 17 april 2016
|
// 17 april 2016
|
||||||
#include "uipriv_windows.h"
|
#include "uipriv_windows.hpp"
|
||||||
|
|
||||||
// The Direct2D scratch window is a utility for libui internal use to do quick things with Direct2D.
|
// The Direct2D scratch window is a utility for libui internal use to do quick things with Direct2D.
|
||||||
// To use, call newD2DScratch() passing in a subclass procedure. This subclass procedure should handle the msgD2DScratchPaint message, which has the following usage:
|
// To use, call newD2DScratch() passing in a subclass procedure. This subclass procedure should handle the msgD2DScratchPaint message, which has the following usage:
|
||||||
|
@ -18,7 +18,7 @@ static HRESULT d2dScratchDoPaint(HWND hwnd, ID2D1RenderTarget *rt)
|
||||||
COLORREF bgcolorref;
|
COLORREF bgcolorref;
|
||||||
D2D1_COLOR_F bgcolor;
|
D2D1_COLOR_F bgcolor;
|
||||||
|
|
||||||
ID2D1RenderTarget_BeginDraw(rt);
|
rt->BeginDraw();
|
||||||
|
|
||||||
// TODO only clear the clip area
|
// TODO only clear the clip area
|
||||||
// TODO clear with actual background brush
|
// TODO clear with actual background brush
|
||||||
|
@ -29,11 +29,11 @@ static HRESULT d2dScratchDoPaint(HWND hwnd, ID2D1RenderTarget *rt)
|
||||||
bgcolor.g = ((float) ((BYTE) ((bgcolorref & 0xFF00) >> 8))) / 255.0;
|
bgcolor.g = ((float) ((BYTE) ((bgcolorref & 0xFF00) >> 8))) / 255.0;
|
||||||
bgcolor.b = ((float) GetBValue(bgcolorref)) / 255.0;
|
bgcolor.b = ((float) GetBValue(bgcolorref)) / 255.0;
|
||||||
bgcolor.a = 1.0;
|
bgcolor.a = 1.0;
|
||||||
ID2D1RenderTarget_Clear(rt, &bgcolor);
|
rt->Clear(&bgcolor);
|
||||||
|
|
||||||
SendMessageW(hwnd, msgD2DScratchPaint, 0, (LPARAM) rt);
|
SendMessageW(hwnd, msgD2DScratchPaint, 0, (LPARAM) rt);
|
||||||
|
|
||||||
return ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
|
return rt->EndDraw(NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static LRESULT CALLBACK d2dScratchWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
static LRESULT CALLBACK d2dScratchWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
|
@ -57,26 +57,26 @@ static LRESULT CALLBACK d2dScratchWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, L
|
||||||
|
|
||||||
switch (uMsg) {
|
switch (uMsg) {
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
ID2D1HwndRenderTarget_Release(rt);
|
rt->Release();
|
||||||
SetWindowLongPtrW(hwnd, 0, (LONG_PTR) FALSE);
|
SetWindowLongPtrW(hwnd, 0, (LONG_PTR) FALSE);
|
||||||
break;
|
break;
|
||||||
case WM_PAINT:
|
case WM_PAINT:
|
||||||
hr = d2dScratchDoPaint(hwnd, (ID2D1RenderTarget *) rt);
|
hr = d2dScratchDoPaint(hwnd, rt);
|
||||||
switch (hr) {
|
switch (hr) {
|
||||||
case S_OK:
|
case S_OK:
|
||||||
if (ValidateRect(hwnd, NULL) == 0)
|
if (ValidateRect(hwnd, NULL) == 0)
|
||||||
logLastError("error validating D2D scratch control rect in d2dScratchWndProc()");
|
logLastError(L"error validating D2D scratch control rect");
|
||||||
break;
|
break;
|
||||||
case D2DERR_RECREATE_TARGET:
|
case D2DERR_RECREATE_TARGET:
|
||||||
// DON'T validate the rect
|
// DON'T validate the rect
|
||||||
// instead, simply drop the render target
|
// instead, simply drop the render target
|
||||||
// we'll get another WM_PAINT and make the render target again
|
// we'll get another WM_PAINT and make the render target again
|
||||||
// TODO would this require us to invalidate the entire client area?
|
// TODO would this require us to invalidate the entire client area?
|
||||||
ID2D1HwndRenderTarget_Release(rt);
|
rt->Release();
|
||||||
SetWindowLongPtrW(hwnd, GWLP_USERDATA, (LONG_PTR) NULL);
|
SetWindowLongPtrW(hwnd, GWLP_USERDATA, (LONG_PTR) NULL);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
logHRESULT("error drawing D2D scratch window in d2dScratchWndProc()", hr);
|
logHRESULT(L"error drawing D2D scratch window", hr);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
case WM_PRINTCLIENT:
|
case WM_PRINTCLIENT:
|
||||||
|
@ -104,7 +104,7 @@ ATOM registerD2DScratchClass(HICON hDefaultIcon, HCURSOR hDefaultCursor)
|
||||||
void unregisterD2DScratchClass(void)
|
void unregisterD2DScratchClass(void)
|
||||||
{
|
{
|
||||||
if (UnregisterClassW(d2dScratchClass, hInstance) == 0)
|
if (UnregisterClassW(d2dScratchClass, hInstance) == 0)
|
||||||
logLastError("error unregistering D2D scratch window class in unregisterD2DScratchClass()");
|
logLastError(L"error unregistering D2D scratch window class");
|
||||||
}
|
}
|
||||||
|
|
||||||
HWND newD2DScratch(HWND parent, RECT *rect, HMENU controlID, SUBCLASSPROC subclass, DWORD_PTR subclassData)
|
HWND newD2DScratch(HWND parent, RECT *rect, HMENU controlID, SUBCLASSPROC subclass, DWORD_PTR subclassData)
|
||||||
|
@ -118,8 +118,9 @@ HWND newD2DScratch(HWND parent, RECT *rect, HMENU controlID, SUBCLASSPROC subcla
|
||||||
rect->right - rect->left, rect->bottom - rect->top,
|
rect->right - rect->left, rect->bottom - rect->top,
|
||||||
parent, controlID, hInstance, NULL);
|
parent, controlID, hInstance, NULL);
|
||||||
if (hwnd == NULL)
|
if (hwnd == NULL)
|
||||||
logLastError("error creating D2D scratch window in newD2DScratch()");
|
// TODO return decoy window
|
||||||
|
logLastError(L"error creating D2D scratch window");
|
||||||
if (SetWindowSubclass(hwnd, subclass, 0, subclassData) == FALSE)
|
if (SetWindowSubclass(hwnd, subclass, 0, subclassData) == FALSE)
|
||||||
logLastError("error subclassing D2D scratch window in newD2DScratch()");
|
logLastError(L"error subclassing D2D scratch window");
|
||||||
return hwnd;
|
return hwnd;
|
||||||
}
|
}
|
|
@ -72,6 +72,11 @@ extern BOOL handleParentMessages(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa
|
||||||
// resize.cpp
|
// resize.cpp
|
||||||
extern void doResizes(void);
|
extern void doResizes(void);
|
||||||
|
|
||||||
|
// d2dscratch.cpp
|
||||||
|
extern ATOM registerD2DScratchClass(HICON hDefaultIcon, HCURSOR hDefaultCursor);
|
||||||
|
extern void unregisterD2DScratchClass(void);
|
||||||
|
extern HWND newD2DScratch(HWND parent, RECT *rect, HMENU controlID, SUBCLASSPROC subclass, DWORD_PTR subclassData);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
|
|
Loading…
Reference in New Issue