mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 17:34:57 +00:00
apply missing part of wordpad manual winesync
svn path=/trunk/; revision=32037
This commit is contained in:
parent
c0808d2c1c
commit
848daa0d10
1 changed files with 165 additions and 5 deletions
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* Wordpad implementation - Printing and print preview functions
|
* Wordpad implementation - Printing and print preview functions
|
||||||
*
|
*
|
||||||
* Copyright 2007 by Alexander N. Sørnes <alex@thehandofagony.com>
|
* Copyright 2007-2008 by Alexander N. Sørnes <alex@thehandofagony.com>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -130,23 +130,23 @@ static HDC make_dc(void)
|
||||||
|
|
||||||
static LONG twips_to_centmm(int twips)
|
static LONG twips_to_centmm(int twips)
|
||||||
{
|
{
|
||||||
return MulDiv(twips, 1000, 567);
|
return MulDiv(twips, 1000, TWIPS_PER_CM);
|
||||||
}
|
}
|
||||||
|
|
||||||
LONG centmm_to_twips(int mm)
|
LONG centmm_to_twips(int mm)
|
||||||
{
|
{
|
||||||
return MulDiv(mm, 567, 1000);
|
return MulDiv(mm, TWIPS_PER_CM, 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
static LONG twips_to_pixels(int twips, int dpi)
|
static LONG twips_to_pixels(int twips, int dpi)
|
||||||
{
|
{
|
||||||
float ret = ((float)twips / ((float)567 * 2.54)) * (float)dpi;
|
float ret = ((float)twips / ((float)TWIPS_PER_CM * 2.54)) * (float)dpi;
|
||||||
return (LONG)ret;
|
return (LONG)ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static LONG devunits_to_twips(int units, int dpi)
|
static LONG devunits_to_twips(int units, int dpi)
|
||||||
{
|
{
|
||||||
float ret = ((float)units / (float)dpi) * (float)567 * 2.54;
|
float ret = ((float)units / (float)dpi) * (float)TWIPS_PER_CM * 2.54;
|
||||||
return (LONG)ret;
|
return (LONG)ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -254,6 +254,25 @@ static void char_from_pagenum(HWND hEditorWnd, FORMATRANGE *fr, int page)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HWND get_ruler_wnd(HWND hMainWnd)
|
||||||
|
{
|
||||||
|
return GetDlgItem(GetDlgItem(hMainWnd, IDC_REBAR), IDC_RULER);
|
||||||
|
}
|
||||||
|
|
||||||
|
void redraw_ruler(HWND hRulerWnd)
|
||||||
|
{
|
||||||
|
RECT rc;
|
||||||
|
|
||||||
|
GetClientRect(hRulerWnd, &rc);
|
||||||
|
InvalidateRect(hRulerWnd, &rc, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void update_ruler(HWND hRulerWnd)
|
||||||
|
{
|
||||||
|
SendMessageW(hRulerWnd, WM_USER, 0, 0);
|
||||||
|
redraw_ruler(hRulerWnd);
|
||||||
|
}
|
||||||
|
|
||||||
static void print(LPPRINTDLGW pd, LPWSTR wszFileName)
|
static void print(LPPRINTDLGW pd, LPWSTR wszFileName)
|
||||||
{
|
{
|
||||||
FORMATRANGE fr;
|
FORMATRANGE fr;
|
||||||
|
@ -340,6 +359,7 @@ void dialog_printsetup(HWND hMainWnd)
|
||||||
margins.bottom = centmm_to_twips(ps.rtMargin.bottom);
|
margins.bottom = centmm_to_twips(ps.rtMargin.bottom);
|
||||||
devMode = ps.hDevMode;
|
devMode = ps.hDevMode;
|
||||||
devNames = ps.hDevNames;
|
devNames = ps.hDevNames;
|
||||||
|
update_ruler(get_ruler_wnd(hMainWnd));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -394,6 +414,7 @@ void dialog_print(HWND hMainWnd, LPWSTR wszFileName)
|
||||||
devMode = pd.hDevMode;
|
devMode = pd.hDevMode;
|
||||||
devNames = pd.hDevNames;
|
devNames = pd.hDevNames;
|
||||||
print(&pd, wszFileName);
|
print(&pd, wszFileName);
|
||||||
|
update_ruler(get_ruler_wnd(hMainWnd));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -456,6 +477,145 @@ BOOL preview_isactive(void)
|
||||||
return preview.page != 0;
|
return preview.page != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void add_ruler_units(HDC hdcRuler, RECT* drawRect, BOOL NewMetrics, long EditLeftmost)
|
||||||
|
{
|
||||||
|
static HDC hdc;
|
||||||
|
|
||||||
|
if(NewMetrics)
|
||||||
|
{
|
||||||
|
static HBITMAP hBitmap;
|
||||||
|
int i, x, y, RulerTextEnd;
|
||||||
|
int CmPixels;
|
||||||
|
int QuarterCmPixels;
|
||||||
|
HFONT hFont;
|
||||||
|
WCHAR FontName[] = {'M','S',' ','S','a','n','s',' ','S','e','r','i','f',0};
|
||||||
|
|
||||||
|
if(hdc)
|
||||||
|
{
|
||||||
|
DeleteDC(hdc);
|
||||||
|
DeleteObject(hBitmap);
|
||||||
|
}
|
||||||
|
|
||||||
|
hdc = CreateCompatibleDC(hdc);
|
||||||
|
|
||||||
|
CmPixels = twips_to_pixels(TWIPS_PER_CM, GetDeviceCaps(hdc, LOGPIXELSX));
|
||||||
|
QuarterCmPixels = (int)((float)CmPixels / 4.0);
|
||||||
|
|
||||||
|
hBitmap = CreateCompatibleBitmap(hdc, drawRect->right, drawRect->bottom);
|
||||||
|
SelectObject(hdc, hBitmap);
|
||||||
|
FillRect(hdc, drawRect, GetStockObject(WHITE_BRUSH));
|
||||||
|
|
||||||
|
hFont = CreateFontW(10, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, FontName);
|
||||||
|
|
||||||
|
SelectObject(hdc, hFont);
|
||||||
|
SetBkMode(hdc, TRANSPARENT);
|
||||||
|
SetTextAlign(hdc, TA_CENTER);
|
||||||
|
y = (int)(((float)drawRect->bottom - (float)drawRect->top) / 2.0) + 1;
|
||||||
|
RulerTextEnd = drawRect->right - EditLeftmost + 1;
|
||||||
|
for(i = 1, x = EditLeftmost; x < (drawRect->right - EditLeftmost + 1); i ++)
|
||||||
|
{
|
||||||
|
WCHAR str[3];
|
||||||
|
WCHAR format[] = {'%','d',0};
|
||||||
|
int x2 = x;
|
||||||
|
|
||||||
|
x2 += QuarterCmPixels;
|
||||||
|
if(x2 > RulerTextEnd)
|
||||||
|
break;
|
||||||
|
|
||||||
|
MoveToEx(hdc, x2, y, NULL);
|
||||||
|
LineTo(hdc, x2, y+2);
|
||||||
|
|
||||||
|
x2 += QuarterCmPixels;
|
||||||
|
if(x2 > RulerTextEnd)
|
||||||
|
break;
|
||||||
|
|
||||||
|
MoveToEx(hdc, x2, y - 3, NULL);
|
||||||
|
LineTo(hdc, x2, y + 3);
|
||||||
|
|
||||||
|
x2 += QuarterCmPixels;
|
||||||
|
if(x2 > RulerTextEnd)
|
||||||
|
break;
|
||||||
|
|
||||||
|
MoveToEx(hdc, x2, y, NULL);
|
||||||
|
LineTo(hdc, x2, y+2);
|
||||||
|
|
||||||
|
x += CmPixels;
|
||||||
|
if(x > RulerTextEnd)
|
||||||
|
break;
|
||||||
|
|
||||||
|
wsprintfW(str, format, i);
|
||||||
|
TextOutW(hdc, x, 5, str, lstrlenW(str));
|
||||||
|
}
|
||||||
|
DeleteObject(hFont);
|
||||||
|
}
|
||||||
|
|
||||||
|
BitBlt(hdcRuler, 0, 0, drawRect->right, drawRect->bottom, hdc, 0, 0, SRCAND);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void paint_ruler(HWND hWnd, long EditLeftmost, BOOL NewMetrics)
|
||||||
|
{
|
||||||
|
PAINTSTRUCT ps;
|
||||||
|
HDC hdc = BeginPaint(hWnd, &ps);
|
||||||
|
HDC hdcPrint = make_dc();
|
||||||
|
RECT printRect = get_print_rect(hdcPrint);
|
||||||
|
RECT drawRect;
|
||||||
|
HBRUSH hBrush = CreateSolidBrush(GetSysColor(COLOR_MENU));
|
||||||
|
|
||||||
|
GetClientRect(hWnd, &drawRect);
|
||||||
|
FillRect(hdc, &drawRect, hBrush);
|
||||||
|
|
||||||
|
drawRect.top += 3;
|
||||||
|
drawRect.bottom -= 3;
|
||||||
|
drawRect.left = EditLeftmost;
|
||||||
|
drawRect.right = twips_to_pixels(printRect.right - margins.left, GetDeviceCaps(hdc, LOGPIXELSX));
|
||||||
|
FillRect(hdc, &drawRect, GetStockObject(WHITE_BRUSH));
|
||||||
|
|
||||||
|
drawRect.top--;
|
||||||
|
drawRect.bottom++;
|
||||||
|
DrawEdge(hdc, &drawRect, EDGE_SUNKEN, BF_RECT);
|
||||||
|
|
||||||
|
drawRect.left = drawRect.right - 1;
|
||||||
|
drawRect.right = twips_to_pixels(printRect.right + margins.right - margins.left, GetDeviceCaps(hdc, LOGPIXELSX));
|
||||||
|
DrawEdge(hdc, &drawRect, EDGE_ETCHED, BF_RECT);
|
||||||
|
|
||||||
|
drawRect.left = 0;
|
||||||
|
drawRect.top = 0;
|
||||||
|
add_ruler_units(hdc, &drawRect, NewMetrics, EditLeftmost);
|
||||||
|
|
||||||
|
SelectObject(hdc, GetStockObject(BLACK_BRUSH));
|
||||||
|
DeleteObject(hBrush);
|
||||||
|
DeleteDC(hdcPrint);
|
||||||
|
EndPaint(hWnd, &ps);
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT CALLBACK ruler_proc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
static WNDPROC pPrevRulerProc;
|
||||||
|
static long EditLeftmost;
|
||||||
|
static BOOL NewMetrics;
|
||||||
|
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_USER:
|
||||||
|
if(wParam)
|
||||||
|
{
|
||||||
|
EditLeftmost = ((POINTL*)wParam)->x;
|
||||||
|
pPrevRulerProc = (WNDPROC)lParam;
|
||||||
|
}
|
||||||
|
NewMetrics = TRUE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_PAINT:
|
||||||
|
paint_ruler(hWnd, EditLeftmost, NewMetrics);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return CallWindowProcW(pPrevRulerProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
LRESULT print_preview(HWND hMainWnd)
|
LRESULT print_preview(HWND hMainWnd)
|
||||||
{
|
{
|
||||||
FORMATRANGE fr;
|
FORMATRANGE fr;
|
||||||
|
|
Loading…
Reference in a new issue