mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-05-14 00:52:04 +00:00
FIX: Mac semi-translucent colors & suppress dialog flicker during system picker
• Official filament picker now renders semi-transparent colors correctly on macOS. • Disables the flicker prompt while the default system color picker is open. jira: STUDIO-13452 Change-Id: I6a83d3cf488114f92813e378b507f293d7c4254e (cherry picked from commit 4cd2c47f99f956681f41a1af0343efc9ad377684)
This commit is contained in:
@@ -13,7 +13,11 @@ struct BitmapDC {
|
||||
wxBitmap bitmap;
|
||||
wxMemoryDC dc;
|
||||
|
||||
BitmapDC(const wxSize& size) : bitmap(size), dc(bitmap) {
|
||||
BitmapDC(const wxSize& size) : bitmap(size){
|
||||
#ifdef __WXOSX__
|
||||
bitmap.UseAlpha();
|
||||
#endif
|
||||
dc.SelectObject(bitmap);
|
||||
// Don't set white background - let the color patterns fill the entire area
|
||||
dc.SetPen(*wxTRANSPARENT_PEN);
|
||||
}
|
||||
@@ -91,6 +95,8 @@ static wxBitmap create_single_filament_bitmap(const wxColour& color, const wxSiz
|
||||
BitmapDC bdc = init_bitmap_dc(size);
|
||||
if (!bdc.dc.IsOk()) return wxNullBitmap;
|
||||
|
||||
bdc.dc.SetBackground(wxBrush(color));
|
||||
bdc.dc.Clear();
|
||||
bdc.dc.SetBrush(wxBrush(color));
|
||||
bdc.dc.DrawRectangle(0, 0, size.GetWidth(), size.GetHeight());
|
||||
|
||||
|
||||
@@ -625,9 +625,15 @@ void FilamentPickerDialog::BindEvents()
|
||||
// Bind more colors button event
|
||||
if (m_more_btn) {
|
||||
m_more_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) {
|
||||
// Pause click detection while color picker is open
|
||||
StopClickDetection();
|
||||
|
||||
wxColourData original_data = GetSingleColorData();
|
||||
wxColourData result = show_sys_picker_dialog(this, original_data);
|
||||
|
||||
// Resume click detection after color picker closes
|
||||
StartClickDetection();
|
||||
|
||||
// Check if user actually selected a different color
|
||||
if (result.GetColour() != original_data.GetColour()) {
|
||||
wxColour selected_color = result.GetColour();
|
||||
|
||||
@@ -683,15 +683,16 @@ wxBitmap *get_extruder_color_icon(std::string color, std::string label, int icon
|
||||
// there is no neede to scale created solid bitmap
|
||||
wxColor clr(color);
|
||||
bitmap = bmp_cache.insert(bitmap_key, wxBitmap(icon_width, icon_height));
|
||||
#ifndef __WXMSW__
|
||||
wxMemoryDC dc;
|
||||
#ifdef __WXOSX__
|
||||
bitmap->UseAlpha();
|
||||
wxMemoryDC dc(*bitmap);
|
||||
#else
|
||||
wxClientDC cdc((wxWindow *) Slic3r::GUI::wxGetApp().mainframe);
|
||||
wxMemoryDC dc(&cdc);
|
||||
dc.SelectObject(*bitmap);
|
||||
#endif
|
||||
dc.SetFont(::Label::Body_12);
|
||||
Slic3r::GUI::WxFontUtils::get_suitable_font_size(icon_height - 2, dc);
|
||||
dc.SelectObject(*bitmap);
|
||||
if (clr.Alpha() == 0) {
|
||||
int size = icon_height * 2;
|
||||
static wxBitmap transparent = *Slic3r::GUI::BitmapCache().load_svg("transparent", size, size);
|
||||
|
||||
Reference in New Issue
Block a user