From 347918966970177f4ee7b70fcf29041c193d972d Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Tue, 22 Jul 2003 09:01:49 +0000 Subject: [PATCH] Applied pop menu patch. 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 | 12 +++++----- src/gtk1/window.cpp | 12 +++++----- src/unix/fontutil.cpp | 51 +++++++++++++++++++++++++++++++------------ 3 files changed, 47 insertions(+), 28 deletions(-) diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index ee418a7c17..9ca920d581 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -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) diff --git a/src/gtk1/window.cpp b/src/gtk1/window.cpp index ee418a7c17..9ca920d581 100644 --- a/src/gtk1/window.cpp +++ b/src/gtk1/window.cpp @@ -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) diff --git a/src/unix/fontutil.cpp b/src/unix/fontutil.cpp index 2802d1170b..dd86095d0b 100644 --- a/src/unix/fontutil.cpp +++ b/src/unix/fontutil.cpp @@ -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 -- 2.45.2