Compare commits

..
Author SHA1 Message Date
SoftFever 4710ec274f Merge branch 'main' into feature/texdisp-help-links 2026-10-03 20:09:46 +08:00
SoftFever 019f6677b9 Merge branch 'main' into feature/texdisp-help-links 2026-10-02 20:20:06 +08:00
ExPikaPaka 561c9e38e0 Reserve header width for the two new icons 2026-10-02 09:10:46 +02:00
ExPikaPaka 92de8d3eae Link the texture displacement guide and wiki from the gizmo panel
Finding either piece of documentation currently means knowing it exists and
going looking for it outside the application, which is the hardest moment to
do that: the panel has a lot of controls and the feature is new.

Add two borderless icon buttons to the panel header, next to the dock toggle,
opening the video walkthrough and the wiki page in the default browser. Both
icons follow the set's existing convention of a grey outline with a teal
accent, so they read as part of the same panel.
2026-10-02 09:05:35 +02:00
36 changed files with 27 additions and 79 deletions
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><rect x="0.5" y="2.5" width="15" height="11" rx="2.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><path d="M6.5 5.5l4.5 2.5-4.5 2.5z" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/></svg>

After

Width:  |  Height:  |  Size: 334 B

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path d="M1.5 2.5h4a2 2 0 0 1 2 2v9a1.5 1.5 0 0 0-1.5-1.5h-4.5zM14.5 2.5h-4a2 2 0 0 0-2 2v9a1.5 1.5 0 0 1 1.5-1.5h4.5z" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><path d="M10.5 5.5h2.5M10.5 7.5h2.5M3 5.5h2.5M3 7.5h2.5" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/></svg>

After

Width:  |  Height:  |  Size: 421 B

