| /* |
| * tests for Wintab context behavior |
| * |
| * Copyright 2009 John Klehm |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA |
| */ |
| |
| #include <assert.h> |
| #include <windows.h> |
| #include <wintab.h> |
| |
| #include "wine/test.h" |
| |
| static const CHAR wintab32Dll[] = "Wintab32.dll"; |
| static const CHAR wintabTestWindowClassName[] = "WintabTestWnd"; |
| static const CHAR contextName[] = "TestContext"; |
| static const UINT X = 0; |
| static const UINT Y = 0; |
| static const UINT WIDTH = 200; |
| static const UINT HEIGHT = 200; |
| |
| static HCTX (WINAPI *pWTOpenA)(HWND, LPLOGCONTEXTA, BOOL); |
| static BOOL (WINAPI *pWTClose)(HCTX); |
| |
| static HMODULE load_functions(void) |
| { |
| #define GET_PROC(func) \ |
| (p ## func = (void *)GetProcAddress(hWintab, #func)) |
| |
| HMODULE hWintab = LoadLibraryA(wintab32Dll); |
| |
| if (!hWintab) |
| { |
| trace("LoadLibraryA(%s) failed\n", |
| wintab32Dll); |
| return NULL; |
| } |
| |
| if (GET_PROC(WTOpenA) && |
| GET_PROC(WTClose) ) |
| { |
| return hWintab; |
| } |
| else |
| { |
| FreeLibrary(hWintab); |
| trace("Library loaded but failed to load function pointers\n"); |
| return NULL; |
| } |
| |
| #undef GET_PROC |
| } |
| |
| static LRESULT CALLBACK wintabTestWndProc(HWND hwnd, UINT msg, WPARAM wParam, |
| LPARAM lParam) |
| { |
| return DefWindowProcA(hwnd, msg, wParam, lParam); |
| } |
| |
| static void wintab_create_window(HWND* pHwnd) |
| { |
| WNDCLASSA testWindowClass; |
| |
| if (!pHwnd) return; |
| |
| *pHwnd = NULL; |
| |
| ZeroMemory(&testWindowClass, sizeof(testWindowClass)); |
| |
| testWindowClass.lpfnWndProc = wintabTestWndProc; |
| testWindowClass.hInstance = NULL; |
| testWindowClass.hIcon = NULL; |
| testWindowClass.hCursor = NULL; |
| testWindowClass.hbrBackground = NULL; |
| testWindowClass.lpszMenuName = NULL; |
| testWindowClass.lpszClassName = wintabTestWindowClassName; |
| |
| assert(RegisterClassA(&testWindowClass)); |
| |
| *pHwnd = CreateWindowA(wintabTestWindowClassName, NULL, |
| WS_OVERLAPPED, X, Y, WIDTH, HEIGHT, NULL, NULL, |
| NULL, NULL); |
| |
| assert(*pHwnd != NULL); |
| } |
| |
| static void wintab_destroy_window(HWND hwnd) |
| { |
| DestroyWindow(hwnd); |
| UnregisterClassA(wintabTestWindowClassName, NULL); |
| } |
| |
| /* test how a logcontext is validated by wtopen */ |
| static void test_WTOpenContextValidation(void) |
| { |
| HWND defaultWindow = NULL; |
| HCTX hCtx = NULL; |
| LOGCONTEXTA testLogCtx; |
| LOGCONTEXTA refLogCtx; |
| int memdiff; |
| |
| wintab_create_window(&defaultWindow); |
| |
| ZeroMemory(&testLogCtx, sizeof(testLogCtx)); |
| strcpy(testLogCtx.lcName, contextName); |
| |
| ZeroMemory(&refLogCtx, sizeof(refLogCtx)); |
| strcpy(refLogCtx.lcName, contextName); |
| |
| /* a zeroed out context has values which makes WTOpen return null |
| * on wacom tablets but not on uclogic tablets */ |
| hCtx = pWTOpenA(defaultWindow, &testLogCtx, TRUE); |
| |
| /* check if the context gets updated */ |
| memdiff = memcmp(&testLogCtx, &refLogCtx, sizeof(LOGCONTEXTA)); |
| ok(0 == memdiff, "Expected 0 == memcmp(testLogCtx, refLogCtx), got %i\n", |
| memdiff); |
| |
| if (hCtx) |
| pWTClose(hCtx); |
| |
| wintab_destroy_window(defaultWindow); |
| } |
| |
| START_TEST(context) |
| { |
| HMODULE hWintab = load_functions(); |
| |
| if (!hWintab) |
| { |
| skip("Wintab32.dll not available\n"); |
| return; |
| } |
| |
| test_WTOpenContextValidation(); |
| |
| FreeLibrary(hWintab); |
| } |