restore texture opacity slider visual
This commit is contained in:
@@ -209,10 +209,10 @@ namespace Noggit
|
|||||||
generate_hotkey_row({FontNoggit::ctrl, FontNoggit::shift, FontNoggit::alt, FontNoggit::lmb }, "\a+\a+\a+\aErase textures", texture_layout);
|
generate_hotkey_row({FontNoggit::ctrl, FontNoggit::shift, FontNoggit::alt, FontNoggit::lmb }, "\a+\a+\a+\aErase textures", texture_layout);
|
||||||
generate_hotkey_row({FontNoggit::shift, FontNoggit::lmb }, "\a+\aDraw texture or fills if chunk is empty", texture_layout);
|
generate_hotkey_row({FontNoggit::shift, FontNoggit::lmb }, "\a+\aDraw texture or fills if chunk is empty", texture_layout);
|
||||||
generate_hotkey_row({FontNoggit::alt, FontNoggit::lmb_drag }, "\a+\aChange radius", texture_layout);
|
generate_hotkey_row({FontNoggit::alt, FontNoggit::lmb_drag }, "\a+\aChange radius", texture_layout);
|
||||||
generate_hotkey_row({FontNoggit::alt, FontNoggit::rmb_drag }, "\a+\aChange hardness", texture_layout);
|
generate_hotkey_row({FontNoggit::alt, FontNoggit::rmb_drag }, "\a+\aChange hardness (falloff)", texture_layout);
|
||||||
generate_hotkey_row({FontNoggit::space, FontNoggit::lmb_drag }, "\a+\aChange pressure", texture_layout);
|
generate_hotkey_row({FontNoggit::space, FontNoggit::lmb_drag }, "\a+\aChange pressure (strength)", texture_layout);
|
||||||
generate_hotkey_row({FontNoggit::space, FontNoggit::mmb }, "\a+\aChange strength (gradient)", texture_layout);
|
generate_hotkey_row({FontNoggit::space, FontNoggit::mmb }, "\a+\aChange opacity (gradient)", texture_layout);
|
||||||
generate_hotkey_row({FontNoggit::space, FontNoggit::r }, "\a+\aToggle min and max strength (gradient)", texture_layout);
|
generate_hotkey_row({FontNoggit::space, FontNoggit::r }, "\a+\aToggle min and max oapcity (gradient)", texture_layout);
|
||||||
generate_hotkey_row({FontNoggit::t }, "\aToggle spray brush", texture_layout);
|
generate_hotkey_row({FontNoggit::t }, "\aToggle spray brush", texture_layout);
|
||||||
generate_hotkey_row({FontNoggit::alt, FontNoggit::mmb }, "\a+\aChange spray radius", texture_layout);
|
generate_hotkey_row({FontNoggit::alt, FontNoggit::mmb }, "\a+\aChange spray radius", texture_layout);
|
||||||
generate_hotkey_row({FontNoggit::shift, FontNoggit::mmb }, "\a+\aChange spray pressure", texture_layout);
|
generate_hotkey_row({FontNoggit::shift, FontNoggit::mmb }, "\a+\aChange spray pressure", texture_layout);
|
||||||
|
|||||||
@@ -98,11 +98,34 @@ namespace Noggit
|
|||||||
_pressure_slider->setValue (0.9f);
|
_pressure_slider->setValue (0.9f);
|
||||||
slider_layout_left->addWidget (_pressure_slider);
|
slider_layout_left->addWidget (_pressure_slider);
|
||||||
|
|
||||||
_brush_level_slider = new QSlider (Qt::Orientation::Vertical, tool_widget);
|
slider_layout_right->addWidget(new QLabel("Opacity:", tool_widget));
|
||||||
|
_brush_level_slider = new OpacitySlider(Qt::Orientation::Vertical, tool_widget);
|
||||||
_brush_level_slider->setRange (0, 255);
|
_brush_level_slider->setRange (0, 255);
|
||||||
|
_brush_level_slider->setToolTip("Opacity");
|
||||||
_brush_level_slider->setSliderPosition (_brush_level);
|
_brush_level_slider->setSliderPosition (_brush_level);
|
||||||
|
|
||||||
_brush_level_slider->setObjectName("texturing_brush_level_slider");
|
_brush_level_slider->setObjectName("texturing_brush_level_slider");
|
||||||
|
|
||||||
|
// TODO : couldn't figure out how to make QSlider::groove:vertical::background-color work, the themes broke it. so made a scuffed subclass of QSlider with a custom paintevent
|
||||||
|
|
||||||
|
/*
|
||||||
|
QString _brush_level_slider_style =
|
||||||
|
|
||||||
|
"QSlider#texturing_brush_level_slider::groove:vertical { \n "
|
||||||
|
" background-color: qlineargradient(x1:0.5, y1:0, x2:0.5, y2:1, stop: 0 black, stop: 1 white) !important; \n "
|
||||||
|
" width: 35px; \n"
|
||||||
|
" margin: 0 0 0 0; \n "
|
||||||
|
"} \n "
|
||||||
|
"QSlider#texturing_brush_level_slider::handle:vertical { \n"
|
||||||
|
" background-color: red; \n"
|
||||||
|
" height: 5px; \n"
|
||||||
|
"} \n"
|
||||||
|
"QSlider#texturing_brush_level_slider::vertical { \n"
|
||||||
|
" width: 35px; \n"
|
||||||
|
"} \n"
|
||||||
|
;
|
||||||
|
_brush_level_slider->setStyleSheet(_brush_level_slider_style);
|
||||||
|
*/
|
||||||
|
|
||||||
slider_layout_right->addWidget(_brush_level_slider, 0, Qt::AlignHCenter);
|
slider_layout_right->addWidget(_brush_level_slider, 0, Qt::AlignHCenter);
|
||||||
|
|
||||||
@@ -772,9 +795,12 @@ namespace Noggit
|
|||||||
_render_exclusion_map->setToolTip("Render chunk units where effect doodads are disabled as white, rest as black");
|
_render_exclusion_map->setToolTip("Render chunk units where effect doodads are disabled as white, rest as black");
|
||||||
_render_type_group->addButton(_render_exclusion_map);
|
_render_type_group->addButton(_render_exclusion_map);
|
||||||
render_layout->addWidget(_render_exclusion_map, 0, 1);
|
render_layout->addWidget(_render_exclusion_map, 0, 1);
|
||||||
|
|
||||||
_render_placement_map = new QRadioButton("Selected Texture state", this); // if chunk contains texture/Effect : render as green or red if the effect layer is active or not
|
// if chunk contains texture/Effect : render as green or red if the effect layer is active or not
|
||||||
_render_placement_map->setToolTip("Render chunk unit as red if texture is present in the chunk and NOT the current active layer, render as green if it's active. \nThis defines which of the 4 textures' set is currently active, this is determined by which has the highest opacity.");
|
_render_placement_map = new QRadioButton("Selected Texture state", this);
|
||||||
|
_render_placement_map->setToolTip("Render chunk unit as red if texture is present in the chunk and NOT the current \
|
||||||
|
active layer, render as green if it's active. \nThis defines which of the 4 textures' set is currently active,\
|
||||||
|
this is determined by which has the highest opacity.");
|
||||||
_render_type_group->addButton(_render_placement_map);
|
_render_type_group->addButton(_render_placement_map);
|
||||||
render_layout->addWidget(_render_placement_map, 1, 0);
|
render_layout->addWidget(_render_placement_map, 1, 0);
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,79 @@ namespace Noggit
|
|||||||
class current_texture;
|
class current_texture;
|
||||||
class texture_swapper;
|
class texture_swapper;
|
||||||
|
|
||||||
|
|
||||||
|
class OpacitySlider : public QSlider{
|
||||||
|
public:
|
||||||
|
OpacitySlider(Qt::Orientation orientation, QWidget * parent = nullptr)
|
||||||
|
: QSlider(orientation, parent) {
|
||||||
|
setFixedWidth(35);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void paintEvent(QPaintEvent * event) override {
|
||||||
|
// QSlider::paintEvent(event);
|
||||||
|
|
||||||
|
// chat-gpt code, can probably be improved...
|
||||||
|
|
||||||
|
QPainter p(this);
|
||||||
|
QStyleOptionSlider opt;
|
||||||
|
initStyleOption(&opt);
|
||||||
|
opt.subControls = QStyle::SC_SliderGroove | QStyle::SC_SliderHandle;
|
||||||
|
if (tickPosition() != NoTicks)
|
||||||
|
opt.subControls |= QStyle::SC_SliderTickmarks;
|
||||||
|
if (isSliderDown()) {
|
||||||
|
opt.activeSubControls = QStyle::SC_SliderHandle;
|
||||||
|
opt.state |= QStyle::State_Sunken;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
opt.activeSubControls = QStyle::SC_None;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw the groove with a linear gradient
|
||||||
|
QRect grooveRect = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderGroove, this);
|
||||||
|
grooveRect.setLeft((width() - 35) / 2);
|
||||||
|
grooveRect.setRight((width() + 35) / 2);
|
||||||
|
QLinearGradient gradient(grooveRect.topLeft(), grooveRect.bottomLeft());
|
||||||
|
gradient.setColorAt(0, Qt::black);
|
||||||
|
gradient.setColorAt(1, Qt::white);
|
||||||
|
p.fillRect(grooveRect.adjusted(0, 0, -1, -1), gradient);
|
||||||
|
|
||||||
|
// Draw the handle with red color
|
||||||
|
QRect handleRect = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, this);
|
||||||
|
handleRect.setLeft((width() - 35) / 2);
|
||||||
|
handleRect.setRight((width() + 35) / 2);
|
||||||
|
handleRect.setHeight(5); // Set handle height to 5
|
||||||
|
p.setBrush(Qt::red);
|
||||||
|
p.setPen(Qt::NoPen);
|
||||||
|
p.drawRect(handleRect);
|
||||||
|
|
||||||
|
// Draw the ticks if needed
|
||||||
|
if (tickPosition() != NoTicks) {
|
||||||
|
opt.subControls = QStyle::SC_SliderTickmarks;
|
||||||
|
style()->drawComplexControl(QStyle::CC_Slider, &opt, &p, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
// QSlider::paintEvent() source code :
|
||||||
|
/*
|
||||||
|
Q_D(QSlider);
|
||||||
|
QPainter p(this);
|
||||||
|
QStyleOptionSlider opt;
|
||||||
|
initStyleOption(&opt);
|
||||||
|
opt.subControls = QStyle::SC_SliderGroove | QStyle::SC_SliderHandle;
|
||||||
|
if (d->tickPosition != NoTicks)
|
||||||
|
opt.subControls |= QStyle::SC_SliderTickmarks;
|
||||||
|
if (d->pressedControl) {
|
||||||
|
opt.activeSubControls = d->pressedControl;
|
||||||
|
opt.state |= QStyle::State_Sunken;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
opt.activeSubControls = d->hoverControl;
|
||||||
|
}
|
||||||
|
style()->drawComplexControl(QStyle::CC_Slider, &opt, &p, this);
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
enum class texturing_mode
|
enum class texturing_mode
|
||||||
{
|
{
|
||||||
paint,
|
paint,
|
||||||
@@ -310,7 +383,7 @@ namespace Noggit
|
|||||||
texturing_mode _texturing_mode; // use getTexturingMode() to check for ground effect mode
|
texturing_mode _texturing_mode; // use getTexturingMode() to check for ground effect mode
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QSlider* _brush_level_slider;
|
OpacitySlider* _brush_level_slider;
|
||||||
Noggit::Ui::Tools::UiCommon::ExtendedSlider* _hardness_slider;
|
Noggit::Ui::Tools::UiCommon::ExtendedSlider* _hardness_slider;
|
||||||
Noggit::Ui::Tools::UiCommon::ExtendedSlider* _radius_slider;
|
Noggit::Ui::Tools::UiCommon::ExtendedSlider* _radius_slider;
|
||||||
Noggit::Ui::Tools::UiCommon::ExtendedSlider* _pressure_slider;
|
Noggit::Ui::Tools::UiCommon::ExtendedSlider* _pressure_slider;
|
||||||
|
|||||||
Reference in New Issue
Block a user