diff --git a/src/Mod/PartDesign/Gui/CMakeLists.txt b/src/Mod/PartDesign/Gui/CMakeLists.txt index 6bc83e47ec..91ba4e6679 100644 --- a/src/Mod/PartDesign/Gui/CMakeLists.txt +++ b/src/Mod/PartDesign/Gui/CMakeLists.txt @@ -217,6 +217,7 @@ SET(PartDesignGuiModule_SRCS PreCompiled.h SketchWorkflow.cpp SketchWorkflow.h + StyleParameters.h Utils.cpp Utils.h Workbench.cpp diff --git a/src/Mod/PartDesign/Gui/StyleParameters.h b/src/Mod/PartDesign/Gui/StyleParameters.h new file mode 100644 index 0000000000..7d54f4178c --- /dev/null +++ b/src/Mod/PartDesign/Gui/StyleParameters.h @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: LGPL-2.1-or-later +/**************************************************************************** + * * + * Copyright (c) 2025 Kacper Donat * + * * + * This file is part of FreeCAD. * + * * + * FreeCAD is free software: you can redistribute it and/or modify it * + * under the terms of the GNU Lesser General Public License as * + * published by the Free Software Foundation, either version 2.1 of the * + * License, or (at your option) any later version. * + * * + * FreeCAD is distributed in the hope that it will be useful, but * + * WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * + * Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with FreeCAD. If not, see * + * . * + * * + ***************************************************************************/ + +#ifndef STYLEPARAMETERS_H +#define STYLEPARAMETERS_H + +#include + +namespace PartDesignGui::StyleParameters { + DEFINE_STYLE_PARAMETER(PreviewAdditiveColor, Base::Color(0.0F, 1.0F, 0.6F)); + DEFINE_STYLE_PARAMETER(PreviewSubtractiveColor, Base::Color(1.0F, 0.0F, 0.0F)); + DEFINE_STYLE_PARAMETER(PreviewDressUpColor, Base::Color(1.0F, 0.0F, 1.0F)); + + DEFINE_STYLE_PARAMETER(PreviewErrorColor, Base::Color(1.0F, 0.0F, 0.0F)); + DEFINE_STYLE_PARAMETER(PreviewErrorTransparency, Gui::StyleParameters::Numeric(0.95)); + + DEFINE_STYLE_PARAMETER(PreviewToolTransparency, Gui::StyleParameters::Numeric(0.95)); + DEFINE_STYLE_PARAMETER(PreviewShapeTransparency, Gui::StyleParameters::Numeric(0.8)); + + DEFINE_STYLE_PARAMETER(PreviewLineWidth, Gui::StyleParameters::Numeric(2)); +} + +#endif //STYLEPARAMETERS_H diff --git a/src/Mod/PartDesign/Gui/ViewProvider.cpp b/src/Mod/PartDesign/Gui/ViewProvider.cpp index 6ba8634a34..6e1805e12a 100644 --- a/src/Mod/PartDesign/Gui/ViewProvider.cpp +++ b/src/Mod/PartDesign/Gui/ViewProvider.cpp @@ -33,6 +33,7 @@ #endif #include +#include #include #include #include @@ -51,6 +52,7 @@ #include #include "TaskFeatureParameters.h" +#include "StyleParameters.h" #include "ViewProvider.h" #include "ViewProviderPy.h" @@ -78,13 +80,14 @@ void ViewProvider::attach(App::DocumentObject* pcObject) { ViewProviderPart::attach(pcObject); - if (auto addSubFeature = getObject()) { - const Base::Color green(0.0F, 1.0F, 0.6F); - const Base::Color red(1.0F, 0.0F, 0.0F); + auto* styleParameterManager = Base::provideService(); + if (auto addSubFeature = getObject()) { bool isAdditive = addSubFeature->getAddSubType() == PartDesign::FeatureAddSub::Additive; - PreviewColor.setValue(isAdditive ? green : red); + PreviewColor.setValue( + isAdditive ? styleParameterManager->resolve(StyleParameters::PreviewAdditiveColor) + : styleParameterManager->resolve(StyleParameters::PreviewSubtractiveColor)); } } @@ -217,8 +220,12 @@ void ViewProvider::attachPreview() { ViewProviderPreviewExtension::attachPreview(); + auto* styleParameterManager = Base::provideService(); + + pcPreviewShape->lineWidth = styleParameterManager->resolve(StyleParameters::PreviewLineWidth).value; + pcToolPreview = new PartGui::SoPreviewShape; - pcToolPreview->transparency = 0.95F; + pcToolPreview->transparency = styleParameterManager->resolve(StyleParameters::PreviewToolTransparency).value; pcToolPreview->color.connectFrom(&pcPreviewShape->color); pcPreviewRoot->addChild(pcToolPreview); diff --git a/src/Mod/PartDesign/Gui/ViewProviderDressUp.cpp b/src/Mod/PartDesign/Gui/ViewProviderDressUp.cpp index 199226c984..d6a25dc858 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderDressUp.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderDressUp.cpp @@ -37,8 +37,11 @@ #include #include "ViewProviderDressUp.h" + +#include "StyleParameters.h" #include "TaskDressUpParameters.h" +#include #include using namespace PartDesignGui; @@ -50,8 +53,8 @@ void ViewProviderDressUp::attach(App::DocumentObject* pcObject) { ViewProvider::attach(pcObject); - const Base::Color magenta(1.0F, 0.0F, 1.0F); - PreviewColor.setValue(magenta); + auto* styleParameterManager = Base::provideService(); + PreviewColor.setValue(styleParameterManager->resolve(StyleParameters::PreviewDressUpColor)); setErrorState(false); } @@ -135,11 +138,14 @@ void ViewProviderDressUp::highlightReferences(const bool on) void ViewProviderDressUp::setErrorState(bool error) { - const Base::Color red(1.0, 0.0, 0.0); + auto* styleParameterManager = Base::provideService(); - constexpr float errorTransparency = 0.95F; - - pcPreviewShape->transparency = error ? errorTransparency : PartGui::SoPreviewShape::defaultTransparency; - pcPreviewShape->color = Base::convertTo(error ? red : PreviewColor.getValue()); + pcPreviewShape->transparency = styleParameterManager + ->resolve(error ? StyleParameters::PreviewErrorTransparency + : StyleParameters::PreviewShapeTransparency) + .value; + pcPreviewShape->color = error + ? styleParameterManager->resolve(StyleParameters::PreviewErrorColor).asValue() + : PreviewColor.getValue().asValue(); }