Commit 15f6786b authored by Eric Pouech's avatar Eric Pouech Committed by Alexandre Julliard

winhelp: Added support for font scaling when using RichEdit.

parent c3b022ce
...@@ -79,3 +79,26 @@ STID_HELP_FILES_HLP, "Help files (*.hlp)" ...@@ -79,3 +79,26 @@ STID_HELP_FILES_HLP, "Help files (*.hlp)"
STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yourself?" STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yourself?"
STID_NO_RICHEDIT "Cannot find a richedit implementation... Aborting" STID_NO_RICHEDIT "Cannot find a richedit implementation... Aborting"
} }
CONTEXT_MENU MENU LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
BEGIN
POPUP ""
BEGIN
MENUITEM "Annotation...", MNID_CTXT_ANNOTATE
MENUITEM "Copy", MNID_CTXT_COPY
MENUITEM "Print...", MNID_CTXT_PRINT
POPUP "Fonts"
BEGIN
MENUITEM "Small", MNID_CTXT_FONTS_SMALL
MENUITEM "Normal", MNID_CTXT_FONTS_NORMAL
MENUITEM "Large", MNID_CTXT_FONTS_LARGE
END
POPUP "Help always visible"
BEGIN
MENUITEM "Default", MNID_CTXT_HELP_DEFAULT
MENUITEM "Visible", MNID_CTXT_HELP_VISIBLE
MENUITEM "Non visible", MNID_CTXT_HELP_NONVISIBLE
END
MENUITEM "Use system colors", MNID_CTXT_SYSTEM_COLORS
END
END
...@@ -82,3 +82,26 @@ STID_HELP_FILES_HLP, "Fichiers d'aide (*.hlp)" ...@@ -82,3 +82,26 @@ STID_HELP_FILES_HLP, "Fichiers d'aide (*.hlp)"
STID_FILE_NOT_FOUND_s "Impossible de trouver %s. Souhaitez-vous rechercher ce fichier vous-mme?" STID_FILE_NOT_FOUND_s "Impossible de trouver %s. Souhaitez-vous rechercher ce fichier vous-mme?"
STID_NO_RICHEDIT "La bibliothque RichEdit n'a pu tre localise... Abandon" STID_NO_RICHEDIT "La bibliothque RichEdit n'a pu tre localise... Abandon"
} }
CONTEXT_MENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "Annotation...", MNID_CTXT_ANNOTATE
MENUITEM "Copier", MNID_CTXT_COPY
MENUITEM "Imprimer la rubrique...", MNID_CTXT_PRINT
POPUP "Polices"
BEGIN
MENUITEM "Petite", MNID_CTXT_FONTS_SMALL
MENUITEM "Normale", MNID_CTXT_FONTS_NORMAL
MENUITEM "Grande", MNID_CTXT_FONTS_LARGE
END
POPUP "Aide toujours visible"
BEGIN
MENUITEM "Par dfaut", MNID_CTXT_HELP_DEFAULT
MENUITEM "Visible", MNID_CTXT_HELP_VISIBLE
MENUITEM "Non visible", MNID_CTXT_HELP_NONVISIBLE
END
MENUITEM "Utiliser les couleurs systme", MNID_CTXT_SYSTEM_COLORS
END
END
...@@ -1289,7 +1289,13 @@ static BOOL HLPFILE_BrowseParagraph(HLPFILE_PAGE* page, struct RtfData* rd, BYTE ...@@ -1289,7 +1289,13 @@ static BOOL HLPFILE_BrowseParagraph(HLPFILE_PAGE* page, struct RtfData* rd, BYTE
WINE_TRACE("Changing font to %d\n", font); WINE_TRACE("Changing font to %d\n", font);
format += 3; format += 3;
fs = (4 * page->file->fonts[font].LogFont.lfHeight - 3) / 5; switch (rd->font_scale)
{
case 0: fs = (4 * page->file->fonts[font].LogFont.lfHeight - 13) / 5; break;
default:
case 1: fs = (4 * page->file->fonts[font].LogFont.lfHeight - 3) / 5; break;
case 2: fs = (4 * page->file->fonts[font].LogFont.lfHeight + 17) / 5; break;
}
/* FIXME: missing at least colors, also bold attribute looses information */ /* FIXME: missing at least colors, also bold attribute looses information */
sprintf(tmp, "\\f%d\\cf%d\\fs%d%s%s%s%s", sprintf(tmp, "\\f%d\\cf%d\\fs%d%s%s%s%s",
...@@ -1499,7 +1505,7 @@ done: ...@@ -1499,7 +1505,7 @@ done:
* HLPFILE_BrowsePage * HLPFILE_BrowsePage
* *
*/ */
BOOL HLPFILE_BrowsePage(HLPFILE_PAGE* page, struct RtfData* rd) BOOL HLPFILE_BrowsePage(HLPFILE_PAGE* page, struct RtfData* rd, unsigned font_scale)
{ {
HLPFILE *hlpfile = page->file; HLPFILE *hlpfile = page->file;
BYTE *buf, *end; BYTE *buf, *end;
...@@ -1513,6 +1519,7 @@ BOOL HLPFILE_BrowsePage(HLPFILE_PAGE* page, struct RtfData* rd) ...@@ -1513,6 +1519,7 @@ BOOL HLPFILE_BrowsePage(HLPFILE_PAGE* page, struct RtfData* rd)
rd->char_pos = 0; rd->char_pos = 0;
rd->first_link = rd->current_link = NULL; rd->first_link = rd->current_link = NULL;
rd->force_color = FALSE; rd->force_color = FALSE;
rd->font_scale = font_scale;
switch (hlpfile->charset) switch (hlpfile->charset)
{ {
......
...@@ -180,9 +180,10 @@ struct RtfData { ...@@ -180,9 +180,10 @@ struct RtfData {
unsigned allocated; /* overall allocated size */ unsigned allocated; /* overall allocated size */
unsigned char_pos; /* current char position (in richedit) */ unsigned char_pos; /* current char position (in richedit) */
char* where; /* pointer to feed back richedit */ char* where; /* pointer to feed back richedit */
unsigned font_scale; /* how to scale fonts */
HLPFILE_LINK*first_link; HLPFILE_LINK*first_link;
HLPFILE_LINK*current_link; HLPFILE_LINK*current_link;
BOOL force_color; BOOL force_color;
}; };
BOOL HLPFILE_BrowsePage(HLPFILE_PAGE*, struct RtfData* rd); BOOL HLPFILE_BrowsePage(HLPFILE_PAGE*, struct RtfData* rd, unsigned font_scale);
...@@ -591,6 +591,7 @@ BOOL WINHELP_CreateHelpWindow(WINHELP_WNDPAGE* wpage, int nCmdShow, BOOL remembe ...@@ -591,6 +591,7 @@ BOOL WINHELP_CreateHelpWindow(WINHELP_WNDPAGE* wpage, int nCmdShow, BOOL remembe
win->lpszName = name; win->lpszName = name;
win->hHandCur = LoadCursorW(0, (LPWSTR)IDC_HAND); win->hHandCur = LoadCursorW(0, (LPWSTR)IDC_HAND);
win->back.index = 0; win->back.index = 0;
win->font_scale = 1;
} }
win->page = wpage->page; win->page = wpage->page;
win->info = wpage->wininfo; win->info = wpage->wininfo;
...@@ -665,6 +666,7 @@ BOOL WINHELP_CreateHelpWindow(WINHELP_WNDPAGE* wpage, int nCmdShow, BOOL remembe ...@@ -665,6 +666,7 @@ BOOL WINHELP_CreateHelpWindow(WINHELP_WNDPAGE* wpage, int nCmdShow, BOOL remembe
DWORD mask = SendMessage(hTextWnd, EM_GETEVENTMASK, 0, 0); DWORD mask = SendMessage(hTextWnd, EM_GETEVENTMASK, 0, 0);
RECT rect; RECT rect;
win->font_scale = Globals.active_win->font_scale;
WINHELP_SetupText(hTextWnd, win, wpage->relative); WINHELP_SetupText(hTextWnd, win, wpage->relative);
/* we need the window to be shown for richedit to compute the size */ /* we need the window to be shown for richedit to compute the size */
...@@ -862,6 +864,40 @@ static LRESULT CALLBACK WINHELP_MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, ...@@ -862,6 +864,40 @@ static LRESULT CALLBACK WINHELP_MainWndProc(HWND hWnd, UINT msg, WPARAM wParam,
case MNID_HELP_ABOUT: MACRO_About(); break; case MNID_HELP_ABOUT: MACRO_About(); break;
case MNID_HELP_WINE: ShellAbout(hWnd, "WINE", "Help", 0); break; case MNID_HELP_WINE: ShellAbout(hWnd, "WINE", "Help", 0); break;
/* Context help */
case MNID_CTXT_ANNOTATE:MACRO_Annotate(); break;
case MNID_CTXT_COPY: MACRO_CopyDialog(); break;
case MNID_CTXT_PRINT: MACRO_Print(); break;
case MNID_CTXT_FONTS_SMALL:
win = (WINHELP_WINDOW*) GetWindowLongPtr(hWnd, 0);
if (win->font_scale != 0)
{
win->font_scale = 0;
WINHELP_SetupText(GetDlgItem(hWnd, CTL_ID_TEXT), win, 0 /* FIXME */);
}
break;
case MNID_CTXT_FONTS_NORMAL:
win = (WINHELP_WINDOW*) GetWindowLong(hWnd, 0);
if (win->font_scale != 1)
{
win->font_scale = 1;
WINHELP_SetupText(GetDlgItem(hWnd, CTL_ID_TEXT), win, 0 /* FIXME */);
}
break;
case MNID_CTXT_FONTS_LARGE:
win = (WINHELP_WINDOW*) GetWindowLong(hWnd, 0);
if (win->font_scale != 2)
{
win->font_scale = 2;
WINHELP_SetupText(GetDlgItem(hWnd, CTL_ID_TEXT), win, 0 /* FIXME */);
}
break;
case MNID_CTXT_HELP_DEFAULT:
case MNID_CTXT_HELP_VISIBLE:
case MNID_CTXT_HELP_NONVISIBLE:
case MNID_CTXT_SYSTEM_COLORS:
/* FIXME: NIY */
default: default:
/* Buttons */ /* Buttons */
for (button = win->first_button; button; button = button->next) for (button = win->first_button; button; button = button->next)
...@@ -934,8 +970,47 @@ static LRESULT CALLBACK WINHELP_MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, ...@@ -934,8 +970,47 @@ static LRESULT CALLBACK WINHELP_MainWndProc(HWND hWnd, UINT msg, WPARAM wParam,
case EN_MSGFILTER: case EN_MSGFILTER:
{ {
const MSGFILTER* msgf = (const MSGFILTER*)lParam; const MSGFILTER* msgf = (const MSGFILTER*)lParam;
return WINHELP_HandleTextMouse((WINHELP_WINDOW*)GetWindowLong(hWnd, 0), switch (msgf->msg)
msgf->msg, msgf->lParam); {
case WM_KEYUP:
if (msgf->wParam == VK_ESCAPE) DestroyWindow(hWnd);
break;
case WM_RBUTTONDOWN:
{
HMENU hMenu;
POINT pt;
win = (WINHELP_WINDOW*) GetWindowLong(hWnd, 0);
hMenu = LoadMenu(Globals.hInstance, (LPSTR)CONTEXT_MENU);
switch (win->font_scale)
{
case 0:
CheckMenuItem(hMenu, MNID_CTXT_FONTS_SMALL,
MF_BYCOMMAND|MF_CHECKED);
break;
default:
WINE_FIXME("Unsupported %d\n", win->font_scale);
case 1:
CheckMenuItem(hMenu, MNID_CTXT_FONTS_NORMAL,
MF_BYCOMMAND|MF_CHECKED);
break;
case 2:
CheckMenuItem(hMenu, MNID_CTXT_FONTS_LARGE,
MF_BYCOMMAND|MF_CHECKED);
break;
}
pt.x = (int)(short)LOWORD(msgf->lParam);
pt.y = (int)(short)HIWORD(msgf->lParam);
ClientToScreen(hWnd, &pt);
TrackPopupMenu(GetSubMenu(hMenu, 0), TPM_LEFTALIGN|TPM_TOPALIGN,
pt.x, pt.y, 0, hWnd, NULL);
DestroyMenu(hMenu);
}
break;
default:
return WINHELP_HandleTextMouse((WINHELP_WINDOW*)GetWindowLongPtr(hWnd, 0),
msgf->msg, msgf->lParam);
}
} }
break; break;
...@@ -994,7 +1069,7 @@ static void WINHELP_SetupText(HWND hTextWnd, WINHELP_WINDOW* win, ULONG relative ...@@ -994,7 +1069,7 @@ static void WINHELP_SetupText(HWND hTextWnd, WINHELP_WINDOW* win, ULONG relative
struct RtfData rd; struct RtfData rd;
EDITSTREAM es; EDITSTREAM es;
if (HLPFILE_BrowsePage(win->page, &rd)) if (HLPFILE_BrowsePage(win->page, &rd, win->font_scale))
{ {
rd.where = rd.data; rd.where = rd.data;
es.dwCookie = (DWORD_PTR)&rd; es.dwCookie = (DWORD_PTR)&rd;
......
...@@ -91,6 +91,7 @@ typedef struct tagWinHelp ...@@ -91,6 +91,7 @@ typedef struct tagWinHelp
HLPFILE_LINK* current_link; HLPFILE_LINK* current_link;
WINHELP_PAGESET back; WINHELP_PAGESET back;
unsigned font_scale; /* 0 = small, 1 = normal, 2 = large */
struct tagWinHelp* next; struct tagWinHelp* next;
} WINHELP_WINDOW; } WINHELP_WINDOW;
......
...@@ -13,7 +13,19 @@ ...@@ -13,7 +13,19 @@
#define MNID_HELP_ABOUT 0x141 #define MNID_HELP_ABOUT 0x141
#define MNID_HELP_WINE 0x142 #define MNID_HELP_WINE 0x142
#define MAIN_MENU 0x10F #define MNID_CTXT_ANNOTATE 0x200
#define MNID_CTXT_COPY 0x201
#define MNID_CTXT_PRINT 0x202
#define MNID_CTXT_FONTS_SMALL 0x210
#define MNID_CTXT_FONTS_NORMAL 0x211
#define MNID_CTXT_FONTS_LARGE 0x212
#define MNID_CTXT_HELP_DEFAULT 0x220
#define MNID_CTXT_HELP_VISIBLE 0x221
#define MNID_CTXT_HELP_NONVISIBLE 0x222
#define MNID_CTXT_SYSTEM_COLORS 0x230
#define MAIN_MENU 0xF000
#define CONTEXT_MENU 0xF001
#define STID_WINE_HELP 0x120 #define STID_WINE_HELP 0x120
#define STID_WHERROR 0x121 #define STID_WHERROR 0x121
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment