View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0017522 | Scribus | User Interface | public | 2025-05-13 20:33 | 2025-05-13 21:06 |
Reporter | nitramr | Assigned To | nitramr | ||
Priority | normal | Severity | feature | Reproducibility | N/A |
Status | assigned | Resolution | open | ||
Platform | Desktop PC | OS | Ubuntu | OS Version | 24.10 64-bit |
Product Version | 1.7.1.svn | ||||
Target Version | 1.7 milestone | ||||
Summary | 0017522: New Color Slider widget | ||||
Description | I made a new color slider that has the render logic inside the widget. In short term, it will replace the existing ScColorSlider. Supported Color Modes: - RGB - RGB Web - CMYK - Lab - HLC - HSV <- new - Shade <- new - Alpha <- new The patch implements the new color slider in color picker for alpha and shade settings. To replace the color slider in cmykfw widget, it takes more time. | ||||
Tags | No tags attached. | ||||
Patch | Yes | ||||
|
colorslider_2025-05-13_01.patch (10,348 bytes)
Index: scribus/CMakeLists_Sources.txt =================================================================== --- scribus/CMakeLists_Sources.txt (Revision 26867) +++ scribus/CMakeLists_Sources.txt (Arbeitskopie) @@ -562,6 +562,7 @@ ui/docks/dock_centralwidget.cpp ui/docks/dock_panelbase.cpp ui/widgets/color_button.cpp + ui/widgets/color_slider.cpp ui/widgets/combo_blendmode.cpp ui/widgets/combo_linestyle.cpp ui/widgets/dropdown_button.cpp Index: scribus/ui/colorpicker/colorpicker_color.cpp =================================================================== --- scribus/ui/colorpicker/colorpicker_color.cpp (Revision 26867) +++ scribus/ui/colorpicker/colorpicker_color.cpp (Arbeitskopie) @@ -26,6 +26,9 @@ languageChange(); + sliderAlpha->setMode(ColorSlider::Opacity); + sliderShade->setMode(ColorSlider::Shade); + connectSlots(); connect(sectionSwatches, &SectionContainer::sizeChanged, this, &ColorPickerColor::updateSize); } @@ -34,7 +37,9 @@ { connect(swatches, &ColorPickerColorSwatches::colorChanged, this, &ColorPickerColor::updateColorFromSwatches); connect(numberShade, &ScrSpinBox::valueChanged, this, &ColorPickerColor::updateColorShade); + connect(sliderShade, &ColorSlider::valueChanged, this, &ColorPickerColor::updateColorShade); connect(numberAlpha, &ScrSpinBox::valueChanged, this, &ColorPickerColor::updateColorAlpha); + connect(sliderAlpha, &ColorSlider::valueChanged, this, &ColorPickerColor::updateColorAlpha); } void ColorPickerColor::disconnectSlots() @@ -41,7 +46,9 @@ { disconnect(swatches, &ColorPickerColorSwatches::colorChanged, this, &ColorPickerColor::updateColorFromSwatches); disconnect(numberShade, &ScrSpinBox::valueChanged, this, &ColorPickerColor::updateColorShade); + disconnect(sliderShade, &ColorSlider::valueChanged, this, &ColorPickerColor::updateColorShade); disconnect(numberAlpha, &ScrSpinBox::valueChanged, this, &ColorPickerColor::updateColorAlpha); + disconnect(sliderAlpha, &ColorSlider::valueChanged, this, &ColorPickerColor::updateColorAlpha); } /* ********************************************************************************* * @@ -73,8 +80,10 @@ sectionSwatches->setVisible(true); numberShade->setVisible(false); labelShade->setVisible(false); + sliderShade->setVisible(false); numberAlpha->setVisible(false); labelAlpha->setVisible(false); + sliderAlpha->setVisible(false); break; case Context::Text: case Context::TextBackground: @@ -82,22 +91,28 @@ sectionSwatches->setVisible(true); numberShade->setVisible(true); labelShade->setVisible(true); + sliderShade->setVisible(true); numberAlpha->setVisible(false); labelAlpha->setVisible(false); + sliderAlpha->setVisible(false); break; case Context::Fill: sectionSwatches->setVisible(true); numberShade->setVisible(true); labelShade->setVisible(true); + sliderShade->setVisible(true); numberAlpha->setVisible(false); labelAlpha->setVisible(false); + sliderAlpha->setVisible(false); break; case Context::Line: sectionSwatches->setVisible(true); numberShade->setVisible(true); labelShade->setVisible(true); + sliderShade->setVisible(true); numberAlpha->setVisible(false); labelAlpha->setVisible(false); + sliderAlpha->setVisible(false); break; case Context::FillMask: case Context::LineMask: @@ -104,8 +119,10 @@ sectionSwatches->setVisible(false); numberShade->setVisible(false); labelShade->setVisible(false); + sliderShade->setVisible(false); numberAlpha->setVisible(true); labelAlpha->setVisible(true); + sliderAlpha->setVisible(true); isMask = true; break; case Context::DropShadow: @@ -112,8 +129,10 @@ sectionSwatches->setVisible(true); numberShade->setVisible(true); labelShade->setVisible(true); + sliderShade->setVisible(true); numberAlpha->setVisible(false); labelAlpha->setVisible(false); + sliderAlpha->setVisible(false); break; } @@ -183,12 +202,19 @@ void ColorPickerColor::setDoc(ScribusDoc *doc) { m_doc = doc; + sliderAlpha->setDoc(m_doc); + sliderShade->setDoc(m_doc); } void ColorPickerColor::setColorData(const CPColorData& color) { + if (!m_doc) + return; + m_color = color; + bool hasColor = m_color.Name != CommonStrings::tr_NoneColor; + // update UI + controls QSignalBlocker sigSwatches(swatches); swatches->setCurrentColor(m_color.Name); @@ -195,12 +221,20 @@ QSignalBlocker sigShade(numberShade); numberShade->setValue(m_color.Shade); - numberShade->setEnabled(m_color.Name != CommonStrings::tr_NoneColor); + numberShade->setEnabled(hasColor); QSignalBlocker sigAlpha(numberAlpha); numberAlpha->setValue(qRound(100 - (m_color.Opacity * 100))); - numberAlpha->setEnabled(m_color.Name != CommonStrings::tr_NoneColor); + numberAlpha->setEnabled(hasColor); + QSignalBlocker sigAlphaSlider(sliderAlpha); + sliderAlpha->setEnabled(hasColor); + sliderAlpha->setValues(m_color.Name, numberAlpha->value(), numberShade->value()); + + QSignalBlocker sigShadeSlider(sliderShade); + sliderShade->setEnabled(hasColor); + sliderShade->setValues(m_color.Name, numberAlpha->value(), numberShade->value()); + } void ColorPickerColor::languageChange() @@ -211,14 +245,33 @@ void ColorPickerColor::updateColorFromSwatches() { m_color.Name = swatches->currentColor(); - numberShade->setEnabled(m_color.Name != CommonStrings::tr_NoneColor); - numberAlpha->setEnabled(m_color.Name != CommonStrings::tr_NoneColor); + bool hasColor = m_color.Name != CommonStrings::tr_NoneColor; + + numberShade->setEnabled(hasColor); + sliderShade->setEnabled(hasColor); + sliderShade->setValues(m_color.Name, numberAlpha->value(), numberShade->value()); + numberAlpha->setEnabled(hasColor); + sliderAlpha->setEnabled(hasColor); + sliderAlpha->setValues(m_color.Name, numberAlpha->value(), numberShade->value()); + updateColor(); } void ColorPickerColor::updateColorShade() { + QObject* obj = sender(); + if( obj == sliderShade ) + { + QSignalBlocker sigBlocker(numberShade); + numberShade->setValue(sliderShade->value()); + } + else if( obj == numberShade ) + { + QSignalBlocker sigBlocker(sliderShade); + sliderShade->setValue(numberShade->value()); + } + m_color.Shade = numberShade->value(); updateColor(); } @@ -225,6 +278,18 @@ void ColorPickerColor::updateColorAlpha() { + QObject* obj = sender(); + if( obj == sliderAlpha ) + { + QSignalBlocker sigBlocker(numberAlpha); + numberAlpha->setValue(sliderAlpha->value()); + } + else if( obj == numberAlpha ) + { + QSignalBlocker sigBlocker(sliderAlpha); + sliderAlpha->setValue(numberAlpha->value()); + } + m_color.Opacity = (100 - numberAlpha->value()) / 100.0; updateColor(); } @@ -242,5 +307,3 @@ resize(w, sizeHint().height()); emit sizeChanged(); } - - Index: scribus/ui/colorpicker/colorpicker_color.ui =================================================================== --- scribus/ui/colorpicker/colorpicker_color.ui (Revision 26867) +++ scribus/ui/colorpicker/colorpicker_color.ui (Arbeitskopie) @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>300</width> - <height>122</height> + <height>112</height> </rect> </property> <property name="windowTitle"> @@ -46,8 +46,28 @@ <property name="spacing"> <number>4</number> </property> - <item row="1" column="2"> - <widget class="ScrSpinBox" name="numberAlpha"> + <item row="0" column="1"> + <widget class="ColorSlider" name="sliderShade"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="tickPosition"> + <enum>QSlider::TickPosition::TicksAbove</enum> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="ColorSlider" name="sliderAlpha"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="tickPosition"> + <enum>QSlider::TickPosition::TicksAbove</enum> + </property> + </widget> + </item> + <item row="0" column="2"> + <widget class="ScrSpinBox" name="numberShade"> <property name="suffix"> <string> %</string> </property> @@ -59,28 +79,28 @@ </property> </widget> </item> - <item row="1" column="1"> + <item row="1" column="0"> <widget class="QLabel" name="labelAlpha"> <property name="text"> <string>Opacity:</string> </property> <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + <set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set> </property> </widget> </item> - <item row="0" column="1"> + <item row="0" column="0"> <widget class="QLabel" name="labelShade"> <property name="text"> <string>Shade:</string> </property> <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + <set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set> </property> </widget> </item> - <item row="0" column="2"> - <widget class="ScrSpinBox" name="numberShade"> + <item row="1" column="2"> + <widget class="ScrSpinBox" name="numberAlpha"> <property name="suffix"> <string> %</string> </property> @@ -92,19 +112,6 @@ </property> </widget> </item> - <item row="1" column="0"> - <spacer name="horizontalSpacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>0</width> - <height>0</height> - </size> - </property> - </spacer> - </item> </layout> </item> <item> @@ -136,6 +143,11 @@ <header>ui/colorpicker/colorpicker_color_swatches.h</header> <container>1</container> </customwidget> + <customwidget> + <class>ColorSlider</class> + <extends>QSlider</extends> + <header>ui/widgets/color_slider.h</header> + </customwidget> </customwidgets> <tabstops> <tabstop>numberShade</tabstop> |
|
Not sure what's different on Mac. No numbers on the slider.. slider is higher |
Date Modified | Username | Field | Change |
---|---|---|---|
2025-05-13 20:33 | nitramr | New Issue | |
2025-05-13 20:33 | nitramr | Status | new => assigned |
2025-05-13 20:33 | nitramr | Assigned To | => nitramr |
2025-05-13 20:33 | nitramr | File Added: color_slider.zip | |
2025-05-13 20:33 | nitramr | File Added: colorslider_2025-05-13_01.patch | |
2025-05-13 20:33 | nitramr | File Added: preview.png | |
2025-05-13 21:06 | cbradney | Note Added: 0052524 | |
2025-05-13 21:06 | cbradney | File Added: image.png |