diff options
Diffstat (limited to 'redo/mergeback/container_windows_transparent.c')
| -rw-r--r-- | redo/mergeback/container_windows_transparent.c | 147 |
1 files changed, 0 insertions, 147 deletions
diff --git a/redo/mergeback/container_windows_transparent.c b/redo/mergeback/container_windows_transparent.c deleted file mode 100644 index d6dad4d..0000000 --- a/redo/mergeback/container_windows_transparent.c +++ /dev/null @@ -1,147 +0,0 @@ -/* 17 july 2014 */ - -#include "winapi_windows.h" -#include "_cgo_export.h" - -/* -This could all just be part of Window, but doing so just makes things complex. -In this case, I chose to waste a window handle rather than keep things super complex. -If this is seriously an issue in the future, I can roll it back. -*/ - -#define containerclass L"gouicontainer" - -static LRESULT CALLBACK containerWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - void *data; - RECT r; - HDC dc; - PAINTSTRUCT ps; - HWND parent; - POINT client; - - data = (void *) GetWindowLongPtrW(hwnd, GWLP_USERDATA); - if (data == NULL) { - /* the lpParam is available during WM_NCCREATE and WM_CREATE */ - if (uMsg == WM_NCCREATE) { - storelpParam(hwnd, lParam); - data = (void *) GetWindowLongPtrW(hwnd, GWLP_USERDATA); - storeContainerHWND(data, hwnd); - } - /* act as if we're not ready yet, even during WM_NCCREATE (nothing important to the switch statement below happens here anyway) */ - return DefWindowProcW(hwnd, uMsg, wParam, lParam); - } - - switch (uMsg) { - case WM_COMMAND: - return forwardCommand(hwnd, uMsg, wParam, lParam); - case WM_NOTIFY: - return forwardNotify(hwnd, uMsg, wParam, lParam); - case WM_PAINT: -#ifndef BROKEN - /* paint the parent's background in a flicker-free way */ - dc = BeginPaint(hwnd, &ps); - if (dc == NULL) - abort();//TODO - parent = GetParent(hwnd); - if (parent == NULL) - abort();//TODO - if (GetWindowRect(hwnd, &r) == 0) - abort();//TODO - /* GetWindowRect() returns in screen coordinates; we want parent client */ - client.x = r.left; - client.y = r.top; - if (ScreenToClient(parent, &client) == 0) - abort();//TODO - if (SetWindowOrgEx(dc, client.x, client.y, NULL) == 0) - abort();//TODO - SendMessageW(parent, WM_PRINTCLIENT, (WPARAM) dc, PRF_CLIENT); - EndPaint(hwnd, &ps); - return 0; -#else - /* paint the parent's background in a flicker-free way */ - dc = BeginPaint(hwnd, &ps); - if (dc == NULL) - abort();//TODO - parent = GetParent(hwnd); - if (parent == NULL) - abort();//TODO - if (GetWindowRect(hwnd, &r) == 0) - abort();//TODO - /* GetWindowRect() returns in screen coordinates; we want parent client */ - client.x = r.left; - client.y = r.top; - if (ScreenToClient(parent, &client) == 0) - abort();//TODO - rdc = CreateCompatibleDC(dc); - if (rdc == NULL) - abort();//TODO - rbitmap = CreateCompatibleBitmap(dc, r.right - r.left, r.bottom - r.top); - if (rbitmap == NULL) - abort();//TODO - prevrbitmap = SelectObject(rdc, rbitmap); - if (prevrbitmap == NULL) - abort();//TODO - if (SetWindowOrgEx(rdc, client.x, client.y, NULL) == 0) - abort();//TODO - SendMessageW(parent, WM_PRINTCLIENT, (WPARAM) rdc, PRF_CLIENT); - if (BitBlt(dc, 0, 0, (int) (r.right - r.left), (int) (r.bottom - r.top), - rdc, 0, 0, SRCCOPY) == 0) - abort();//TODO - if (SelectObject(rdc, prevrbitmap) != rbitmap) - abort();//TODO - if (DeleteObject(rbitmap) == 0) - abort();//TODO - if (DeleteDC(rdc) == 0) - abort();//TODO - EndPaint(hwnd, &ps); - return 0; -#endif - case WM_ERASEBKGND: - /* we paint our own background above */ - return 1; - case WM_SIZE: - if (GetClientRect(hwnd, &r) == 0) - xpanic("error getting client rect for Window in WM_SIZE", GetLastError()); - containerResize(data, &r); - return 0; - default: - return DefWindowProcW(hwnd, uMsg, wParam, lParam); - } - xmissedmsg("container", "containerWndProc()", uMsg); - return 0; /* unreached */ -} - -DWORD makeContainerWindowClass(char **errmsg) -{ - WNDCLASSW wc; - - ZeroMemory(&wc, sizeof (WNDCLASSW)); - wc.lpfnWndProc = containerWndProc; - wc.hInstance = hInstance; - wc.hIcon = hDefaultIcon; - wc.hCursor = hArrowCursor; - wc.hbrBackground = NULL; /* we paint our own background */ - wc.lpszClassName = containerclass; - if (RegisterClassW(&wc) == 0) { - *errmsg = "error registering container window class"; - return GetLastError(); - } - return 0; -} - -HWND newContainer(void *data) -{ - HWND hwnd; - - hwnd = CreateWindowExW( - WS_EX_TRANSPARENT, - containerclass, L"", - WS_CHILD | WS_VISIBLE, - CW_USEDEFAULT, CW_USEDEFAULT, - 100, 100, - msgwin, NULL, hInstance, data); - if (hwnd == NULL) - xpanic("container creation failed", GetLastError()); - return hwnd; -} |
