Skip to content

Commit f69fa00

Browse files
committed
Fix IME_SETCONVERSIONFONTEX
1 parent eb83787 commit f69fa00

File tree

1 file changed

+43
-21
lines changed

1 file changed

+43
-21
lines changed

winnls/winnls.c

Lines changed: 43 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -163,10 +163,27 @@ typedef struct tagIMEMESSAGE16 {
163163
WORD unknown8;
164164
} IMEMESSAGE16, FAR *LPIMEMESSAGE16;
165165
#include <poppack.h>
166-
LRESULT WINAPI SendIMEMessageEx16(
167-
_In_ HWND16 hwnd,
168-
_In_ LPARAM lParam
169-
);
166+
167+
/* convert a LOGFONT16 to a LOGFONTA */
168+
static void logfont_16_to_A(const LOGFONT16 *font16, LPLOGFONTA font32)
169+
{
170+
font32->lfHeight = font16->lfHeight;
171+
font32->lfWidth = font16->lfWidth;
172+
font32->lfEscapement = font16->lfEscapement;
173+
font32->lfOrientation = font16->lfOrientation;
174+
font32->lfWeight = font16->lfWeight;
175+
font32->lfItalic = font16->lfItalic;
176+
font32->lfUnderline = font16->lfUnderline;
177+
font32->lfStrikeOut = font16->lfStrikeOut;
178+
font32->lfCharSet = font16->lfCharSet;
179+
font32->lfOutPrecision = font16->lfOutPrecision;
180+
font32->lfClipPrecision = font16->lfClipPrecision;
181+
font32->lfQuality = font16;
182+
font32->lfPitchAndFamily = font16->lfPitchAndFamily;
183+
memcpy(font32->lfFaceName, font16->lfFaceName, LF_FACESIZE);
184+
font32->lfFaceName[LF_FACESIZE - 1] = 0;
185+
}
186+
170187
LRESULT WINAPI SendIMEMessageEx16(
171188
_In_ HWND16 hwnd,
172189
_In_ LPARAM lParam
@@ -187,15 +204,6 @@ LRESULT WINAPI SendIMEMessageEx16(
187204
lpime32->lParam1 = lpime->lParam1;
188205
lpime32->lParam2 = lpime->lParam2;
189206
lpime32->lParam3 = lpime->lParam3;
190-
/* PBRUSH.EXE(windows 3.1, JP) calls 0x12*/
191-
if (lpime->fnc == 0x12/*IME_SETCONVERSIONFONT?*/)
192-
{
193-
lpime32->fnc = IME_SETCONVERSIONFONTEX;
194-
}
195-
//const char *a = GlobalLock16(lpime->lParam1);
196-
//const char *b = GlobalLock16(lpime->lParam2);
197-
//GlobalUnlock16(lpime->lParam1);
198-
//GlobalUnlock16(lpime->lParam2);
199207
switch (lpime32->fnc)
200208
{
201209
case IME_SETCONVERSIONWINDOW:
@@ -238,22 +246,34 @@ LRESULT WINAPI SendIMEMessageEx16(
238246
case IME_GETCONVERSIONMODE:
239247
TRACE("IME_GETCONVERSIONMODE\n");
240248
break;
249+
case 0x12:
241250
case IME_SETCONVERSIONFONTEX:
242251
{
243-
TRACE("IME_SETCONVERSIONFONTEX\n");
244-
245-
HFONT hFont32 = HFONT_32(lpime->wParam);
246252
LPLOGFONTA lplogfont = &lfont;
247-
if (!hFont32 || !GetObjectA(hFont32, sizeof(LOGFONTA), lplogfont))
253+
TRACE("IME_SETCONVERSIONFONTEX %d\n", lpime32->fnc);
254+
255+
if (lpime32->fnc == 0x12)
248256
{
249-
ret = 0;
250-
goto done;
257+
HFONT hFont32 = HFONT_32(lpime->wParam);
258+
if (!hFont32 || !GetObjectA(hFont32, sizeof(LOGFONTA), lplogfont))
259+
{
260+
ret = 0;
261+
goto done;
262+
}
251263
}
252-
lpime32->wParam = 0;
253-
/*lpime32->wParam = lpime32->wCount = lpime32->dchSource = lpime32->dchDest = */lpime32->lParam1 = /*lpime32->lParam2 = lpime32->lParam3 = */lplogfont;
264+
else if (lpime32->fnc == IME_SETCONVERSIONFONTEX)
265+
{
266+
LPLOGFONT16 l16 = (LPLOGFONT16)GlobalLock16(lpime32->lParam1);
267+
logfont_16_to_A(l16, &lfont);
268+
}
269+
lpime32->lParam1 = lplogfont;
254270
HIMC himc = ImmGetContext(hwnd32);
255271
//IME_SETCONVERSIONFONTEX doesnt work well
256272
ImmSetCompositionFontA(himc, lplogfont);
273+
if (lpime32->fnc == IME_SETCONVERSIONFONTEX)
274+
{
275+
GlobalUnlock16(lpime32->lParam1);
276+
}
257277
}
258278
break;
259279
case IME_SETCONVERSIONMODE:
@@ -271,9 +291,11 @@ LRESULT WINAPI SendIMEMessageEx16(
271291
case IME_GETVERSION:
272292
TRACE("IME_GETVERSION\n");
273293
break;
294+
/*
274295
case IME_SET_MODE:
275296
TRACE("IME_SET_MODE\n");
276297
break;
298+
*/
277299
case IME_GETIMECAPS:
278300
TRACE("IME_GETIMECAPS\n");
279301
break;

0 commit comments

Comments
 (0)