]> git.saurik.com Git - wxWidgets.git/commitdiff
Applied pop menu patch.
authorRobert Roebling <robert@roebling.de>
Tue, 22 Jul 2003 09:01:49 +0000 (09:01 +0000)
committerRobert Roebling <robert@roebling.de>
Tue, 22 Jul 2003 09:01:49 +0000 (09:01 +0000)
  Applied font util patch for better font matching under GTK 1.2

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@22229 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/gtk/window.cpp
src/gtk1/window.cpp
src/unix/fontutil.cpp

index ee418a7c17a1cf5d500238c7241e3d9fba03d504..9ca920d58198638d0c291687abffed00f1366b94 100644 (file)
@@ -255,10 +255,6 @@ wxWindowGTK *g_delayedFocus = (wxWindowGTK*) NULL;
 // send any activate events at all
 static int        g_sendActivateEvent = -1;
 
-/* hack: we need something to pass to gtk_menu_popup, so we store the time of
-   the last click here */
-static guint32 gs_timeLastClick = 0;
-
 extern bool g_mainThreadLocked;
 
 //-----------------------------------------------------------------------------
@@ -1586,8 +1582,6 @@ static gint gtk_window_button_press_callback( GtkWidget *widget,
     if ( !g_captureWindow )
         win = FindWindowForMouseEvent(win, event.m_x, event.m_y);
 
-    gs_timeLastClick = gdk_event->time;
-
 /*
     wxPrintf( wxT("2) OnButtonPress from ") );
     if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
@@ -4217,7 +4211,11 @@ bool wxWindowGTK::DoPopupMenu( wxMenu *menu, int x, int y )
                   wxPopupMenuPositionCallback,  // function to position it
                   NULL,                         // client data
                   0,                            // button used to activate it
-                  gs_timeLastClick              // the time of activation
+#ifdef __WXGTK20__
+                  gtk_get_current_event_time()
+#else
+                  GDK_CURRENT_TIME
+#endif
                 );
 
     while (is_waiting)
index ee418a7c17a1cf5d500238c7241e3d9fba03d504..9ca920d58198638d0c291687abffed00f1366b94 100644 (file)
@@ -255,10 +255,6 @@ wxWindowGTK *g_delayedFocus = (wxWindowGTK*) NULL;
 // send any activate events at all
 static int        g_sendActivateEvent = -1;
 
-/* hack: we need something to pass to gtk_menu_popup, so we store the time of
-   the last click here */
-static guint32 gs_timeLastClick = 0;
-
 extern bool g_mainThreadLocked;
 
 //-----------------------------------------------------------------------------
@@ -1586,8 +1582,6 @@ static gint gtk_window_button_press_callback( GtkWidget *widget,
     if ( !g_captureWindow )
         win = FindWindowForMouseEvent(win, event.m_x, event.m_y);
 
-    gs_timeLastClick = gdk_event->time;
-
 /*
     wxPrintf( wxT("2) OnButtonPress from ") );
     if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
@@ -4217,7 +4211,11 @@ bool wxWindowGTK::DoPopupMenu( wxMenu *menu, int x, int y )
                   wxPopupMenuPositionCallback,  // function to position it
                   NULL,                         // client data
                   0,                            // button used to activate it
-                  gs_timeLastClick              // the time of activation
+#ifdef __WXGTK20__
+                  gtk_get_current_event_time()
+#else
+                  GDK_CURRENT_TIME
+#endif
                 );
 
     while (is_waiting)
index 2802d1170b9c04ac470b42f86da095eeebe5f0de..dd86095d0bb40d053cd337b750196d29cff95710 100644 (file)
@@ -797,27 +797,49 @@ wxNativeFont wxLoadQueryNearestFont(int pointSize,
           *xFontName = newFontName;
     }
 
-    // try to load exactly the font requested first
-    if( !font )
-    {
-        font = wxLoadQueryFont( pointSize, family, style, weight,
-                                underlined, facename,
-                                info.xregistry, info.xencoding,
-                                xFontName );
-    }
-
     if ( !font )
     {
         // search up and down by stepsize 10
         int max_size = pointSize + 20 * (1 + (pointSize/180));
         int min_size = pointSize - 20 * (1 + (pointSize/180));
 
-        int i;
+        int i, round; // counters
 
-        // Search for smaller size (approx.)
-        for ( i = pointSize - 10; !font && i >= 10 && i >= min_size; i -= 10 )
+        // first round: search for equal, then for smaller and for larger size with the given weight and style
+        int testweight = weight;
+        int teststyle = style;
+
+        for ( round = 0; round < 3; round++ )
+        {
+            // second round: use normal weight
+            if ( round == 1 )
         {
-            font = wxLoadQueryFont(i, family, style, weight, underlined,
+                if ( testweight != wxNORMAL )
+                {
+                    testweight = wxNORMAL;
+                }
+                else
+                {
+                    ++round; // fall through to third round
+                }
+            }
+
+            // third round: ... and use normal style
+            if ( round == 2 )
+            {
+                if ( teststyle != wxNORMAL )
+                {
+                    teststyle = wxNORMAL;
+                }
+                else
+                {
+                    break;
+                }
+            }
+            // Search for equal or smaller size (approx.)
+            for ( i = pointSize; !font && i >= 10 && i >= min_size; i -= 10 )
+            {
+                font = wxLoadQueryFont(i, family, teststyle, testweight, underlined,
                                    facename, info.xregistry, info.xencoding,
                                    xFontName);
         }
@@ -825,9 +847,10 @@ wxNativeFont wxLoadQueryNearestFont(int pointSize,
         // Search for larger size (approx.)
         for ( i = pointSize + 10; !font && i <= max_size; i += 10 )
         {
-            font = wxLoadQueryFont(i, family, style, weight, underlined,
+                font = wxLoadQueryFont(i, family, teststyle, testweight, underlined,
                                    facename, info.xregistry, info.xencoding,
                                    xFontName);
+            }
         }
 
         // Try default family