diff options
Diffstat (limited to 'wxWidgets-Fix')
-rw-r--r-- | wxWidgets-Fix/apply-patches.cmd | 6 | ||||
-rw-r--r-- | wxWidgets-Fix/grid.cpp.patch | 71 | ||||
-rw-r--r-- | wxWidgets-Fix/grid.h.patch | 10 | ||||
-rw-r--r-- | wxWidgets-Fix/settings.cpp.patch | 54 |
4 files changed, 32 insertions, 109 deletions
diff --git a/wxWidgets-Fix/apply-patches.cmd b/wxWidgets-Fix/apply-patches.cmd index 30f88746..e8f6891c 100644 --- a/wxWidgets-Fix/apply-patches.cmd +++ b/wxWidgets-Fix/apply-patches.cmd @@ -1,11 +1,5 @@ @if [%1]==[] echo Please pass wxWidgets installation directory as %%1 parameter, e.g.: C:\Programme\C++\wxWidgets && pause && exit -::fix grid-label double-click to auto-size columns -patch "%1\src\generic\grid.cpp" grid.cpp.patch -pause -patch "%1\include\wx\generic\grid.h" grid.h.patch -pause ::Segoe UI font with Vista patch "%1\src\msw\settings.cpp" settings.cpp.patch -echo Make sure to add "-luxtheme" to "Standard linker flags" in \wxWidgets\build\msw\config.gcc!!! pause
\ No newline at end of file diff --git a/wxWidgets-Fix/grid.cpp.patch b/wxWidgets-Fix/grid.cpp.patch deleted file mode 100644 index af9bd684..00000000 --- a/wxWidgets-Fix/grid.cpp.patch +++ /dev/null @@ -1,71 +0,0 @@ ---- old 2009-03-06 11:00:48.000000000 +0100 -+++ src\generic\grid.cpp 2009-10-24 17:12:24.484375000 +0200 -@@ -5605,6 +5605,59 @@ - } - } - -+ -+void wxGrid::AutoSizeColFast(int col, bool doRefresh) -+{ -+ if (col < 0) -+ return; -+ -+ int rowMax = -1; -+ size_t lenMax = 0; -+ for (int row = 0; row < GetNumberRows(); ++row) -+ if (GetCellValue(row, col).size() > lenMax) -+ { -+ lenMax = GetCellValue(row, col).size(); -+ rowMax = row; -+ } -+ -+ wxCoord extentMax = 0; -+ -+ //calculate width of (most likely) widest cell -+ wxClientDC dc(GetGridWindow()); -+ if (rowMax > -1) -+ { -+ wxGridCellAttr* attr = GetCellAttr(rowMax, col); -+ if (attr) -+ { -+ wxGridCellRenderer* renderer = attr->GetRenderer(this, rowMax, col); -+ if (renderer) -+ { -+ const wxSize size = renderer->GetBestSize(*this, *attr, dc, rowMax, col); -+ extentMax = std::max(extentMax, size.x); -+ renderer->DecRef(); -+ } -+ attr->DecRef(); -+ } -+ } -+ -+ //consider column label -+ dc.SetFont(GetLabelFont()); -+ wxCoord w = 0; -+ wxCoord h = 0; -+ dc.GetMultiLineTextExtent(GetColLabelValue(col), &w, &h ); -+ if (GetColLabelTextOrientation() == wxVERTICAL) -+ w = h; -+ extentMax = std::max(extentMax, w); -+ -+ extentMax += 15; //leave some space around text -+ -+ SetColSize(col, extentMax); -+ -+ if (doRefresh) -+ Refresh(); -+} -+ -+ - void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event ) - { - int x, y, col; -@@ -5829,7 +5882,7 @@ - else - { - // adjust column width depending on label text -- AutoSizeColLabelSize( col ); -+ AutoSizeColFast( col ); - - ChangeCursorMode(WXGRID_CURSOR_SELECT_CELL, m_colLabelWin); - m_dragLastPos = -1; diff --git a/wxWidgets-Fix/grid.h.patch b/wxWidgets-Fix/grid.h.patch deleted file mode 100644 index 8ed3a8d0..00000000 --- a/wxWidgets-Fix/grid.h.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- old 2009-03-06 11:00:50.000000000 +0100 -+++ include\wx\generic\grid.h 2009-10-24 16:56:31.062500000 +0200 -@@ -2003,6 +2003,7 @@ - bool SetModelValues(); - - private: -+ void AutoSizeColFast(int col, bool doRefresh = true); //modification by ZenJu - // Calculate the minimum acceptable size for labels area - wxCoord CalcColOrRowLabelAreaMinSize(bool column /* or row? */); - diff --git a/wxWidgets-Fix/settings.cpp.patch b/wxWidgets-Fix/settings.cpp.patch index 1ba9524a..3c48d052 100644 --- a/wxWidgets-Fix/settings.cpp.patch +++ b/wxWidgets-Fix/settings.cpp.patch @@ -1,19 +1,15 @@ ---- src\msw\settings.cpp.old 2011-03-22 10:36:54.000000000 +0100 -+++ src\msw\settings.cpp 2011-12-14 21:58:59.642200200 +0100 -@@ -40,6 +40,12 @@ +--- settings.cpp.old 2011-03-22 10:36:54.000000000 +0100 ++++ settings.cpp 2012-01-23 00:26:06.916105800 +0100 +@@ -40,6 +40,8 @@ #endif #include "wx/fontutil.h" +//#include <vssym32.h> +#include <Uxtheme.h> -+ -+#ifdef _MSC_VER -+#pragma comment(lib, "UxTheme.lib") -+#endif // ---------------------------------------------------------------------------- // private classes -@@ -261,6 +267,34 @@ +@@ -261,6 +263,48 @@ return font; } @@ -21,26 +17,40 @@ +#define TMT_MSGBOXFONT 805 //why is this constant missing from Uxtheme.h??? +#endif + ++typedef HTHEME (WINAPI* OpenThemeDataFun )(HWND hwnd, LPCWSTR pszClassList); ++typedef HRESULT (WINAPI* CloseThemeDataFun )(HTHEME hTheme); ++typedef HRESULT (WINAPI* GetThemeSysFontFun)(HTHEME hTheme, int iFontID, LOGFONTW* plf); ++ +struct InitFont //(try to) initialize default font, before wxWidgets gets chance to screw up +{ + InitFont() + { -+ HTHEME theme = ::OpenThemeData(NULL, //__in HWND hwnd, -+ L"WINDOW"); //__in LPCWSTR pszClassList -+ -+ LOGFONT lfont = {}; -+ if (::GetThemeSysFont(theme, //__in HTHEME hTheme, -+ TMT_MSGBOXFONT, //__in int iFontID, -+ &lfont) == S_OK) // __out LOGFONTW *plf ++ //Windows 2000 doesn't ship with this dll so we need to link it dynamically ++ if (HMODULE lib = ::LoadLibrary(L"UxTheme.dll")) + { -+ wxNativeFontInfo native; -+ native.lf = lfont; -+ delete gs_fontDefault; -+ gs_fontDefault = wxFontBase::New(native); -+ } ++ OpenThemeDataFun OpenThemeData = reinterpret_cast<OpenThemeDataFun >(::GetProcAddress(lib, "OpenThemeData")); ++ CloseThemeDataFun CloseThemeData = reinterpret_cast<CloseThemeDataFun >(::GetProcAddress(lib, "CloseThemeData")); ++ GetThemeSysFontFun GetThemeSysFont = reinterpret_cast<GetThemeSysFontFun>(::GetProcAddress(lib, "GetThemeSysFont")); + -+ if (theme != NULL) -+ ::CloseThemeData(theme); ++ HTHEME theme = (*OpenThemeData)(NULL, //__in HWND hwnd, ++ L"WINDOW"); //__in LPCWSTR pszClassList ++ ++ LOGFONT lfont = {}; ++ if ((*GetThemeSysFont)(theme, //__in HTHEME hTheme, ++ TMT_MSGBOXFONT, //__in int iFontID, ++ &lfont) == S_OK) // __out LOGFONTW *plf ++ { ++ wxNativeFontInfo native; ++ native.lf = lfont; ++ delete gs_fontDefault; ++ gs_fontDefault = wxFontBase::New(native); ++ } ++ ++ if (theme != NULL) ++ (*CloseThemeData)(theme); ++ ++ ::FreeLibrary(lib); ++ } + } +} dummy; + |