Author: spetreolle
Date: Mon Jan 28 20:51:00 2008
New Revision: 32037
URL:
http://svn.reactos.org/svn/reactos?rev=32037&view=rev
Log:
apply missing part of wordpad manual winesync
Modified:
trunk/reactos/base/applications/wordpad/print.c
Modified: trunk/reactos/base/applications/wordpad/print.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/wordpad/…
==============================================================================
--- trunk/reactos/base/applications/wordpad/print.c (original)
+++ trunk/reactos/base/applications/wordpad/print.c Mon Jan 28 20:51:00 2008
@@ -1,7 +1,7 @@
/*
* Wordpad implementation - Printing and print preview functions
*
- * Copyright 2007 by Alexander N. Sørnes <alex(a)thehandofagony.com>
+ * Copyright 2007-2008 by Alexander N. Sørnes <alex(a)thehandofagony.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -130,23 +130,23 @@
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)
{
- return MulDiv(mm, 567, 1000);
+ return MulDiv(mm, TWIPS_PER_CM, 1000);
}
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;
}
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;
}
@@ -252,6 +252,25 @@
fr->chrg.cpMin = SendMessageW(hEditorWnd, EM_FORMATRANGE, TRUE, (LPARAM)fr);
}
+}
+
+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)
@@ -340,6 +359,7 @@
margins.bottom = centmm_to_twips(ps.rtMargin.bottom);
devMode = ps.hDevMode;
devNames = ps.hDevNames;
+ update_ruler(get_ruler_wnd(hMainWnd));
}
}
@@ -394,6 +414,7 @@
devMode = pd.hDevMode;
devNames = pd.hDevNames;
print(&pd, wszFileName);
+ update_ruler(get_ruler_wnd(hMainWnd));
}
}
@@ -454,6 +475,145 @@
BOOL preview_isactive(void)
{
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)