annotate src/video/windows/SDL_windowskeyboard.c @ 5151:5429daf5e3f9

The DrawRect API is implemented using lines
author Sam Lantinga <slouken@libsdl.org>
date Tue, 01 Feb 2011 20:50:04 -0800
parents d68e9722ff4d
children fb424691cfc7
rev   line source
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1 /*
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
2 SDL - Simple DirectMedia Layer
3697
f7b03b6838cb Fixed bug #926
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
3 Copyright (C) 1997-2010 Sam Lantinga
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
4
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
5 This library is free software; you can redistribute it and/or
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
6 modify it under the terms of the GNU Lesser General Public
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
7 License as published by the Free Software Foundation; either
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
8 version 2.1 of the License, or (at your option) any later version.
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
9
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
10 This library is distributed in the hope that it will be useful,
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
13 Lesser General Public License for more details.
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
14
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
15 You should have received a copy of the GNU Lesser General Public
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
16 License along with this library; if not, write to the Free Software
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
18
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
19 Sam Lantinga
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
20 slouken@libsdl.org
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
21 */
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
22 #include "SDL_config.h"
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
23
5088
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
24 #ifdef _WIN32_WCE
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
25 #define SDL_DISABLE_WINDOWS_IME
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
26 #endif
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
27
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4916
diff changeset
28 #include "SDL_windowsvideo.h"
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
29
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
30 #include "../../events/SDL_keyboard_c.h"
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4916
diff changeset
31 #include "../../events/scancodes_windows.h"
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
32
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
33 #include <imm.h>
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
34 #include <oleauto.h>
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
35
5088
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
36 #ifndef SDL_DISABLE_WINDOWS_IME
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
37 static void IME_Init(SDL_VideoData *videodata, HWND hwnd);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
38 static void IME_Enable(SDL_VideoData *videodata, HWND hwnd);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
39 static void IME_Disable(SDL_VideoData *videodata, HWND hwnd);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
40 static void IME_Quit(SDL_VideoData *videodata);
5088
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
41 #endif /* !SDL_DISABLE_WINDOWS_IME */
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
42
2311
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
43 #ifndef MAPVK_VK_TO_VSC
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
44 #define MAPVK_VK_TO_VSC 0
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
45 #endif
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
46 #ifndef MAPVK_VSC_TO_VK
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
47 #define MAPVK_VSC_TO_VK 1
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
48 #endif
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
49 #ifndef MAPVK_VK_TO_CHAR
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
50 #define MAPVK_VK_TO_CHAR 2
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
51 #endif
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
52
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
53 /* Alphabetic scancodes for PC keyboards */
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
54 BYTE alpha_scancodes[26] = {
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
55 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38, 50, 49, 24,
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
56 25, 16, 19, 31, 20, 22, 47, 17, 45, 21, 44
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
57 };
2735
204be4fc2726 Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents: 2726
diff changeset
58
2317
f537a293b3da Windows also remaps the numeric keypad... grrr
Sam Lantinga <slouken@libsdl.org>
parents: 2311
diff changeset
59 BYTE keypad_scancodes[10] = {
f537a293b3da Windows also remaps the numeric keypad... grrr
Sam Lantinga <slouken@libsdl.org>
parents: 2311
diff changeset
60 82, 79, 80, 81, 75, 76, 77, 71, 72, 73
f537a293b3da Windows also remaps the numeric keypad... grrr
Sam Lantinga <slouken@libsdl.org>
parents: 2311
diff changeset
61 };
2311
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
62
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
63 void
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
64 WIN_InitKeyboard(_THIS)
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
65 {
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
66 SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
2311
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
67 int i;
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
68
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
69 /* Make sure the alpha scancodes are correct. T isn't usually remapped */
2324
3202e4826c57 more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents: 2317
diff changeset
70 if (MapVirtualKey('T', MAPVK_VK_TO_VSC) != alpha_scancodes['T' - 'A']) {
2724
0e2b65f32298 Added Wacom API headers.
Sam Lantinga <slouken@libsdl.org>
parents: 2324
diff changeset
71 #if 0
2726
f23ebf1ddac4 Dynamically load wintab32.dll
Sam Lantinga <slouken@libsdl.org>
parents: 2724
diff changeset
72 printf
f23ebf1ddac4 Dynamically load wintab32.dll
Sam Lantinga <slouken@libsdl.org>
parents: 2724
diff changeset
73 ("Fixing alpha scancode map, assuming US QWERTY layout!\nPlease send the following 26 lines of output to the SDL mailing list <sdl@libsdl.org>, including a description of your keyboard hardware.\n");
2724
0e2b65f32298 Added Wacom API headers.
Sam Lantinga <slouken@libsdl.org>
parents: 2324
diff changeset
74 #endif
2311
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
75 for (i = 0; i < SDL_arraysize(alpha_scancodes); ++i) {
2324
3202e4826c57 more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents: 2317
diff changeset
76 alpha_scancodes[i] = MapVirtualKey('A' + i, MAPVK_VK_TO_VSC);
2724
0e2b65f32298 Added Wacom API headers.
Sam Lantinga <slouken@libsdl.org>
parents: 2324
diff changeset
77 #if 0
2324
3202e4826c57 more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents: 2317
diff changeset
78 printf("%d = %d\n", i, alpha_scancodes[i]);
2724
0e2b65f32298 Added Wacom API headers.
Sam Lantinga <slouken@libsdl.org>
parents: 2324
diff changeset
79 #endif
2311
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
80 }
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
81 }
2317
f537a293b3da Windows also remaps the numeric keypad... grrr
Sam Lantinga <slouken@libsdl.org>
parents: 2311
diff changeset
82 if (MapVirtualKey(VK_NUMPAD0, MAPVK_VK_TO_VSC) != keypad_scancodes[0]) {
2724
0e2b65f32298 Added Wacom API headers.
Sam Lantinga <slouken@libsdl.org>
parents: 2324
diff changeset
83 #if 0
2726
f23ebf1ddac4 Dynamically load wintab32.dll
Sam Lantinga <slouken@libsdl.org>
parents: 2724
diff changeset
84 printf
f23ebf1ddac4 Dynamically load wintab32.dll
Sam Lantinga <slouken@libsdl.org>
parents: 2724
diff changeset
85 ("Fixing keypad scancode map!\nPlease send the following 10 lines of output to the SDL mailing list <sdl@libsdl.org>, including a description of your keyboard hardware.\n");
2724
0e2b65f32298 Added Wacom API headers.
Sam Lantinga <slouken@libsdl.org>
parents: 2324
diff changeset
86 #endif
2317
f537a293b3da Windows also remaps the numeric keypad... grrr
Sam Lantinga <slouken@libsdl.org>
parents: 2311
diff changeset
87 for (i = 0; i < SDL_arraysize(keypad_scancodes); ++i) {
2324
3202e4826c57 more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents: 2317
diff changeset
88 keypad_scancodes[i] =
3202e4826c57 more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents: 2317
diff changeset
89 MapVirtualKey(VK_NUMPAD0 + i, MAPVK_VK_TO_VSC);
2724
0e2b65f32298 Added Wacom API headers.
Sam Lantinga <slouken@libsdl.org>
parents: 2324
diff changeset
90 #if 0
2324
3202e4826c57 more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents: 2317
diff changeset
91 printf("%d = %d\n", i, keypad_scancodes[i]);
2724
0e2b65f32298 Added Wacom API headers.
Sam Lantinga <slouken@libsdl.org>
parents: 2324
diff changeset
92 #endif
2317
f537a293b3da Windows also remaps the numeric keypad... grrr
Sam Lantinga <slouken@libsdl.org>
parents: 2311
diff changeset
93 }
f537a293b3da Windows also remaps the numeric keypad... grrr
Sam Lantinga <slouken@libsdl.org>
parents: 2311
diff changeset
94 }
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
95
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4916
diff changeset
96 data->key_layout = windows_scancode_table;
2308
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
97
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
98 data->ime_com_initialized = SDL_FALSE;
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
99 data->ime_threadmgr = 0;
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
100 data->ime_initialized = SDL_FALSE;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
101 data->ime_enabled = SDL_FALSE;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
102 data->ime_available = SDL_FALSE;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
103 data->ime_hwnd_main = 0;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
104 data->ime_hwnd_current = 0;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
105 data->ime_himc = 0;
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
106 data->ime_composition[0] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
107 data->ime_readingstring[0] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
108 data->ime_cursor = 0;
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
109
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
110 data->ime_candlist = SDL_FALSE;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
111 SDL_memset(data->ime_candidates, 0, sizeof(data->ime_candidates));
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
112 data->ime_candcount = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
113 data->ime_candref = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
114 data->ime_candsel = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
115 data->ime_candpgsize = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
116 data->ime_candlistindexbase = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
117 data->ime_candvertical = SDL_TRUE;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
118
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
119 data->ime_candtex = NULL;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
120 data->ime_dirty = SDL_FALSE;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
121 SDL_memset(&data->ime_rect, 0, sizeof(data->ime_rect));
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
122 SDL_memset(&data->ime_candlistrect, 0, sizeof(data->ime_candlistrect));
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
123 data->ime_winwidth = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
124 data->ime_winheight = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
125
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
126 data->ime_hkl = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
127 data->ime_himm32 = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
128 data->GetReadingString = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
129 data->ShowReadingWindow = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
130 data->ImmLockIMC = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
131 data->ImmUnlockIMC = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
132 data->ImmLockIMCC = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
133 data->ImmUnlockIMCC = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
134 data->ime_uiless = SDL_FALSE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
135 data->ime_threadmgrex = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
136 data->ime_uielemsinkcookie = TF_INVALID_COOKIE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
137 data->ime_alpnsinkcookie = TF_INVALID_COOKIE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
138 data->ime_openmodesinkcookie = TF_INVALID_COOKIE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
139 data->ime_convmodesinkcookie = TF_INVALID_COOKIE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
140 data->ime_uielemsink = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
141 data->ime_ippasink = 0;
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
142
4465
3e69e077cb95 Removed multi-mouse / multi-keyboard support in anticipation of a real multi-mouse and multi-touch API.
Sam Lantinga <slouken@libsdl.org>
parents: 3697
diff changeset
143 WIN_UpdateKeymap();
2308
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
144
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
145 SDL_SetScancodeName(SDL_SCANCODE_APPLICATION, "Menu");
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
146 SDL_SetScancodeName(SDL_SCANCODE_LGUI, "Left Windows");
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
147 SDL_SetScancodeName(SDL_SCANCODE_RGUI, "Right Windows");
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
148 }
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
149
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
150 void
4465
3e69e077cb95 Removed multi-mouse / multi-keyboard support in anticipation of a real multi-mouse and multi-touch API.
Sam Lantinga <slouken@libsdl.org>
parents: 3697
diff changeset
151 WIN_UpdateKeymap()
2308
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
152 {
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
153 int i;
5083
25d4feb7c127 Renamed SDL_keysym to SDL_KeySym
krogoway
parents: 5062
diff changeset
154 SDL_ScanCode scancode;
2308
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
155 SDLKey keymap[SDL_NUM_SCANCODES];
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
156
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
157 SDL_GetDefaultKeymap(keymap);
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
158
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4916
diff changeset
159 for (i = 0; i < SDL_arraysize(windows_scancode_table); i++) {
2308
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
160
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
161 /* Make sure this scancode is a valid character scancode */
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4916
diff changeset
162 scancode = windows_scancode_table[i];
4561
e4b2b7207f79 Fixed remapping the Delete key and detecting the keypad Delete key.
Sam Lantinga <slouken@libsdl.org>
parents: 4465
diff changeset
163 if (scancode == SDL_SCANCODE_UNKNOWN || keymap[scancode] >= 127) {
2308
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
164 continue;
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
165 }
2311
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
166
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
167 /* Alphabetic keys are handled specially, since Windows remaps them */
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
168 if (i >= 'A' && i <= 'Z') {
2324
3202e4826c57 more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents: 2317
diff changeset
169 BYTE vsc = alpha_scancodes[i - 'A'];
2311
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
170 keymap[scancode] = MapVirtualKey(vsc, MAPVK_VSC_TO_VK) + 0x20;
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
171 } else {
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
172 keymap[scancode] = (MapVirtualKey(i, MAPVK_VK_TO_CHAR) & 0x7FFF);
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
173 }
2308
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
174 }
4465
3e69e077cb95 Removed multi-mouse / multi-keyboard support in anticipation of a real multi-mouse and multi-touch API.
Sam Lantinga <slouken@libsdl.org>
parents: 3697
diff changeset
175 SDL_SetKeymap(0, keymap, SDL_NUM_SCANCODES);
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
176 }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
177
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
178 void
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
179 WIN_QuitKeyboard(_THIS)
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
180 {
5088
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
181 #ifndef SDL_DISABLE_WINDOWS_IME
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
182 IME_Quit((SDL_VideoData *)_this->driverdata);
5088
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
183 #endif
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
184 }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
185
4747
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
186 void
4753
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
187 WIN_StartTextInput(_THIS)
4747
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
188 {
5088
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
189 #ifndef SDL_DISABLE_WINDOWS_IME
4753
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
190 SDL_Window *window = SDL_GetKeyboardFocus();
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
191 if (window) {
4753
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
192 HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd;
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
193 SDL_VideoData *videodata = (SDL_VideoData *)_this->driverdata;
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
194 SDL_GetWindowSize(window, &videodata->ime_winwidth, &videodata->ime_winheight);
4753
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
195 IME_Init(videodata, hwnd);
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
196 IME_Enable(videodata, hwnd);
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
197 }
5088
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
198 #endif /* !SDL_DISABLE_WINDOWS_IME */
4747
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
199 }
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
200
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
201 void
4753
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
202 WIN_StopTextInput(_THIS)
4747
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
203 {
5088
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
204 #ifndef SDL_DISABLE_WINDOWS_IME
4753
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
205 SDL_Window *window = SDL_GetKeyboardFocus();
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
206 if (window) {
4753
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
207 HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd;
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
208 SDL_VideoData *videodata = (SDL_VideoData *)_this->driverdata;
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
209 IME_Init(videodata, hwnd);
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
210 IME_Disable(videodata, hwnd);
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
211 }
5088
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
212 #endif /* !SDL_DISABLE_WINDOWS_IME */
4747
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
213 }
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
214
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
215 void
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
216 WIN_SetTextInputRect(_THIS, SDL_Rect *rect)
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
217 {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
218 SDL_VideoData *videodata = (SDL_VideoData *)_this->driverdata;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
219 videodata->ime_rect = *rect;
4747
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
220 }
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
221
5088
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
222 #ifdef SDL_DISABLE_WINDOWS_IME
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
223
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
224
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
225 SDL_bool
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
226 IME_HandleMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM *lParam, SDL_VideoData *videodata)
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
227 {
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
228 return SDL_FALSE;
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
229 }
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
230
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
231 void IME_Present(SDL_VideoData *videodata)
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
232 {
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
233 }
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
234
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
235 #else
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
236
4893
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
237 #ifdef __GNUC__
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
238 #undef DEFINE_GUID
4894
ac19d74e2a47 Fixed compiling with mingw32/64
Sam Lantinga <slouken@libsdl.org>
parents: 4893
diff changeset
239 #define DEFINE_GUID(n,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) static const GUID n = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
4893
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
240 DEFINE_GUID(IID_ITfInputProcessorProfileActivationSink, 0x71C6E74E,0x0F28,0x11D8,0xA8,0x2A,0x00,0x06,0x5B,0x84,0x43,0x5C);
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
241 DEFINE_GUID(IID_ITfUIElementSink, 0xEA1EA136,0x19DF,0x11D7,0xA6,0xD2,0x00,0x06,0x5B,0x84,0x43,0x5C);
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
242 DEFINE_GUID(GUID_TFCAT_TIP_KEYBOARD, 0x34745C63,0xB2F0,0x4784,0x8B,0x67,0x5E,0x12,0xC8,0x70,0x1A,0x31);
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
243 DEFINE_GUID(IID_ITfSource, 0x4EA48A35,0x60AE,0x446F,0x8F,0xD6,0xE6,0xA8,0xD8,0x24,0x59,0xF7);
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
244 DEFINE_GUID(IID_ITfUIElementMgr, 0xEA1EA135,0x19DF,0x11D7,0xA6,0xD2,0x00,0x06,0x5B,0x84,0x43,0x5C);
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
245 DEFINE_GUID(IID_ITfCandidateListUIElement, 0xEA1EA138,0x19DF,0x11D7,0xA6,0xD2,0x00,0x06,0x5B,0x84,0x43,0x5C);
4893
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
246 DEFINE_GUID(IID_ITfReadingInformationUIElement, 0xEA1EA139,0x19DF,0x11D7,0xA6,0xD2,0x00,0x06,0x5B,0x84,0x43,0x5C);
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
247 DEFINE_GUID(IID_ITfThreadMgr, 0xAA80E801,0x2021,0x11D2,0x93,0xE0,0x00,0x60,0xB0,0x67,0xB8,0x6E);
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
248 DEFINE_GUID(CLSID_TF_ThreadMgr, 0x529A9E6B,0x6587,0x4F23,0xAB,0x9E,0x9C,0x7D,0x68,0x3E,0x3C,0x50);
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
249 DEFINE_GUID(IID_ITfThreadMgrEx, 0x3E90ADE3,0x7594,0x4CB0,0xBB,0x58,0x69,0x62,0x8F,0x5F,0x45,0x8C);
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
250 #endif
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
251
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
252 #define LANG_CHT MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
253 #define LANG_CHS MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
254
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
255 #define MAKEIMEVERSION(major,minor) ((DWORD) (((BYTE)(major) << 24) | ((BYTE)(minor) << 16) ))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
256 #define IMEID_VER(id) ((id) & 0xffff0000)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
257 #define IMEID_LANG(id) ((id) & 0x0000ffff)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
258
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
259 #define CHT_HKL_DAYI ((HKL)0xE0060404)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
260 #define CHT_HKL_NEW_PHONETIC ((HKL)0xE0080404)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
261 #define CHT_HKL_NEW_CHANG_JIE ((HKL)0xE0090404)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
262 #define CHT_HKL_NEW_QUICK ((HKL)0xE00A0404)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
263 #define CHT_HKL_HK_CANTONESE ((HKL)0xE00B0404)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
264 #define CHT_IMEFILENAME1 "TINTLGNT.IME"
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
265 #define CHT_IMEFILENAME2 "CINTLGNT.IME"
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
266 #define CHT_IMEFILENAME3 "MSTCIPHA.IME"
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
267 #define IMEID_CHT_VER42 (LANG_CHT | MAKEIMEVERSION(4, 2))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
268 #define IMEID_CHT_VER43 (LANG_CHT | MAKEIMEVERSION(4, 3))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
269 #define IMEID_CHT_VER44 (LANG_CHT | MAKEIMEVERSION(4, 4))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
270 #define IMEID_CHT_VER50 (LANG_CHT | MAKEIMEVERSION(5, 0))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
271 #define IMEID_CHT_VER51 (LANG_CHT | MAKEIMEVERSION(5, 1))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
272 #define IMEID_CHT_VER52 (LANG_CHT | MAKEIMEVERSION(5, 2))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
273 #define IMEID_CHT_VER60 (LANG_CHT | MAKEIMEVERSION(6, 0))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
274 #define IMEID_CHT_VER_VISTA (LANG_CHT | MAKEIMEVERSION(7, 0))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
275
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
276 #define CHS_HKL ((HKL)0xE00E0804)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
277 #define CHS_IMEFILENAME1 "PINTLGNT.IME"
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
278 #define CHS_IMEFILENAME2 "MSSCIPYA.IME"
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
279 #define IMEID_CHS_VER41 (LANG_CHS | MAKEIMEVERSION(4, 1))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
280 #define IMEID_CHS_VER42 (LANG_CHS | MAKEIMEVERSION(4, 2))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
281 #define IMEID_CHS_VER53 (LANG_CHS | MAKEIMEVERSION(5, 3))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
282
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
283 #define LANG() LOWORD((videodata->ime_hkl))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
284 #define PRIMLANG() ((WORD)PRIMARYLANGID(LANG()))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
285 #define SUBLANG() SUBLANGID(LANG())
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
286
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
287 static void IME_UpdateInputLocale(SDL_VideoData *videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
288 static void IME_ClearComposition(SDL_VideoData *videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
289 static void IME_SetWindow(SDL_VideoData* videodata, HWND hwnd);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
290 static void IME_SetupAPI(SDL_VideoData *videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
291 static DWORD IME_GetId(SDL_VideoData *videodata, UINT uIndex);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
292 static void IME_SendEditingEvent(SDL_VideoData *videodata);
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
293 static void IME_DestroyTextures(SDL_VideoData *videodata);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
294
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
295 #define SDL_IsEqualIID(riid1, riid2) SDL_IsEqualGUID(riid1, riid2)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
296 #define SDL_IsEqualGUID(rguid1, rguid2) (!SDL_memcmp(rguid1, rguid2, sizeof(GUID)))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
297
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
298 static SDL_bool UILess_SetupSinks(SDL_VideoData *videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
299 static void UILess_ReleaseSinks(SDL_VideoData *videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
300 static void UILess_EnableUIUpdates(SDL_VideoData *videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
301 static void UILess_DisableUIUpdates(SDL_VideoData *videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
302
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
303 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
304 IME_Init(SDL_VideoData *videodata, HWND hwnd)
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
305 {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
306 if (videodata->ime_initialized)
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
307 return;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
308
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
309 videodata->ime_hwnd_main = hwnd;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
310 if (SUCCEEDED(CoInitializeEx(NULL, COINIT_APARTMENTTHREADED))) {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
311 videodata->ime_com_initialized = SDL_TRUE;
4893
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
312 CoCreateInstance(&CLSID_TF_ThreadMgr, NULL, CLSCTX_INPROC_SERVER, &IID_ITfThreadMgr, (LPVOID *)&videodata->ime_threadmgr);
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
313 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
314 videodata->ime_initialized = SDL_TRUE;
5092
327f181542f1 Include windows.h in a single point in the source, so we can be consistent about the definition of UNICODE and have core utility functions for Windows that all modules can share.
Sam Lantinga <slouken@libsdl.org>
parents: 5088
diff changeset
315 videodata->ime_himm32 = SDL_LoadObject("imm32.dll");
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
316 if (!videodata->ime_himm32) {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
317 videodata->ime_available = SDL_FALSE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
318 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
319 }
5092
327f181542f1 Include windows.h in a single point in the source, so we can be consistent about the definition of UNICODE and have core utility functions for Windows that all modules can share.
Sam Lantinga <slouken@libsdl.org>
parents: 5088
diff changeset
320 videodata->ImmLockIMC = (LPINPUTCONTEXT2 (WINAPI *)(HIMC))SDL_LoadFunction(videodata->ime_himm32, "ImmLockIMC");
327f181542f1 Include windows.h in a single point in the source, so we can be consistent about the definition of UNICODE and have core utility functions for Windows that all modules can share.
Sam Lantinga <slouken@libsdl.org>
parents: 5088
diff changeset
321 videodata->ImmUnlockIMC = (BOOL (WINAPI *)(HIMC))SDL_LoadFunction(videodata->ime_himm32, "ImmUnlockIMC");
327f181542f1 Include windows.h in a single point in the source, so we can be consistent about the definition of UNICODE and have core utility functions for Windows that all modules can share.
Sam Lantinga <slouken@libsdl.org>
parents: 5088
diff changeset
322 videodata->ImmLockIMCC = (LPVOID (WINAPI *)(HIMCC))SDL_LoadFunction(videodata->ime_himm32, "ImmLockIMCC");
327f181542f1 Include windows.h in a single point in the source, so we can be consistent about the definition of UNICODE and have core utility functions for Windows that all modules can share.
Sam Lantinga <slouken@libsdl.org>
parents: 5088
diff changeset
323 videodata->ImmUnlockIMCC = (BOOL (WINAPI *)(HIMCC))SDL_LoadFunction(videodata->ime_himm32, "ImmUnlockIMCC");
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
324
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
325 IME_SetWindow(videodata, hwnd);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
326 videodata->ime_himc = ImmGetContext(hwnd);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
327 ImmReleaseContext(hwnd, videodata->ime_himc);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
328 if (!videodata->ime_himc) {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
329 videodata->ime_available = SDL_FALSE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
330 IME_Disable(videodata, hwnd);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
331 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
332 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
333 videodata->ime_available = SDL_TRUE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
334 IME_UpdateInputLocale(videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
335 IME_SetupAPI(videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
336 videodata->ime_uiless = UILess_SetupSinks(videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
337 IME_UpdateInputLocale(videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
338 IME_Disable(videodata, hwnd);
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
339 }
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
340
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
341 static void
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
342 IME_Enable(SDL_VideoData *videodata, HWND hwnd)
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
343 {
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
344 if (!videodata->ime_initialized || !videodata->ime_hwnd_current)
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
345 return;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
346
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
347 if (!videodata->ime_available) {
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
348 IME_Disable(videodata, hwnd);
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
349 return;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
350 }
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
351 if (videodata->ime_hwnd_current == videodata->ime_hwnd_main)
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
352 ImmAssociateContext(videodata->ime_hwnd_current, videodata->ime_himc);
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
353
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
354 videodata->ime_enabled = SDL_TRUE;
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
355 IME_UpdateInputLocale(videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
356 UILess_EnableUIUpdates(videodata);
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
357 }
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
358
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
359 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
360 IME_Disable(SDL_VideoData *videodata, HWND hwnd)
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
361 {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
362 if (!videodata->ime_initialized || !videodata->ime_hwnd_current)
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
363 return;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
364
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
365 IME_ClearComposition(videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
366 if (videodata->ime_hwnd_current == videodata->ime_hwnd_main)
4893
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
367 ImmAssociateContext(videodata->ime_hwnd_current, (HIMC)0);
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
368
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
369 videodata->ime_enabled = SDL_FALSE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
370 UILess_DisableUIUpdates(videodata);
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
371 }
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
372
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
373 static void
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
374 IME_Quit(SDL_VideoData *videodata)
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
375 {
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
376 if (!videodata->ime_initialized)
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
377 return;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
378
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
379 UILess_ReleaseSinks(videodata);
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
380 if (videodata->ime_hwnd_main)
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
381 ImmAssociateContext(videodata->ime_hwnd_main, videodata->ime_himc);
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
382
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
383 videodata->ime_hwnd_main = 0;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
384 videodata->ime_himc = 0;
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
385 if (videodata->ime_himm32) {
5092
327f181542f1 Include windows.h in a single point in the source, so we can be consistent about the definition of UNICODE and have core utility functions for Windows that all modules can share.
Sam Lantinga <slouken@libsdl.org>
parents: 5088
diff changeset
386 SDL_UnloadObject(videodata->ime_himm32);
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
387 videodata->ime_himm32 = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
388 }
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
389 if (videodata->ime_threadmgr) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
390 videodata->ime_threadmgr->lpVtbl->Release(videodata->ime_threadmgr);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
391 videodata->ime_threadmgr = 0;
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
392 }
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
393 if (videodata->ime_com_initialized) {
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
394 CoUninitialize();
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
395 videodata->ime_com_initialized = SDL_FALSE;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
396 }
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
397 IME_DestroyTextures(videodata);
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
398 videodata->ime_initialized = SDL_FALSE;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
399 }
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
400
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
401 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
402 IME_GetReadingString(SDL_VideoData *videodata, HWND hwnd)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
403 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
404 DWORD id = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
405 HIMC himc = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
406 WCHAR buffer[16];
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
407 WCHAR *s = buffer;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
408 DWORD len = 0;
4893
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
409 INT err = 0;
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
410 BOOL vertical = FALSE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
411 UINT maxuilen = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
412 static OSVERSIONINFOA osversion = {0};
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
413 if (videodata->ime_uiless)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
414 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
415
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
416 videodata->ime_readingstring[0] = 0;
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
417 if (!osversion.dwOSVersionInfoSize) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
418 osversion.dwOSVersionInfoSize = sizeof(osversion);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
419 GetVersionExA(&osversion);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
420 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
421 id = IME_GetId(videodata, 0);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
422 if (!id)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
423 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
424
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
425 himc = ImmGetContext(hwnd);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
426 if (!himc)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
427 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
428
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
429 if (videodata->GetReadingString) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
430 len = videodata->GetReadingString(himc, 0, 0, &err, &vertical, &maxuilen);
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
431 if (len) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
432 if (len > SDL_arraysize(buffer))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
433 len = SDL_arraysize(buffer);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
434
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
435 len = videodata->GetReadingString(himc, len, s, &err, &vertical, &maxuilen);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
436 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
437 SDL_wcslcpy(videodata->ime_readingstring, s, len);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
438 }
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
439 else {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
440 LPINPUTCONTEXT2 lpimc = videodata->ImmLockIMC(himc);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
441 LPBYTE p = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
442 s = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
443 switch (id)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
444 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
445 case IMEID_CHT_VER42:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
446 case IMEID_CHT_VER43:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
447 case IMEID_CHT_VER44:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
448 p = *(LPBYTE *)((LPBYTE)videodata->ImmLockIMCC(lpimc->hPrivate) + 24);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
449 if (!p)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
450 break;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
451
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
452 len = *(DWORD *)(p + 7*4 + 32*4);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
453 s = (WCHAR *)(p + 56);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
454 break;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
455 case IMEID_CHT_VER51:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
456 case IMEID_CHT_VER52:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
457 case IMEID_CHS_VER53:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
458 p = *(LPBYTE *)((LPBYTE)videodata->ImmLockIMCC(lpimc->hPrivate) + 4);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
459 if (!p)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
460 break;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
461
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
462 p = *(LPBYTE *)((LPBYTE)p + 1*4 + 5*4);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
463 if (!p)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
464 break;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
465
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
466 len = *(DWORD *)(p + 1*4 + (16*2+2*4) + 5*4 + 16*2);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
467 s = (WCHAR *)(p + 1*4 + (16*2+2*4) + 5*4);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
468 break;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
469 case IMEID_CHS_VER41:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
470 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
471 int offset = (IME_GetId(videodata, 1) >= 0x00000002) ? 8 : 7;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
472 p = *(LPBYTE *)((LPBYTE)videodata->ImmLockIMCC(lpimc->hPrivate) + offset * 4);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
473 if (!p)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
474 break;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
475
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
476 len = *(DWORD *)(p + 7*4 + 16*2*4);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
477 s = (WCHAR *)(p + 6*4 + 16*2*1);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
478 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
479 break;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
480 case IMEID_CHS_VER42:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
481 if (osversion.dwPlatformId != VER_PLATFORM_WIN32_NT)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
482 break;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
483
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
484 p = *(LPBYTE *)((LPBYTE)videodata->ImmLockIMCC(lpimc->hPrivate) + 1*4 + 1*4 + 6*4);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
485 if (!p)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
486 break;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
487
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
488 len = *(DWORD *)(p + 1*4 + (16*2+2*4) + 5*4 + 16*2);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
489 s = (WCHAR *)(p + 1*4 + (16*2+2*4) + 5*4);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
490 break;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
491 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
492 if (s)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
493 SDL_wcslcpy(videodata->ime_readingstring, s, len + 1);
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
494
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
495 videodata->ImmUnlockIMCC(lpimc->hPrivate);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
496 videodata->ImmUnlockIMC(himc);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
497 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
498 ImmReleaseContext(hwnd, himc);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
499 IME_SendEditingEvent(videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
500 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
501
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
502 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
503 IME_InputLangChanged(SDL_VideoData *videodata)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
504 {
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
505 UINT lang = PRIMLANG();
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
506 IME_UpdateInputLocale(videodata);
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
507 if (!videodata->ime_uiless)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
508 videodata->ime_candlistindexbase = (videodata->ime_hkl == CHT_HKL_DAYI) ? 0 : 1;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
509
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
510 IME_SetupAPI(videodata);
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
511 if (lang != PRIMLANG()) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
512 IME_ClearComposition(videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
513 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
514 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
515
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
516 static DWORD
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
517 IME_GetId(SDL_VideoData *videodata, UINT uIndex)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
518 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
519 static HKL hklprev = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
520 static DWORD dwRet[2] = {0};
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
521 DWORD dwVerSize = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
522 DWORD dwVerHandle = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
523 LPVOID lpVerBuffer = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
524 LPVOID lpVerData = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
525 UINT cbVerData = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
526 char szTemp[256];
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
527 HKL hkl = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
528 DWORD dwLang = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
529 if (uIndex >= sizeof(dwRet) / sizeof(dwRet[0]))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
530 return 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
531
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
532 hkl = videodata->ime_hkl;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
533 if (hklprev == hkl)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
534 return dwRet[uIndex];
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
535
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
536 hklprev = hkl;
5110
d68e9722ff4d Fixed bug #1109
Sam Lantinga <slouken@libsdl.org>
parents: 5092
diff changeset
537 dwLang = ((DWORD_PTR)hkl & 0xffff);
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
538 if (videodata->ime_uiless && LANG() == LANG_CHT) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
539 dwRet[0] = IMEID_CHT_VER_VISTA;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
540 dwRet[1] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
541 return dwRet[0];
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
542 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
543 if (hkl != CHT_HKL_NEW_PHONETIC
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
544 && hkl != CHT_HKL_NEW_CHANG_JIE
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
545 && hkl != CHT_HKL_NEW_QUICK
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
546 && hkl != CHT_HKL_HK_CANTONESE
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
547 && hkl != CHS_HKL) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
548 dwRet[0] = dwRet[1] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
549 return dwRet[uIndex];
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
550 }
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
551 if (ImmGetIMEFileNameA(hkl, szTemp, sizeof(szTemp) - 1) <= 0) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
552 dwRet[0] = dwRet[1] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
553 return dwRet[uIndex];
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
554 }
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
555 if (!videodata->GetReadingString) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
556 #define LCID_INVARIANT MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
557 if (CompareStringA(LCID_INVARIANT, NORM_IGNORECASE, szTemp, -1, CHT_IMEFILENAME1, -1) != 2
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
558 && CompareStringA(LCID_INVARIANT, NORM_IGNORECASE, szTemp, -1, CHT_IMEFILENAME2, -1) != 2
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
559 && CompareStringA(LCID_INVARIANT, NORM_IGNORECASE, szTemp, -1, CHT_IMEFILENAME3, -1) != 2
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
560 && CompareStringA(LCID_INVARIANT, NORM_IGNORECASE, szTemp, -1, CHS_IMEFILENAME1, -1) != 2
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
561 && CompareStringA(LCID_INVARIANT, NORM_IGNORECASE, szTemp, -1, CHS_IMEFILENAME2, -1) != 2) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
562 dwRet[0] = dwRet[1] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
563 return dwRet[uIndex];
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
564 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
565 #undef LCID_INVARIANT
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
566 dwVerSize = GetFileVersionInfoSizeA(szTemp, &dwVerHandle);
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
567 if (dwVerSize) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
568 lpVerBuffer = SDL_malloc(dwVerSize);
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
569 if (lpVerBuffer) {
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
570 if (GetFileVersionInfoA(szTemp, dwVerHandle, dwVerSize, lpVerBuffer)) {
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
571 if (VerQueryValueA(lpVerBuffer, "\\", &lpVerData, &cbVerData)) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
572 #define pVerFixedInfo ((VS_FIXEDFILEINFO FAR*)lpVerData)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
573 DWORD dwVer = pVerFixedInfo->dwFileVersionMS;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
574 dwVer = (dwVer & 0x00ff0000) << 8 | (dwVer & 0x000000ff) << 16;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
575 if (videodata->GetReadingString ||
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
576 dwLang == LANG_CHT && (
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
577 dwVer == MAKEIMEVERSION(4, 2) ||
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
578 dwVer == MAKEIMEVERSION(4, 3) ||
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
579 dwVer == MAKEIMEVERSION(4, 4) ||
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
580 dwVer == MAKEIMEVERSION(5, 0) ||
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
581 dwVer == MAKEIMEVERSION(5, 1) ||
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
582 dwVer == MAKEIMEVERSION(5, 2) ||
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
583 dwVer == MAKEIMEVERSION(6, 0))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
584 ||
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
585 dwLang == LANG_CHS && (
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
586 dwVer == MAKEIMEVERSION(4, 1) ||
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
587 dwVer == MAKEIMEVERSION(4, 2) ||
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
588 dwVer == MAKEIMEVERSION(5, 3))) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
589 dwRet[0] = dwVer | dwLang;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
590 dwRet[1] = pVerFixedInfo->dwFileVersionLS;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
591 SDL_free(lpVerBuffer);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
592 return dwRet[0];
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
593 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
594 #undef pVerFixedInfo
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
595 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
596 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
597 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
598 SDL_free(lpVerBuffer);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
599 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
600 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
601 dwRet[0] = dwRet[1] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
602 return dwRet[uIndex];
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
603 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
604
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
605 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
606 IME_SetupAPI(SDL_VideoData *videodata)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
607 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
608 char ime_file[MAX_PATH + 1];
5092
327f181542f1 Include windows.h in a single point in the source, so we can be consistent about the definition of UNICODE and have core utility functions for Windows that all modules can share.
Sam Lantinga <slouken@libsdl.org>
parents: 5088
diff changeset
609 void* hime = 0;
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
610 HKL hkl = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
611 videodata->GetReadingString = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
612 videodata->ShowReadingWindow = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
613 if (videodata->ime_uiless)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
614 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
615
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
616 hkl = videodata->ime_hkl;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
617 if (ImmGetIMEFileNameA(hkl, ime_file, sizeof(ime_file) - 1) <= 0)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
618 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
619
5092
327f181542f1 Include windows.h in a single point in the source, so we can be consistent about the definition of UNICODE and have core utility functions for Windows that all modules can share.
Sam Lantinga <slouken@libsdl.org>
parents: 5088
diff changeset
620 hime = SDL_LoadObject(ime_file);
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
621 if (!hime)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
622 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
623
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
624 videodata->GetReadingString = (UINT (WINAPI *)(HIMC, UINT, LPWSTR, PINT, BOOL*, PUINT))
5092
327f181542f1 Include windows.h in a single point in the source, so we can be consistent about the definition of UNICODE and have core utility functions for Windows that all modules can share.
Sam Lantinga <slouken@libsdl.org>
parents: 5088
diff changeset
625 SDL_LoadFunction(hime, "GetReadingString");
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
626 videodata->ShowReadingWindow = (BOOL (WINAPI *)(HIMC, BOOL))
5092
327f181542f1 Include windows.h in a single point in the source, so we can be consistent about the definition of UNICODE and have core utility functions for Windows that all modules can share.
Sam Lantinga <slouken@libsdl.org>
parents: 5088
diff changeset
627 SDL_LoadFunction(hime, "ShowReadingWindow");
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
628
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
629 if (videodata->ShowReadingWindow) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
630 HIMC himc = ImmGetContext(videodata->ime_hwnd_current);
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
631 if (himc) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
632 videodata->ShowReadingWindow(himc, FALSE);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
633 ImmReleaseContext(videodata->ime_hwnd_current, himc);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
634 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
635 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
636 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
637
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
638 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
639 IME_SetWindow(SDL_VideoData* videodata, HWND hwnd)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
640 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
641 videodata->ime_hwnd_current = hwnd;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
642 if (videodata->ime_threadmgr) {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
643 struct ITfDocumentMgr *document_mgr = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
644 if (SUCCEEDED(videodata->ime_threadmgr->lpVtbl->AssociateFocus(videodata->ime_threadmgr, hwnd, NULL, &document_mgr))) {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
645 if (document_mgr)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
646 document_mgr->lpVtbl->Release(document_mgr);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
647 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
648 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
649 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
650
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
651 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
652 IME_UpdateInputLocale(SDL_VideoData *videodata)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
653 {
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
654 static HKL hklprev = 0;
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
655 videodata->ime_hkl = GetKeyboardLayout(0);
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
656 if (hklprev == videodata->ime_hkl)
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
657 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
658
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
659 hklprev = videodata->ime_hkl;
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
660 switch (PRIMLANG()) {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
661 case LANG_CHINESE:
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
662 videodata->ime_candvertical = SDL_TRUE;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
663 if (SUBLANG() == SUBLANG_CHINESE_SIMPLIFIED)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
664 videodata->ime_candvertical = SDL_FALSE;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
665
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
666 break;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
667 case LANG_JAPANESE:
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
668 videodata->ime_candvertical = SDL_TRUE;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
669 break;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
670 case LANG_KOREAN:
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
671 videodata->ime_candvertical = SDL_FALSE;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
672 break;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
673 }
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
674 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
675
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
676 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
677 IME_ClearComposition(SDL_VideoData *videodata)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
678 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
679 HIMC himc = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
680 if (!videodata->ime_initialized)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
681 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
682
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
683 himc = ImmGetContext(videodata->ime_hwnd_current);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
684 if (!himc)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
685 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
686
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
687 ImmNotifyIME(himc, NI_COMPOSITIONSTR, CPS_CANCEL, 0);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
688 if (videodata->ime_uiless)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
689 ImmSetCompositionString(himc, SCS_SETSTR, TEXT(""), sizeof(TCHAR), TEXT(""), sizeof(TCHAR));
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
690
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
691 ImmNotifyIME(himc, NI_CLOSECANDIDATE, 0, 0);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
692 ImmReleaseContext(videodata->ime_hwnd_current, himc);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
693 SDL_SendEditingText("", 0, 0);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
694 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
695
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
696 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
697 IME_GetCompositionString(SDL_VideoData *videodata, HIMC himc, DWORD string)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
698 {
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
699 LONG length = ImmGetCompositionStringW(himc, string, videodata->ime_composition, sizeof(videodata->ime_composition));
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
700 if (length < 0)
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
701 length = 0;
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
702
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
703 length /= sizeof(videodata->ime_composition[0]);
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
704 videodata->ime_cursor = LOWORD(ImmGetCompositionStringW(himc, GCS_CURSORPOS, 0, 0));
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
705 if (videodata->ime_composition[videodata->ime_cursor] == 0x3000) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
706 int i;
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
707 for (i = videodata->ime_cursor + 1; i < length; ++i)
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
708 videodata->ime_composition[i - 1] = videodata->ime_composition[i];
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
709
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
710 --length;
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
711 }
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
712 videodata->ime_composition[length] = 0;
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
713 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
714
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
715 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
716 IME_SendInputEvent(SDL_VideoData *videodata)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
717 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
718 char *s = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
719 s = WIN_StringToUTF8(videodata->ime_composition);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
720 SDL_SendKeyboardText(s);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
721 SDL_free(s);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
722
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
723 videodata->ime_composition[0] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
724 videodata->ime_readingstring[0] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
725 videodata->ime_cursor = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
726 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
727
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
728 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
729 IME_SendEditingEvent(SDL_VideoData *videodata)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
730 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
731 char *s = 0;
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
732 WCHAR buffer[SDL_TEXTEDITINGEVENT_TEXT_SIZE];
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
733 buffer[0] = 0;
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
734 if (videodata->ime_readingstring[0]) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
735 size_t len = SDL_min(SDL_wcslen(videodata->ime_composition), (size_t)videodata->ime_cursor);
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
736 SDL_wcslcpy(buffer, videodata->ime_composition, len + 1);
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
737 SDL_wcslcat(buffer, videodata->ime_readingstring, sizeof(buffer));
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
738 SDL_wcslcat(buffer, &videodata->ime_composition[len], sizeof(buffer) - len);
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
739 }
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
740 else {
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
741 SDL_wcslcpy(buffer, videodata->ime_composition, sizeof(videodata->ime_composition));
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
742 }
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
743 s = WIN_StringToUTF8(buffer);
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
744 SDL_SendEditingText(s, videodata->ime_cursor + SDL_wcslen(videodata->ime_readingstring), 0);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
745 SDL_free(s);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
746 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
747
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
748 static void
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
749 IME_AddCandidate(SDL_VideoData *videodata, UINT i, LPCWSTR candidate)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
750 {
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
751 LPWSTR dst = videodata->ime_candidates[i];
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
752 *dst++ = (WCHAR)(TEXT('0') + ((i + videodata->ime_candlistindexbase) % 10));
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
753 if (videodata->ime_candvertical)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
754 *dst++ = TEXT(' ');
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
755
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
756 while (*candidate && (SDL_arraysize(videodata->ime_candidates[i]) > (dst - videodata->ime_candidates[i])))
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
757 *dst++ = *candidate++;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
758
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
759 *dst = (WCHAR)'\0';
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
760 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
761
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
762 static void
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
763 IME_GetCandidateList(HIMC himc, SDL_VideoData *videodata)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
764 {
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
765 LPCANDIDATELIST cand_list = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
766 DWORD size = ImmGetCandidateListW(himc, 0, 0, 0);
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
767 if (size) {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
768 cand_list = (LPCANDIDATELIST)SDL_malloc(size);
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
769 if (cand_list) {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
770 size = ImmGetCandidateListW(himc, 0, cand_list, size);
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
771 if (size) {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
772 int i = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
773 int j = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
774 int page_start = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
775 videodata->ime_candsel = cand_list->dwSelection;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
776 videodata->ime_candcount = cand_list->dwCount;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
777
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
778 if (LANG() == LANG_CHS && IME_GetId(videodata, 0)) {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
779 const UINT maxcandchar = 18;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
780 UINT i = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
781 UINT cchars = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
782
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
783 for (; i < videodata->ime_candcount; ++i) {
5110
d68e9722ff4d Fixed bug #1109
Sam Lantinga <slouken@libsdl.org>
parents: 5092
diff changeset
784 UINT len = SDL_wcslen((LPWSTR)((DWORD_PTR)cand_list + cand_list->dwOffset[i])) + 1;
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
785 if (len + cchars > maxcandchar) {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
786 if (i > cand_list->dwSelection)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
787 break;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
788
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
789 page_start = i;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
790 cchars = len;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
791 }
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
792 else {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
793 cchars += len;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
794 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
795 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
796 videodata->ime_candpgsize = i - page_start;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
797 }
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
798 else {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
799 videodata->ime_candpgsize = SDL_min(cand_list->dwPageSize, MAX_CANDLIST);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
800 page_start = (cand_list->dwSelection / videodata->ime_candpgsize) * videodata->ime_candpgsize;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
801 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
802 SDL_memset(&videodata->ime_candidates, 0, sizeof(videodata->ime_candidates));
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
803 for (i = page_start, j = 0; (DWORD)i < cand_list->dwCount && j < (int)videodata->ime_candpgsize; i++, j++) {
5110
d68e9722ff4d Fixed bug #1109
Sam Lantinga <slouken@libsdl.org>
parents: 5092
diff changeset
804 LPCWSTR candidate = (LPCWSTR)((DWORD_PTR)cand_list + cand_list->dwOffset[i]);
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
805 IME_AddCandidate(videodata, j, candidate);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
806 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
807 if (PRIMLANG() == LANG_KOREAN || (PRIMLANG() == LANG_CHT && !IME_GetId(videodata, 0)))
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
808 videodata->ime_candsel = -1;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
809
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
810 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
811 SDL_free(cand_list);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
812 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
813 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
814 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
815
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
816 static void
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
817 IME_ShowCandidateList(SDL_VideoData *videodata)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
818 {
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
819 videodata->ime_dirty = SDL_TRUE;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
820 videodata->ime_candlist = SDL_TRUE;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
821 IME_DestroyTextures(videodata);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
822 IME_SendEditingEvent(videodata);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
823 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
824
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
825 static void
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
826 IME_HideCandidateList(SDL_VideoData *videodata)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
827 {
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
828 videodata->ime_dirty = SDL_FALSE;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
829 videodata->ime_candlist = SDL_FALSE;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
830 IME_DestroyTextures(videodata);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
831 IME_SendEditingEvent(videodata);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
832 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
833
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
834 SDL_bool
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
835 IME_HandleMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM *lParam, SDL_VideoData *videodata)
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
836 {
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
837 SDL_bool trap = SDL_FALSE;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
838 HIMC himc = 0;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
839 if (!videodata->ime_initialized || !videodata->ime_available || !videodata->ime_enabled)
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
840 return SDL_FALSE;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
841
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
842 switch (msg) {
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
843 case WM_INPUTLANGCHANGE:
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
844 IME_InputLangChanged(videodata);
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
845 break;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
846 case WM_IME_SETCONTEXT:
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
847 *lParam = 0;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
848 break;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
849 case WM_IME_STARTCOMPOSITION:
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
850 trap = SDL_TRUE;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
851 break;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
852 case WM_IME_COMPOSITION:
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
853 trap = SDL_TRUE;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
854 himc = ImmGetContext(hwnd);
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
855 if (*lParam & GCS_RESULTSTR) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
856 IME_GetCompositionString(videodata, himc, GCS_RESULTSTR);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
857 IME_SendInputEvent(videodata);
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
858 }
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
859 if (*lParam & GCS_COMPSTR) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
860 if (!videodata->ime_uiless)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
861 videodata->ime_readingstring[0] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
862
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
863 IME_GetCompositionString(videodata, himc, GCS_COMPSTR);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
864 IME_SendEditingEvent(videodata);
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
865 }
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
866 ImmReleaseContext(hwnd, himc);
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
867 break;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
868 case WM_IME_ENDCOMPOSITION:
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
869 videodata->ime_composition[0] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
870 videodata->ime_readingstring[0] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
871 videodata->ime_cursor = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
872 SDL_SendEditingText("", 0, 0);
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
873 break;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
874 case WM_IME_NOTIFY:
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
875 switch (wParam) {
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
876 case IMN_SETCONVERSIONMODE:
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
877 case IMN_SETOPENSTATUS:
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
878 IME_UpdateInputLocale(videodata);
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
879 break;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
880 case IMN_OPENCANDIDATE:
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
881 case IMN_CHANGECANDIDATE:
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
882 if (videodata->ime_uiless)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
883 break;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
884
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
885 trap = SDL_TRUE;
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
886 IME_ShowCandidateList(videodata);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
887 himc = ImmGetContext(hwnd);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
888 if (!himc)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
889 break;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
890
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
891 IME_GetCandidateList(himc, videodata);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
892 ImmReleaseContext(hwnd, himc);
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
893 break;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
894 case IMN_CLOSECANDIDATE:
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
895 trap = SDL_TRUE;
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
896 IME_HideCandidateList(videodata);
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
897 break;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
898 case IMN_PRIVATE:
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
899 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
900 DWORD dwId = IME_GetId(videodata, 0);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
901 IME_GetReadingString(videodata, hwnd);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
902 switch (dwId)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
903 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
904 case IMEID_CHT_VER42:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
905 case IMEID_CHT_VER43:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
906 case IMEID_CHT_VER44:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
907 case IMEID_CHS_VER41:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
908 case IMEID_CHS_VER42:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
909 if (*lParam == 1 || *lParam == 2)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
910 trap = SDL_TRUE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
911
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
912 break;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
913 case IMEID_CHT_VER50:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
914 case IMEID_CHT_VER51:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
915 case IMEID_CHT_VER52:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
916 case IMEID_CHT_VER60:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
917 case IMEID_CHS_VER53:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
918 if (*lParam == 16
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
919 || *lParam == 17
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
920 || *lParam == 26
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
921 || *lParam == 27
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
922 || *lParam == 28)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
923 trap = SDL_TRUE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
924 break;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
925 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
926 }
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
927 break;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
928 default:
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
929 trap = SDL_TRUE;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
930 break;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
931 }
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
932 break;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
933 }
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
934 return trap;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
935 }
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
936
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
937 static void
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
938 IME_CloseCandidateList(SDL_VideoData *videodata)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
939 {
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
940 IME_HideCandidateList(videodata);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
941 videodata->ime_candcount = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
942 SDL_memset(videodata->ime_candidates, 0, sizeof(videodata->ime_candidates));
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
943 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
944
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
945 static void
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
946 UILess_GetCandidateList(SDL_VideoData *videodata, ITfCandidateListUIElement *pcandlist)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
947 {
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
948 UINT selection = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
949 UINT count = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
950 UINT page = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
951 UINT pgcount = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
952 DWORD pgstart = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
953 DWORD pgsize = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
954 UINT i, j;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
955 pcandlist->lpVtbl->GetSelection(pcandlist, &selection);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
956 pcandlist->lpVtbl->GetCount(pcandlist, &count);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
957 pcandlist->lpVtbl->GetCurrentPage(pcandlist, &page);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
958
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
959 videodata->ime_candsel = selection;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
960 videodata->ime_candcount = count;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
961 IME_ShowCandidateList(videodata);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
962
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
963 pcandlist->lpVtbl->GetPageIndex(pcandlist, 0, 0, &pgcount);
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
964 if (pgcount > 0) {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
965 UINT *idxlist = SDL_malloc(sizeof(UINT) * pgcount);
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
966 if (idxlist) {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
967 pcandlist->lpVtbl->GetPageIndex(pcandlist, idxlist, pgcount, &pgcount);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
968 pgstart = idxlist[page];
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
969 if (page < pgcount - 1)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
970 pgsize = SDL_min(count, idxlist[page + 1]) - pgstart;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
971 else
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
972 pgsize = count - pgstart;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
973
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
974 SDL_free(idxlist);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
975 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
976 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
977 videodata->ime_candpgsize = SDL_min(pgsize, MAX_CANDLIST);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
978 videodata->ime_candsel = videodata->ime_candsel - pgstart;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
979
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
980 SDL_memset(videodata->ime_candidates, 0, sizeof(videodata->ime_candidates));
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
981 for (i = pgstart, j = 0; (DWORD)i < count && j < videodata->ime_candpgsize; i++, j++) {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
982 BSTR bstr;
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
983 if (SUCCEEDED(pcandlist->lpVtbl->GetString(pcandlist, i, &bstr))) {
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
984 if (bstr) {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
985 IME_AddCandidate(videodata, j, bstr);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
986 SysFreeString(bstr);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
987 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
988 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
989 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
990 if (PRIMLANG() == LANG_KOREAN)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
991 videodata->ime_candsel = -1;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
992 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
993
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
994 STDMETHODIMP_(ULONG) TSFSink_AddRef(TSFSink *sink)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
995 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
996 return ++sink->refcount;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
997 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
998
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
999 STDMETHODIMP_(ULONG)TSFSink_Release(TSFSink *sink)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1000 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1001 --sink->refcount;
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
1002 if (sink->refcount == 0) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1003 SDL_free(sink);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1004 return 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1005 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1006 return sink->refcount;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1007 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1008
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1009 STDMETHODIMP UIElementSink_QueryInterface(TSFSink *sink, REFIID riid, PVOID *ppv)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1010 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1011 if (!ppv)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1012 return E_INVALIDARG;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1013
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1014 *ppv = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1015 if (SDL_IsEqualIID(riid, &IID_IUnknown))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1016 *ppv = (IUnknown *)sink;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1017 else if (SDL_IsEqualIID(riid, &IID_ITfUIElementSink))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1018 *ppv = (ITfUIElementSink *)sink;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1019
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1020 if (*ppv) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1021 TSFSink_AddRef(sink);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1022 return S_OK;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1023 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1024 return E_NOINTERFACE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1025 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1026
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1027 ITfUIElement *UILess_GetUIElement(SDL_VideoData *videodata, DWORD dwUIElementId)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1028 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1029 ITfUIElementMgr *puiem = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1030 ITfUIElement *pelem = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1031 ITfThreadMgrEx *threadmgrex = videodata->ime_threadmgrex;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1032
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1033 if (SUCCEEDED(threadmgrex->lpVtbl->QueryInterface(threadmgrex, &IID_ITfUIElementMgr, (LPVOID *)&puiem))) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1034 puiem->lpVtbl->GetUIElement(puiem, dwUIElementId, &pelem);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1035 puiem->lpVtbl->Release(puiem);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1036 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1037 return pelem;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1038 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1039
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1040 STDMETHODIMP UIElementSink_BeginUIElement(TSFSink *sink, DWORD dwUIElementId, BOOL *pbShow)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1041 {
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1042 ITfUIElement *element = UILess_GetUIElement((SDL_VideoData *)sink->data, dwUIElementId);
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1043 ITfReadingInformationUIElement *preading = 0;
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1044 ITfCandidateListUIElement *pcandlist = 0;
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1045 SDL_VideoData *videodata = (SDL_VideoData *)sink->data;
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1046 if (!element)
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1047 return E_INVALIDARG;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1048
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1049 *pbShow = FALSE;
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1050 if (SUCCEEDED(element->lpVtbl->QueryInterface(element, &IID_ITfReadingInformationUIElement, (LPVOID *)&preading))) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1051 BSTR bstr;
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1052 if (SUCCEEDED(preading->lpVtbl->GetString(preading, &bstr)) && bstr) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1053 WCHAR *s = (WCHAR *)bstr;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1054 SysFreeString(bstr);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1055 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1056 preading->lpVtbl->Release(preading);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1057 }
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1058 else if (SUCCEEDED(element->lpVtbl->QueryInterface(element, &IID_ITfCandidateListUIElement, (LPVOID *)&pcandlist))) {
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1059 videodata->ime_candref++;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1060 UILess_GetCandidateList(videodata, pcandlist);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1061 pcandlist->lpVtbl->Release(pcandlist);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1062 }
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1063 return S_OK;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1064 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1065
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1066 STDMETHODIMP UIElementSink_UpdateUIElement(TSFSink *sink, DWORD dwUIElementId)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1067 {
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1068 ITfUIElement *element = UILess_GetUIElement((SDL_VideoData *)sink->data, dwUIElementId);
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1069 ITfReadingInformationUIElement *preading = 0;
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1070 ITfCandidateListUIElement *pcandlist = 0;
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1071 SDL_VideoData *videodata = (SDL_VideoData *)sink->data;
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1072 if (!element)
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1073 return E_INVALIDARG;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1074
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1075 if (SUCCEEDED(element->lpVtbl->QueryInterface(element, &IID_ITfReadingInformationUIElement, (LPVOID *)&preading))) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1076 BSTR bstr;
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1077 if (SUCCEEDED(preading->lpVtbl->GetString(preading, &bstr)) && bstr) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1078 WCHAR *s = (WCHAR *)bstr;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1079 SDL_wcslcpy(videodata->ime_readingstring, s, sizeof(videodata->ime_readingstring));
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1080 IME_SendEditingEvent(videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1081 SysFreeString(bstr);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1082 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1083 preading->lpVtbl->Release(preading);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1084 }
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1085 else if (SUCCEEDED(element->lpVtbl->QueryInterface(element, &IID_ITfCandidateListUIElement, (LPVOID *)&pcandlist))) {
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1086 UILess_GetCandidateList(videodata, pcandlist);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1087 pcandlist->lpVtbl->Release(pcandlist);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1088 }
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1089 return S_OK;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1090 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1091
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1092 STDMETHODIMP UIElementSink_EndUIElement(TSFSink *sink, DWORD dwUIElementId)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1093 {
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1094 ITfUIElement *element = UILess_GetUIElement((SDL_VideoData *)sink->data, dwUIElementId);
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1095 ITfReadingInformationUIElement *preading = 0;
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1096 ITfCandidateListUIElement *pcandlist = 0;
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1097 SDL_VideoData *videodata = (SDL_VideoData *)sink->data;
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1098 if (!element)
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1099 return E_INVALIDARG;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1100
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1101 if (SUCCEEDED(element->lpVtbl->QueryInterface(element, &IID_ITfReadingInformationUIElement, (LPVOID *)&preading))) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1102 videodata->ime_readingstring[0] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1103 IME_SendEditingEvent(videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1104 preading->lpVtbl->Release(preading);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1105 }
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1106 if (SUCCEEDED(element->lpVtbl->QueryInterface(element, &IID_ITfCandidateListUIElement, (LPVOID *)&pcandlist))) {
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1107 videodata->ime_candref--;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1108 if (videodata->ime_candref == 0)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1109 IME_CloseCandidateList(videodata);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1110
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1111 pcandlist->lpVtbl->Release(pcandlist);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1112 }
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1113 return S_OK;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1114 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1115
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1116 STDMETHODIMP IPPASink_QueryInterface(TSFSink *sink, REFIID riid, PVOID *ppv)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1117 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1118 if (!ppv)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1119 return E_INVALIDARG;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1120
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1121 *ppv = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1122 if (SDL_IsEqualIID(riid, &IID_IUnknown))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1123 *ppv = (IUnknown *)sink;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1124 else if (SDL_IsEqualIID(riid, &IID_ITfInputProcessorProfileActivationSink))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1125 *ppv = (ITfInputProcessorProfileActivationSink *)sink;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1126
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1127 if (*ppv) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1128 TSFSink_AddRef(sink);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1129 return S_OK;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1130 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1131 return E_NOINTERFACE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1132 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1133
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1134 STDMETHODIMP IPPASink_OnActivated(TSFSink *sink, DWORD dwProfileType, LANGID langid, REFCLSID clsid, REFGUID catid, REFGUID guidProfile, HKL hkl, DWORD dwFlags)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1135 {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1136 static GUID TF_PROFILE_DAYI = {0x037B2C25, 0x480C, 0x4D7F, 0xB0, 0x27, 0xD6, 0xCA, 0x6B, 0x69, 0x78, 0x8A};
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1137 SDL_VideoData *videodata = (SDL_VideoData *)sink->data;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1138 videodata->ime_candlistindexbase = SDL_IsEqualGUID(&TF_PROFILE_DAYI, guidProfile) ? 0 : 1;
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1139 if (SDL_IsEqualIID(catid, &GUID_TFCAT_TIP_KEYBOARD) && (dwFlags & TF_IPSINK_FLAG_ACTIVE))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1140 IME_InputLangChanged((SDL_VideoData *)sink->data);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1141
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1142 IME_HideCandidateList(videodata);
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1143 return S_OK;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1144 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1145
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1146 static void *vtUIElementSink[] = {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1147 (void *)(UIElementSink_QueryInterface),
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1148 (void *)(TSFSink_AddRef),
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1149 (void *)(TSFSink_Release),
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1150 (void *)(UIElementSink_BeginUIElement),
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1151 (void *)(UIElementSink_UpdateUIElement),
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1152 (void *)(UIElementSink_EndUIElement)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1153 };
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1154
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1155 static void *vtIPPASink[] = {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1156 (void *)(IPPASink_QueryInterface),
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1157 (void *)(TSFSink_AddRef),
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1158 (void *)(TSFSink_Release),
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1159 (void *)(IPPASink_OnActivated)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1160 };
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1161
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1162 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1163 UILess_EnableUIUpdates(SDL_VideoData *videodata)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1164 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1165 ITfSource *source = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1166 if (!videodata->ime_threadmgrex || videodata->ime_uielemsinkcookie != TF_INVALID_COOKIE)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1167 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1168
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1169 if (SUCCEEDED(videodata->ime_threadmgrex->lpVtbl->QueryInterface(videodata->ime_threadmgrex, &IID_ITfSource, (LPVOID *)&source))) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1170 source->lpVtbl->AdviseSink(source, &IID_ITfUIElementSink, (IUnknown *)videodata->ime_uielemsink, &videodata->ime_uielemsinkcookie);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1171 source->lpVtbl->Release(source);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1172 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1173 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1174
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1175 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1176 UILess_DisableUIUpdates(SDL_VideoData *videodata)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1177 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1178 ITfSource *source = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1179 if (!videodata->ime_threadmgrex || videodata->ime_uielemsinkcookie == TF_INVALID_COOKIE)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1180 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1181
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1182 if (SUCCEEDED(videodata->ime_threadmgrex->lpVtbl->QueryInterface(videodata->ime_threadmgrex, &IID_ITfSource, (LPVOID *)&source))) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1183 source->lpVtbl->UnadviseSink(source, videodata->ime_uielemsinkcookie);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1184 videodata->ime_uielemsinkcookie = TF_INVALID_COOKIE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1185 source->lpVtbl->Release(source);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1186 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1187 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1188
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1189 static SDL_bool
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1190 UILess_SetupSinks(SDL_VideoData *videodata)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1191 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1192 TfClientId clientid = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1193 SDL_bool result = SDL_FALSE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1194 ITfSource *source = 0;
4893
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
1195 if (FAILED(CoCreateInstance(&CLSID_TF_ThreadMgr, NULL, CLSCTX_INPROC_SERVER, &IID_ITfThreadMgrEx, (LPVOID *)&videodata->ime_threadmgrex)))
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1196 return SDL_FALSE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1197
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1198 if (FAILED(videodata->ime_threadmgrex->lpVtbl->ActivateEx(videodata->ime_threadmgrex, &clientid, TF_TMAE_UIELEMENTENABLEDONLY)))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1199 return SDL_FALSE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1200
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1201 videodata->ime_uielemsink = SDL_malloc(sizeof(TSFSink));
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1202 videodata->ime_ippasink = SDL_malloc(sizeof(TSFSink));
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1203
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1204 videodata->ime_uielemsink->lpVtbl = vtUIElementSink;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1205 videodata->ime_uielemsink->refcount = 1;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1206 videodata->ime_uielemsink->data = videodata;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1207
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1208 videodata->ime_ippasink->lpVtbl = vtIPPASink;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1209 videodata->ime_ippasink->refcount = 1;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1210 videodata->ime_ippasink->data = videodata;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1211
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1212 if (SUCCEEDED(videodata->ime_threadmgrex->lpVtbl->QueryInterface(videodata->ime_threadmgrex, &IID_ITfSource, (LPVOID *)&source))) {
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1213 if (SUCCEEDED(source->lpVtbl->AdviseSink(source, &IID_ITfUIElementSink, (IUnknown *)videodata->ime_uielemsink, &videodata->ime_uielemsinkcookie))) {
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1214 if (SUCCEEDED(source->lpVtbl->AdviseSink(source, &IID_ITfInputProcessorProfileActivationSink, (IUnknown *)videodata->ime_ippasink, &videodata->ime_alpnsinkcookie))) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1215 result = SDL_TRUE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1216 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1217 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1218 source->lpVtbl->Release(source);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1219 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1220 return result;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1221 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1222
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1223 #define SAFE_RELEASE(p) \
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1224 { \
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1225 if (p) { \
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1226 (p)->lpVtbl->Release((p)); \
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1227 (p) = 0; \
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1228 } \
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1229 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1230
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1231 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1232 UILess_ReleaseSinks(SDL_VideoData *videodata)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1233 {
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1234 ITfSource *source = 0;
4893
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
1235 if (videodata->ime_threadmgrex && SUCCEEDED(videodata->ime_threadmgrex->lpVtbl->QueryInterface(videodata->ime_threadmgrex, &IID_ITfSource, (LPVOID *)&source))) {
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1236 source->lpVtbl->UnadviseSink(source, videodata->ime_uielemsinkcookie);
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1237 source->lpVtbl->UnadviseSink(source, videodata->ime_alpnsinkcookie);
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1238 SAFE_RELEASE(source);
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1239 videodata->ime_threadmgrex->lpVtbl->Deactivate(videodata->ime_threadmgrex);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1240 SAFE_RELEASE(videodata->ime_threadmgrex);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1241 TSFSink_Release(videodata->ime_uielemsink);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1242 videodata->ime_uielemsink = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1243 TSFSink_Release(videodata->ime_ippasink);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1244 videodata->ime_ippasink = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1245 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1246 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1247
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1248 static void *
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1249 StartDrawToBitmap(HDC hdc, HBITMAP *hhbm, int width, int height)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1250 {
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1251 BITMAPINFO info = {0};
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1252 BITMAPINFOHEADER *infoHeader = &info.bmiHeader;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1253 BYTE *bits = NULL;
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
1254 if (hhbm) {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1255 infoHeader->biSize = sizeof(BITMAPINFOHEADER);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1256 infoHeader->biWidth = width;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1257 infoHeader->biHeight = -1 * SDL_abs(height);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1258 infoHeader->biPlanes = 1;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1259 infoHeader->biBitCount = 32;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1260 infoHeader->biCompression = BI_RGB;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1261 *hhbm = CreateDIBSection(hdc, &info, DIB_RGB_COLORS, (void **)&bits, 0, 0);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1262 if (*hhbm)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1263 SelectObject(hdc, *hhbm);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1264 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1265 return bits;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1266 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1267
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1268 static void
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1269 StopDrawToBitmap(HDC hdc, HBITMAP *hhbm)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1270 {
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
1271 if (hhbm && *hhbm) {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1272 DeleteObject(*hhbm);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1273 *hhbm = NULL;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1274 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1275 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1276
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1277 static void
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1278 BitmapToTexture(HBITMAP hbm, BYTE *bits, int width, int height, SDL_Texture **texture)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1279 {
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1280 SDL_Surface *surface = NULL;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1281 BITMAP bm = {0};
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1282
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1283 if (GetObject(hbm, sizeof(bm), &bm) == 0)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1284 return;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1285
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
1286 if (bits && texture) {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1287 /*
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1288 For transparency:
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1289
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1290 const Uint8 alpha = 130;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1291 unsigned long *p = (unsigned long *)bits;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1292 unsigned long *end = (unsigned long *)(bits + (bm.bmWidthBytes * bm.bmHeight));
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
1293 while (p < end) {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1294 *p = RGB(GetRValue(*p), GetGValue(*p), GetBValue(*p)) | (alpha << 24);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1295 ++p;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1296 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1297 surface = SDL_CreateRGBSurfaceFrom(bits, width, height, bm.bmBitsPixel, bm.bmWidthBytes, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1298 */
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1299 surface = SDL_CreateRGBSurfaceFrom(bits, width, height, bm.bmBitsPixel, bm.bmWidthBytes, 0x00ff0000, 0x0000ff00, 0x000000ff, 0);
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
1300 if (surface) {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1301 *texture = SDL_CreateTextureFromSurface(0, surface);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1302 SDL_FreeSurface(surface);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1303 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1304 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1305 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1306
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1307 /* This draws only within the specified area and fills the entire region. */
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1308 static void
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1309 DrawRect(HDC hdc, int left, int top, int right, int bottom, int pensize)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1310 {
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1311 /* The case of no pen (PenSize = 0) is automatically taken care of. */
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1312 const int penadjust = (int)SDL_floor(pensize / 2.0f - 0.5f);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1313 left += pensize / 2;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1314 top += pensize / 2;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1315 right -= penadjust;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1316 bottom -= penadjust;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1317 Rectangle(hdc, left, top, right, bottom);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1318 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1319
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1320 static void
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1321 DestroyTexture(SDL_Texture **texture)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1322 {
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
1323 if (texture && *texture) {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1324 SDL_DestroyTexture(*texture);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1325 *texture = NULL;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1326 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1327 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1328
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1329 static void
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1330 IME_DestroyTextures(SDL_VideoData *videodata)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1331 {
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1332 DestroyTexture(&videodata->ime_candtex);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1333 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1334
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1335 #define SDL_swap(a,b) { \
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1336 int c = (a); \
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1337 (a) = (b); \
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1338 (b) = c; \
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1339 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1340
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1341 static void
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1342 IME_PositionCandidateList(SDL_VideoData *videodata, SIZE size)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1343 {
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1344 int left, top, right, bottom;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1345 SDL_bool ok = SDL_FALSE;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1346 int winw = videodata->ime_winwidth;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1347 int winh = videodata->ime_winheight;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1348
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1349 /* Bottom */
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1350 left = videodata->ime_rect.x;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1351 top = videodata->ime_rect.y + videodata->ime_rect.h;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1352 right = left + size.cx;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1353 bottom = top + size.cy;
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
1354 if (right >= winw) {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1355 left -= right - winw;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1356 right = winw;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1357 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1358 if (bottom < winh)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1359 ok = SDL_TRUE;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1360
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1361 /* Top */
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
1362 if (!ok) {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1363 left = videodata->ime_rect.x;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1364 top = videodata->ime_rect.y - size.cy;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1365 right = left + size.cx;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1366 bottom = videodata->ime_rect.y;
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
1367 if (right >= winw) {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1368 left -= right - winw;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1369 right = winw;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1370 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1371 if (top >= 0)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1372 ok = SDL_TRUE;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1373 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1374
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1375 /* Right */
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
1376 if (!ok) {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1377 left = videodata->ime_rect.x + size.cx;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1378 top = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1379 right = left + size.cx;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1380 bottom = size.cy;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1381 if (right < winw)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1382 ok = SDL_TRUE;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1383 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1384
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1385 /* Left */
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
1386 if (!ok) {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1387 left = videodata->ime_rect.x - size.cx;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1388 top = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1389 right = videodata->ime_rect.x;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1390 bottom = size.cy;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1391 if (right >= 0)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1392 ok = SDL_TRUE;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1393 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1394
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1395 /* Window too small, show at (0,0) */
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
1396 if (!ok) {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1397 left = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1398 top = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1399 right = size.cx;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1400 bottom = size.cy;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1401 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1402
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1403 videodata->ime_candlistrect.x = left;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1404 videodata->ime_candlistrect.y = top;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1405 videodata->ime_candlistrect.w = right - left;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1406 videodata->ime_candlistrect.h = bottom - top;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1407 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1408
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1409 static void
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1410 IME_RenderCandidateList(SDL_VideoData *videodata, HDC hdc)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1411 {
4916
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1412 int i, j;
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1413 SIZE size = {0};
4916
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1414 SIZE candsizes[MAX_CANDLIST];
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1415 SIZE maxcandsize = {0};
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1416 HBITMAP hbm = NULL;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1417 BYTE *bits = NULL;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1418 const int candcount = SDL_min(SDL_min(MAX_CANDLIST, videodata->ime_candcount), videodata->ime_candpgsize);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1419 SDL_bool vertical = videodata->ime_candvertical;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1420
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1421 const int listborder = 1;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1422 const int listpadding = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1423 const int listbordercolor = RGB(0xB4, 0xC7, 0xAA);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1424 const int listfillcolor = RGB(255, 255, 255);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1425
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1426 const int candborder = 1;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1427 const int candpadding = 0;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1428 const int candmargin = 1;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1429 const COLORREF candbordercolor = RGB(255, 255, 255);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1430 const COLORREF candfillcolor = RGB(255, 255, 255);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1431 const COLORREF candtextcolor = RGB(0, 0, 0);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1432 const COLORREF selbordercolor = RGB(0x84, 0xAC, 0xDD);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1433 const COLORREF selfillcolor = RGB(0xD2, 0xE6, 0xFF);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1434 const COLORREF seltextcolor = RGB(0, 0, 0);
4916
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1435 const int horzcandspacing = 5;
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1436
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1437 HPEN listpen = listborder != 0 ? CreatePen(PS_SOLID, listborder, listbordercolor) : (HPEN)GetStockObject(NULL_PEN);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1438 HBRUSH listbrush = CreateSolidBrush(listfillcolor);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1439 HPEN candpen = candborder != 0 ? CreatePen(PS_SOLID, candborder, candbordercolor) : (HPEN)GetStockObject(NULL_PEN);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1440 HBRUSH candbrush = CreateSolidBrush(candfillcolor);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1441 HPEN selpen = candborder != 0 ? CreatePen(PS_DOT, candborder, selbordercolor) : (HPEN)GetStockObject(NULL_PEN);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1442 HBRUSH selbrush = CreateSolidBrush(selfillcolor);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1443 HFONT font = CreateFont((int)(1 + videodata->ime_rect.h * 0.75f), 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, VARIABLE_PITCH | FF_SWISS, TEXT("Microsoft Sans Serif"));
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1444
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1445 SetBkMode(hdc, TRANSPARENT);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1446 SelectObject(hdc, font);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1447
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
1448 for (i = 0; i < candcount; ++i) {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1449 const WCHAR *s = videodata->ime_candidates[i];
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1450 if (!*s)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1451 break;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1452
4916
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1453 GetTextExtentPoint32W(hdc, s, SDL_wcslen(s), &candsizes[i]);
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1454 maxcandsize.cx = SDL_max(maxcandsize.cx, candsizes[i].cx);
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1455 maxcandsize.cy = SDL_max(maxcandsize.cy, candsizes[i].cy);
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1456
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1457 }
4916
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1458 if (vertical) {
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1459 size.cx =
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1460 (listborder * 2) +
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1461 (listpadding * 2) +
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1462 (candmargin * 2) +
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1463 (candborder * 2) +
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1464 (candpadding * 2) +
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1465 (maxcandsize.cx)
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1466 ;
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1467 size.cy =
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1468 (listborder * 2) +
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1469 (listpadding * 2) +
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1470 ((candcount + 1) * candmargin) +
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1471 (candcount * candborder * 2) +
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1472 (candcount * candpadding * 2) +
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1473 (candcount * maxcandsize.cy)
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1474 ;
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1475 }
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1476 else {
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1477 size.cx =
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1478 (listborder * 2) +
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1479 (listpadding * 2) +
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1480 ((candcount + 1) * candmargin) +
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1481 (candcount * candborder * 2) +
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1482 (candcount * candpadding * 2) +
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1483 ((candcount - 1) * horzcandspacing);
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1484 ;
4916
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1485
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1486 for (i = 0; i < candcount; ++i)
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1487 size.cx += candsizes[i].cx;
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1488
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1489 size.cy =
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1490 (listborder * 2) +
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1491 (listpadding * 2) +
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1492 (candmargin * 2) +
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1493 (candborder * 2) +
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1494 (candpadding * 2) +
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1495 (maxcandsize.cy)
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1496 ;
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1497 }
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1498
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1499 bits = StartDrawToBitmap(hdc, &hbm, size.cx, size.cy);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1500
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1501 SelectObject(hdc, listpen);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1502 SelectObject(hdc, listbrush);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1503 DrawRect(hdc, 0, 0, size.cx, size.cy, listborder);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1504
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1505 SelectObject(hdc, candpen);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1506 SelectObject(hdc, candbrush);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1507 SetTextColor(hdc, candtextcolor);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1508 SetBkMode(hdc, TRANSPARENT);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1509
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
1510 for (i = 0; i < candcount; ++i) {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1511 const WCHAR *s = videodata->ime_candidates[i];
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1512 int left, top, right, bottom;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1513 if (!*s)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1514 break;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1515
4916
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1516 if (vertical) {
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1517 left = listborder + listpadding + candmargin;
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1518 top = listborder + listpadding + (i * candborder * 2) + (i * candpadding * 2) + ((i + 1) * candmargin) + (i * maxcandsize.cy);
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1519 right = size.cx - listborder - listpadding - candmargin;
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1520 bottom = top + maxcandsize.cy + (candpadding * 2) + (candborder * 2);
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1521 }
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1522 else {
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1523 left = listborder + listpadding + (i * candborder * 2) + (i * candpadding * 2) + ((i + 1) * candmargin) + (i * horzcandspacing);
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1524
4916
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1525 for (j = 0; j < i; ++j)
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1526 left += candsizes[j].cx;
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1527
4916
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1528 top = listborder + listpadding + candmargin;
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1529 right = left + candsizes[i].cx + (candpadding * 2) + (candborder * 2);
3617cec7f0ee Better horizontal candidate list rendering.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4914
diff changeset
1530 bottom = size.cy - listborder - listpadding - candmargin;
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1531 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1532
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
1533 if (i == videodata->ime_candsel) {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1534 SelectObject(hdc, selpen);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1535 SelectObject(hdc, selbrush);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1536 SetTextColor(hdc, seltextcolor);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1537 }
4914
cc7ac6aaac5d Code style updates.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4913
diff changeset
1538 else {
4913
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1539 SelectObject(hdc, candpen);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1540 SelectObject(hdc, candbrush);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1541 SetTextColor(hdc, candtextcolor);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1542 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1543
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1544 DrawRect(hdc, left, top, right, bottom, candborder);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1545 ExtTextOutW(hdc, left + candborder + candpadding, top + candborder + candpadding, 0, NULL, s, SDL_wcslen(s), NULL);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1546 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1547 BitmapToTexture(hbm, bits, size.cx, size.cy, &videodata->ime_candtex);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1548 StopDrawToBitmap(hdc, &hbm);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1549
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1550 DeleteObject(listpen);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1551 DeleteObject(listbrush);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1552 DeleteObject(candpen);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1553 DeleteObject(candbrush);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1554 DeleteObject(selpen);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1555 DeleteObject(selbrush);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1556 DeleteObject(font);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1557
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1558 IME_PositionCandidateList(videodata, size);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1559 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1560
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1561 static void
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1562 IME_Render(SDL_VideoData *videodata)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1563 {
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1564 HDC hdc = CreateCompatibleDC(NULL);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1565
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1566 if (videodata->ime_candlist)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1567 IME_RenderCandidateList(videodata, hdc);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1568
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1569 DeleteDC(hdc);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1570
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1571 videodata->ime_dirty = SDL_FALSE;
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1572 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1573
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1574 void IME_Present(SDL_VideoData *videodata)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1575 {
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1576 if (videodata->ime_dirty)
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1577 IME_Render(videodata);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1578
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1579 SDL_RenderCopy(videodata->ime_candtex, NULL, &videodata->ime_candlistrect);
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1580 }
6b89d83b0b5a Windows candidate list support.
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4894
diff changeset
1581
5088
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
1582 #endif /* SDL_DISABLE_WINDOWS_IME */
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5083
diff changeset
1583
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1584 /* vi: set ts=4 sw=4 expandtab: */