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::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::rmb_drag }, "\a+\aChange hardness", texture_layout);
|
||||
generate_hotkey_row({FontNoggit::space, FontNoggit::lmb_drag }, "\a+\aChange pressure", texture_layout);
|
||||
generate_hotkey_row({FontNoggit::space, FontNoggit::mmb }, "\a+\aChange strength (gradient)", texture_layout);
|
||||
generate_hotkey_row({FontNoggit::space, FontNoggit::r }, "\a+\aToggle min and max strength (gradient)", 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 (strength)", 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 oapcity (gradient)", 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::shift, FontNoggit::mmb }, "\a+\aChange spray pressure", texture_layout);
|
||||
|
||||
@@ -98,12 +98,35 @@ namespace Noggit
|
||||
_pressure_slider->setValue (0.9f);
|
||||
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->setToolTip("Opacity");
|
||||
_brush_level_slider->setSliderPosition (_brush_level);
|
||||
|
||||
_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);
|
||||
|
||||
_brush_level_spin = new QSpinBox(tool_widget);
|
||||
@@ -773,8 +796,11 @@ namespace Noggit
|
||||
_render_type_group->addButton(_render_exclusion_map);
|
||||
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
|
||||
_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.");
|
||||
// if chunk contains texture/Effect : render as green or red if the effect layer is active or not
|
||||
_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_layout->addWidget(_render_placement_map, 1, 0);
|
||||
|
||||
|
||||
@@ -35,6 +35,79 @@ namespace Noggit
|
||||
class current_texture;
|
||||
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
|
||||
{
|
||||
paint,
|
||||
@@ -310,7 +383,7 @@ namespace Noggit
|
||||
texturing_mode _texturing_mode; // use getTexturingMode() to check for ground effect mode
|
||||
|
||||
private:
|
||||
QSlider* _brush_level_slider;
|
||||
OpacitySlider* _brush_level_slider;
|
||||
Noggit::Ui::Tools::UiCommon::ExtendedSlider* _hardness_slider;
|
||||
Noggit::Ui::Tools::UiCommon::ExtendedSlider* _radius_slider;
|
||||
Noggit::Ui::Tools::UiCommon::ExtendedSlider* _pressure_slider;
|
||||
|
||||
Reference in New Issue
Block a user