Merge branch 'master' into fs_import_svg_SPE-1984

This commit is contained in:
Filip Sykala - NTB T15p 2023-10-26 08:38:48 +02:00
commit e043a04207
13 changed files with 351 additions and 119 deletions

View File

@ -1,4 +1,7 @@
min_slic3r_version = 2.6.2-alpha0
1.11.1-alpha2 Updated print speeds in "SOLUBLE" profiles. Updated filament settings (Prusa XL).
1.11.1-alpha1 Reduced nozzle temperature in selected filament profiles (Prusa XL 0.6mm nozzle).
1.11.1-alpha0 Added additional printer checks for Prusa XL Input Shaper (Alpha).
1.11.0-alpha9 Added printer profiles for Prusa XL Input Shaper (Alpha). Updated Prusa MINI Input Shaper profiles. Added profiles for "Filament PM" filaments.
1.11.0-alpha8 Default file extension changed to bgcode also for other nozzle diameters (MK4IS/MK3.9).
1.11.0-alpha7 Updated end g-code for XL Multi-Tool. Slightly decreased PETG bed temperature (XL).
@ -10,6 +13,9 @@ min_slic3r_version = 2.6.2-alpha0
1.11.0-alpha1 Updated ramming parameters. Updated start-gcode for XL Multi-Tool. Updated output filename format.
1.11.0-alpha0 Binary g-code, arc fitting, QOI/PNG thumbnails, 90degree XL tower, XL specific filament variants.
min_slic3r_version = 2.6.1-rc2
1.10.4 Reduced nozzle temperature in selected filament profiles (Prusa XL 0.6mm nozzle).
1.10.3 Added additional printer checks for Prusa XL Input Shaper (Alpha).
1.10.2 Added printer profiles for Prusa XL Input Shaper (Alpha). Updated Prusa MINI Input Shaper profiles. Added profiles for "Filament PM" filaments.
1.10.1 Increased MBL temperature for PET filaments (MK4, XL). PETG V0 is now UL certified for MK4. Updated end g-code for XL Multi-Tool. Slightly decreased bed temperature for some PET filaments (XL).
1.10.0 Added new profiles for Prusa MINI Input Shaper (Alpha). Enabled XL ramming feature. Prusa XL users may need to re-enable filament profiles in configuration wizard.
min_slic3r_version = 2.6.0-beta2

File diff suppressed because one or more lines are too long

View File

@ -2,6 +2,7 @@
///|/
///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher
///|/
#include <numeric>
#include "Emboss.hpp"
#include <stdio.h>
#include <cstdlib>
@ -562,7 +563,7 @@ Duplicates collect_duplicit_indices(const ExPolygons &expoly)
// initialize original index locations
std::vector<uint32_t> idx(pts.size());
iota(idx.begin(), idx.end(), 0);
std::iota(idx.begin(), idx.end(), 0);
std::sort(idx.begin(), idx.end(),
[&pts](uint32_t i1, uint32_t i2) { return pts[i1] < pts[i2]; });
@ -2218,4 +2219,4 @@ void remove_spikes(ExPolygons &expolygons, const SpikeDesc &spike_desc)
remove_bad(expolygons);
}
#endif // REMOVE_SPIKES
#endif // REMOVE_SPIKES

View File

@ -7,6 +7,7 @@
#include <charconv> // to_chars
#include <boost/nowide/iostream.hpp>
#include <boost/nowide/fstream.hpp>
#include "ClipperUtils.hpp"
#include "Emboss.hpp" // heal for shape
@ -543,4 +544,4 @@ HealedExPolygons stroke_to_expolygons(const LinesPath &lines_path, const NSVGsha
return Emboss::heal_polygons(result, is_non_zero, param.max_heal_iteration);
}
} // namespace
} // namespace

View File

