From aa3be8aa4ca1f2347b4b5395ac289d02a84729f4 Mon Sep 17 00:00:00 2001 From: "wenjie.guo" Date: Tue, 21 Nov 2023 15:00:43 +0800 Subject: [PATCH] FIX: Bitmap will flash when sending printing task Jira: STUDIO-5278 Signed-off-by: wenjie.guo Change-Id: Ib0c8710b8d5d6b98fad043c950f054aa35bea965 --- src/slic3r/GUI/SelectMachine.cpp | 23 ++++++++++++++++------- src/slic3r/GUI/SelectMachine.hpp | 5 +++-- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index de758f43c..f411ccae8 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -4196,6 +4196,8 @@ void SelectMachineDialog::sys_color_changed() else { m_rename_button->SetBitmap(ams_editable->bmp()); } + m_thumbnailPanel->set_thumbnail_on_color_change(); + m_thumbnailPanel->Refresh(); m_rename_button->Refresh(); } @@ -4430,7 +4432,6 @@ void EditDevNameDialog::on_edit_name(wxCommandEvent &e) m_staticbitmap = new wxStaticBitmap(parent, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize); m_background_bitmap = ScalableBitmap(this,"thumbnail_grid",256); sizer->Add(m_staticbitmap, 1, wxEXPAND, 0); - Bind(wxEVT_PAINT, &ThumbnailPanel::paint,this); SetSizer(sizer); Layout(); Fit(); @@ -4438,15 +4439,23 @@ void EditDevNameDialog::on_edit_name(wxCommandEvent &e) void ThumbnailPanel::set_thumbnail(wxImage img) { - wxBitmap bitmap(img); - m_staticbitmap->SetBitmap(bitmap); + m_bitmap = img; + //Paint the background bitmap to the thumbnail bitmap with wxMemoryDC + wxMemoryDC dc; + bitmap_with_background.Create(wxSize(m_bitmap.GetWidth(), m_bitmap.GetHeight())); + dc.SelectObject(bitmap_with_background); + dc.DrawBitmap(m_background_bitmap.bmp(), 0, 0); + dc.DrawBitmap(m_bitmap, 0, 0); + dc.SelectObject(wxNullBitmap); + + set_thumbnail_on_color_change(); } - void ThumbnailPanel::paint(wxPaintEvent& evt) { - wxPaintDC dc(this); + void ThumbnailPanel::set_thumbnail_on_color_change() { if (wxGetApp().dark_mode()) - dc.DrawBitmap(m_background_bitmap.bmp(), 0, 0); - dc.DrawBitmap(m_staticbitmap->GetBitmap(),0,0); + m_staticbitmap->SetBitmap(bitmap_with_background); + else + m_staticbitmap->SetBitmap(m_bitmap); } ThumbnailPanel::~ThumbnailPanel() {} diff --git a/src/slic3r/GUI/SelectMachine.hpp b/src/slic3r/GUI/SelectMachine.hpp index 17b2f7834..57e3ba3d9 100644 --- a/src/slic3r/GUI/SelectMachine.hpp +++ b/src/slic3r/GUI/SelectMachine.hpp @@ -501,7 +501,7 @@ public: class ThumbnailPanel : public wxPanel { public: - wxBitmap * m_bitmap{nullptr}; + wxBitmap m_bitmap; wxStaticBitmap *m_staticbitmap{nullptr}; ThumbnailPanel(wxWindow * parent, @@ -514,9 +514,10 @@ public: void PaintBackground(wxDC &dc); void OnEraseBackground(wxEraseEvent &event); void set_thumbnail(wxImage img); - void paint(wxPaintEvent& evt); + void set_thumbnail_on_color_change(); private: ScalableBitmap m_background_bitmap; + wxBitmap bitmap_with_background; };