123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637 |
- diff --git a/include/wx/fontutil.h b/include/wx/fontutil.h
- index 09ad8c8ef3..3c0c2d8f7e 100644
- --- a/include/wx/fontutil.h
- +++ b/include/wx/fontutil.h
- @@ -294,7 +294,11 @@ public:
- wxFontEncoding GetEncoding() const;
-
- void SetPointSize(int pointsize);
- - void SetFractionalPointSize(double pointsize);
- + void SetFractionalPointSize(double pointsize
- +#if defined(__WXMSW__)
- + , const wxWindow *window = nullptr
- +#endif
- + );
- void SetPixelSize(const wxSize& pixelSize);
- void SetStyle(wxFontStyle style);
- void SetNumericWeight(int weight);
- @@ -307,12 +311,19 @@ public:
-
- // Helper used in many ports: use the normal font size if the input is
- // negative, as we handle -1 as meaning this for compatibility.
- - void SetSizeOrDefault(double size)
- + void SetSizeOrDefault(double size
- +#if defined(__WXMSW__)
- + , const wxWindow *window = nullptr
- +#endif
- + )
- {
- SetFractionalPointSize
- (
- size < 0 ? wxNORMAL_FONT->GetFractionalPointSize()
- : size
- +#if defined(__WXMSW__)
- + ,window
- +#endif
- );
- }
-
- diff --git a/include/wx/gdicmn.h b/include/wx/gdicmn.h
- index e29a77627c..dc48cf9451 100644
- --- a/include/wx/gdicmn.h
- +++ b/include/wx/gdicmn.h
- @@ -38,6 +38,7 @@ class WXDLLIMPEXP_FWD_CORE wxRegion;
- class WXDLLIMPEXP_FWD_BASE wxString;
- class WXDLLIMPEXP_FWD_CORE wxIconBundle;
- class WXDLLIMPEXP_FWD_CORE wxPoint;
- +class WXDLLIMPEXP_FWD_CORE wxWindow;
-
- // ---------------------------------------------------------------------------
- // constants
- @@ -1092,7 +1093,9 @@ extern int WXDLLIMPEXP_CORE wxDisplayDepth();
-
- // get the display size
- extern void WXDLLIMPEXP_CORE wxDisplaySize(int *width, int *height);
- +extern void WXDLLIMPEXP_CORE wxDisplaySize(const wxWindow *window, int *width, int *height);
- extern wxSize WXDLLIMPEXP_CORE wxGetDisplaySize();
- +extern wxSize WXDLLIMPEXP_CORE wxGetDisplaySize(const wxWindow *window);
- extern void WXDLLIMPEXP_CORE wxDisplaySizeMM(int *width, int *height);
- extern wxSize WXDLLIMPEXP_CORE wxGetDisplaySizeMM();
- extern wxSize WXDLLIMPEXP_CORE wxGetDisplayPPI();
- diff --git a/include/wx/generic/grid.h b/include/wx/generic/grid.h
- index d7a3890764..e4dee51d5a 100644
- --- a/include/wx/generic/grid.h
- +++ b/include/wx/generic/grid.h
- @@ -2951,9 +2951,11 @@ private:
- wxGridWindow* gridWindow);
-
- // Update the width/height of the column/row being drag-resized.
- + //BBS: add cursor mode for DoGridDragResize's paremeters
- void DoGridDragResize(const wxPoint& position,
- const wxGridOperations& oper,
- - wxGridWindow* gridWindow);
- + wxGridWindow* gridWindow,
- + CursorMode mode);
-
- // process different clicks on grid cells
- void DoGridCellLeftDown(wxMouseEvent& event,
- diff --git a/include/wx/msw/font.h b/include/wx/msw/font.h
- index 0f9768b44e..094d774918 100644
- --- a/include/wx/msw/font.h
- +++ b/include/wx/msw/font.h
- @@ -23,7 +23,7 @@ public:
- // ctors and such
- wxFont() { }
-
- - wxFont(const wxFontInfo& info);
- + wxFont(const wxFontInfo& info, const wxWindow *window = nullptr);
-
- wxFont(int size,
- wxFontFamily family,
- diff --git a/include/wx/msw/tooltip.h b/include/wx/msw/tooltip.h
- index 4c3be08cec..96fb378d01 100644
- --- a/include/wx/msw/tooltip.h
- +++ b/include/wx/msw/tooltip.h
- @@ -91,10 +91,10 @@ private:
- // the one and only one tooltip control we use - never access it directly
- // but use GetToolTipCtrl() which will create it when needed
- static WXHWND ms_hwndTT;
- -
- +public:
- // create the tooltip ctrl if it doesn't exist yet and return its HWND
- static WXHWND GetToolTipCtrl();
- -
- +private:
- // to be used in wxModule for deleting tooltip ctrl window when exiting mainloop
- static void DeleteToolTipCtrl();
-
- diff --git a/include/wx/osx/app.h b/include/wx/osx/app.h
- index 317a0ca96f..58014ec1d4 100644
- --- a/include/wx/osx/app.h
- +++ b/include/wx/osx/app.h
- @@ -161,7 +161,7 @@ private:
-
- public:
- bool OSXInitWasCalled() { return m_inited; }
- - void OSXStoreOpenFiles(const wxArrayString &files ) { m_openFiles = files ; }
- + virtual void OSXStoreOpenFiles(const wxArrayString &files ) { m_openFiles = files ; }
- void OSXStorePrintFiles(const wxArrayString &files ) { m_printFiles = files ; }
- void OSXStoreOpenURL(const wxString &url ) { m_getURL = url ; }
- #endif
- diff --git a/src/common/combocmn.cpp b/src/common/combocmn.cpp
- index b61aac35bf..d12b745e8c 100644
- --- a/src/common/combocmn.cpp
- +++ b/src/common/combocmn.cpp
- @@ -2141,7 +2141,7 @@ void wxComboCtrlBase::CreatePopup()
- #if !USES_GENERICTLW
- m_winPopup = new wxComboPopupWindowBase2( this, wxNO_BORDER );
- #else
- - int tlwFlags = wxNO_BORDER;
- + int tlwFlags = wxNO_BORDER | wxSTAY_ON_TOP;
- #ifdef wxCC_GENERIC_TLW_IS_FRAME
- tlwFlags |= wxFRAME_NO_TASKBAR;
- #endif
- @@ -2285,6 +2285,9 @@ void wxComboCtrlBase::ShowPopup()
-
- SetFocus();
-
- + //int displayIdx = wxDisplay::GetFromWindow(this);
- + //wxRect displayRect = wxDisplay(displayIdx != wxNOT_FOUND ? displayIdx : 0u).GetGeometry();
- +
- // Space above and below
- int screenHeight;
- wxPoint scrPos;
- @@ -2407,9 +2410,13 @@ void wxComboCtrlBase::ShowPopup()
-
- int showFlags = CanDeferShow;
-
- - if ( spaceBelow < szp.y )
- + int anchorSideVertical = m_anchorSide & (wxUP | wxDOWN);
- + if (// Pop up as asked for by the library user.
- + (anchorSideVertical & wxUP) ||
- + // Automatic: Pop up if it does not fit down.
- + (anchorSideVertical == 0 && spaceBelow < szp.y ))
- {
- - popupY = scrPos.y - szp.y;
- + popupY = scrPos.y - szp.y + displayRect.GetTop();
- showFlags |= ShowAbove;
- }
-
- diff --git a/src/common/datavcmn.cpp b/src/common/datavcmn.cpp
- index 1f5fd4d66b..14ea2f8ef1 100644
- --- a/src/common/datavcmn.cpp
- +++ b/src/common/datavcmn.cpp
- @@ -1322,7 +1322,11 @@ wxDataViewItem wxDataViewCtrlBase::GetSelection() const
-
- wxDataViewItemArray selections;
- GetSelections(selections);
- - return selections[0];
- + // BBS
- + if (!selections.empty())
- + return selections[0];
- + else
- + return wxDataViewItem(0);
- }
-
- namespace
- diff --git a/src/common/dcbufcmn.cpp b/src/common/dcbufcmn.cpp
- index 74958fce10..59844f4526 100644
- --- a/src/common/dcbufcmn.cpp
- +++ b/src/common/dcbufcmn.cpp
- @@ -82,9 +82,15 @@ private:
- const double scale = dc ? dc->GetContentScaleFactor() : 1.0;
- wxBitmap* const buffer = new wxBitmap;
-
- +#if __WXMSW__
- // we must always return a valid bitmap but creating a bitmap of
- // size 0 would fail, so create a 1*1 bitmap in this case
- - buffer->CreateScaled(wxMax(w, 1), wxMax(h, 1), -1, scale);
- + buffer->Create(wxMax(w, 1), wxMax(h, 1), 24);
- +#else
- + // we must always return a valid bitmap but creating a bitmap of
- + // size 0 would fail, so create a 1*1 bitmap in this case
- + buffer->CreateScaled(wxMax(w, 1), wxMax(h, 1), -1, scale);
- +#endif
-
- return buffer;
- }
- diff --git a/src/common/gdicmn.cpp b/src/common/gdicmn.cpp
- index 20442bbc73..9a24951ec7 100644
- --- a/src/common/gdicmn.cpp
- +++ b/src/common/gdicmn.cpp
- @@ -863,11 +863,25 @@ void wxDisplaySize(int *width, int *height)
- *height = size.y;
- }
-
- +void wxDisplaySize(const wxWindow *window, int *width, int *height)
- +{
- + const wxSize size = wxGetDisplaySize(window);
- + if ( width )
- + *width = size.x;
- + if ( height )
- + *height = size.y;
- +}
- +
- wxSize wxGetDisplaySize()
- {
- return wxDisplay().GetGeometry().GetSize();
- }
-
- +wxSize wxGetDisplaySize(const wxWindow *window)
- +{
- + return window ? wxDisplay(window).GetGeometry().GetSize() : wxDisplay().GetGeometry().GetSize();
- +}
- +
- void wxClientDisplayRect(int *x, int *y, int *width, int *height)
- {
- const wxRect rect = wxGetClientDisplayRect();
- diff --git a/src/common/intl.cpp b/src/common/intl.cpp
- index 0b0d8798f4..7072fab18a 100644
- --- a/src/common/intl.cpp
- +++ b/src/common/intl.cpp
- @@ -1628,6 +1628,12 @@ GetInfoFromLCID(LCID lcid,
- {
- str = buf;
-
- +//FIXME Vojtech: We forcefully set the locales for a decimal point to "C", but this
- +// is not possible for the Win32 locales, therefore there is a discrepancy.
- +// It looks like we live with the discrepancy for at least half a year, so we will
- +// suppress the assert until we fix Slic3r to properly switch to "C" locales just
- +// for file import / export.
- +#if 0
- // As we get our decimal point separator from Win32 and not the
- // CRT there is a possibility of mismatch between them and this
- // can easily happen if the user code called setlocale()
- @@ -1641,6 +1647,7 @@ GetInfoFromLCID(LCID lcid,
- "Decimal separator mismatch -- did you use setlocale()?"
- "If so, use wxLocale to change the locale instead."
- );
- +#endif
- }
- break;
-
- diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp
- index 41fd4524cf..f4a15cb839 100644
- --- a/src/generic/grid.cpp
- +++ b/src/generic/grid.cpp
- @@ -3824,7 +3824,8 @@ void wxGrid::ProcessRowLabelMouseEvent( wxMouseEvent& event, wxGridRowLabelWindo
- {
- case WXGRID_CURSOR_RESIZE_ROW:
- {
- - DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow);
- + //BBS: add cursor mode for DoGridDragResize's paremeters
- + DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow, WXGRID_CURSOR_RESIZE_ROW);
- }
- break;
-
- @@ -4166,7 +4167,8 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event, wxGridColLabelWindo
- switch ( m_cursorMode )
- {
- case WXGRID_CURSOR_RESIZE_COL:
- - DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow);
- + //BBS: add cursor mode for DoGridDragResize's paremeters
- + DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow, WXGRID_CURSOR_RESIZE_COL);
- break;
-
- case WXGRID_CURSOR_SELECT_COL:
- @@ -4708,11 +4710,13 @@ bool wxGrid::DoGridDragEvent(wxMouseEvent& event,
- return DoGridCellDrag(event, coords, isFirstDrag);
-
- case WXGRID_CURSOR_RESIZE_ROW:
- - DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow);
- + //BBS: add cursor mode for DoGridDragResize's paremeters
- + DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow, WXGRID_CURSOR_RESIZE_ROW);
- break;
-
- case WXGRID_CURSOR_RESIZE_COL:
- - DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow);
- + //BBS: add cursor mode for DoGridDragResize's paremeters
- + DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow, WXGRID_CURSOR_RESIZE_COL);
- break;
-
- default:
- @@ -4803,6 +4807,8 @@ wxGrid::DoGridCellLeftDown(wxMouseEvent& event,
- case wxGridSelectCells:
- case wxGridSelectRowsOrColumns:
- // nothing to do in these cases
- + //BBS: select this cell when first click
- + m_selection->SelectBlock(coords.GetRow(), coords.GetCol(), coords.GetRow(), coords.GetCol(), event);
- break;
-
- case wxGridSelectRows:
- @@ -5044,9 +5050,11 @@ void wxGrid::ProcessGridCellMouseEvent(wxMouseEvent& event, wxGridWindow *eventG
- }
- }
-
- +//BBS: add cursor mode for DoGridDragResize's paremeters
- void wxGrid::DoGridDragResize(const wxPoint& position,
- const wxGridOperations& oper,
- - wxGridWindow* gridWindow)
- + wxGridWindow* gridWindow,
- + CursorMode mode)
- {
- // Get the logical position from the physical one we're passed.
- const wxPoint
- @@ -5056,10 +5064,28 @@ void wxGrid::DoGridDragResize(const wxPoint& position,
- // orthogonal direction.
- const int linePos = oper.Dual().Select(logicalPos);
-
- - const int lineStart = oper.GetLineStartPos(this, m_dragRowOrCol);
- - oper.SetLineSize(this, m_dragRowOrCol,
- + //BBS: add logic for resize multiplexed cols
- + if (mode == WXGRID_CURSOR_RESIZE_COL) {
- + int col_to_resize = m_dragRowOrCol;
- + int num_rows, num_cols;
- + this->GetCellSize(0, m_dragRowOrCol, &num_rows, &num_cols);
- + if (num_cols < 1)
- + col_to_resize = m_dragRowOrCol - 1;
- +
- + const int lineEnd = oper.GetLineEndPos(this, m_dragRowOrCol);
- + const int lineSize = oper.GetLineSize(this, col_to_resize);
- + int size = linePos - lineEnd + lineSize;
- + oper.SetLineSize(this, col_to_resize,
- + wxMax(size,
- + oper.GetMinimalLineSize(this, col_to_resize)));
- + }
- + else {
- + const int lineStart = oper.GetLineStartPos(this, m_dragRowOrCol);
- +
- + oper.SetLineSize(this, m_dragRowOrCol,
- wxMax(linePos - lineStart,
- oper.GetMinimalLineSize(this, m_dragRowOrCol)));
- + }
-
- // TODO: generate RESIZING event, see #10754, if the size has changed.
- }
- @@ -5082,7 +5108,8 @@ wxPoint wxGrid::GetPositionForResizeEvent(int width) const
-
- void wxGrid::DoEndDragResizeRow(const wxMouseEvent& event, wxGridWindow* gridWindow)
- {
- - DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow);
- + //BBS: add cursor mode for DoGridDragResize's paremeters
- + DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow, WXGRID_CURSOR_RESIZE_ROW);
-
- SendGridSizeEvent(wxEVT_GRID_ROW_SIZE, m_dragRowOrCol, -1, event);
-
- @@ -5091,7 +5118,8 @@ void wxGrid::DoEndDragResizeRow(const wxMouseEvent& event, wxGridWindow* gridWin
-
- void wxGrid::DoEndDragResizeCol(const wxMouseEvent& event, wxGridWindow* gridWindow)
- {
- - DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow);
- + //BBS: add cursor mode for DoGridDragResize's paremeters
- + DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow, WXGRID_CURSOR_RESIZE_COL);
-
- SendGridSizeEvent(wxEVT_GRID_COL_SIZE, -1, m_dragRowOrCol, event);
-
- @@ -5105,9 +5133,10 @@ void wxGrid::DoHeaderStartDragResizeCol(int col)
-
- void wxGrid::DoHeaderDragResizeCol(int width)
- {
- + //BBS: add cursor mode for DoGridDragResize's paremeters
- DoGridDragResize(GetPositionForResizeEvent(width),
- wxGridColumnOperations(),
- - m_gridWin);
- + m_gridWin, WXGRID_CURSOR_RESIZE_COL);
- }
-
- void wxGrid::DoHeaderEndDragResizeCol(int width)
- @@ -5891,6 +5920,10 @@ void wxGrid::OnKeyDown( wxKeyEvent& event )
- DisableCellEditControl();
-
- MoveCursorDown( event.ShiftDown() );
- + //BBS: select this cell when first click
- + m_selection->SelectBlock(m_currentCellCoords.GetRow(), m_currentCellCoords.GetCol(),
- + m_currentCellCoords.GetRow(), m_currentCellCoords.GetCol(),
- + event);
- }
- break;
-
- diff --git a/src/msw/bmpcbox.cpp b/src/msw/bmpcbox.cpp
- index 0a2d167ad7..0aeba45ea9 100644
- --- a/src/msw/bmpcbox.cpp
- +++ b/src/msw/bmpcbox.cpp
- @@ -156,13 +156,20 @@ void wxBitmapComboBox::RecreateControl()
-
- wxComboBox::DoClear();
-
- - HWND hwnd = GetHwnd();
- + WNDPROC wndproc_edit = nullptr;
- + WinStruct<COMBOBOXINFO> combobox_info;
- + HWND hwnd = GetHwnd();
- +if (::GetComboBoxInfo(hwnd, &combobox_info))
- + wndproc_edit = (WNDPROC)wxGetWindowProc(combobox_info.hwndItem);
- DissociateHandle();
- ::DestroyWindow(hwnd);
-
- if ( !MSWCreateControl(wxT("COMBOBOX"), wxEmptyString, pos, size) )
- return;
-
- +if (::GetComboBoxInfo(GetHwnd(), &combobox_info))
- + wxSetWindowProc(combobox_info.hwndItem, wndproc_edit);
- +
- // initialize the controls contents
- for ( i = 0; i < numItems; i++ )
- {
- diff --git a/src/msw/font.cpp b/src/msw/font.cpp
- index 0bd240d79f..d38b1b00f5 100644
- --- a/src/msw/font.cpp
- +++ b/src/msw/font.cpp
- @@ -54,7 +54,7 @@ static const int PITCH_MASK = FIXED_PITCH | VARIABLE_PITCH;
- class WXDLLEXPORT wxFontRefData: public wxGDIRefData
- {
- public:
- - wxFontRefData(const wxFontInfo& info = wxFontInfo());
- + wxFontRefData(const wxFontInfo& info = wxFontInfo(), const wxWindow* window = nullptr);
-
- wxFontRefData(const wxNativeFontInfo& info, WXHFONT hFont = 0)
- {
- @@ -324,7 +324,7 @@ protected:
- // wxFontRefData
- // ----------------------------------------------------------------------------
-
- -wxFontRefData::wxFontRefData(const wxFontInfo& info)
- +wxFontRefData::wxFontRefData(const wxFontInfo& info, const wxWindow *window)
- {
- m_hFont = NULL;
-
- @@ -335,7 +335,7 @@ wxFontRefData::wxFontRefData(const wxFontInfo& info)
- }
- else
- {
- - m_nativeFontInfo.SetSizeOrDefault(info.GetFractionalPointSize());
- + m_nativeFontInfo.SetSizeOrDefault(info.GetFractionalPointSize(), window);
- }
-
- SetStyle(info.GetStyle());
- @@ -518,12 +518,12 @@ wxFontEncoding wxNativeFontInfo::GetEncoding() const
- return wxGetFontEncFromCharSet(lf.lfCharSet);
- }
-
- -void wxNativeFontInfo::SetFractionalPointSize(double pointSizeNew)
- +void wxNativeFontInfo::SetFractionalPointSize(double pointSizeNew, const wxWindow *window)
- {
- // We don't have the correct DPI to use here, so use that of the
- // primary screen and rely on WXAdjustToPPI() changing it later if
- // necessary.
- - const int ppi = ::GetDeviceCaps(ScreenHDC(), LOGPIXELSY);
- + const int ppi = window ? window->GetDPI().GetY() : ::GetDeviceCaps(ScreenHDC(), LOGPIXELSY);
- lf.lfHeight = GetLogFontHeightAtPPI(pointSizeNew, ppi);
-
- pointSize = pointSizeNew;
- @@ -812,9 +812,9 @@ wxFont::wxFont(const wxString& fontdesc)
- (void)Create(info);
- }
-
- -wxFont::wxFont(const wxFontInfo& info)
- +wxFont::wxFont(const wxFontInfo& info, const wxWindow *window)
- {
- - m_refData = new wxFontRefData(info);
- + m_refData = new wxFontRefData(info, window);
- }
-
- bool wxFont::Create(const wxNativeFontInfo& info, WXHFONT hFont)
- diff --git a/src/msw/menuitem.cpp b/src/msw/menuitem.cpp
- index 9bb397d472..30af7154a7 100644
- --- a/src/msw/menuitem.cpp
- +++ b/src/msw/menuitem.cpp
- @@ -368,6 +368,8 @@ void MenuDrawData::Init(wxWindow const* window)
- // native menu uses small top margin for separator
- if ( SeparatorMargin.cyTopHeight >= 2 )
- SeparatorMargin.cyTopHeight -= 2;
- +
- + SeparatorSize.cy = 0;
- }
- else
- #endif // wxUSE_UXTHEME
- diff --git a/src/msw/window.cpp b/src/msw/window.cpp
- index eadc2f5700..f64fea4446 100644
- --- a/src/msw/window.cpp
- +++ b/src/msw/window.cpp
- @@ -4773,33 +4773,49 @@ static wxSize GetWindowDPI(HWND hwnd)
- }
-
- /*extern*/
- -int wxGetSystemMetrics(int nIndex, const wxWindow* window)
- +int wxGetSystemMetrics(int nIndex, const wxWindow* win)
- {
- #if wxUSE_DYNLIB_CLASS
- - if ( !window )
- - window = wxApp::GetMainTopWindow();
- + const wxWindow* window = (!win && wxTheApp) ? wxTheApp->GetTopWindow() : win;
-
- - if ( window )
- + if (window)
- {
- - typedef int (WINAPI * GetSystemMetricsForDpi_t)(int nIndex, UINT dpi);
- - static GetSystemMetricsForDpi_t s_pfnGetSystemMetricsForDpi = NULL;
- - static bool s_initDone = false;
- -
- - if ( !s_initDone )
- - {
- - wxLoadedDLL dllUser32("user32.dll");
- - wxDL_INIT_FUNC(s_pfn, GetSystemMetricsForDpi, dllUser32);
- - s_initDone = true;
- +#if 1
- + if (window->GetHWND() && (nIndex == SM_CXSCREEN || nIndex == SM_CYSCREEN)) {
- + HDC hdc = GetDC(window->GetHWND());
- +#if 0
- + double dim = GetDeviceCaps(hdc, nIndex == SM_CXSCREEN ? HORZRES : VERTRES);
- + ReleaseDC(window->GetHWND(), hdc);
- + wxSize dpi = window->GetDPI();
- + dim *= 96.0 / (nIndex == SM_CXSCREEN ? dpi.x : dpi.y);
- + return int(dim + 0.5);
- +#else
- + return int(GetDeviceCaps(hdc, nIndex == SM_CXSCREEN ? HORZRES : VERTRES));
- +#endif
- }
- -
- - if ( s_pfnGetSystemMetricsForDpi )
- + else
- +#endif
- {
- - const int dpi = window->GetDPI().y;
- - return s_pfnGetSystemMetricsForDpi(nIndex, (UINT)dpi);
- + typedef int (WINAPI * GetSystemMetricsForDpi_t)(int nIndex, UINT dpi);
- + static GetSystemMetricsForDpi_t s_pfnGetSystemMetricsForDpi = NULL;
- + static bool s_initDone = false;
- +
- + if ( !s_initDone )
- + {
- + wxLoadedDLL dllUser32("user32.dll");
- + wxDL_INIT_FUNC(s_pfn, GetSystemMetricsForDpi, dllUser32);
- + s_initDone = true;
- + }
- +
- + if ( s_pfnGetSystemMetricsForDpi )
- + {
- + const int dpi = window->GetDPI().y;
- + return s_pfnGetSystemMetricsForDpi(nIndex, (UINT)dpi);
- + }
- }
- }
- #else
- - wxUnusedVar(window);
- + wxUnusedVar(win);
- #endif // wxUSE_DYNLIB_CLASS
-
- return ::GetSystemMetrics(nIndex);
- diff --git a/src/osx/cocoa/dataview.mm b/src/osx/cocoa/dataview.mm
- index 6ff0cc3088..4943f3ea38 100644
- --- a/src/osx/cocoa/dataview.mm
- +++ b/src/osx/cocoa/dataview.mm
- @@ -1734,12 +1734,22 @@ outlineView:(NSOutlineView*)outlineView
- if ( !dvc->GetEventHandler()->ProcessEvent(eventDV) )
- [super keyDown:event];
- }
- - else
- + //FIXME Vojtech's hack to get the accelerators assigned to the wxDataViewControl working.
- + else if (! implementation->DoHandleKeyEvent(event))
- {
- [super keyDown:event]; // all other keys
- }
- }
-
- +//FIXME Vojtech: This is a workaround to get at least the "mouse move" events at the wxDataViewControl,
- +// so we can show the tooltips. The "mouse move" events are being send only if the wxDataViewControl
- +// has focus, which is a limitation of wxWidgets. We may grab focus on "mouse entry" though.
- +- (void)mouseMoved:(NSEvent *)event
- +{
- +if (! implementation->DoHandleMouseEvent(event))
- + [super mouseMoved:event];
- +}
- +
- //
- // contextual menus
- //
- @@ -2672,12 +2682,22 @@ void wxCocoaDataViewControl::DoSetIndent(int indent)
-
- void wxCocoaDataViewControl::HitTest(const wxPoint& point, wxDataViewItem& item, wxDataViewColumn*& columnPtr) const
- {
- - NSPoint const nativePoint = wxToNSPoint((NSScrollView*) GetWXWidget(),point);
- + NSTableHeaderView *headerView = [m_OutlineView headerView];
- + if (headerView && point.y < headerView.visibleRect.size.height) {
- + // The point is inside the header area.
- + columnPtr = NULL;
- + item = wxDataViewItem();
- + return;
- + }
- + // Convert from the window coordinates to the virtual scrolled view coordinates.
- + NSScrollView *scrollView = [m_OutlineView enclosingScrollView];
- + const NSRect &visibleRect = scrollView.contentView.visibleRect;
- + NSPoint const nativePoint = wxToNSPoint((NSScrollView*) GetWXWidget(),
- + wxPoint(point.x + visibleRect.origin.x, point.y + visibleRect.origin.y));
-
- int indexColumn;
- int indexRow;
-
- -
- indexColumn = [m_OutlineView columnAtPoint:nativePoint];
- indexRow = [m_OutlineView rowAtPoint: nativePoint];
- if ((indexColumn >= 0) && (indexRow >= 0))
- diff --git a/src/osx/cocoa/settings.mm b/src/osx/cocoa/settings.mm
- index de5f52860c..a9581174a4 100644
- --- a/src/osx/cocoa/settings.mm
- +++ b/src/osx/cocoa/settings.mm
- @@ -224,7 +224,7 @@ wxFont wxSystemSettingsNative::GetFont(wxSystemFont index)
- // ----------------------------------------------------------------------------
-
- // Get a system metric, e.g. scrollbar size
- -int wxSystemSettingsNative::GetMetric(wxSystemMetric index, const wxWindow* WXUNUSED(win))
- +int wxSystemSettingsNative::GetMetric(wxSystemMetric index, const wxWindow* win)
- {
- int value;
-
- @@ -259,11 +259,11 @@ int wxSystemSettingsNative::GetMetric(wxSystemMetric index, const wxWindow* WXUN
- // TODO case wxSYS_WINDOWMIN_Y:
-
- case wxSYS_SCREEN_X:
- - wxDisplaySize(&value, NULL);
- + wxDisplaySize(win, &value, NULL);
- return value;
-
- case wxSYS_SCREEN_Y:
- - wxDisplaySize(NULL, &value);
- + wxDisplaySize(win, NULL, &value);
- return value;
-
- // TODO case wxSYS_FRAMESIZE_X:
|