@ -88,7 +88,7 @@ static choice_ctrl* create_word_local_combo(wxWindow *parent)
temp->SetTextCtrlStyle(wxTE_READONLY);
temp->Create(parent, wxID_ANY, wxString(""), wxDefaultPosition, size, 0, nullptr);
#else
temp = new choice_ctrl(parent, wxID_ANY, wxString(""), wxDefaultPosition, size, 0, nullptr, wxCB_READONLY/* | wxBORDER_SIMPLE*/);
temp = new choice_ctrl(parent, wxID_ANY, wxString(""), wxDefaultPosition, size, 0, nullptr, wxCB_READONLY | DD_NO_CHECK_ICON);
#endif //__WXOSX__
temp->SetFont(Slic3r::GUI::wxGetApp().normal_font());

View File

@ -1,6 +1,10 @@
#include "IconManager.hpp"
#include <cmath>
#include <numeric>
#include <boost/log/trivial.hpp>
#include <boost/nowide/cstdio.hpp>
#include <boost/filesystem/operations.hpp>
#include <boost/algorithm/string.hpp>
#include "nanosvg/nanosvg.h"
#include "nanosvg/nanosvgrast.h"
#include "libslic3r/Utils.hpp" // ScopeGuard

View File

@ -6,6 +6,7 @@
#include <stdexcept>
#include <type_traits>
#include <boost/log/trivial.hpp>
#include <libslic3r/Model.hpp>
#include <libslic3r/Format/OBJ.hpp> // load_obj for default mesh

View File

@ -131,7 +131,14 @@ bool ComboBox::SetBackgroundColour(const wxColour& colour)
TextInput::SetBackgroundColour(colour);
drop.SetBackgroundColour(colour);
drop.SetSelectorBackgroundColor(background_color);
StateColor selector_colors( std::make_pair(clr_background_focused, (int)StateColor::Checked),
Slic3r::GUI::wxGetApp().dark_mode() ?
std::make_pair(clr_background_disabled_dark, (int)StateColor::Disabled) :
std::make_pair(clr_background_disabled_light, (int)StateColor::Disabled),
Slic3r::GUI::wxGetApp().dark_mode() ?
std::make_pair(clr_background_normal_dark, (int)StateColor::Normal) :
std::make_pair(clr_background_normal_light, (int)StateColor::Normal));
drop.SetSelectorBackgroundColor(selector_colors);
return true;
}
@ -179,14 +186,9 @@ int ComboBox::Insert(const wxString& item,
int ComboBox::Insert(const wxString& item, const wxBitmapBundle& bitmap,
unsigned int pos, void* clientData)
{
const int n = wxItemContainer::Insert(item, pos);
if (n != wxNOT_FOUND) {
texts.insert(texts.begin() + n, item);
icons.insert(icons.begin() + n, bitmap);
datas.insert(datas.begin() + n, clientData);
types.insert(types.begin() + n, wxClientData_None);
drop.Invalidate();
}
const int n = wxItemContainer::Insert(item, pos, clientData);
if (n != wxNOT_FOUND)
icons[n] = bitmap;
return n;
}
@ -206,7 +208,9 @@ void ComboBox::DoDeleteOneItem(unsigned int pos)
icons.erase(icons.begin() + pos);
datas.erase(datas.begin() + pos);
types.erase(types.begin() + pos);
const int selection = drop.GetSelection();
drop.Invalidate(true);
drop.SetSelection(selection);
}
unsigned int ComboBox::GetCount() const { return texts.size(); }
@ -242,7 +246,9 @@ int ComboBox::DoInsertItems(const wxArrayStringsAdapter &items,
types.insert(types.begin() + pos, type);
++pos;
}
const int selection = drop.GetSelection();
drop.Invalidate(true);
drop.SetSelection(selection);
return int(pos) - 1;
}
@ -286,8 +292,6 @@ void ComboBox::keyDown(wxKeyEvent& event)
switch (key_code) {
#ifndef __WXOSX__
case WXK_RETURN:
#endif
case WXK_SPACE:
if (drop_down) {
drop.DismissAndNotify();
} else if (drop.HasDismissLongTime()) {
@ -298,6 +302,7 @@ void ComboBox::keyDown(wxKeyEvent& event)
GetEventHandler()->ProcessEvent(e);
}
break;
#endif
case WXK_UP:
case WXK_DOWN:
case WXK_LEFT:

View File

@ -30,7 +30,7 @@ public:
DropDown & GetDropDown() { return drop; }
virtual bool SetFont(wxFont const & font) override;
bool SetFont(wxFont const & font) override;
bool SetBackgroundColour(const wxColour& colour) override;
bool SetForegroundColour(const wxColour& colour) override;
@ -38,7 +38,6 @@ public:
void SetBorderColor(StateColor const& color);
int Append(const wxString &item, const wxBitmapBundle &bitmap = wxNullBitmap);
int Append(const wxString &item, const wxBitmapBundle &bitmap, void *clientData);
int Insert(const wxString& item, const wxBitmapBundle& bitmap, unsigned int pos);
@ -72,7 +71,7 @@ protected:
unsigned int pos,
void ** clientData,
wxClientDataType type) override;
virtual void DoClear() override;
void DoClear() override;
void DoDeleteOneItem(unsigned int pos) override;

