Dylan Smith : wordpad: Use pages_shown variables to indicate pages shown.

Alexandre Julliard julliard at winehq.org
Mon Feb 22 08:46:51 CST 2010


Module: wine
Branch: master
Commit: a75bf390d70e9b0667c1dd6ea6f7b2c792f600eb
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=a75bf390d70e9b0667c1dd6ea6f7b2c792f600eb

Author: Dylan Smith <dylan.ah.smith at gmail.com>
Date:   Mon Feb 22 03:18:11 2010 -0500

wordpad: Use pages_shown variables to indicate pages shown.

Previously hdc2 needed to be deleted and set to NULL to indicate that only
one page should be shown. I have avoided this using a new variable for
the preview structure.

The device context were also being deleted without deleting the bitmaps
created for them and selected into them, so this patch also gets these
bitmaps and deletes them with their device context.

---

 programs/wordpad/print.c |   72 +++++++++++++++++++++-------------------------
 1 files changed, 33 insertions(+), 39 deletions(-)

diff --git a/programs/wordpad/print.c b/programs/wordpad/print.c
index faf9439..45c112e 100644
--- a/programs/wordpad/print.c
+++ b/programs/wordpad/print.c
@@ -28,6 +28,7 @@ typedef struct _previewinfo
 {
     int page;
     int pages;
+    int pages_shown;
     int *pageEnds, pageCapacity;
     HDC hdc;
     HDC hdc2;
@@ -519,10 +520,8 @@ static void update_preview_scrollbars(HWND hwndPreview, RECT *window)
         sbi.nPage = window->bottom;
         SetScrollInfo(hwndPreview, SB_VERT, &sbi, TRUE);
     } else {
-        if (!preview.hdc2)
-            sbi.nMax = preview.bmScaledSize.cx + min_spacing * 2;
-        else
-            sbi.nMax = preview.bmScaledSize.cx * 2 + min_spacing * 3;
+        sbi.nMax = preview.bmScaledSize.cx * preview.pages_shown +
+                   min_spacing * (preview.pages_shown + 1);
         sbi.nPage = window->right;
         SetScrollInfo(hwndPreview, SB_HORZ, &sbi, TRUE);
         /* Change in the horizontal scrollbar visibility affects the
@@ -550,10 +549,9 @@ static void update_preview_sizes(HWND hwndPreview, BOOL zoomLevelUpdated)
         } else {
             ratioHeight = (window.bottom - min_spacing * 2) / (float)preview.bmSize.cy;
 
-            if(preview.hdc2)
-                ratioWidth = ((window.right - min_spacing * 3) / 2.0) / (float)preview.bmSize.cx;
-            else
-                ratioWidth = (window.right - min_spacing * 2) / (float)preview.bmSize.cx;
+            ratioWidth = (float)(window.right -
+                                 min_spacing * (preview.pages_shown + 1)) /
+                         (preview.pages_shown * preview.bmSize.cx);
 
             if(ratioWidth > ratioHeight)
                 ratio = ratioHeight;
@@ -571,10 +569,9 @@ static void update_preview_sizes(HWND hwndPreview, BOOL zoomLevelUpdated)
 
     preview.spacing.cy = max(min_spacing, (window.bottom - preview.bmScaledSize.cy) / 2);
 
-    if(!preview.hdc2)
-        preview.spacing.cx = (window.right - preview.bmScaledSize.cx) / 2;
-    else
-        preview.spacing.cx = (window.right - preview.bmScaledSize.cx * 2) / 3;
+    preview.spacing.cx = (window.right -
+                          preview.bmScaledSize.cx * preview.pages_shown) /
+                         (preview.pages_shown + 1);
     if (preview.spacing.cx < min_spacing)
         preview.spacing.cx = min_spacing;
 
@@ -702,6 +699,7 @@ void init_preview(HWND hMainWnd, LPWSTR wszFileName)
     preview.zoomratio = 0;
     preview.zoomlevel = 0;
     preview_bar_show(hMainWnd, TRUE);
+    if (preview.pages_shown < 1) preview.pages_shown = 1;
 
     hwndPreview = CreateWindowExW(0, wszPreviewWndClass, NULL,
             WS_VISIBLE | WS_CHILD | WS_VSCROLL | WS_HSCROLL,
@@ -919,9 +917,8 @@ static void update_preview_buttons(HWND hMainWnd)
 {
     HWND hReBar = GetDlgItem(hMainWnd, IDC_REBAR);
     EnableWindow(GetDlgItem(hReBar, ID_PREVIEW_PREVPAGE), preview.page > 1);
-    EnableWindow(GetDlgItem(hReBar, ID_PREVIEW_NEXTPAGE), preview.hdc2 ?
-                                                          (preview.page + 1) < preview.pages :
-                                                          preview.page < preview.pages);
+    EnableWindow(GetDlgItem(hReBar, ID_PREVIEW_NEXTPAGE),
+                 preview.page + preview.pages_shown - 1 < preview.pages);
     EnableWindow(GetDlgItem(hReBar, ID_PREVIEW_NUMPAGES), preview.pages > 1 && preview.zoomlevel == 0);
     EnableWindow(GetDlgItem(hReBar, ID_PREVIEW_ZOOMIN), preview.zoomlevel < 2);
     EnableWindow(GetDlgItem(hReBar, ID_PREVIEW_ZOOMOUT), preview.zoomlevel > 0);
@@ -953,15 +950,6 @@ LRESULT print_preview(HWND hwndPreview)
         HWND hEditorWnd = GetDlgItem(hMainWnd, IDC_EDITOR);
         HBITMAP hBitmapCapture;
 
-        preview.hdc = CreateCompatibleDC(hdc);
-
-        if(preview.hdc2)
-        {
-            if(preview.hdc2 != (HDC)-1)
-                DeleteDC(preview.hdc2);
-            preview.hdc2 = CreateCompatibleDC(hdc);
-        }
-
         gt.flags = GTL_DEFAULT;
         gt.codepage = 1200;
         fr.chrg.cpMin = 0;
@@ -972,16 +960,23 @@ LRESULT print_preview(HWND hwndPreview)
         paper.top = 0;
         paper.bottom = preview.bmSize.cy;
 
-        fr.hdc = preview.hdc;
+        fr.hdc = preview.hdc = CreateCompatibleDC(hdc);
         hBitmapCapture = CreateCompatibleBitmap(hdc, preview.bmSize.cx, preview.bmSize.cy);
         SelectObject(fr.hdc, hBitmapCapture);
         draw_preview(hEditorWnd, &fr, &paper, preview.page);
 
-        if(preview.hdc2)
+        if(preview.pages_shown > 1)
         {
+            if (!preview.hdc2)
+            {
+                preview.hdc2 = CreateCompatibleDC(hdc);
+                hBitmapCapture = CreateCompatibleBitmap(hdc,
+                                                        preview.bmSize.cx,
+                                                        preview.bmSize.cy);
+                SelectObject(preview.hdc2, hBitmapCapture);
+            }
+
             fr.hdc = preview.hdc2;
-            hBitmapCapture = CreateCompatibleBitmap(hdc, preview.bmSize.cx, preview.bmSize.cy);
-            SelectObject(fr.hdc, hBitmapCapture);
             draw_preview(hEditorWnd, &fr, &fr.rcPage, preview.page + 1);
         }
 
@@ -1000,7 +995,7 @@ LRESULT print_preview(HWND hwndPreview)
 
     FillRect(hdc, &background, GetStockObject(BLACK_BRUSH));
 
-    if(preview.hdc2)
+    if(preview.pages_shown > 1)
     {
         background.left += preview.bmScaledSize.cx + preview.spacing.cx;
         background.right += preview.bmScaledSize.cx + preview.spacing.cx;
@@ -1014,7 +1009,7 @@ LRESULT print_preview(HWND hwndPreview)
                           preview.bmScaledSize.cx, preview.bmScaledSize.cy,
                           preview.bmSize.cx, preview.bmSize.cy);
 
-        if(preview.hdc2)
+        if(preview.pages_shown > 1)
         {
             draw_preview_page(preview.hdc2, &preview.hdcSized2, &fr, preview.zoomratio,
                               preview.bmScaledSize.cx, preview.bmScaledSize.cy,
@@ -1026,7 +1021,7 @@ LRESULT print_preview(HWND hwndPreview)
            preview.bmScaledSize.cx, preview.bmScaledSize.cy,
            preview.hdcSized, 0, 0, SRCCOPY);
 
-    if(preview.hdc2)
+    if(preview.pages_shown > 1)
     {
         BitBlt(hdc, preview.spacing.cx * 2 + preview.bmScaledSize.cx - scrollpos.x,
                preview.spacing.cy - scrollpos.y, preview.bmScaledSize.cx,
@@ -1056,18 +1051,17 @@ static void toggle_num_pages(HWND hMainWnd)
     WCHAR name[MAX_STRING_LEN];
     HINSTANCE hInst = GetModuleHandleW(0);
 
-    if(preview.hdc2)
-    {
-        DeleteDC(preview.hdc2);
-        preview.hdc2 = 0;
-    } else
+    if(preview.pages_shown > 1)
     {
+        preview.pages_shown = 1;
+    } else {
         if(preview.page == preview.pages)
             preview.page--;
-        preview.hdc2 = (HDC)-1;
+        preview.pages_shown = 2;
     }
 
-    LoadStringW(hInst, preview.hdc2 ? STRING_PREVIEW_ONEPAGE : STRING_PREVIEW_TWOPAGES,
+    LoadStringW(hInst, preview.pages_shown > 1 ? STRING_PREVIEW_ONEPAGE :
+                                                 STRING_PREVIEW_TWOPAGES,
                 name, MAX_STRING_LEN);
 
     SetWindowTextW(GetDlgItem(hReBar, ID_PREVIEW_NUMPAGES), name);
@@ -1104,7 +1098,7 @@ LRESULT preview_command(HWND hWnd, WPARAM wParam)
             {
                 preview.zoomlevel++;
                 preview.zoomratio = 0;
-                if (preview.hdc2)
+                if (preview.pages_shown > 1)
                 {
                     /* Forced switch to one page when zooming in. */
                     toggle_num_pages(hWnd);




More information about the wine-cvs mailing list