Files
Nexus/2023/scripts/rigging_tools/ngskintools2/ui/brush_settings_popup.py
2025-11-24 08:27:50 +08:00

67 lines
2.1 KiB
Python

from ngSkinTools2.api import PaintTool
from ngSkinTools2.api.paint import popups
from ngSkinTools2.api.pyside import QtCore, QtGui, QtWidgets
from ngSkinTools2.ui import qt, widgets
from ngSkinTools2.ui.layout import scale_multiplier
def brush_settings_popup(paint):
"""
:type paint: PaintTool
"""
window = QtWidgets.QWidget(qt.mainWindow)
window.setWindowFlags(QtCore.Qt.Popup | QtCore.Qt.FramelessWindowHint)
window.setAttribute(QtCore.Qt.WA_DeleteOnClose)
spacing = 5
layout = QtWidgets.QVBoxLayout()
layout.setSpacing(spacing)
intensity_slider = widgets.NumberSliderGroup()
widgets.set_paint_expo(intensity_slider, paint.paint_mode)
intensity_slider.set_value(paint.intensity)
@qt.on(intensity_slider.slider.sliderReleased, intensity_slider.spinner.editingFinished)
def close_with_slider_intensity():
close_with_intensity(intensity_slider.value())
def close_with_intensity(value):
paint.intensity = value
window.close()
def create_intensity_button(intensity):
btn = QtWidgets.QPushButton("{0:.3g}".format(intensity))
btn.clicked.connect(lambda: close_with_intensity(intensity))
btn.setMinimumWidth(60 * scale_multiplier)
btn.setMinimumHeight(30 * scale_multiplier)
return btn
layout.addLayout(intensity_slider.layout())
for values in [(0.0, 1.0), (0.25, 0.5, 0.75), (0.025, 0.05, 0.075, 0.1, 0.125)]:
row = QtWidgets.QHBoxLayout()
row.setSpacing(spacing)
for v in values:
row.addWidget(create_intensity_button(v))
layout.addLayout(row)
group = QtWidgets.QGroupBox("Brush Intensity")
group.setLayout(layout)
layout = QtWidgets.QVBoxLayout()
layout.setContentsMargins(4 * scale_multiplier, 4 * scale_multiplier, 4 * scale_multiplier, 4 * scale_multiplier)
layout.addWidget(group)
window.setLayout(layout)
window.show()
mp = QtGui.QCursor.pos()
window.move(mp.x() - window.size().width() / 2, mp.y() - window.size().height() / 2)
window.activateWindow()
popups.close_all()
popups.add(window)