-2
View File
@@ -141,8 +141,6 @@ using namespace nlohmann;
#include "slic3r/GUI/GuiColor.hpp"
#include <GLFW/glfw3.h>
namespace fs = boost::filesystem;
#ifdef __WXGTK__
#if __has_include(<X11/Xlib.h>)
#include <X11/Xlib.h>
@@ -58,8 +58,6 @@
#include <set>
#include <string>
namespace fs = boost::filesystem;
using namespace Slic3r;
namespace po = boost::program_options;
-2
View File
@@ -60,8 +60,6 @@
#include "BRepTools.hxx"
#include <IMeshTools_Parameters.hxx>
namespace fs = boost::filesystem;
namespace Slic3r {
+2 -1
View File
@@ -17,6 +17,7 @@
#include <ostream>
#include <vector>
namespace fs = boost::filesystem;
namespace Slic3r {
@@ -103,7 +104,7 @@ public:
MESH_SUCCESS,
MESH_ERROR
};
Step(boost::filesystem::path path, ImportStepProgressFn stepFn = nullptr, StepIsUtf8Fn isUtf8Fn = nullptr);
Step(fs::path path, ImportStepProgressFn stepFn = nullptr, StepIsUtf8Fn isUtf8Fn = nullptr);
Step(std::string path, ImportStepProgressFn stepFn = nullptr, StepIsUtf8Fn isUtf8Fn = nullptr);
~Step();
Step_Status load();
-2
View File
@@ -133,8 +133,6 @@ using namespace std::literals::string_view_literals;
#include <assert.h>
namespace fs = boost::filesystem;
namespace Slic3r {
//! macro used to mark string used at localization,
-2
View File
@@ -87,8 +87,6 @@
#include "PlaceholderParser.hpp"
#include "libslic3r/GCode/Thumbnails.hpp"
namespace fs = boost::filesystem;
using boost::property_tree::ptree;
namespace Slic3r {
+2 -2
View File
@@ -470,8 +470,8 @@ public:
// Orca: Bundle metadata and cached preset names
// std::map<std::string, BundleMetadata> m_bundles;
boost::filesystem::path dir_user_presets_local;
boost::filesystem::path dir_user_presets_subscribed;
fs::path dir_user_presets_local;
fs::path dir_user_presets_subscribed;
PresetBundleMetadata bundles;
struct ObsoletePresets
-2
View File
@@ -102,8 +102,6 @@
#include <codecvt>
namespace fs = boost::filesystem;
using namespace nlohmann;
// Mark string for localization and translate.
-2
View File
@@ -65,8 +65,6 @@
#include "MainFrame.hpp"
#include "Widgets/Label.hpp"
namespace fs = boost::filesystem;
namespace Slic3r { namespace GUI {
wxDEFINE_EVENT(EVT_AUXILIARY_IMPORT, wxCommandEvent);
+4 -4
View File
@@ -99,7 +99,7 @@ public:
bool m_cover{false};
wxStaticText* m_text_name {nullptr};
::TextInput* m_input_name {nullptr};
boost::filesystem::path m_file_path;
fs::path m_file_path;
wxString m_add_file;
wxString m_file_name;
wxString cover_text_left;
@@ -116,7 +116,7 @@ public:
ScalableBitmap m_bitmap_txt;
public:
AuFile(wxWindow *parent, boost::filesystem::path file_path, wxString file_name, AuxiliaryFolderType type, wxWindowID id = wxID_ANY, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize, long style = wxTAB_TRAVERSAL);
AuFile(wxWindow *parent, fs::path file_path, wxString file_name, AuxiliaryFolderType type, wxWindowID id = wxID_ANY, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize, long style = wxTAB_TRAVERSAL);
void enter_rename_mode();
void exit_rename_mode();
void OnPaint(wxPaintEvent &evt);
@@ -164,7 +164,7 @@ public:
void clear();
void update_cover();
void update(std::vector<boost::filesystem::path> paths);
void update(std::vector<fs::path> paths);
void msw_rescale();
public:
@@ -240,7 +240,7 @@ public:
bool Show(bool show);
// core logic
std::map<std::string, std::vector<boost::filesystem::path>> m_paths_list;
std::map<std::string, std::vector<fs::path>> m_paths_list;
wxString m_root_dir;
void init_auxiliary();
void create_folder(wxString name = wxEmptyString);
@@ -21,8 +21,6 @@
#include <wx/variant.h>
#include <wx/types.h>
namespace fs = boost::filesystem;
const static std::array<wxString, 4> s_default_folders = {
_L("Model Pictures"),
_L("Bill of Materials"),
-2
View File
@@ -83,8 +83,6 @@
#include "UnsavedChangesDialog.hpp"
#include "MainFrame.hpp"
namespace fs = boost::filesystem;
#if defined(__linux__) && defined(__WXGTK3__)
#define wxLinux_gtk3 true
#else
-2
View File
@@ -108,8 +108,6 @@
#include "IPrinterAgent.hpp"
namespace fs = boost::filesystem;
#define CALI_DEBUG
#define MINUTE_30 1800000 //ms
#define TIME_OUT 5000 //ms
-2
View File
@@ -58,8 +58,6 @@
#include "libslic3r/Print.hpp"
#include "libslic3r/Utils.hpp"
namespace fs = boost::filesystem;
namespace Slic3r {
class AppConfig;
@@ -3396,6 +3396,8 @@ void GLGizmoTextureDisplacement::ensure_panel_icons()
"texture_displacement_adjust.svg", "canvas_drag.svg", "texture_displacement_move_up.svg",
"texture_displacement_move_down.svg", "texture_displacement_drag.svg",
"texture_displacement_select_all.svg", "texture_displacement_erase_all.svg",
// Header help links: the video walkthrough and the wiki page.
"texture_displacement_video_guide.svg", "texture_displacement_wiki.svg",
};
std::vector<std::string> paths;
paths.reserve(names.size());
@@ -5507,7 +5509,10 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float
const float seg_pad = m_imgui->scaled(0.5f);
const float seg_w[2] = { ImGui::CalcTextSize(labels[0].c_str()).x + 2.f * seg_pad, ImGui::CalcTextSize(labels[1].c_str()).x + 2.f * seg_pad };
ImGui::SameLine();
ImGui::SetCursorPosX(std::max(ImGui::GetCursorPosX(), x0 + panel_w - (seg_w[0] + seg_w[1] + gap_s + icon_sm)));
// Three icons now follow the segmented control (video guide, wiki, dock toggle), each preceded by
// its own gap - the reserved width has to cover all of them or the cluster runs past the panel edge.
ImGui::SetCursorPosX(std::max(ImGui::GetCursorPosX(),
x0 + panel_w - (seg_w[0] + seg_w[1] + 3.f * (gap_s + icon_sm))));
// Standard / Pro is a mode, not an option: Standard hides every mesh-preparation control and folds
// the whole recipe into Bake, Pro shows all of it and hands the ordering to the user.
@@ -5549,6 +5554,15 @@ void GLGizmoTextureDisplacement::on_render_input_window(float x, float y, float
ImGui::GetWindowDrawList()->AddRect(seg_min, ImVec2(ImGui::GetItemRectMax().x, seg_min.y + frame_h),
ImGui::GetColorU32(col_frame), style.FrameRounding);
ImGui::SameLine(0.f, gap_s);
if (icon_button(807, "texture_displacement_video_guide.svg", icon_sm, _L("Video guide"),
_L("Watch the texture displacement walkthrough on YouTube. Opens in your browser.")))
wxLaunchDefaultBrowser("https://www.youtube.com/watch?v=D7w3tG1kdvE");
ImGui::SameLine(0.f, gap_s);
if (icon_button(808, "texture_displacement_wiki.svg", icon_sm, _L("Documentation"),
_L("Open the texture displacement page of the OrcaSlicer wiki. Opens in your browser.")))
wxLaunchDefaultBrowser("https://www.orcaslicer.com/wiki/print_prepare/prepare_texture_displacement.html");
ImGui::SameLine(0.f, gap_s);
if (icon_button(806, "canvas_drag.svg", icon_sm, m_undocked ? _L("Dock panel") : _L("Undock panel"),
_L("Detach this panel so it can be dragged anywhere over the 3D view, or dock it back beside "
-2
View File
@@ -25,8 +25,6 @@
#include <mutex>
#include <ctime>
namespace fs = boost::filesystem;
static const char* HMS_PATH = "hms";
static const char* HMS_LOCAL_IMG_PATH = "hms/local_image";
-3
View File
@@ -35,9 +35,6 @@
#include <boost/chrono/duration.hpp>
#include "slic3r/GUI/DeviceCore/DevStorage.h"
#include <wx/event.h>
#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
namespace Slic3r {
namespace GUI {
-3
View File
@@ -20,9 +20,6 @@
#include <wx/event.h>
#include <functional>
#include <exception>
#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
namespace Slic3r {
namespace GUI {
@@ -11,8 +11,6 @@
#include "libslic3r/Utils.hpp"
#include <exception>
namespace fs = boost::filesystem;
namespace Slic3r {
namespace GUI {
-2
View File
@@ -62,8 +62,6 @@
#include "DeviceCore/DevManager.h"
namespace fs = boost::filesystem;
namespace Slic3r { namespace GUI {
extern wxString hide_passwd(wxString url, std::vector<wxString> const &passwords);
+2 -2
View File
@@ -376,8 +376,8 @@ public:
// BBS: check snapshot
bool up_to_date(bool saved, bool backup);
bool open_3mf_file(const boost::filesystem::path &file_path);
int get_3mf_file_count(std::vector<boost::filesystem::path> paths);
bool open_3mf_file(const fs::path &file_path);
int get_3mf_file_count(std::vector<fs::path> paths);
void add_file();
// Returns false when no object was added (e.g. the user cancelled the load dialog).
bool add_model(bool imperial_units = false, std::string fname = "");
-3
View File
@@ -21,9 +21,6 @@
#include <wx/log.h>
#include <wx/webview.h>
#include <wx/utils.h>
#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
namespace Slic3r { namespace GUI {
-2
View File
@@ -57,8 +57,6 @@
#include "MainFrame.hpp"
#include <slic3r/GUI/Widgets/WebView.hpp>
namespace fs = boost::filesystem;
namespace Slic3r { namespace GUI {
wxDEFINE_EVENT(EVT_PROJECT_RELOAD, wxCommandEvent);
-3
View File
@@ -70,9 +70,6 @@
#include "DeviceCore/DevStorage.h"
#include "../Utils/Http.hpp"
#include "md4c/src/md4c-html.h"
#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
namespace Slic3r { namespace GUI {
-3
View File
@@ -120,9 +120,6 @@
#include "Notebook.hpp"
#include "BitmapCache.hpp"
#include "BindDialog.hpp"
#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
namespace Slic3r { namespace GUI {
-3
View File
@@ -61,9 +61,6 @@
#include "DeviceCore/DevManager.h"
#include "DeviceCore/DevStorage.h"
#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
namespace Slic3r {
namespace GUI {
-3
View File
@@ -77,9 +77,6 @@
#include "DeviceCore/DevStorage.h"
#include "libslic3r_version.h"
#include "slic3r/Utils/FileTransferUtils.hpp"
#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
namespace Slic3r {
-2
View File
@@ -78,8 +78,6 @@
#include "DeviceCore/DevStorage.h"
#include "FilamentBitmapUtils.hpp"
namespace fs = boost::filesystem;
using namespace Slic3r;
using namespace Slic3r::GUI;
-2
View File
@@ -79,8 +79,6 @@
#include <libslic3r/Utils.hpp>
#include "CreatePresetsDialog.hpp"
namespace fs = boost::filesystem;
using namespace nlohmann;
namespace Slic3r { namespace GUI {
@@ -52,9 +52,6 @@
#include <wx/webview.h>
#include <wx/string.h>
#include <wx/timer.h>
#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
namespace Slic3r { namespace GUI {
-3
View File
@@ -34,9 +34,6 @@
#include <wx/uri.h>
#include <wx/filename.h>
#include <wx/stdpaths.h>
#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
#if defined(__WIN32__) || defined(__WXMAC__)
#include "wx/private/jsscriptwrapper.h"
#endif
-3
View File
@@ -40,9 +40,6 @@
#include "libslic3r/Config.hpp"
#include "Widgets/Label.hpp"
#include "MainFrame.hpp"
#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
using namespace Slic3r;
using namespace Slic3r::GUI;
-3
View File
@@ -58,9 +58,6 @@
#include "slic3r/GUI/OpenGLManager.hpp"
#include <utility>
#include "slic3r/GUI/Jobs/PrintJob.hpp"
#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
namespace Slic3r {
namespace GUI {
-2
View File
@@ -29,8 +29,6 @@
#include <vector>
#include <utility>
namespace fs = boost::filesystem;
using namespace Slic3r;
SCENARIO("Generic config validation performs as expected.", "[Config]") {