diff --git a/deps/wxWidgets/0001-patch-v3.2.1-for-OrcaSlicer.patch b/deps/wxWidgets/0001-patch-v3.2.1-for-OrcaSlicer.patch deleted file mode 100644 index e96c1f4d52..0000000000 --- a/deps/wxWidgets/0001-patch-v3.2.1-for-OrcaSlicer.patch +++ /dev/null @@ -1,683 +0,0 @@ -From f4fef135f0a58ca2916c45cd539923ab096935b6 Mon Sep 17 00:00:00 2001 -From: Ocraftyone -Date: Thu, 30 Nov 2023 03:25:54 -0500 -Subject: [PATCH] patch v3.2.1 for OrcaSlicer - ---- - build/cmake/lib/webview/CMakeLists.txt | 4 +- - include/wx/fontutil.h | 15 +++++++- - include/wx/gdicmn.h | 3 ++ - include/wx/generic/grid.h | 4 +- - include/wx/msw/font.h | 2 +- - include/wx/msw/tooltip.h | 4 +- - include/wx/osx/app.h | 2 +- - src/common/combocmn.cpp | 11 +++++- - src/common/datavcmn.cpp | 6 ++- - src/common/dcbufcmn.cpp | 6 +++ - src/common/gdicmn.cpp | 14 +++++++ - src/common/image.cpp | 6 +-- - src/generic/grid.cpp | 50 ++++++++++++++++++++----- - src/msw/bmpcbox.cpp | 9 ++++- - src/msw/font.cpp | 14 +++---- - src/msw/menuitem.cpp | 2 + - src/msw/window.cpp | 52 +++++++++++++++++--------- - src/osx/cocoa/dataview.mm | 26 +++++++++++-- - src/osx/cocoa/settings.mm | 6 +-- - src/osx/cocoa/window.mm | 4 ++ - 20 files changed, 184 insertions(+), 56 deletions(-) - -diff --git a/build/cmake/lib/webview/CMakeLists.txt b/build/cmake/lib/webview/CMakeLists.txt -index 085381d785..62146abc04 100644 ---- a/build/cmake/lib/webview/CMakeLists.txt -+++ b/build/cmake/lib/webview/CMakeLists.txt -@@ -46,9 +46,9 @@ if(APPLE) - elseif(WXMSW) - if(wxUSE_WEBVIEW_EDGE) - # Update the following variables if updating WebView2 SDK -- set(WEBVIEW2_VERSION "1.0.705.50") -+ set(WEBVIEW2_VERSION "1.0.1418.22") - set(WEBVIEW2_URL "https://www.nuget.org/api/v2/package/Microsoft.Web.WebView2/${WEBVIEW2_VERSION}") -- set(WEBVIEW2_SHA256 "6a34bb553e18cfac7297b4031f3eac2558e439f8d16a45945c22945ac404105d") -+ set(WEBVIEW2_SHA256 "51d2ef56196e2a9d768a6843385bcb9c6baf9ed34b2603ddb074fb4995543a99") - - set(WEBVIEW2_DEFAULT_PACKAGE_DIR "${CMAKE_BINARY_DIR}/packages/Microsoft.Web.WebView2.${WEBVIEW2_VERSION}") - -diff --git a/include/wx/fontutil.h b/include/wx/fontutil.h -index 30529db8ce..e6a12366d5 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 2f5f8ee99f..39e9317d40 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 -@@ -1106,7 +1107,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 1bd58bbf04..903cb81319 100644 ---- a/include/wx/generic/grid.h -+++ b/include/wx/generic/grid.h -@@ -3029,9 +3029,11 @@ private: - // Update the width/height of the column/row being drag-resized. - // Should be only called when m_dragRowOrCol != -1, i.e. dragging is - // actually in progress. -+ //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 80408c6677..aa07caebdc 100644 ---- a/src/common/combocmn.cpp -+++ b/src/common/combocmn.cpp -@@ -2061,6 +2061,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; -@@ -2183,9 +2186,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 0a1e43ad51..6c492aedab 100644 ---- a/src/common/datavcmn.cpp -+++ b/src/common/datavcmn.cpp -@@ -1334,7 +1334,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 9b1c1f3159..ef5865ed4b 100644 ---- a/src/common/dcbufcmn.cpp -+++ b/src/common/dcbufcmn.cpp -@@ -83,9 +83,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->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->CreateWithDIPSize(wxMax(w, 1), wxMax(h, 1), scale); -+#endif - - return buffer; - } -diff --git a/src/common/gdicmn.cpp b/src/common/gdicmn.cpp -index db8a01f961..162c1ce2dc 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/image.cpp b/src/common/image.cpp -index 19fe34ec91..a449b60930 100644 ---- a/src/common/image.cpp -+++ b/src/common/image.cpp -@@ -390,11 +390,11 @@ wxImage wxImage::ShrinkBy( int xFactor , int yFactor ) const - unsigned char red = pixel[0] ; - unsigned char green = pixel[1] ; - unsigned char blue = pixel[2] ; -- unsigned char alpha = 255 ; -- if ( source_alpha ) -- alpha = *(source_alpha + y_offset + x * xFactor + x1) ; - if ( !hasMask || red != maskRed || green != maskGreen || blue != maskBlue ) - { -+ unsigned char alpha = 255 ; -+ if ( source_alpha ) -+ alpha = *(source_alpha + y_offset + x * xFactor + x1) ; - if ( alpha > 0 ) - { - avgRed += red ; -diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp -index ed3d988994..d71cda122d 100644 ---- a/src/generic/grid.cpp -+++ b/src/generic/grid.cpp -@@ -4068,7 +4068,8 @@ void wxGrid::ProcessRowColLabelMouseEvent( const wxGridOperations &oper, wxMouse - { - if ( m_cursorMode == oper.GetCursorModeResize() ) - { -- DoGridDragResize(event.GetPosition(), oper, gridWindow); -+ //BBS: add cursor mode for DoGridDragResize's paremeters -+ DoGridDragResize(event.GetPosition(), oper, gridWindow, m_cursorMode); - } - else if ( m_cursorMode == oper.GetCursorModeSelect() && line >=0 ) - { -@@ -4691,12 +4692,14 @@ bool wxGrid::DoGridDragEvent(wxMouseEvent& event, - - case WXGRID_CURSOR_RESIZE_ROW: - if ( m_dragRowOrCol != -1 ) -- 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: - if ( m_dragRowOrCol != -1 ) -- DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow); -+ //BBS: add cursor mode for DoGridDragResize's paremeters -+ DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow, WXGRID_CURSOR_RESIZE_COL); - break; - - default: -@@ -4791,6 +4794,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: -@@ -5049,9 +5054,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) - { - wxCHECK_RET( m_dragRowOrCol != -1, - "shouldn't be called when not drag resizing" ); -@@ -5064,10 +5071,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. - } -@@ -5090,7 +5115,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, event); - -@@ -5099,7 +5125,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, m_dragRowOrCol, event); - -@@ -5113,9 +5140,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) -@@ -6013,6 +6041,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 011bd4f534..17e7f18740 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 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 434876939c..91d4603018 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 0bd017a36a..3b98bf1678 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 c529a4fa3b..7e547c64df 100644 ---- a/src/msw/window.cpp -+++ b/src/msw/window.cpp -@@ -4809,33 +4809,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 f188e61089..7b867002d1 100644 ---- a/src/osx/cocoa/dataview.mm -+++ b/src/osx/cocoa/dataview.mm -@@ -1604,6 +1604,15 @@ outlineView:(NSOutlineView*)outlineView - } - } - -+//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 - // -@@ -2006,7 +2015,8 @@ void wxCocoaDataViewControl::keyEvent(WX_NSEvent event, WXWidget slf, void *_cmd - if ( !dvc->GetEventHandler()->ProcessEvent(eventDV) ) - wxWidgetCocoaImpl::keyEvent(event, slf, _cmd); - } -- else -+ //FIXME Vojtech's hack to get the accelerators assigned to the wxDataViewControl working. -+ else if (! DoHandleKeyEvent(event)) - { - wxWidgetCocoaImpl::keyEvent(event, slf, _cmd); // all other keys - } -@@ -2540,12 +2550,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 c819deeb0c..dc3c3b0b53 100644 ---- a/src/osx/cocoa/settings.mm -+++ b/src/osx/cocoa/settings.mm -@@ -222,7 +222,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; - -@@ -257,11 +257,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: -diff --git a/src/osx/cocoa/window.mm b/src/osx/cocoa/window.mm -index 635ea286d4..42ae67e27a 100644 ---- a/src/osx/cocoa/window.mm -+++ b/src/osx/cocoa/window.mm -@@ -191,6 +191,9 @@ NSRect wxOSXGetFrameForControl( wxWindowMac* window , const wxPoint& pos , const - - (BOOL)isEnabled; - - (void)setEnabled:(BOOL)flag; - -+- (BOOL)clipsToBounds; -+- (void)setClipsToBounds:(BOOL)clipsToBounds; -+ - - (void)setImage:(NSImage *)image; - - (void)setControlSize:(NSControlSize)size; - -@@ -2559,6 +2562,7 @@ wxWidgetImpl( peer, flags ) - if ( m_osxView ) - CFRetain(m_osxView); - [m_osxView release]; -+ m_osxView.clipsToBounds = YES; - } - - --- -2.42.0.windows.2 - diff --git a/deps/wxWidgets/0001-wx-3.1.5-patch-for-Orca.patch b/deps/wxWidgets/0001-wx-3.1.5-patch-for-Orca.patch deleted file mode 100644 index 325b933f66..0000000000 --- a/deps/wxWidgets/0001-wx-3.1.5-patch-for-Orca.patch +++ /dev/null @@ -1,743 +0,0 @@ -From 5e82980ed1762338794d06b3f9f22fa10e050622 Mon Sep 17 00:00:00 2001 -From: SoftFever -Date: Sat, 23 Dec 2023 20:08:41 +0800 -Subject: [PATCH] wx 3.1.5 patch for Orca - ---- - build/cmake/init.cmake | 4 ++ - build/cmake/lib/webview/CMakeLists.txt | 4 +- - include/wx/fontutil.h | 15 +++++++- - include/wx/gdicmn.h | 3 ++ - include/wx/generic/grid.h | 4 +- - include/wx/msw/font.h | 2 +- - include/wx/msw/tooltip.h | 4 +- - include/wx/osx/app.h | 2 +- - src/common/combocmn.cpp | 13 +++++-- - src/common/datavcmn.cpp | 6 ++- - src/common/dcbufcmn.cpp | 8 +++- - src/common/gdicmn.cpp | 14 +++++++ - src/common/image.cpp | 6 +-- - src/common/intl.cpp | 7 ++++ - src/generic/grid.cpp | 53 +++++++++++++++++++++----- - src/msw/bmpcbox.cpp | 9 ++++- - src/msw/font.cpp | 14 +++---- - src/msw/menuitem.cpp | 2 + - src/msw/window.cpp | 52 ++++++++++++++++--------- - src/osx/cocoa/dataview.mm | 26 +++++++++++-- - src/osx/cocoa/settings.mm | 6 +-- - src/osx/cocoa/window.mm | 4 ++ - 22 files changed, 199 insertions(+), 59 deletions(-) - -diff --git a/build/cmake/init.cmake b/build/cmake/init.cmake -index 0bc4f934b9..479431a69c 100644 ---- a/build/cmake/init.cmake -+++ b/build/cmake/init.cmake -@@ -413,7 +413,11 @@ if(wxUSE_GUI) - else() - find_package(OpenGL) - if(WXGTK3 AND OpenGL_EGL_FOUND AND wxUSE_GLCANVAS_EGL) -+ if(UNIX AND NOT APPLE) -+ set(OPENGL_LIBRARIES OpenGL EGL) -+ else() - set(OPENGL_LIBRARIES OpenGL::OpenGL OpenGL::EGL) -+ endif() - find_package(WAYLANDEGL) - if(WAYLANDEGL_FOUND AND wxHAVE_GDK_WAYLAND) - list(APPEND OPENGL_LIBRARIES ${WAYLANDEGL_LIBRARIES}) -diff --git a/build/cmake/lib/webview/CMakeLists.txt b/build/cmake/lib/webview/CMakeLists.txt -index cc3298ff33..aa103ae474 100644 ---- a/build/cmake/lib/webview/CMakeLists.txt -+++ b/build/cmake/lib/webview/CMakeLists.txt -@@ -56,9 +56,9 @@ if(APPLE) - elseif(WXMSW) - if(wxUSE_WEBVIEW_EDGE) - # Update the following variables if updating WebView2 SDK -- set(WEBVIEW2_VERSION "1.0.705.50") -+ set(WEBVIEW2_VERSION "1.0.1418.22") - set(WEBVIEW2_URL "https://www.nuget.org/api/v2/package/Microsoft.Web.WebView2/${WEBVIEW2_VERSION}") -- set(WEBVIEW2_SHA256 "6a34bb553e18cfac7297b4031f3eac2558e439f8d16a45945c22945ac404105d") -+ set(WEBVIEW2_SHA256 "51d2ef56196e2a9d768a6843385bcb9c6baf9ed34b2603ddb074fb4995543a99") - - set(WEBVIEW2_DEFAULT_PACKAGE_DIR "${CMAKE_BINARY_DIR}/packages/Microsoft.Web.WebView2.${WEBVIEW2_VERSION}") - -diff --git a/include/wx/fontutil.h b/include/wx/fontutil.h -index 09ad8c8ef3..c228e167d7 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..7cfc97d2f8 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..bc2c35bee6 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/image.cpp b/src/common/image.cpp -index 78fe5b82a3..46db8722ce 100644 ---- a/src/common/image.cpp -+++ b/src/common/image.cpp -@@ -383,11 +383,11 @@ wxImage wxImage::ShrinkBy( int xFactor , int yFactor ) const - unsigned char red = pixel[0] ; - unsigned char green = pixel[1] ; - unsigned char blue = pixel[2] ; -- unsigned char alpha = 255 ; -- if ( source_alpha ) -- alpha = *(source_alpha + y_offset + x * xFactor + x1) ; - if ( !hasMask || red != maskRed || green != maskGreen || blue != maskBlue ) - { -+ unsigned char alpha = 255 ; -+ if ( source_alpha ) -+ alpha = *(source_alpha + y_offset + x * xFactor + x1) ; - if ( alpha > 0 ) - { - avgRed += red ; -diff --git a/src/common/intl.cpp b/src/common/intl.cpp -index 0b0d8798f4..294f542b1f 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 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: -diff --git a/src/osx/cocoa/window.mm b/src/osx/cocoa/window.mm -index b322e582c5..79de567333 100644 ---- a/src/osx/cocoa/window.mm -+++ b/src/osx/cocoa/window.mm -@@ -190,6 +190,9 @@ NSRect wxOSXGetFrameForControl( wxWindowMac* window , const wxPoint& pos , const - - (BOOL)isEnabled; - - (void)setEnabled:(BOOL)flag; - -+- (BOOL)clipsToBounds; -+- (void)setClipsToBounds:(BOOL)clipsToBounds; -+ - - (void)setImage:(NSImage *)image; - - (void)setControlSize:(NSControlSize)size; - -@@ -2505,6 +2508,7 @@ wxWidgetImpl( peer, flags ) - if ( m_osxView ) - CFRetain(m_osxView); - [m_osxView release]; -+ m_osxView.clipsToBounds = YES; - } - - --- -2.41.0.windows.2 - diff --git a/deps/wxWidgets/wxWidgets.cmake b/deps/wxWidgets/wxWidgets.cmake index f84f9a070f..fdc1abdc9a 100644 --- a/deps/wxWidgets/wxWidgets.cmake +++ b/deps/wxWidgets/wxWidgets.cmake @@ -20,16 +20,6 @@ else () set(_wx_edge "-DwxUSE_WEBVIEW_EDGE=OFF") endif () -set(_wx_orcaslicer_patch "${CMAKE_CURRENT_LIST_DIR}/0001-wx-3.1.5-patch-for-Orca.patch") -if (MSVC) - set(_patch_cmd if not exist WXWIDGETS_PATCHED ( "${GIT_EXECUTABLE}" apply --verbose --ignore-space-change --whitespace=fix ${_wx_orcaslicer_patch} && type nul > WXWIDGETS_PATCHED ) ) -else () - set(_patch_cmd test -f WXWIDGETS_PATCHED || ${PATCH_CMD} ${_wx_orcaslicer_patch} && touch WXWIDGETS_PATCHED) -endif () - -if (CMAKE_SYSTEM_NAME STREQUAL "Linux") - set(_patch_cmd ${PATCH_CMD} ${_wx_orcaslicer_patch}) -endif () # Note: for anybody wanting to switch to tarball fetching - this won't just work as # git apply expects a git repo. Either git init empty repo, or change patching method. @@ -44,12 +34,12 @@ endif () orcaslicer_add_cmake_project( wxWidgets - GIT_REPOSITORY "https://github.com/wxWidgets/wxWidgets" - GIT_TAG ${_wx_git_tag} + GIT_REPOSITORY "https://github.com/SoftFever/Orca-deps-wxWidgets" + # GIT_TAG ${_wx_git_tag} GIT_SHALLOW ON # URL ${_wx_tarball_url} # URL_HASH SHA256=${_wx_tarball_hash} - PATCH_COMMAND ${_patch_cmd} + # PATCH_COMMAND ${_patch_cmd} DEPENDS ${PNG_PKG} ${ZLIB_PKG} ${EXPAT_PKG} dep_TIFF dep_JPEG CMAKE_ARGS -DwxBUILD_PRECOMP=ON diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 2e23d64e66..4d455038cd 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -924,29 +924,6 @@ void MainFrame::show_publish_button(bool show) // Layout(); } -void MainFrame::show_calibration_button(bool show) -{ -// #ifdef __APPLE__ -// bool shown = m_menubar->FindMenu(_L("Calibration")) != wxNOT_FOUND; -// if (shown == show) -// ; -// else if (show) -// m_menubar->Insert(3, m_calib_menu, wxString::Format("&%s", _L("Calibration"))); -// else -// m_menubar->Remove(3); -// #else -// topbar()->ShowCalibrationButton(show); -// #endif - show = !show; - auto shown2 = m_tabpanel->FindPage(m_calibration) != wxNOT_FOUND; - if (shown2 == show) - ; - else if (show) - m_tabpanel->InsertPage(tpCalibration, m_calibration, _L("Calibration"), std::string("tab_monitor_active"), std::string("tab_monitor_active"), false); - else - m_tabpanel->RemovePage(tpCalibration); -} - void MainFrame::update_title_colour_after_set_title() { #ifdef __APPLE__ @@ -1111,37 +1088,77 @@ void MainFrame::init_tabpanel() { // SoftFever void MainFrame::show_device(bool bBBLPrinter) { - if (m_tabpanel->GetPage(tpMonitor) != m_monitor && - m_tabpanel->GetPage(tpMonitor) != m_printer_view) { - BOOST_LOG_TRIVIAL(error) << "Failed to find device tab"; - return; - } - if (bBBLPrinter) { - if (m_tabpanel->GetPage(tpMonitor) != m_monitor) { - m_printer_view->Hide(); - m_monitor->Show(true); - m_tabpanel->RemovePage(tpMonitor); - m_tabpanel->InsertPage(tpMonitor, m_monitor, _L("Device"), - std::string("tab_monitor_active"), - std::string("tab_monitor_active")); - //m_tabpanel->SetSelection(tp3DEditor); - } - } else { - if (m_tabpanel->GetPage(tpMonitor) != m_printer_view) { - m_printer_view->Show(); + auto idx = -1; + if (bBBLPrinter) { + if (m_tabpanel->FindPage(m_monitor) != wxNOT_FOUND) + return; + // Remove printer view + if ((idx = m_tabpanel->FindPage(m_printer_view)) != wxNOT_FOUND) { + m_printer_view->Show(false); + m_tabpanel->RemovePage(idx); + } + + // Create/insert monitor page + if (!m_monitor) { + m_monitor = new MonitorPanel(m_tabpanel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_monitor->SetBackgroundColour(*wxWHITE); + } + m_monitor->Show(false); + m_tabpanel->InsertPage(tpMonitor, m_monitor, _L("Device"), std::string("tab_monitor_active"), std::string("tab_monitor_active")); + + if (wxGetApp().is_enable_multi_machine()) { + if (!m_multi_machine) { + m_multi_machine = new MultiMachinePage(m_tabpanel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_multi_machine->SetBackgroundColour(*wxWHITE); + } + // TODO: change the bitmap + m_multi_machine->Show(false); + m_tabpanel->InsertPage(tpMultiDevice, m_multi_machine, _L("Multi-device"), std::string("tab_multi_active"), + std::string("tab_multi_active"), false); + } + if (!m_calibration) { + m_calibration = new CalibrationPanel(m_tabpanel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_calibration->SetBackgroundColour(*wxWHITE); + } + m_calibration->Show(false); + m_tabpanel->InsertPage(tpCalibration, m_calibration, _L("Calibration"), std::string("tab_calibration_active"), + std::string("tab_calibration_active"), false); + +#ifdef _MSW_DARK_MODE + wxGetApp().UpdateDarkUIWin(this); +#endif // _MSW_DARK_MODE + + } else { + if (m_tabpanel->FindPage(m_printer_view) != wxNOT_FOUND) + return; + + if ((idx = m_tabpanel->FindPage(m_calibration)) != wxNOT_FOUND) { + m_calibration->Show(false); + m_tabpanel->RemovePage(idx); + } + if ((idx = m_tabpanel->FindPage(m_multi_machine)) != wxNOT_FOUND) { + m_multi_machine->Show(false); + m_tabpanel->RemovePage(idx); + } + if ((idx = m_tabpanel->FindPage(m_monitor)) != wxNOT_FOUND) { m_monitor->Show(false); - m_tabpanel->RemovePage(tpMonitor); - m_tabpanel->InsertPage(tpMonitor, m_printer_view, _L("Device"), - std::string("tab_monitor_active"), - std::string("tab_monitor_active")); - //m_tabpanel->SetSelection(tp3DEditor); + m_tabpanel->RemovePage(idx); + } + if (m_printer_view == nullptr) { + m_printer_view = new PrinterWebView(m_tabpanel); + Bind(EVT_LOAD_PRINTER_URL, [this](LoadPrinterViewEvent& evt) { + wxString url = evt.GetString(); + wxString key = evt.GetAPIkey(); + // select_tab(MainFrame::tpMonitor); + m_printer_view->load_url(url, key); + }); + } + m_printer_view->Show(false); + m_tabpanel->InsertPage(tpMonitor, m_printer_view, _L("Device"), std::string("tab_monitor_active"), + std::string("tab_monitor_active")); } - } - - } - bool MainFrame::preview_only_hint() { if (m_plater && (m_plater->only_gcode_mode() || (m_plater->using_exported_file()))) { @@ -2012,9 +2029,12 @@ void MainFrame::on_dpi_changed(const wxRect& suggested_rect) //if (m_layout != ESettingsLayout::Dlg) // Do not update tabs if the Settings are in the separated dialog m_param_panel->msw_rescale(); m_project->msw_rescale(); - m_monitor->msw_rescale(); - m_multi_machine->msw_rescale(); - m_calibration->msw_rescale(); + if(m_monitor) + m_monitor->msw_rescale(); + if(m_multi_machine) + m_multi_machine->msw_rescale(); + if(m_calibration) + m_calibration->msw_rescale(); // BBS #if 0 @@ -2072,8 +2092,10 @@ void MainFrame::on_sys_color_changed() // update Plater wxGetApp().plater()->sys_color_changed(); - m_monitor->on_sys_color_changed(); - m_calibration->on_sys_color_changed(); + if(m_monitor) + m_monitor->on_sys_color_changed(); + if(m_calibration) + m_calibration->on_sys_color_changed(); // update Tabs for (auto tab : wxGetApp().tabs_list) tab->sys_color_changed(); @@ -3321,12 +3343,16 @@ void MainFrame::select_tab(wxPanel* panel) //BBS void MainFrame::jump_to_monitor(std::string dev_id) { + if(!m_monitor) + return; m_tabpanel->SetSelection(tpMonitor); ((MonitorPanel*)m_monitor)->select_machine(dev_id); } void MainFrame::jump_to_multipage() { + if(!m_multi_machine) + return; m_tabpanel->SetSelection(tpMultiDevice); ((MultiMachinePage*)m_multi_machine)->jump_to_send_page(); } diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index 7c267f498c..18682a2071 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -259,7 +259,6 @@ public: void set_max_recent_count(int max); void show_publish_button(bool show); - void show_calibration_button(bool show); void update_title_colour_after_set_title(); void show_option(bool show); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index f3f2ef310a..4b8dac6345 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1200,9 +1200,7 @@ void Sidebar::update_all_preset_comboboxes() bool is_bbl_vendor = preset_bundle.is_bbl_vendor(); const bool use_bbl_network = preset_bundle.use_bbl_network(); - // Orca:: show device tab based on vendor type auto p_mainframe = wxGetApp().mainframe; - p_mainframe->show_device(use_bbl_network); auto cfg = preset_bundle.printers.get_edited_preset().config; if (use_bbl_network) { @@ -1268,7 +1266,9 @@ void Sidebar::update_all_preset_comboboxes() if (p->combo_printer) p->combo_printer->update(); - p_mainframe->m_tabpanel->SetSelection(p_mainframe->m_tabpanel->GetSelection()); + // Orca:: show device tab based on vendor type + p_mainframe->show_device(use_bbl_network); + p_mainframe->select_tab(MainFrame::tp3DEditor); } void Sidebar::update_presets(Preset::Type preset_type) @@ -1337,9 +1337,6 @@ void Sidebar::update_presets(Preset::Type preset_type) } Preset& printer_preset = wxGetApp().preset_bundle->printers.get_edited_preset(); - bool isBBL = preset_bundle.use_bbl_network(); - wxGetApp().mainframe->show_calibration_button(!isBBL); - if (auto printer_structure_opt = printer_preset.config.option>("printer_structure")) { wxGetApp().plater()->get_current_canvas3D()->get_arrange_settings().align_to_y_axis = (printer_structure_opt->value == PrinterStructure::psI3); } @@ -7084,7 +7081,7 @@ void Plater::priv::on_tab_selection_changing(wxBookCtrlEvent& e) if (new_sel == MainFrame::tpMonitor && wxGetApp().preset_bundle != nullptr) { auto cfg = wxGetApp().preset_bundle->printers.get_edited_preset().config; wxString url = cfg.opt_string("print_host_webui").empty() ? cfg.opt_string("print_host") : cfg.opt_string("print_host_webui"); - if (url.empty()) { + if (main_frame->m_printer_view && url.empty()) { // It's missing_connection page, reload so that we can replay the gif image main_frame->m_printer_view->reload(); }