View File

@ -211,6 +211,10 @@ void DropDown::SetTransparentBG(wxDC& dc, wxWindow* win)
#endif //__WXMSW__
}
constexpr int slider_width = 12;
constexpr int slider_step = 5;
constexpr int items_padding = 2;
/*
* Here we do the actual rendering. I put it in a separate
* method so that it can work no matter what type of DC
@ -243,11 +247,17 @@ void DropDown::render(wxDC &dc)
// draw hover rectangle
wxRect rcContent = {{0, offset.y}, rowSize};
const int text_size = int(texts.size());
const bool has_bar = rowSize.y * text_size > size.y;
if (has_bar)
rcContent.width -= slider_width;
if (hover_item >= 0 && (states & StateColor::Hovered)) {
rcContent.y += rowSize.y * hover_item;
if (rcContent.GetBottom() > 0 && rcContent.y < size.y) {
if (selection == hover_item)
dc.SetBrush(wxBrush(selector_background_color.colorForStates(states | StateColor::Checked)));
dc.SetBrush(wxBrush(selector_background_color.colorForStates(StateColor::Disabled)));
dc.SetPen(wxPen(selector_border_color.colorForStates(states)));
rcContent.Deflate(4, 1);
dc.DrawRectangle(rcContent);
@ -259,7 +269,7 @@ void DropDown::render(wxDC &dc)
if (selection >= 0 && (selection != hover_item || (states & StateColor::Hovered) == 0)) {
rcContent.y += rowSize.y * selection;
if (rcContent.GetBottom() > 0 && rcContent.y < size.y) {
dc.SetBrush(wxBrush(selector_background_color.colorForStates(states | StateColor::Checked)));
dc.SetBrush(wxBrush(selector_background_color.colorForStates(StateColor::Disabled)));
dc.SetPen(wxPen(selector_background_color.colorForStates(states)));
rcContent.Deflate(4, 1);
dc.DrawRectangle(rcContent);
@ -274,15 +284,13 @@ void DropDown::render(wxDC &dc)
}
// draw position bar
const int text_size = int(texts.size());
if (rowSize.y * text_size > size.y) {
if (has_bar) {
int height = rowSize.y * text_size;
wxRect rect = {size.x - 6, -offset.y * size.y / height, 4,
size.y * size.y / height};
wxRect rect = {size.x - slider_width - 2, -offset.y * size.y / height + 2, slider_width,
size.y * size.y / height - 3};
dc.SetPen(wxPen(border_color.defaultColor()));
dc.SetBrush(wxBrush(*wxLIGHT_GREY));
dc.SetBrush(wxBrush(selector_background_color.colorForStates(states | StateColor::Checked)));
dc.DrawRoundedRectangle(rect, 2);
rcContent.width -= 6;
}
// draw check icon
@ -373,7 +381,7 @@ void DropDown::messureSize()
}
if (iconSize.x > 0) szContent.x += iconSize.x + (text_off ? 0 : 5);
if (iconSize.y > szContent.y) szContent.y = iconSize.y;
szContent.y += 10;
szContent.y += items_padding;
if (texts.size() > 15) szContent.x += 6;
if (GetParent()) {
auto x = GetParent()->GetSize().x;
@ -432,6 +440,13 @@ void DropDown::mouseDown(wxMouseEvent& event)
return;
// force calc hover item again
mouseMove(event);
const wxSize size = GetSize();
const int height = rowSize.y * int(texts.size());
const wxRect rect = { size.x - slider_width, -offset.y * size.y / height, slider_width - 2,
size.y * size.y / height };
slider_grabbed = rect.Contains(event.GetPosition());
pressedDown = true;
CaptureMouse();
dragStart = event.GetPosition();
@ -442,6 +457,7 @@ void DropDown::mouseReleased(wxMouseEvent& event)
if (pressedDown) {
dragStart = wxPoint();
pressedDown = false;
slider_grabbed = false;
if (HasCapture())
ReleaseMouse();
if (hover_item >= 0) { // not moved
@ -462,7 +478,10 @@ void DropDown::mouseMove(wxMouseEvent &event)
wxPoint pt = event.GetPosition();
int text_size = int(texts.size());
if (pressedDown) {
wxPoint pt2 = offset + pt - dragStart;
const int height = rowSize.y * text_size;
const int y_step = slider_grabbed ? -height / GetSize().y : 1;
wxPoint pt2 = offset + (pt - dragStart)*y_step;
dragStart = pt;
if (pt2.y > 0)
pt2.y = 0;
@ -477,7 +496,7 @@ void DropDown::mouseMove(wxMouseEvent &event)
}
if (!pressedDown || hover_item >= 0) {
int hover = (pt.y - offset.y) / rowSize.y;
if (hover >= text_size) hover = -1;
if (hover >= text_size || slider_grabbed) hover = -1;
if (hover == hover_item) return;
hover_item = hover;
if (hover >= 0)
@ -489,7 +508,7 @@ void DropDown::mouseMove(wxMouseEvent &event)
void DropDown::mouseWheelMoved(wxMouseEvent &event)
{
auto delta = event.GetWheelRotation() > 0 ? rowSize.y : -rowSize.y;
wxPoint pt2 = offset + wxPoint{0, delta};
wxPoint pt2 = offset + wxPoint{0, slider_step * delta};
int text_size = int(texts.size());
if (pt2.y > 0)
pt2.y = 0;

View File

@ -41,6 +41,7 @@ class DropDown : public wxPopupTransientWindow
ScalableBitmap check_bitmap;
bool pressedDown = false;
bool slider_grabbed = false;
boost::posix_time::ptime dismissTime;
wxPoint offset; // x not used
wxPoint dragStart;

View File

@ -24,10 +24,10 @@ StaticBox::StaticBox()
{
border_color = StateColor(std::make_pair(clr_border_disabled, (int) StateColor::Disabled),
#ifndef __WXMSW__
std::make_pair(clr_border_nornal, (int) StateColor::Focused),
std::make_pair(clr_border_normal, (int) StateColor::Focused),
#endif
std::make_pair(clr_border_hovered, (int) StateColor::Hovered),
std::make_pair(clr_border_nornal, (int) StateColor::Normal));
std::make_pair(clr_border_normal, (int) StateColor::Normal));
#ifndef __WXMSW__
border_color.setTakeFocusedAsHovered(false);
#endif

View File

@ -1,17 +1,17 @@
#ifndef slic3r_UI_Colors_hpp_
#define slic3r_UI_Colors_hpp_
static const int clr_border_nornal = 0x646464;//0xDBDBDB;
static const int clr_border_normal = 0x646464;//0xDBDBDB;
static const int clr_border_hovered = 0xED6B21;//0x00AE42;
static const int clr_border_disabled = 0x646464;//0xDBDBDB;
static const int clr_background_nornal_light = 0xFFFFFF;
static const int clr_background_nornal_dark = 0x2B2B2B;//0x434343;
static const int clr_background_normal_light = 0xFFFFFF;
static const int clr_background_normal_dark = 0x2B2B2B;//0x434343;
static const int clr_background_focused = 0xED6B21;//0xEDFAF2;
static const int clr_background_disabled_dark = 0x404040;//0xF0F0F0;
static const int clr_background_disabled_light = 0xD9D9D9;//0xF0F0F0;
static const int clr_foreground_nornal = 0x262E30;
static const int clr_foreground_normal = 0x262E30;
static const int clr_foreground_focused = 0x00AE42;
static const int clr_foreground_disabled = 0x909090;