[PATCH 4/7] Minimal rectangle should be zero based

Nikolay Sivov bunglehead at gmail.com
Mon Sep 28 15:12:39 CDT 2009


---
 dlls/comctl32/monthcal.c       |   10 ++++++--
 dlls/comctl32/tests/monthcal.c |   43 +++++++++++++++++++++++++++++----------
 2 files changed, 39 insertions(+), 14 deletions(-)

diff --git a/dlls/comctl32/monthcal.c b/dlls/comctl32/monthcal.c
index 62c8dc8..6f60587 100644
--- a/dlls/comctl32/monthcal.c
+++ b/dlls/comctl32/monthcal.c
@@ -759,12 +759,16 @@ MONTHCAL_GetMinReqRect(const MONTHCAL_INFO *infoPtr, LPRECT lpRect)
 
   if(!lpRect) return FALSE;
 
-  lpRect->left = infoPtr->title.left;
-  lpRect->top = infoPtr->title.top;
-  lpRect->right = infoPtr->title.right;
+  lpRect->left   = infoPtr->title.left;
+  lpRect->top    = infoPtr->title.top;
+  lpRect->right  = infoPtr->title.right;
   lpRect->bottom = infoPtr->todayrect.bottom;
+
   AdjustWindowRect(lpRect, infoPtr->dwStyle, FALSE);
 
+  /* minimal rectangle is zero based */
+  OffsetRect(lpRect, -lpRect->left, -lpRect->top);
+
   TRACE("%s\n", wine_dbgstr_rect(lpRect));
 
   return TRUE;
diff --git a/dlls/comctl32/tests/monthcal.c b/dlls/comctl32/tests/monthcal.c
index 880ff69..b393055 100644
--- a/dlls/comctl32/tests/monthcal.c
+++ b/dlls/comctl32/tests/monthcal.c
@@ -853,17 +853,28 @@ static void test_monthcal_unicode(void)
 
 static void test_monthcal_hittest(void)
 {
+    typedef struct hittest_test
+    {
+	UINT ht;
+        int  todo;
+    } hittest_test_t;
+
+    static const hittest_test_t title_hits[] = {
+        { MCHT_NOWHERE,      0 },
+        { MCHT_TITLEBTNPREV, 0 },
+        { MCHT_TITLEMONTH,   1 },
+        { MCHT_TITLEYEAR,    1 },
+        { MCHT_TITLEBTNNEXT, 0 },
+        { MCHT_NOWHERE,      0 }
+    };
+
     MCHITTESTINFO mchit;
-    UINT res;
+    UINT res, old_res;
     SYSTEMTIME st;
     LONG x;
     UINT title_index;
     HWND hwnd;
     RECT r;
-    static const UINT title_hits[] =
-        { MCHT_NOWHERE, MCHT_TITLEBK, MCHT_TITLEBTNPREV, MCHT_TITLEBK,
-          MCHT_TITLEMONTH, MCHT_TITLEBK, MCHT_TITLEYEAR, MCHT_TITLEBK,
-          MCHT_TITLEBTNNEXT, MCHT_TITLEBK, MCHT_NOWHERE };
 
     memset(&mchit, 0, sizeof(MCHITTESTINFO));
 
@@ -914,7 +925,7 @@ static void test_monthcal_hittest(void)
     expect(0, mchit.pt.x);
     expect(0, mchit.pt.y);
     expect(mchit.uHit, res);
-    todo_wine expect_hex(MCHT_TITLE, res);
+    expect_hex(MCHT_TITLE, res);
 
     /* bottom right of the control and should not be active */
     mchit.pt.x = r.right;
@@ -950,7 +961,7 @@ static void test_monthcal_hittest(void)
     expect(r.right / 14, mchit.pt.x);
     expect(r.bottom / 2, mchit.pt.y);
     expect(mchit.uHit, res);
-    todo_wine expect_hex(MCHT_CALENDARDATE, res);
+    expect_hex(MCHT_CALENDARDATE, res);
 
     /* in active area - date from prev month */
     mchit.pt.x = r.right / 14; /* half of first day rect */
@@ -959,7 +970,7 @@ static void test_monthcal_hittest(void)
     expect(r.right / 14, mchit.pt.x);
     expect(6 * r.bottom / 19, mchit.pt.y);
     expect(mchit.uHit, res);
-    todo_wine expect_hex(MCHT_CALENDARDATEPREV, res);
+    expect_hex(MCHT_CALENDARDATEPREV, res);
 
 #if 0
     /* (125, 115) is in active area - date from this month */
@@ -1040,8 +1051,10 @@ static void test_monthcal_hittest(void)
     /* The horizontal position of title bar elements depends on locale (y pos
        is constant), so we sample across a horizontal line and make sure we
        find all elements. */
+    mchit.pt.x = 0;
     mchit.pt.y = (5/2) * r.bottom / 19;
     title_index = 0;
+    old_res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit);;
 
     for (x = 0; x < r.right; x++){
         mchit.pt.x = x;
@@ -1049,13 +1062,21 @@ static void test_monthcal_hittest(void)
         expect(x, mchit.pt.x);
         expect((5/2) * r.bottom / 19, mchit.pt.y);
         expect(mchit.uHit, res);
-        if (res != title_hits[title_index]){
+
+        if (res != MCHT_TITLEBK && res != old_res) {
             title_index++;
+            old_res = res;
+
             if (sizeof(title_hits) / sizeof(title_hits[0]) <= title_index)
                 break;
 
-            todo_wine
-                 expect_hex(title_hits[title_index], res);
+            if (title_hits[title_index].todo) {
+                todo_wine
+                  ok(title_hits[title_index].ht == res, "Expected %x, got %x, pos %d\n",
+                                                         title_hits[title_index].ht, res, x);
+            }
+            else ok(title_hits[title_index].ht == res, "Expected %x, got %x, pos %d\n",
+                                                        title_hits[title_index].ht, res, x);
         }
     }
 
-- 
1.5.6.5


--=-cAe3Jkm5CYA0lLtcxY+Z--




More information about the wine-patches mailing list