View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0017180 | Scribus | Properties Palette | public | 2024-03-23 22:29 | 2024-06-12 21:34 |
Reporter | nitramr | Assigned To | nitramr | ||
Priority | normal | Severity | feature | Reproducibility | N/A |
Status | assigned | Resolution | open | ||
Platform | Desktop PC | OS | Ubuntu | OS Version | 23.10 64-bit |
Product Version | 1.7 milestone | ||||
Target Version | 1.7.0 | ||||
Summary | 0017180: Indigo UI: Properties Palette Redesign | ||||
Description | Redesign of PP reached the next milestone. # What's new? - New "Attribute" section for item name and print option - New "Fill" section for fill specific properties - Colors, gradient, hatch and patterns are represented in a small preview widget (ColorButton) - New Color Picker to edit colors, gradients, hatch and pattern - Color Picker includes gradient vector editing too # What has been replaced? - Colors section - Transparency section # Qt Designer Plugins - New SectionContainer widget Patch is tested under Ubuntu and MacOS | ||||
Tags | No tags attached. | ||||
Patch | Yes | ||||
related to | 0011417 | closed | nitramr | Reduced size of the "Colours" tab in the PP |
related to | 0015813 | new | Indigo UI: remove the item name from the Properties Palette | |
related to | 0015896 | new | [PATCH] Indigo UI: shrink the size of the XYZ pane | |
related to | 0015899 | new | [PATCH] Indigo UI: add an advanced section for the item name | |
related to | 0009694 | closed | nitramr | Properties palette section switching |
related to | 0006044 | resolved | nitramr | Properties Palette could use far less screen estate |
related to | 0015915 | assigned | ale | Indigo UI: refactor the Color and Line panels |
related to | 0014085 | resolved | nitramr | Properties palette is confusing under Windows 10 |
related to | 0010785 | new | UI : Improve color dropdown select icons | |
related to | 0009569 | closed | nitramr | Proposal for UI: Split properties window into simple single windows (plus 0001348) |
|
|
|
eager to see this in action! first reaction, without having applied the patch... one small nitpick: - "Blend Mode" should probably be two words (can be fixed after applying the patch) two comments: - from a first when the labels are off that the only widgets that are not "recognizable" are "Color" and "Mask". not sure if it's worth to try to find a way to make them have a visible difference (i guess that time will tell... and, until then, the tooltip is enough) - in the "custom type of line", value and offset can probably go on a single line (can be changed in a later iteration) thanks for this patch! |
|
Hi ale, thanks for your feedback. :) >> from a first when the labels are off that the only widgets that are not "recognizable" are "Color" and "Mask". That is true, when you turn off the additional labels it will show a small "mask" indicator icon. >> until then, the tooltip is enough Currently, the tooltip is used to provide more information of what you see, like "Color: %colorname%", or "Gradient: %gradientname%" >> in the "custom type of line", value and offset can probably go on a single line (can be changed in a later iteration) Yes, there are more places that can be optimized. I'm also not happy with the style picker. Also, your proposal to edit styles from this place is missing. At this point, it is a new foundation to implement or optimize more things. But for now I think it is fine, and we should test and stabilize it before apply further changes. I'm happy to get more feedback. Especially if something is not behaving correctly. I tested a lot and compared the behavior with 1.6.1, but I can't be sure that everything is working like it should be after those many changes I did. |
|
Fixed patch, there were missing files. propertiespalette_2024-03-25_01.patch (1,015,826 bytes)
Index: Scribus.pro =================================================================== --- Scribus.pro (Revision 26070) +++ Scribus.pro (Arbeitskopie) @@ -429,8 +429,7 @@ scribus/ui/colorchart.h \ scribus/ui/colorcombo.h \ scribus/ui/colorlistbox.h \ - scribus/ui/colorlistmodel.h \ - scribus/ui/colorpalette.h \ + scribus/ui/colorlistmodel.h \ scribus/ui/colorsandfills.h \ scribus/ui/contentpalette.h \ scribus/ui/contentpalette_default.h \ @@ -462,7 +461,6 @@ scribus/ui/gradientaddedit.h \ scribus/ui/gradienteditor.h \ scribus/ui/gradientpreview.h \ - scribus/ui/gradientvectordialog.h \ scribus/ui/gtdialogs.h \ scribus/ui/gtfiledialog.h \ scribus/ui/guidemanager.h \ @@ -658,8 +656,7 @@ scribus/ui/tabpdfoptions.h \ scribus/ui/tabruler.h \ scribus/ui/textpalette.h \ - scribus/ui/transformdialog.h \ - scribus/ui/transparencypalette.h \ + scribus/ui/transformdialog.h \ scribus/ui/unicodesearch.h \ scribus/ui/useprintermarginsdialog.h \ scribus/ui/viewtoolbar.h \ @@ -1609,8 +1606,7 @@ scribus/ui/fontreplacedialog.cpp \ scribus/ui/gradientaddedit.cpp \ scribus/ui/gradienteditor.cpp \ - scribus/ui/gradientpreview.cpp \ - scribus/ui/gradientvectordialog.cpp \ + scribus/ui/gradientpreview.cpp \ scribus/ui/gtdialogs.cpp \ scribus/ui/gtfiledialog.cpp \ scribus/ui/guidemanager.cpp \ Index: resources/iconsets/1_7_0/16/action-chevron-down.svg =================================================================== Kann nicht anzeigen: Dateityp ist als binär angegeben. svn:mime-type = image/svg+xml Index: resources/iconsets/1_7_0/16/action-chevron-up.svg =================================================================== Kann nicht anzeigen: Dateityp ist als binär angegeben. svn:mime-type = image/svg+xml Index: resources/iconsets/1_7_0/16/action-menu.svg =================================================================== --- resources/iconsets/1_7_0/16/action-menu.svg (nicht existent) +++ resources/iconsets/1_7_0/16/action-menu.svg (Arbeitskopie) @@ -0,0 +1,3 @@ +<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><style>@import '../colors.css';</style> +<path fill-rule="evenodd" clip-rule="evenodd" d="M9 3.5C9 4.32843 8.32843 5 7.5 5C6.67157 5 6 4.32843 6 3.5C6 2.67157 6.67157 2 7.5 2C8.32843 2 9 2.67157 9 3.5ZM9 11.5C9 12.3284 8.32843 13 7.5 13C6.67157 13 6 12.3284 6 11.5C6 10.6716 6.67157 10 7.5 10C8.32843 10 9 10.6716 9 11.5ZM7.5 9C8.32843 9 9 8.32843 9 7.5C9 6.67157 8.32843 6 7.5 6C6.67157 6 6 6.67157 6 7.5C6 8.32843 6.67157 9 7.5 9Z"/> +</svg> Index: resources/iconsets/1_7_0/16/colorpicker-gradient.svg =================================================================== --- resources/iconsets/1_7_0/16/colorpicker-gradient.svg (nicht existent) +++ resources/iconsets/1_7_0/16/colorpicker-gradient.svg (Arbeitskopie) @@ -0,0 +1,10 @@ +<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><style>@import '../colors.css';</style> +<path fill-rule="evenodd" clip-rule="evenodd" d="M15 1H1V15H15V1ZM14 2H2V14H14V2Z"/> +<rect x="2" y="2" width="12" height="12" fill="url(#paint0_linear_1147_8)"/> +<defs> +<linearGradient id="paint0_linear_1147_8" x1="14" y1="8" x2="2" y2="8" gradientUnits="userSpaceOnUse"> +<stop stop-color="white" stop-opacity="0"/> +<stop offset="1"/> +</linearGradient> +</defs> +</svg> Index: resources/iconsets/1_7_0/16/colorpicker-hatch.svg =================================================================== --- resources/iconsets/1_7_0/16/colorpicker-hatch.svg (nicht existent) +++ resources/iconsets/1_7_0/16/colorpicker-hatch.svg (Arbeitskopie) @@ -0,0 +1,3 @@ +<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><style>@import '../colors.css';</style> +<path fill-rule="evenodd" clip-rule="evenodd" d="M1 1H15V1.99995L15 1.99998L15 1.99999V4.99995L15 4.99998L15 4.99999V7.99995L15 7.99998L15 7.99999V10.9999L15 11L15 11V15H1V1ZM14 10.2614V8.30768L2.00001 12L2 12V13.9537L14 10.2614ZM5.24996 14L14 11.3077V14H5.24996ZM2 10.9537L14 7.26141V5.30768L2.00001 8.99998L2 8.99995V10.9537ZM2 7.95372L14 4.26141V2.30768L2.00001 5.99998L2 5.99995V7.95372ZM2 4.95372L11.5996 2H2V4.95372Z"/> +</svg> Index: resources/iconsets/1_7_0/16/colorpicker-pattern.svg =================================================================== --- resources/iconsets/1_7_0/16/colorpicker-pattern.svg (nicht existent) +++ resources/iconsets/1_7_0/16/colorpicker-pattern.svg (Arbeitskopie) @@ -0,0 +1,3 @@ +<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><style>@import '../colors.css';</style> +<path fill-rule="evenodd" clip-rule="evenodd" d="M15 1H1V15H15V1ZM11 2H8V5H5V2H2V5H5V8H2V11H5V14H8V11H11V14H14V11H11V8H14V5H11V2ZM8 8V11H5V8H8ZM8 8H11V5H8V8Z"/> +</svg> Index: resources/iconsets/1_7_0/16/colorpicker-solid.svg =================================================================== --- resources/iconsets/1_7_0/16/colorpicker-solid.svg (nicht existent) +++ resources/iconsets/1_7_0/16/colorpicker-solid.svg (Arbeitskopie) @@ -0,0 +1,4 @@ +<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><style>@import '../colors.css';</style> +<path fill-rule="evenodd" clip-rule="evenodd" d="M15 1H1V15H15V1ZM14 2H2V14H14V2Z"/> +<rect x="2" y="2" width="12" height="12" fill-opacity="0.4"/> +</svg> Index: resources/iconsets/1_7_0/1_7_0.xml =================================================================== --- resources/iconsets/1_7_0/1_7_0.xml (Revision 26070) +++ resources/iconsets/1_7_0/1_7_0.xml (Arbeitskopie) @@ -147,6 +147,7 @@ <icon id="erase-shadow-off" file="16/action-shadow-erase-off.svg" /> <icon id="swap" file="16/action-swap.svg" /> <icon id="toggle-object-coordination" file="16/object-xycoordination.svg" /> + <icon id="context-menu" file="16/action-menu.svg" /> <!-- Alerts --> <icon onLight="#E54545" onDark="#FF6666" id="22/dialog-error.png" file="16/alert-error.svg" /> @@ -217,6 +218,11 @@ <icon id="rgb.png" file="16/color-rgb.svg" /> <icon id="cmyk.png" file="16/color-cmyk.svg" /> <icon id="lab.png" file="16/color-lab.svg" /> + <icon id="colorpicker-gradient" file="16/colorpicker-gradient.svg" /> + <icon id="colorpicker-hatch" file="16/colorpicker-hatch.svg" /> + <icon id="colorpicker-pattern" file="16/colorpicker-pattern.svg" /> + <icon id="colorpicker-solid" file="16/colorpicker-solid.svg" /> + <icon id="mask" file="16/color-mask.svg" /> <!-- Cursor --> <icon id="LinkTextFrame.png" file="32/cursor-link-text-frame.svg" /> @@ -552,6 +558,7 @@ <icon id="/16/story-editor.png" file="16/tool-story-editor.svg" /> <icon id="16/story-editor.png" file="16/tool-story-editor.svg" /> <icon id="22/story-editor.png" file="16/tool-story-editor.svg" /> + <icon id="gradient-edit" file="16/colorpicker-gradient.svg" /> <icon id="16/text-frame-link.png" file="16/tool-link-text-frame.svg" /> <icon id="22/text-frame-link.png" file="16/tool-link-text-frame.svg" /> <icon id="16/text-frame-unlink.png" file="16/tool-unlink-text-frame.svg" /> Index: resources/iconsets/1_7_0/checker.svg =================================================================== Kann nicht anzeigen: Dateityp ist als binär angegeben. svn:mime-type = image/svg+xml Index: scribus/CMakeLists.txt =================================================================== --- scribus/CMakeLists.txt (Revision 26070) +++ scribus/CMakeLists.txt (Arbeitskopie) @@ -331,6 +331,9 @@ PRIVATE designer/uiwidgets.h designer/uiwidgets.cpp designer/formwidget_plugin.h designer/formwidget_plugin.cpp + designer/sectioncontainer_extension.h designer/sectioncontainer_extension.cpp + designer/sectioncontainer_extensionfactory.h designer/sectioncontainer_extensionfactory.cpp + designer/sectioncontainer_plugin.h designer/sectioncontainer_plugin.cpp ) add_subdirectory(plugins) Index: scribus/CMakeLists_Sources.txt =================================================================== --- scribus/CMakeLists_Sources.txt (Revision 26070) +++ scribus/CMakeLists_Sources.txt (Arbeitskopie) @@ -259,6 +259,8 @@ imagedataloaders/scimgdataloader_tiff.cpp imagedataloaders/scimgdataloader_wpg.cpp manager/dock_manager.cpp + manager/widget_manager.cpp + models/gradientlistmodel.cpp palettes/cxfcolor.cpp palettes/cxfcolorspecification.cpp palettes/cxfdocument.cpp @@ -306,7 +308,6 @@ ui/colorcombo.cpp ui/colorlistbox.cpp ui/colorlistmodel.cpp - ui/colorpalette.cpp ui/colorsandfills.cpp ui/contentpalette.cpp ui/contentpalette_default.cpp @@ -331,7 +332,6 @@ ui/fontreplacedialog.cpp ui/gradientaddedit.cpp ui/gradienteditor.cpp - ui/gradientvectordialog.cpp ui/gradientpreview.cpp ui/gtdialogs.cpp ui/gtfiledialog.cpp @@ -351,6 +351,7 @@ ui/layers.cpp ui/linecombo.cpp ui/linemarkerselector.cpp + ui/linestyleselector.cpp ui/linkbutton.cpp ui/loremipsum.cpp ui/mark2item.cpp @@ -430,7 +431,9 @@ ui/printlanguagecombo.cpp ui/printpreview.cpp ui/propertiespalette.cpp + ui/propertiespalette_attributes.cpp ui/propertiespalette_image.cpp + ui/propertiespalette_fill.cpp ui/propertiespalette_group.cpp ui/propertiespalette_line.cpp ui/propertiespalette_shadow.cpp @@ -524,7 +527,6 @@ ui/tabpdfoptions.cpp ui/tabruler.cpp ui/transformdialog.cpp - ui/transparencypalette.cpp tt/simpletreemodel/treeitem.cpp tt/simpletreemodel/treemodel.cpp ui/copypagetomasterpagedialog.cpp @@ -539,15 +541,27 @@ ui/vruler.cpp ui/useprintermarginsdialog.cpp ui/weldedit.cpp + ui/colorpicker/colorpicker.cpp + ui/colorpicker/colorpicker_color.cpp + ui/colorpicker/colorpicker_color_swatches.cpp + ui/colorpicker/colorpicker_gradient.cpp + ui/colorpicker/colorpicker_gradient_properties.cpp + ui/colorpicker/colorpicker_gradient_swatches.cpp + ui/colorpicker/colorpicker_hatch.cpp + ui/colorpicker/colorpicker_pattern.cpp ui/delegates/sclistitemdelegate.cpp ui/docks/dock_centralwidget.cpp ui/docks/dock_panelbase.cpp ui/widgets/color_button.cpp ui/widgets/combo_blendmode.cpp + ui/widgets/combo_linestyle.cpp + ui/widgets/floatingwindow.cpp + ui/widgets/form_widget.cpp + ui/widgets/gradientlistbox.cpp ui/widgets/popup_menu.cpp ui/widgets/section_container.cpp + ui/widgets/stacked_container.cpp ui/widgets/switch.cpp - ui/widgets/form_widget.cpp ${SCRIBUS_OSG_SRC} ${SCRIBUS_GMAGICK_SRC} ${SCRIBUS_JPEGXL_SRC} Index: scribus/canvasmode.cpp =================================================================== --- scribus/canvasmode.cpp (Revision 26070) +++ scribus/canvasmode.cpp (Arbeitskopie) @@ -76,22 +76,7 @@ m_doc(view->m_doc), undoManager(UndoManager::instance()) { - m_pen["outline"] = QPen(Qt::gray, 1.0 , Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); - m_pen["outline"].setCosmetic(true); - m_pen["selection"] = QPen(PrefsManager::instance().appPrefs.displayPrefs.frameColor, 1.0, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); - m_pen["selection"].setCosmetic(true); - m_pen["selection-group"] = QPen(Qt::red, 1.0 , Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); - m_pen["selection-group"].setCosmetic(true); - m_pen["selection-group-inside"] = QPen(PrefsManager::instance().appPrefs.displayPrefs.frameGroupColor, 1.0 , Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); - m_pen["selection-group-inside"].setCosmetic(true); - m_pen["handle"] = QPen(PrefsManager::instance().appPrefs.displayPrefs.frameColor, 1.0, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); - m_pen["handle"].setCosmetic(true); - - m_brush["outline"] = Qt::NoBrush; - m_brush["selection"] = Qt::NoBrush; - m_brush["selection-group"] = QColor(255,0,0,10); - m_brush["selection-group-inside"] = Qt::NoBrush; - m_brush["handle"] = PrefsManager::instance().appPrefs.displayPrefs.frameColor; + setStyle(); } CanvasMode::~CanvasMode() @@ -202,7 +187,7 @@ result = new CanvasMode_Normal(view); break; } - + return result; } @@ -215,58 +200,38 @@ void CanvasMode::drawSelectionHandles(QPainter *psx, QRectF selectionRect, bool background, bool insideGroup, double sx, double sy) { - m_pen["handle"] = QPen(PrefsManager::instance().appPrefs.displayPrefs.frameColor, 1.0, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); - m_pen["handle"].setCosmetic(true); - m_pen["selection-group-inside"] = QPen(PrefsManager::instance().appPrefs.displayPrefs.frameGroupColor, 1.0 , Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); - m_pen["selection-group-inside"].setCosmetic(true); - QPen ba(Qt::white, 3.0, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); - ba.setCosmetic(true); - double markWidth = 4.0 / m_canvas->scale(); - if (insideGroup) - markWidth /= qMax(sx, sy); - QRectF handleRect(0, 0, markWidth, markWidth); +// double markWidth = 4.0 / m_canvas->scale(); +// if (insideGroup) +// markWidth /= qMax(sx, sy); +// QRectF handleRect(0, 0, markWidth, markWidth); double x = selectionRect.x(); double y = selectionRect.y(); double w = selectionRect.width(); double h = selectionRect.height(); - psx->setBrush(Qt::white); - if (background) - psx->setPen(ba); - else - { +// psx->setBrush(Qt::white); + + QPen p = m_pen["selection-handle"]; + +// if (background) +// p = m_pen["frame-outline"]; +// else +// { if (insideGroup) - psx->setPen(m_pen["selection-group-inside"]); - else - psx->setPen(m_pen["handle"]); - } - handleRect.moveCenter(QPointF(x, y)); - psx->drawRect(handleRect); - handleRect.moveCenter(QPointF(x+w/2.0, y)); - psx->drawRect(handleRect); - handleRect.moveCenter(QPointF(x+w, y)); - psx->drawRect(handleRect); - handleRect.moveCenter(QPointF(x+w, y+h/2.0)); - psx->drawRect(handleRect); - handleRect.moveCenter(QPointF(x+w, y+h)); - psx->drawRect(handleRect); - handleRect.moveCenter(QPointF(x+w/2.0, y+h)); - psx->drawRect(handleRect); - handleRect.moveCenter(QPointF(x, y+h)); - psx->drawRect(handleRect); - handleRect.moveCenter(QPointF(x, y+h/2.0)); - psx->drawRect(handleRect); + p = m_pen["selection-group-inside"]; +// } + + drawSelectionHandle(psx, QPointF(x, y), p, m_canvas->scale()); + drawSelectionHandle(psx, QPointF(x+w/2.0, y), p, m_canvas->scale()); + drawSelectionHandle(psx, QPointF(x+w, y), p, m_canvas->scale()); + drawSelectionHandle(psx, QPointF(x+w, y+h/2.0), p, m_canvas->scale()); + drawSelectionHandle(psx, QPointF(x+w, y+h), p, m_canvas->scale()); + drawSelectionHandle(psx, QPointF(x+w/2.0, y+h), p, m_canvas->scale()); + drawSelectionHandle(psx, QPointF(x, y+h), p, m_canvas->scale()); + drawSelectionHandle(psx, QPointF(x, y+h/2.0), p, m_canvas->scale()); } void CanvasMode::drawSelection(QPainter* psx, bool drawHandles) { - m_pen["selection"] = QPen(PrefsManager::instance().appPrefs.displayPrefs.frameColor, 1.0, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); - m_pen["selection"].setCosmetic(true); - m_pen["selection-group-inside"] = QPen(PrefsManager::instance().appPrefs.displayPrefs.frameGroupColor, 1.0 , Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); - m_pen["selection-group-inside"].setCosmetic(true); - QPen ba(Qt::white, 3.0, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); - ba.setCosmetic(true); - QPen bb(Qt::black, 1.0, Qt::DotLine, Qt::FlatCap, Qt::MiterJoin); - bb.setCosmetic(true); psx->scale(m_canvas->scale(), m_canvas->scale()); psx->translate(-m_doc->minCanvasCoordinate.x(), -m_doc->minCanvasCoordinate.y()); psx->setClipping(true); @@ -310,9 +275,9 @@ x = currItem->asLine() ? 0 : -lineAdjust; y = currItem->asLine() ? 0 : -lineAdjust; } - psx->setBrush(Qt::NoBrush); - psx->setPen(ba); - psx->drawRect(QRectF(x, y, w, h)); +// psx->setBrush(Qt::NoBrush); +// psx->setPen(m_pen["frame-outline"]); +// psx->drawRect(QRectF(x, y, w, h)); psx->setPen(m_pen["selection-group-inside"]); psx->setBrush(m_brush["selection-group-inside"]); psx->drawRect(QRectF(x, y, w, h)); @@ -329,11 +294,11 @@ x = -lineAdjust; y = -lineAdjust; - psx->setBrush(Qt::NoBrush); - psx->setPen(ba); - psx->drawRect(QRectF(x, y, w, h)); - if (drawHandles) - drawSelectionHandles(psx, QRectF(x, y, w, h), true); +// psx->setBrush(Qt::NoBrush); +// psx->setPen(m_pen["frame-outline"]); +// psx->drawRect(QRectF(x, y, w, h)); +// if (drawHandles) +// drawSelectionHandles(psx, QRectF(x, y, w, h), true); psx->setPen(m_pen["selection-group"]); psx->setBrush(m_brush["selection-group"]); psx->drawRect(QRectF(x, y, w, h)); @@ -363,13 +328,13 @@ h = currItem->visualHeight(); x = currItem->asLine() ? 0 : (-currItem->visualLineWidth() / 2.0); y = -currItem->visualLineWidth() / 2.0; - psx->setBrush(Qt::NoBrush); +// psx->setBrush(Qt::NoBrush); QRectF drRect = QRectF(x, y, w, h).normalized(); if (m_doc->drawAsPreview && !m_doc->editOnPreview) { if (!currItem->annotation().IsOpen()) { - psx->setPen(bb); + psx->setPen(m_pen["frame-preview"]); psx->setBrush(Qt::NoBrush); psx->drawRect(drRect.adjusted(-1, -1, 1, 1)); } @@ -376,10 +341,10 @@ } else { - psx->setPen(ba); - psx->drawRect(drRect); - if (drawHandles) - drawSelectionHandles(psx, QRectF(x, y, w, h), true, true, sx, sy); +// psx->setPen(m_pen["frame-outline"]); +// psx->drawRect(drRect); +// if (drawHandles) +// drawSelectionHandles(psx, QRectF(x, y, w, h), true, true, sx, sy); psx->setPen(m_pen["selection-group-inside"]); psx->setBrush(m_brush["selection-group-inside"]); psx->drawRect(drRect); @@ -405,12 +370,12 @@ x = currItem->asLine() ? 0 : -lineAdjust; y = currItem->asLine() ? 0 : -lineAdjust; } - psx->setBrush(Qt::NoBrush); +// psx->setBrush(Qt::NoBrush); if (m_doc->drawAsPreview && !m_doc->editOnPreview) { if (!currItem->annotation().IsOpen()) { - psx->setPen(bb); + psx->setPen(m_pen["frame-preview"]); psx->setBrush(Qt::NoBrush); psx->drawRect(QRectF(x, y, w, h).adjusted(-1, -1, 1, 1)); } @@ -417,10 +382,10 @@ } else { - psx->setPen(ba); - psx->drawRect(QRectF(x, y, w, h)); - if (drawHandles && !currItem->locked() && !currItem->isLine()) - drawSelectionHandles(psx, QRectF(x, y, w, h), true); +// psx->setPen(m_pen["frame-outline"]); +// psx->drawRect(QRectF(x, y, w, h)); +// if (drawHandles && !currItem->locked() && !currItem->isLine()) +// drawSelectionHandles(psx, QRectF(x, y, w, h), true); psx->setPen(m_pen["selection"]); psx->setBrush(m_brush["selection"]); psx->drawRect(QRectF(x, y, w, h)); @@ -429,15 +394,9 @@ { if (currItem->isLine()) { - const double markWidth = 4.0 / m_canvas->scale(); - QRectF handleRect(0, 0, markWidth, markWidth); psx->setRenderHint(QPainter::Antialiasing); - psx->setBrush(Qt::white); - psx->setPen(m_pen["handle"]); - handleRect.moveCenter(QPointF(x, y + h / 2.0)); - psx->drawRect(handleRect); - handleRect.moveCenter(QPointF(x + w, y + h / 2.0)); - psx->drawRect(handleRect); + drawSelectionHandle(psx, QPointF(x, y + h / 2.0), m_pen["selection-handle"], m_canvas->scale()); + drawSelectionHandle(psx, QPointF(x + w, y + h / 2.0), m_pen["selection-handle"], m_canvas->scale()); } else drawSelectionHandles(psx, QRectF(x, y, w, h), false); @@ -444,11 +403,10 @@ } if (currItem->isWelded()) { - psx->setPen(QPen(Qt::yellow, 8.0 / m_canvas->scale(), Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin)); for (int i = 0 ; i < currItem->weldList.count(); i++) { PageItem::WeldingInfo wInf = currItem->weldList.at(i); - psx->drawPoint(QPointF(wInf.weldPoint.x(), wInf.weldPoint.y())); + drawWeldMarker(psx, QPointF(wInf.weldPoint.x(), wInf.weldPoint.y()), m_color["weld"], m_canvas->scale()); } } } @@ -502,8 +460,8 @@ if (currItem->isGroup()) { p->save(); - p->setBrush(m_brush["outline"]); - p->setPen(m_pen["outline"]); + p->setBrush(m_brush["frame-move"]); + p->setPen(m_pen["frame-move"]); p->setWorldTransform(itemTrans, true); if (matRot != 0) p->setRenderHint(QPainter::Antialiasing); @@ -548,8 +506,8 @@ else { p->save(); - p->setBrush(m_brush["outline"]); - p->setPen(m_pen["outline"]); + p->setBrush(m_brush["frame-move"]); + p->setPen(m_pen["frame-move"]); p->setWorldTransform(itemTrans, true); if (matRot != 0) p->setRenderHint(QPainter::Antialiasing); @@ -560,8 +518,8 @@ p->restore(); p->save(); - p->setBrush(m_brush["outline"]); - p->setPen(m_pen["outline"]); + p->setBrush(m_brush["frame-move"]); + p->setPen(m_pen["frame-move"]); p->setWorldTransform(itemTrans, true); if (matRot != 0) p->setRenderHint(QPainter::Antialiasing); @@ -619,8 +577,8 @@ #endif // GESTURE_FRAME_PREVIEW { p->save(); - p->setBrush(m_brush["outline"]); - p->setPen(m_pen["outline"]); + p->setBrush(m_brush["frame-move"]); + p->setPen(m_pen["frame-move"]); p->setWorldTransform(itemTrans, true); if (matRot != 0) p->setRenderHint(QPainter::Antialiasing); @@ -631,8 +589,8 @@ p->restore(); p->save(); - p->setBrush(m_brush["outline"]); - p->setPen(m_pen["outline"]); + p->setBrush(m_brush["frame-move"]); + p->setPen(m_pen["frame-move"]); p->setWorldTransform(itemTrans, true); if (matRot != 0) p->setRenderHint(QPainter::Antialiasing); @@ -642,8 +600,8 @@ } else { - p->setBrush(m_brush["outline"]); - p->setPen(m_pen["outline"]); + p->setBrush(m_brush["frame-move"]); + p->setPen(m_pen["frame-move"]); p->setWorldTransform(itemTrans, true); if (matRot != 0) p->setRenderHint(QPainter::Antialiasing); @@ -657,8 +615,8 @@ } else { - p->setBrush(m_brush["outline"]); - p->setPen(m_pen["outline"]); + p->setBrush(m_brush["frame-move"]); + p->setPen(m_pen["frame-move"]); p->translate(deltax, deltay); p->translate(x, y); p->drawRect(QRectF(0, 0, w, h)); @@ -845,6 +803,8 @@ void CanvasMode::commonDrawControls(QPainter* p, bool drawHandles) { + setStyle(); // reload pen and brush styles + if (m_canvas->m_viewMode.operItemMoving) drawOutline(p); else @@ -1746,14 +1706,63 @@ currItem->ContourLine.translate(xposOrig - currItem->xPos(),yposOrig - currItem->yPos()); m_doc->nodeEdit.finishTransaction(currItem); currItem->update(); - m_doc->regionsChanged()->update(currItem->getVisualBoundingRect()); + m_doc->regionsChanged()->update(currItem->getVisualBoundingRect()); } for (int i = 0; i < docSelectionCount; ++i) m_doc->m_Selection->itemAt(i)->checkChanges(true); if (docSelectionCount > 1 && m_view->groupTransactionStarted()) m_view->endGroupTransaction(); - m_doc->changedPagePreview(); + m_doc->changedPagePreview(); } break; } } + +void CanvasMode::setStyle() +{ + /* + Paper Fill = prefsData->displayPrefs.paperColor; // white + Scratch Space = prefsData->displayPrefs.scratchColor; // light grey + Selected Page Border = prefsData->displayPrefs.pageBorderColor; // red + Frames = prefsData->displayPrefs.frameNormColor; // black + Locked Frames = prefsData->displayPrefs.frameLockColor; // brown + Selected Frames = prefsData->displayPrefs.frameColor; // red + Linked Frames = prefsData->displayPrefs.frameLinkColor; // red + Grouped Frames = prefsData->displayPrefs.frameGroupColor; // dark teal + Annotation Frames = prefsData->displayPrefs.frameAnnotationColor; // blue + Text Control Characters = prefsData->displayPrefs.controlCharColor; // brown + */ + + m_color["frame-selection"] = PrefsManager::instance().appPrefs.displayPrefs.frameColor; + m_color["frame-group"] = PrefsManager::instance().appPrefs.displayPrefs.frameGroupColor; + m_color["frame"] = PrefsManager::instance().appPrefs.displayPrefs.frameNormColor; + m_color["frame-move"] = Qt::gray; + m_color["weld"] = QColor(214, 146, 43); + m_color["node"] = QColor(51, 132, 204); + m_color["test"] = Qt::magenta; + + m_pen["frame-move"] = QPen(m_color["frame-move"], 1.0 , Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); + m_pen["frame-move"].setCosmetic(true); + m_pen["frame-preview"] = QPen(Qt::black, 1.0, Qt::DotLine, Qt::FlatCap, Qt::MiterJoin); + m_pen["frame-preview"].setCosmetic(true); + m_pen["selection"] = QPen(m_color["frame-selection"], 1.0, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); + m_pen["selection"].setCosmetic(true); + m_pen["selection-handle"] = QPen(m_color["frame-selection"], 1.0, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); + m_pen["selection-handle"].setCosmetic(true); + m_pen["selection-group"] = m_pen["selection"]; + m_pen["selection-group-inside"] = QPen(m_color["frame-group"], 1.0 , Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); + m_pen["selection-group-inside"].setCosmetic(true); + m_pen["vector"] = QPen(m_color["node"], 1.0, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); + m_pen["vector"].setCosmetic(true); + m_pen["node"] = QPen(m_color["node"], 1.0, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); + m_pen["node"].setCosmetic(true); + m_pen["node-handle"] = QPen(m_color["node"], 1.0, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); + m_pen["node-handle"].setCosmetic(true); + m_pen["node-dash"] = QPen(m_color["node"], 1.0, Qt::DashLine, Qt::FlatCap, Qt::MiterJoin); + m_pen["node-dash"].setCosmetic(true); + + m_brush["frame-move"] = Qt::NoBrush; + m_brush["selection"] = Qt::NoBrush; + m_brush["selection-group"] = QColor(255,0,0,10); + m_brush["selection-group-inside"] = Qt::NoBrush; +} Index: scribus/canvasmode.h =================================================================== --- scribus/canvasmode.h (Revision 26070) +++ scribus/canvasmode.h (Arbeitskopie) @@ -19,7 +19,8 @@ #define CANVAS_MODE_H #include "scribusapi.h" -#include "scribusdoc.h" +#include "scribusdoc.h" +#include "util_gui.h" #include <QBrush> #include <QCursor> @@ -155,6 +156,9 @@ ScribusView* view() const { return m_view; } ~CanvasMode() override; + QMap<QString,QPen> pens() const { return m_pen; }; + QMap<QString,QBrush> brushes() const { return m_brush; }; + protected: ScribusView* const m_view; Canvas* const m_canvas; @@ -175,9 +179,12 @@ void commonkeyPressEvent_NormalNodeEdit(QKeyEvent *e); void commonkeyReleaseEvent(QKeyEvent *e); + void setStyle(); + private: QMap<QString,QPen> m_pen; QMap<QString,QBrush> m_brush; + QMap<QString,QColor> m_color; bool m_keyRepeat {false}; bool m_arrowKeyDown {false}; Index: scribus/canvasmode_editarc.cpp =================================================================== --- scribus/canvasmode_editarc.cpp (Revision 26070) +++ scribus/canvasmode_editarc.cpp (Arbeitskopie) @@ -81,13 +81,8 @@ void CanvasMode_EditArc::drawControlsArc(QPainter* psx, PageItem* currItem) { - QPen p1b = QPen(Qt::blue, 1.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); - QPen p1bd = QPen(Qt::blue, 1.0 / m_canvas->m_viewMode.scale, Qt::DotLine, Qt::FlatCap, Qt::MiterJoin); - QPen p8b = QPen(Qt::blue, 8.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin); - QPen p8r = QPen(Qt::red, 8.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin); - psx->setTransform(currItem->getTransform(), true); - psx->setPen(p1b); - psx->setBrush(Qt::NoBrush); + qreal scale = m_canvas->m_viewMode.scale; + QPainterPath pp; const PageItem_Arc* item = currItem->asArc(); QPointF mPoint = item->PoLine.pointQF(0); @@ -99,31 +94,31 @@ pp.moveTo(mPoint); pp.arcTo(QRectF(mPoint.x() - nWidth, mPoint.y() - nHeight, nWidth * 2, nHeight * 2), m_startAngle, nSweep); pp.closeSubpath(); + + psx->save(); + psx->setRenderHint(QPainter::Antialiasing); + + // Draw Vector Path + psx->setTransform(currItem->getTransform(), true); + psx->setPen(pens().value("vector")); + psx->setBrush(Qt::NoBrush); psx->drawPath(pp); - psx->setPen(p1bd); + + if (currItem->rotation() == 0 || currItem->rotation() == 90 || currItem->rotation() == 180 || currItem->rotation() == 270) + psx->setRenderHint(QPainter::Antialiasing, false); + + // Draw Handle lines + psx->setPen(pens().value("node-dash")); psx->drawLine(mPoint, m_widthPoint); psx->drawLine(mPoint, m_heightPoint); - psx->setPen(p8b); - if (m_arcPoint == useControlStart) - psx->setPen(p8r); - else - psx->setPen(p8b); - psx->drawPoint(m_startPoint); - if (m_arcPoint == useControlSweep) - psx->setPen(p8r); - else - psx->setPen(p8b); - psx->drawPoint(m_endPoint); - if (m_arcPoint == useControlWidth) - psx->setPen(p8r); - else - psx->setPen(p8b); - psx->drawPoint(m_widthPoint); - if (m_arcPoint == useControlHeight) - psx->setPen(p8r); - else - psx->setPen(p8b); - psx->drawPoint(m_heightPoint); + + // Draw Nodes + drawNodeHandle(psx, m_startPoint, pens().value("node"), scale, m_arcPoint == useControlStart); + drawNodeHandle(psx, m_endPoint, pens().value("node"), scale, m_arcPoint == useControlSweep); + drawNodeHandle(psx, m_widthPoint, pens().value("node"), scale, m_arcPoint == useControlWidth); + drawNodeHandle(psx, m_heightPoint, pens().value("node"), scale, m_arcPoint == useControlHeight); + + psx->restore(); } void CanvasMode_EditArc::enterEvent(QEvent *e) Index: scribus/canvasmode_editgradient.cpp =================================================================== --- scribus/canvasmode_editgradient.cpp (Revision 26070) +++ scribus/canvasmode_editgradient.cpp (Arbeitskopie) @@ -38,9 +38,9 @@ #include "scribusview.h" #include "selection.h" #include "ui/contextmenu.h" -#include "ui/propertiespalette.h" #include "undomanager.h" #include "util_math.h" +#include "util_gui.h" CanvasMode_EditGradient::CanvasMode_EditGradient(ScribusView* view) : CanvasMode(view), m_ScMW(view->m_ScMW) @@ -50,7 +50,7 @@ inline bool CanvasMode_EditGradient::GetItem(PageItem** pi) { - *pi = m_doc->m_Selection->itemAt(0); + *pi = m_doc->m_Selection->itemAt(0); return (*pi) != nullptr; } @@ -73,36 +73,48 @@ void CanvasMode_EditGradient::drawControlsGradientVectors(QPainter* psx, PageItem *currItem) { psx->setTransform(currItem->getTransform(), true); - psx->setPen(QPen(Qt::blue, 1.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin)); + psx->setRenderHint(QPainter::Antialiasing); + psx->setPen(pens().value("node-handle")); psx->setBrush(Qt::NoBrush); - if (m_view->editStrokeGradient == 1) + if (m_view->editStrokeGradient == GradientEdit::Gradient_Stroke) { + // Draw Start + End Nodes psx->drawLine(QPointF(currItem->GrStrokeStartX, currItem->GrStrokeStartY), QPointF(currItem->GrStrokeEndX, currItem->GrStrokeEndY)); - psx->setPen(QPen(Qt::magenta, 8.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin)); - psx->drawPoint(QPointF(currItem->GrStrokeStartX, currItem->GrStrokeStartY)); - psx->drawPoint(QPointF(currItem->GrStrokeEndX, currItem->GrStrokeEndY)); + drawNodeHandle(psx, QPointF(currItem->GrStrokeStartX, currItem->GrStrokeStartY), pens().value("node"), m_canvas->m_viewMode.scale); + drawNodeHandle(psx, QPointF(currItem->GrStrokeEndX, currItem->GrStrokeEndY), pens().value("node"), m_canvas->m_viewMode.scale); + double radEnd = distance(currItem->GrStrokeEndX - currItem->GrStrokeStartX, currItem->GrStrokeEndY - currItem->GrStrokeStartY); double rotEnd = xy2Deg(currItem->GrStrokeEndX - currItem->GrStrokeStartX, currItem->GrStrokeEndY - currItem->GrStrokeStartY); - QTransform qmatrix; - qmatrix.translate(currItem->GrStrokeStartX, currItem->GrStrokeStartY); - qmatrix.rotate(rotEnd); - double mask_gradientSkew = 0.0; - if (currItem->GrStrokeSkew == 90) - mask_gradientSkew = 1; - else if (currItem->GrStrokeSkew == 180) - mask_gradientSkew = 0; - else if (currItem->GrStrokeSkew == 270) - mask_gradientSkew = -1; - else if (currItem->GrStrokeSkew == 390) - mask_gradientSkew = 0; - else - mask_gradientSkew = tan(M_PI / 180.0 * currItem->GrStrokeSkew); - qmatrix.shear(mask_gradientSkew, 0); - qmatrix.translate(0, currItem->GrStrokeStartY * (1.0 - currItem->GrStrokeScale)); - qmatrix.translate(-currItem->GrStrokeStartX, -currItem->GrStrokeStartY); - qmatrix.scale(1, currItem->GrStrokeScale); + + // Draw Focal Control if (currItem->GrTypeStroke == Gradient_Radial) - psx->drawPoint(qmatrix.map(QPointF(currItem->GrStrokeFocalX, currItem->GrStrokeFocalY))); + { + QTransform qmatrix; + qmatrix.translate(currItem->GrStrokeStartX, currItem->GrStrokeStartY); + qmatrix.rotate(rotEnd); + double mask_gradientSkew = 0.0; + if (currItem->GrStrokeSkew == 90) + mask_gradientSkew = 1; + else if (currItem->GrStrokeSkew == 180) + mask_gradientSkew = 0; + else if (currItem->GrStrokeSkew == 270) + mask_gradientSkew = -1; + else if (currItem->GrStrokeSkew == 360) + mask_gradientSkew = 0; + else + mask_gradientSkew = tan(M_PI / 180.0 * currItem->GrStrokeSkew); + qmatrix.shear(mask_gradientSkew, 0); + qmatrix.translate(0, currItem->GrStrokeStartY * (1.0 - currItem->GrStrokeScale)); + qmatrix.translate(-currItem->GrStrokeStartX, -currItem->GrStrokeStartY); + qmatrix.scale(1, currItem->GrStrokeScale); + + QPointF focal = qmatrix.map(QPointF(currItem->GrStrokeFocalX, currItem->GrStrokeFocalY)); + psx->setPen(pens().value("node-dash")); + psx->drawLine(QPointF(currItem->GrStrokeStartX, currItem->GrStrokeStartY), focal); + drawNodeControl(psx, focal, pens().value("node"), m_canvas->m_viewMode.scale); + } + + // Draw Shear Control QTransform m; m.translate(currItem->GrStrokeStartX, currItem->GrStrokeStartY); m.rotate(rotEnd); @@ -110,39 +122,49 @@ m.rotate(currItem->GrStrokeSkew); m.translate(radEnd * currItem->GrStrokeScale, 0); QPointF shP = m.map(QPointF(0,0)); - psx->setPen(QPen(Qt::blue, 1.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin)); + psx->setPen(pens().value("node-handle")); psx->drawLine(QPointF(currItem->GrStrokeStartX, currItem->GrStrokeStartY), shP); - psx->setPen(QPen(Qt::magenta, 8.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin)); - psx->drawPoint(shP); + drawNodeControl(psx, shP, pens().value("node"), m_canvas->m_viewMode.scale); + } - else if (m_view->editStrokeGradient == 2) + else if (m_view->editStrokeGradient == GradientEdit::Gradient_Mask) { + // Draw Start + End Nodes psx->drawLine(QPointF(currItem->GrMaskStartX, currItem->GrMaskStartY), QPointF(currItem->GrMaskEndX, currItem->GrMaskEndY)); - psx->setPen(QPen(Qt::magenta, 8.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin)); - psx->drawPoint(QPointF(currItem->GrMaskStartX, currItem->GrMaskStartY)); - psx->drawPoint(QPointF(currItem->GrMaskEndX, currItem->GrMaskEndY)); + drawNodeHandle(psx, QPointF(currItem->GrMaskStartX, currItem->GrMaskStartY), pens().value("node"), m_canvas->m_viewMode.scale); + drawNodeHandle(psx, QPointF(currItem->GrMaskEndX, currItem->GrMaskEndY), pens().value("node"), m_canvas->m_viewMode.scale); + double radEnd = distance(currItem->GrMaskEndX - currItem->GrMaskStartX, currItem->GrMaskEndY - currItem->GrMaskStartY); double rotEnd = xy2Deg(currItem->GrMaskEndX - currItem->GrMaskStartX, currItem->GrMaskEndY - currItem->GrMaskStartY); - QTransform qmatrix; - qmatrix.translate(currItem->GrMaskStartX, currItem->GrMaskStartY); - qmatrix.rotate(rotEnd); - double mask_gradientSkew = 0.0; - if (currItem->GrMaskSkew == 90) - mask_gradientSkew = 1; - else if (currItem->GrMaskSkew == 180) - mask_gradientSkew = 0; - else if (currItem->GrMaskSkew == 270) - mask_gradientSkew = -1; - else if (currItem->GrMaskSkew == 390) - mask_gradientSkew = 0; - else - mask_gradientSkew = tan(M_PI / 180.0 * currItem->GrMaskSkew); - qmatrix.shear(mask_gradientSkew, 0); - qmatrix.translate(0, currItem->GrMaskStartY * (1.0 - currItem->GrMaskScale)); - qmatrix.translate(-currItem->GrMaskStartX, -currItem->GrMaskStartY); - qmatrix.scale(1, currItem->GrMaskScale); + + // Draw Focal Control if ((currItem->GrMask == GradMask_Radial) || (currItem->GrMask == GradMask_RadialLumAlpha)) - psx->drawPoint(qmatrix.map(QPointF(currItem->GrMaskFocalX, currItem->GrMaskFocalY))); + { + QTransform qmatrix; + qmatrix.translate(currItem->GrMaskStartX, currItem->GrMaskStartY); + qmatrix.rotate(rotEnd); + double mask_gradientSkew = 0.0; + if (currItem->GrMaskSkew == 90) + mask_gradientSkew = 1; + else if (currItem->GrMaskSkew == 180) + mask_gradientSkew = 0; + else if (currItem->GrMaskSkew == 270) + mask_gradientSkew = -1; + else if (currItem->GrMaskSkew == 360) + mask_gradientSkew = 0; + else + mask_gradientSkew = tan(M_PI / 180.0 * currItem->GrMaskSkew); + qmatrix.shear(mask_gradientSkew, 0); + qmatrix.translate(0, currItem->GrMaskStartY * (1.0 - currItem->GrMaskScale)); + qmatrix.translate(-currItem->GrMaskStartX, -currItem->GrMaskStartY); + qmatrix.scale(1, currItem->GrMaskScale); + + QPointF focal = qmatrix.map(QPointF(currItem->GrMaskFocalX, currItem->GrMaskFocalY)); + psx->setPen(pens().value("node-dash")); + psx->drawLine(QPointF(currItem->GrMaskStartX, currItem->GrMaskStartY), focal); + drawNodeControl(psx, focal, pens().value("node"), m_canvas->m_viewMode.scale); + } + // Draw Shear Control QTransform m; m.translate(currItem->GrMaskStartX, currItem->GrMaskStartY); m.rotate(rotEnd); @@ -150,42 +172,52 @@ m.rotate(currItem->GrMaskSkew); m.translate(radEnd * currItem->GrMaskScale, 0); QPointF shP = m.map(QPointF(0,0)); - psx->setPen(QPen(Qt::blue, 1.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin)); + psx->setPen(pens().value("node-handle")); psx->drawLine(QPointF(currItem->GrMaskStartX, currItem->GrMaskStartY), shP); - psx->setPen(QPen(Qt::magenta, 8.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin)); - psx->drawPoint(shP); + drawNodeControl(psx, shP, pens().value("node"), m_canvas->m_viewMode.scale); } - else if (m_view->editStrokeGradient == 0) + else if (m_view->editStrokeGradient == GradientEdit::Gradient) { + // Draw Start + End Nodes psx->drawLine(QPointF(currItem->GrStartX, currItem->GrStartY), QPointF(currItem->GrEndX, currItem->GrEndY)); - psx->setPen(QPen(Qt::magenta, 8.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin)); - psx->drawPoint(QPointF(currItem->GrStartX, currItem->GrStartY)); - psx->drawPoint(QPointF(currItem->GrEndX, currItem->GrEndY)); + drawNodeHandle(psx, QPointF(currItem->GrStartX, currItem->GrStartY), pens().value("node"), m_canvas->m_viewMode.scale); + drawNodeHandle(psx, QPointF(currItem->GrEndX, currItem->GrEndY), pens().value("node"), m_canvas->m_viewMode.scale); + double radEnd = distance(currItem->GrEndX - currItem->GrStartX, currItem->GrEndY - currItem->GrStartY); double rotEnd = xy2Deg(currItem->GrEndX - currItem->GrStartX, currItem->GrEndY - currItem->GrStartY); - QTransform qmatrix; - qmatrix.translate(currItem->GrStartX, currItem->GrStartY); - qmatrix.rotate(rotEnd); - if (currItem->GrType != Gradient_Conical) + + // Draw Focal Control + if ((currItem->GrType == Gradient_Radial) || (currItem->GrType == Gradient_Conical)) { - double mask_gradientSkew = 0.0; - if (currItem->GrSkew == 90) - mask_gradientSkew = 1; - else if (currItem->GrSkew == 180) - mask_gradientSkew = 0; - else if (currItem->GrSkew == 270) - mask_gradientSkew = -1; - else if (currItem->GrSkew == 390) - mask_gradientSkew = 0; - else - mask_gradientSkew = tan(M_PI / 180.0 * currItem->GrSkew); - qmatrix.shear(mask_gradientSkew, 0); + QTransform qmatrix; + qmatrix.translate(currItem->GrStartX, currItem->GrStartY); + qmatrix.rotate(rotEnd); + if (currItem->GrType != Gradient_Conical) + { + double mask_gradientSkew = 0.0; + if (currItem->GrSkew == 90) + mask_gradientSkew = 1; + else if (currItem->GrSkew == 180) + mask_gradientSkew = 0; + else if (currItem->GrSkew == 270) + mask_gradientSkew = -1; + else if (currItem->GrSkew == 360) + mask_gradientSkew = 0; + else + mask_gradientSkew = tan(M_PI / 180.0 * currItem->GrSkew); + qmatrix.shear(mask_gradientSkew, 0); + } + qmatrix.translate(0, currItem->GrStartY * (1.0 - currItem->GrScale)); + qmatrix.translate(-currItem->GrStartX, -currItem->GrStartY); + qmatrix.scale(1, currItem->GrScale); + + QPointF focal = qmatrix.map(QPointF(currItem->GrFocalX, currItem->GrFocalY)); + psx->setPen(pens().value("node-dash")); + psx->drawLine(QPointF(currItem->GrStartX, currItem->GrStartY), focal); + drawNodeControl(psx, focal, pens().value("node"), m_canvas->m_viewMode.scale); } - qmatrix.translate(0, currItem->GrStartY * (1.0 - currItem->GrScale)); - qmatrix.translate(-currItem->GrStartX, -currItem->GrStartY); - qmatrix.scale(1, currItem->GrScale); - if ((currItem->GrType == Gradient_Radial) || (currItem->GrType == Gradient_Conical)) - psx->drawPoint(qmatrix.map(QPointF(currItem->GrFocalX, currItem->GrFocalY))); + + // Draw Shear Control QTransform m; m.translate(currItem->GrStartX, currItem->GrStartY); m.rotate(rotEnd); @@ -193,27 +225,25 @@ m.rotate(currItem->GrSkew); m.translate(radEnd * currItem->GrScale, 0); QPointF shP = m.map(QPointF(0,0)); - psx->setPen(QPen(Qt::blue, 1.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin)); + psx->setPen(pens().value("node-handle")); psx->drawLine(QPointF(currItem->GrStartX, currItem->GrStartY), shP); - psx->setPen(QPen(Qt::magenta, 8.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin)); - psx->drawPoint(shP); + drawNodeControl(psx, shP, pens().value("node"), m_canvas->m_viewMode.scale); + } - else if (m_view->editStrokeGradient == 3) + else if (m_view->editStrokeGradient == GradientEdit::FourColors) { - psx->setPen(QPen(Qt::magenta, 8.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin)); - psx->drawPoint(QPointF(currItem->GrControl1.x(), currItem->GrControl1.y())); - psx->drawPoint(QPointF(currItem->GrControl2.x(), currItem->GrControl2.y())); - psx->drawPoint(QPointF(currItem->GrControl3.x(), currItem->GrControl3.y())); - psx->drawPoint(QPointF(currItem->GrControl4.x(), currItem->GrControl4.y())); + drawNodeHandle(psx, QPointF(currItem->GrControl1.x(), currItem->GrControl1.y()), pens().value("node"), m_canvas->m_viewMode.scale); + drawNodeHandle(psx, QPointF(currItem->GrControl2.x(), currItem->GrControl2.y()), pens().value("node"), m_canvas->m_viewMode.scale); + drawNodeHandle(psx, QPointF(currItem->GrControl3.x(), currItem->GrControl3.y()), pens().value("node"), m_canvas->m_viewMode.scale); + drawNodeHandle(psx, QPointF(currItem->GrControl4.x(), currItem->GrControl4.y()), pens().value("node"), m_canvas->m_viewMode.scale); } - else if (m_view->editStrokeGradient == 4) + else if (m_view->editStrokeGradient == GradientEdit::Diamond) { - psx->setPen(QPen(Qt::magenta, 8.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin)); - psx->drawPoint(QPointF(currItem->GrControl1.x(), currItem->GrControl1.y())); - psx->drawPoint(QPointF(currItem->GrControl2.x(), currItem->GrControl2.y())); - psx->drawPoint(QPointF(currItem->GrControl3.x(), currItem->GrControl3.y())); - psx->drawPoint(QPointF(currItem->GrControl4.x(), currItem->GrControl4.y())); - psx->drawPoint(QPointF(currItem->GrControl5.x(), currItem->GrControl5.y())); + drawNodeHandle(psx, QPointF(currItem->GrControl1.x(), currItem->GrControl1.y()), pens().value("node"), m_canvas->m_viewMode.scale); + drawNodeHandle(psx, QPointF(currItem->GrControl2.x(), currItem->GrControl2.y()), pens().value("node"), m_canvas->m_viewMode.scale); + drawNodeHandle(psx, QPointF(currItem->GrControl3.x(), currItem->GrControl3.y()), pens().value("node"), m_canvas->m_viewMode.scale); + drawNodeHandle(psx, QPointF(currItem->GrControl4.x(), currItem->GrControl4.y()), pens().value("node"), m_canvas->m_viewMode.scale); + drawNodeHandle(psx, QPointF(currItem->GrControl5.x(), currItem->GrControl5.y()), pens().value("node"), m_canvas->m_viewMode.scale); } } @@ -232,7 +262,7 @@ void CanvasMode_EditGradient::activate(bool fromGesture) { -// qDebug() << "CanvasMode_EditGradient::activate" << fromGesture; + // qDebug() << "CanvasMode_EditGradient::activate" << fromGesture; CanvasMode::activate(fromGesture); m_canvas->m_viewMode.m_MouseButtonPressed = false; @@ -252,7 +282,7 @@ void CanvasMode_EditGradient::deactivate(bool forGesture) { -// qDebug() << "CanvasMode_EditGradient::deactivate" << forGesture; + // qDebug() << "CanvasMode_EditGradient::deactivate" << forGesture; m_view->setRedrawMarkerShown(false); CanvasMode::deactivate(forGesture); } @@ -272,7 +302,7 @@ m->accept(); m_canvas->m_viewMode.m_MouseButtonPressed = false; m_canvas->resetRenderMode(); -// m_view->stopDragTimer(); + // m_view->stopDragTimer(); PageItem *currItem = nullptr; if ((m_doc->m_Selection->isMultipleSelection()) || (m_doc->appMode != modeNormal)) { @@ -317,7 +347,7 @@ double newY = mousePointDoc.y(); FPoint npx(m_Mxp - newX, m_Myp - newY, 0, 0, currItem->rotation(), 1, 1, true); QPointF np(npx.x(), npx.y()); - if (m_view->editStrokeGradient == 1) + if (m_view->editStrokeGradient == GradientEdit::Gradient_Stroke) { if (m_gradientPoint == useGradientStart) { @@ -351,7 +381,7 @@ mask_gradientSkew = 0; else if (currItem->GrStrokeSkew == 270) mask_gradientSkew = -1; - else if (currItem->GrStrokeSkew == 390) + else if (currItem->GrStrokeSkew == 360) mask_gradientSkew = 0; else mask_gradientSkew = tan(M_PI / 180.0 * currItem->GrStrokeSkew); @@ -412,7 +442,7 @@ } } } - else if (m_view->editStrokeGradient == 2) + else if (m_view->editStrokeGradient == GradientEdit::Gradient_Mask) { if (m_gradientPoint == useGradientStart) { @@ -446,7 +476,7 @@ mask_gradientSkew = 0; else if (currItem->GrMaskSkew == 270) mask_gradientSkew = -1; - else if (currItem->GrMaskSkew == 390) + else if (currItem->GrMaskSkew == 360) mask_gradientSkew = 0; else mask_gradientSkew = tan(M_PI / 180.0 * currItem->GrMaskSkew); @@ -507,7 +537,7 @@ } } } - else if (m_view->editStrokeGradient == 0) + else if (m_view->editStrokeGradient == GradientEdit::Gradient) { if (m_gradientPoint == useGradientStart) { @@ -543,7 +573,7 @@ mask_gradientSkew = 0; else if (currItem->GrSkew == 270) mask_gradientSkew = -1; - else if (currItem->GrSkew == 390) + else if (currItem->GrSkew == 360) mask_gradientSkew = 0; else mask_gradientSkew = tan(M_PI / 180.0 * currItem->GrSkew); @@ -609,7 +639,7 @@ } } } - else if (m_view->editStrokeGradient == 3) + else if (m_view->editStrokeGradient == GradientEdit::FourColors) { if (m_gradientPoint == useControl1) currItem->GrControl1 -= npx; @@ -620,7 +650,7 @@ else if (m_gradientPoint == useControl4) currItem->GrControl4 -= npx; } - else if (m_view->editStrokeGradient == 4) + else if (m_view->editStrokeGradient == GradientEdit::Diamond) { if (m_gradientPoint == useControl1) currItem->GrControl1 -= npx; @@ -635,10 +665,10 @@ } m_Mxp = newX; m_Myp = newY; -// m_view->RefreshGradient(currItem, dx * m_canvas->scale(), dy * m_canvas->scale()); - m_ScMW->propertiesPalette->updateColorSpecialGradient(); + // m_view->RefreshGradient(currItem, dx * m_canvas->scale(), dy * m_canvas->scale()); + // m_ScMW->propertiesPalette->updateColorSpecialGradient(); currItem->update(); -/* QRectF upRect; + /* QRectF upRect; if (m_view->editStrokeGradient == 1) { upRect = QRectF(QPointF(currItem->GrStrokeStartX, currItem->GrStrokeStartY), QPointF(currItem->GrStrokeEndX, currItem->GrStrokeEndY)); @@ -728,7 +758,7 @@ PageItem *currItem = m_doc->m_Selection->itemAt(0); QTransform itemMatrix = currItem->getTransform(); QPointF gradientStart, gradientEnd, gradientFocal, gradientScale, gradientCenter; - if (m_view->editStrokeGradient == 1) + if (m_view->editStrokeGradient == GradientEdit::Gradient_Stroke) { gradientStart = QPointF(currItem->GrStrokeStartX, currItem->GrStrokeStartY); gradientEnd = QPointF(currItem->GrStrokeEndX, currItem->GrStrokeEndY); @@ -751,7 +781,7 @@ mask_gradientSkew = 0; else if (currItem->GrStrokeSkew == 270) mask_gradientSkew = -1; - else if (currItem->GrStrokeSkew == 390) + else if (currItem->GrStrokeSkew == 360) mask_gradientSkew = 0; else mask_gradientSkew = tan(M_PI / 180.0 * currItem->GrStrokeSkew); @@ -761,7 +791,7 @@ qmatrix.scale(1, currItem->GrStrokeScale); gradientFocal = qmatrix.map(QPointF(currItem->GrStrokeFocalX, currItem->GrStrokeFocalY)); } - else if (m_view->editStrokeGradient == 2) + else if (m_view->editStrokeGradient == GradientEdit::Gradient_Mask) { gradientStart = QPointF(currItem->GrMaskStartX, currItem->GrMaskStartY); gradientEnd = QPointF(currItem->GrMaskEndX, currItem->GrMaskEndY); @@ -784,7 +814,7 @@ mask_gradientSkew = 0; else if (currItem->GrMaskSkew == 270) mask_gradientSkew = -1; - else if (currItem->GrMaskSkew == 390) + else if (currItem->GrMaskSkew == 360) mask_gradientSkew = 0; else mask_gradientSkew = tan(M_PI / 180.0 * currItem->GrMaskSkew); @@ -794,7 +824,7 @@ qmatrix.scale(1, currItem->GrMaskScale); gradientFocal = qmatrix.map(QPointF(currItem->GrMaskFocalX, currItem->GrMaskFocalY)); } - else if (m_view->editStrokeGradient == 0) + else if (m_view->editStrokeGradient == GradientEdit::Gradient) { gradientStart = QPointF(currItem->GrStartX, currItem->GrStartY); gradientEnd = QPointF(currItem->GrEndX, currItem->GrEndY); @@ -819,7 +849,7 @@ mask_gradientSkew = 0; else if (currItem->GrSkew == 270) mask_gradientSkew = -1; - else if (currItem->GrSkew == 390) + else if (currItem->GrSkew == 360) mask_gradientSkew = 0; else mask_gradientSkew = tan(M_PI / 180.0 * currItem->GrSkew); @@ -830,7 +860,7 @@ qmatrix.scale(1, currItem->GrScale); gradientFocal = qmatrix.map(QPointF(currItem->GrFocalX, currItem->GrFocalY)); } - else if (m_view->editStrokeGradient == 3) + else if (m_view->editStrokeGradient == GradientEdit::FourColors) { gradientStart = QPointF(currItem->GrControl1.x(), currItem->GrControl1.y()); gradientEnd = QPointF(currItem->GrControl2.x(), currItem->GrControl2.y()); @@ -837,7 +867,7 @@ gradientFocal = QPointF(currItem->GrControl3.x(), currItem->GrControl3.y()); gradientScale = QPointF(currItem->GrControl4.x(), currItem->GrControl4.y()); } - else if (m_view->editStrokeGradient == 4) + else if (m_view->editStrokeGradient == GradientEdit::Diamond) { gradientStart = QPointF(currItem->GrControl1.x(), currItem->GrControl1.y()); gradientEnd = QPointF(currItem->GrControl2.x(), currItem->GrControl2.y()); @@ -850,7 +880,7 @@ gradientFocal = itemMatrix.map(gradientFocal); gradientScale = itemMatrix.map(gradientScale); gradientCenter = itemMatrix.map(gradientCenter); - if (m_view->editStrokeGradient == 3) + if (m_view->editStrokeGradient == GradientEdit::FourColors) { if (m_canvas->hitsCanvasPoint(m->globalPosition(), gradientStart)) m_gradientPoint = useControl1; @@ -861,7 +891,7 @@ else if (m_canvas->hitsCanvasPoint(m->globalPosition(), gradientScale)) m_gradientPoint = useControl4; } - else if (m_view->editStrokeGradient == 4) + else if (m_view->editStrokeGradient == GradientEdit::Diamond) { if (m_canvas->hitsCanvasPoint(m->globalPosition(), gradientStart)) m_gradientPoint = useControl1; @@ -996,5 +1026,5 @@ undoManager->action(currItem, is); } m_gradientPoint = noPointDefined; -// m_view->stopDragTimer(); + // m_view->stopDragTimer(); } Index: scribus/canvasmode_editmeshgradient.cpp =================================================================== --- scribus/canvasmode_editmeshgradient.cpp (Revision 26070) +++ scribus/canvasmode_editmeshgradient.cpp (Arbeitskopie) @@ -87,16 +87,18 @@ void CanvasMode_EditMeshGradient::drawControlsMeshGradient(QPainter* psx, PageItem* currItem) { - QPen p1b = QPen(Qt::blue, 1.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); - QPen p1bd = QPen(Qt::blue, 1.0 / m_canvas->m_viewMode.scale, Qt::DotLine, Qt::FlatCap, Qt::MiterJoin); - QPen p8b = QPen(Qt::blue, 8.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin); - QPen p8r = QPen(Qt::red, 8.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin); - QPen p8m = QPen(Qt::magenta, 8.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin); - QPen p14r = QPen(Qt::red, 18.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin); - QPen p14w = QPen(Qt::white, 18.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin); +// QPen p14r = QPen(Qt::red, 18.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin); +// QPen p14w = QPen(Qt::white, 18.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin); + qreal scale = m_canvas->m_viewMode.scale; + + psx->save(); + psx->setRenderHint(QPainter::Antialiasing); + psx->setTransform(currItem->getTransform(), true); - psx->setPen(p1b); + psx->setPen(pens().value("vector")); psx->setBrush(Qt::NoBrush); + + // Draw Vector Path for (int grow = 0; grow < currItem->meshGradientArray.count()-1; grow++) { for (int gcol = 0; gcol < currItem->meshGradientArray[grow].count()-1; gcol++) @@ -111,107 +113,46 @@ Bez.cubicTo(mp2.controlBottom.x(), mp2.controlBottom.y(), mp3.controlTop.x(), mp3.controlTop.y(), mp3.gridPoint.x(), mp3.gridPoint.y()); Bez.cubicTo(mp3.controlLeft.x(), mp3.controlLeft.y(), mp4.controlRight.x(), mp4.controlRight.y(), mp4.gridPoint.x(), mp4.gridPoint.y()); Bez.cubicTo(mp4.controlTop.x(), mp4.controlTop.y(), mp1.controlBottom.x(), mp1.controlBottom.y(), mp1.gridPoint.x(), mp1.gridPoint.y()); - psx->setPen(p1b); psx->drawPath(Bez); } } - for (int grow = 0; grow < currItem->meshGradientArray.count(); grow++) + + // Draw Node Controls + if ((m_selectedMeshPoints.count() > 0) && (m_view->editStrokeGradient == GradientEdit::Mesh_ControlPoints)) { - for (int gcol = 0; gcol < currItem->meshGradientArray[grow].count(); gcol++) - { - bool isSelected = false; - for (int se = 0; se < m_selectedMeshPoints.count(); se++) - { - if ((grow == m_selectedMeshPoints[se].first) && (gcol == m_selectedMeshPoints[se].second)) - { - isSelected = true; - break; - } - } - MeshPoint mp1 = currItem->meshGradientArray[grow][gcol]; - if (m_view->editStrokeGradient == 5) - { - if (isSelected) - psx->setPen(p8r); - else - psx->setPen(p8m); - psx->drawPoint(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y())); - } - else if (m_view->editStrokeGradient == 6) - { - if (isSelected) - psx->setPen(p14r); - else - psx->setPen(p14w); - psx->drawPoint(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y())); - psx->setPen(QPen(mp1.color, 14.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin)); - psx->drawPoint(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y())); - if (isSelected) - psx->setPen(p8r); - else - psx->setPen(p8m); - psx->drawPoint(QPointF(mp1.controlColor.x(), mp1.controlColor.y())); - } - else if (m_view->editStrokeGradient == 7) - { - psx->setPen(p8b); - psx->drawPoint(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y())); - } - } - } - if ((m_selectedMeshPoints.count() > 0) && (m_view->editStrokeGradient == 7)) - { int grow = m_selectedMeshPoints[0].first; int gcol = m_selectedMeshPoints[0].second; MeshPoint mp1 = currItem->meshGradientArray[grow][gcol]; - psx->setPen(p8m); if (grow == 0) { if (gcol == 0) { - psx->setPen(p1bd); + psx->setPen(pens().value("node-handle")); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlBottom.x(), mp1.controlBottom.y())); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlRight.x(), mp1.controlRight.y())); - psx->setPen(p8m); - if (m_gradientPoint == useControlR) - psx->setPen(p8r); - psx->drawPoint(QPointF(mp1.controlRight.x(), mp1.controlRight.y())); - psx->setPen(p8m); - if (m_gradientPoint == useControlB) - psx->setPen(p8r); - psx->drawPoint(QPointF(mp1.controlBottom.x(), mp1.controlBottom.y())); + + drawNodeControl(psx, QPointF(mp1.controlRight.x(), mp1.controlRight.y()), pens().value("node"), scale, m_gradientPoint == useControlR); + drawNodeControl(psx, QPointF(mp1.controlBottom.x(), mp1.controlBottom.y()), pens().value("node"), scale, m_gradientPoint == useControlB); } else if (gcol == currItem->meshGradientArray[grow].count()-1) { - psx->setPen(p1bd); + psx->setPen(pens().value("node-handle")); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlBottom.x(), mp1.controlBottom.y())); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlLeft.x(), mp1.controlLeft.y())); - psx->setPen(p8m); - if (m_gradientPoint == useControlL) - psx->setPen(p8r); - psx->drawPoint(QPointF(mp1.controlLeft.x(), mp1.controlLeft.y())); - psx->setPen(p8m); - if (m_gradientPoint == useControlB) - psx->setPen(p8r); - psx->drawPoint(QPointF(mp1.controlBottom.x(), mp1.controlBottom.y())); + + drawNodeControl(psx, QPointF(mp1.controlLeft.x(), mp1.controlLeft.y()), pens().value("node"), scale, m_gradientPoint == useControlL); + drawNodeControl(psx, QPointF(mp1.controlBottom.x(), mp1.controlBottom.y()), pens().value("node"), scale, m_gradientPoint == useControlB); } else { - psx->setPen(p1bd); + psx->setPen(pens().value("node-handle")); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlBottom.x(), mp1.controlBottom.y())); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlLeft.x(), mp1.controlLeft.y())); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlRight.x(), mp1.controlRight.y())); - psx->setPen(p8m); - if (m_gradientPoint == useControlL) - psx->setPen(p8r); - psx->drawPoint(QPointF(mp1.controlLeft.x(), mp1.controlLeft.y())); - psx->setPen(p8m); - if (m_gradientPoint == useControlB) - psx->setPen(p8r); - psx->drawPoint(QPointF(mp1.controlBottom.x(), mp1.controlBottom.y())); - if (m_gradientPoint == useControlR) - psx->setPen(p8r); - psx->drawPoint(QPointF(mp1.controlRight.x(), mp1.controlRight.y())); + + drawNodeControl(psx, QPointF(mp1.controlLeft.x(), mp1.controlLeft.y()), pens().value("node"), scale, m_gradientPoint == useControlL); + drawNodeControl(psx, QPointF(mp1.controlBottom.x(), mp1.controlBottom.y()), pens().value("node"), scale, m_gradientPoint == useControlB); + drawNodeControl(psx, QPointF(mp1.controlRight.x(), mp1.controlRight.y()), pens().value("node"), scale, m_gradientPoint == useControlR); } } else if (grow == currItem->meshGradientArray.count()-1) @@ -218,49 +159,32 @@ { if (gcol == 0) { - psx->setPen(p1bd); + psx->setPen(pens().value("node-handle")); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlTop.x(), mp1.controlTop.y())); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlRight.x(), mp1.controlRight.y())); - psx->setPen(p8m); - if (m_gradientPoint == useControlR) - psx->setPen(p8r); - psx->drawPoint(QPointF(mp1.controlRight.x(), mp1.controlRight.y())); - psx->setPen(p8m); - if (m_gradientPoint == useControlT) - psx->setPen(p8r); - psx->drawPoint(QPointF(mp1.controlTop.x(), mp1.controlTop.y())); + + drawNodeControl(psx, QPointF(mp1.controlRight.x(), mp1.controlRight.y()), pens().value("node"), scale, m_gradientPoint == useControlR); + drawNodeControl(psx, QPointF(mp1.controlTop.x(), mp1.controlTop.y()), pens().value("node"), scale, m_gradientPoint == useControlT); } else if (gcol == currItem->meshGradientArray[grow].count()-1) { - psx->setPen(p1bd); + psx->setPen(pens().value("node-handle")); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlTop.x(), mp1.controlTop.y())); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlLeft.x(), mp1.controlLeft.y())); - psx->setPen(p8m); - if (m_gradientPoint == useControlL) - psx->setPen(p8r); - psx->drawPoint(QPointF(mp1.controlLeft.x(), mp1.controlLeft.y())); - psx->setPen(p8m); - if (m_gradientPoint == useControlT) - psx->setPen(p8r); - psx->drawPoint(QPointF(mp1.controlTop.x(), mp1.controlTop.y())); + + drawNodeControl(psx, QPointF(mp1.controlLeft.x(), mp1.controlLeft.y()), pens().value("node"), scale, m_gradientPoint == useControlL); + drawNodeControl(psx, QPointF(mp1.controlTop.x(), mp1.controlTop.y()), pens().value("node"), scale, m_gradientPoint == useControlT); } else { - psx->setPen(p1bd); + psx->setPen(pens().value("node-handle")); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlTop.x(), mp1.controlTop.y())); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlLeft.x(), mp1.controlLeft.y())); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlRight.x(), mp1.controlRight.y())); - psx->setPen(p8m); - if (m_gradientPoint == useControlL) - psx->setPen(p8r); - psx->drawPoint(QPointF(mp1.controlLeft.x(), mp1.controlLeft.y())); - psx->setPen(p8m); - if (m_gradientPoint == useControlT) - psx->setPen(p8r); - psx->drawPoint(QPointF(mp1.controlTop.x(), mp1.controlTop.y())); - if (m_gradientPoint == useControlR) - psx->setPen(p8r); - psx->drawPoint(QPointF(mp1.controlRight.x(), mp1.controlRight.y())); + + drawNodeControl(psx, QPointF(mp1.controlLeft.x(), mp1.controlLeft.y()), pens().value("node"), scale, m_gradientPoint == useControlL); + drawNodeControl(psx, QPointF(mp1.controlTop.x(), mp1.controlTop.y()), pens().value("node"), scale, m_gradientPoint == useControlT); + drawNodeControl(psx, QPointF(mp1.controlRight.x(), mp1.controlRight.y()), pens().value("node"), scale, m_gradientPoint == useControlR); } } else @@ -267,68 +191,85 @@ { if (gcol == 0) { - psx->setPen(p1bd); + psx->setPen(pens().value("node-handle")); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlTop.x(), mp1.controlTop.y())); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlBottom.x(), mp1.controlBottom.y())); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlRight.x(), mp1.controlRight.y())); - psx->setPen(p8m); - if (m_gradientPoint == useControlR) - psx->setPen(p8r); - psx->drawPoint(QPointF(mp1.controlRight.x(), mp1.controlRight.y())); - psx->setPen(p8m); - if (m_gradientPoint == useControlT) - psx->setPen(p8r); - psx->drawPoint(QPointF(mp1.controlTop.x(), mp1.controlTop.y())); - psx->setPen(p8m); - if (m_gradientPoint == useControlB) - psx->setPen(p8r); - psx->drawPoint(QPointF(mp1.controlBottom.x(), mp1.controlBottom.y())); + + drawNodeControl(psx, QPointF(mp1.controlRight.x(), mp1.controlRight.y()), pens().value("node"), scale, m_gradientPoint == useControlR); + drawNodeControl(psx, QPointF(mp1.controlTop.x(), mp1.controlTop.y()), pens().value("node"), scale, m_gradientPoint == useControlT); + drawNodeControl(psx, QPointF(mp1.controlBottom.x(), mp1.controlBottom.y()), pens().value("node"), scale, m_gradientPoint == useControlB); } else if (gcol == currItem->meshGradientArray[grow].count()-1) { - psx->setPen(p1bd); + psx->setPen(pens().value("node-handle")); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlTop.x(), mp1.controlTop.y())); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlBottom.x(), mp1.controlBottom.y())); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlLeft.x(), mp1.controlLeft.y())); - psx->setPen(p8m); - if (m_gradientPoint == useControlL) - psx->setPen(p8r); - psx->drawPoint(QPointF(mp1.controlLeft.x(), mp1.controlLeft.y())); - psx->setPen(p8m); - if (m_gradientPoint == useControlT) - psx->setPen(p8r); - psx->drawPoint(QPointF(mp1.controlTop.x(), mp1.controlTop.y())); - psx->setPen(p8m); - if (m_gradientPoint == useControlB) - psx->setPen(p8r); - psx->drawPoint(QPointF(mp1.controlBottom.x(), mp1.controlBottom.y())); + + drawNodeControl(psx, QPointF(mp1.controlLeft.x(), mp1.controlLeft.y()), pens().value("node"), scale, m_gradientPoint == useControlL); + drawNodeControl(psx, QPointF(mp1.controlTop.x(), mp1.controlTop.y()), pens().value("node"), scale, m_gradientPoint == useControlT); + drawNodeControl(psx, QPointF(mp1.controlBottom.x(), mp1.controlBottom.y()), pens().value("node"), scale, m_gradientPoint == useControlB); } else { - psx->setPen(p1bd); + psx->setPen(pens().value("node-handle")); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlTop.x(), mp1.controlTop.y())); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlBottom.x(), mp1.controlBottom.y())); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlLeft.x(), mp1.controlLeft.y())); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlRight.x(), mp1.controlRight.y())); - psx->setPen(p8m); - if (m_gradientPoint == useControlL) - psx->setPen(p8r); - psx->drawPoint(QPointF(mp1.controlLeft.x(), mp1.controlLeft.y())); - psx->setPen(p8m); - if (m_gradientPoint == useControlT) - psx->setPen(p8r); - psx->drawPoint(QPointF(mp1.controlTop.x(), mp1.controlTop.y())); - psx->setPen(p8m); - if (m_gradientPoint == useControlB) - psx->setPen(p8r); - psx->drawPoint(QPointF(mp1.controlBottom.x(), mp1.controlBottom.y())); - psx->setPen(p8m); - if (m_gradientPoint == useControlR) - psx->setPen(p8r); - psx->drawPoint(QPointF(mp1.controlRight.x(), mp1.controlRight.y())); + + drawNodeControl(psx, QPointF(mp1.controlLeft.x(), mp1.controlLeft.y()), pens().value("node"), scale, m_gradientPoint == useControlL); + drawNodeControl(psx, QPointF(mp1.controlTop.x(), mp1.controlTop.y()), pens().value("node"), scale, m_gradientPoint == useControlT); + drawNodeControl(psx, QPointF(mp1.controlBottom.x(), mp1.controlBottom.y()), pens().value("node"), scale, m_gradientPoint == useControlB); + drawNodeControl(psx, QPointF(mp1.controlRight.x(), mp1.controlRight.y()), pens().value("node"), scale, m_gradientPoint == useControlR); } } } + + if (currItem->rotation() == 0 || currItem->rotation() == 90 || currItem->rotation() == 180 || currItem->rotation() == 270) + psx->setRenderHint(QPainter::Antialiasing, false); + + // Draw Nodes + for (int grow = 0; grow < currItem->meshGradientArray.count(); grow++) + { + for (int gcol = 0; gcol < currItem->meshGradientArray[grow].count(); gcol++) + { + bool isSelected = false; + for (int se = 0; se < m_selectedMeshPoints.count(); se++) + { + if ((grow == m_selectedMeshPoints[se].first) && (gcol == m_selectedMeshPoints[se].second)) + { + isSelected = true; + break; + } + } + MeshPoint mp1 = currItem->meshGradientArray[grow][gcol]; + if (m_view->editStrokeGradient == GradientEdit::Mesh_Point) + drawNodeHandle(psx, QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), pens().value("node"), scale, isSelected); +// else if (m_view->editStrokeGradient == GradientEdit::Mesh_Color) +// { +// if (isSelected) +// psx->setPen(p14r); +// else +// psx->setPen(p14w); +// psx->drawPoint(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y())); +// psx->setPen(QPen(mp1.color, 14.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin)); +// psx->drawPoint(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y())); +// if (isSelected) +// psx->setPen(p8r); +// else +// psx->setPen(p8m); +// psx->drawPoint(QPointF(mp1.controlColor.x(), mp1.controlColor.y())); +// } + else if (m_view->editStrokeGradient == GradientEdit::Mesh_ControlPoints) + { + drawNodeHandle(psx, QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), pens().value("node"), scale); + } + } + } + + psx->restore(); } void CanvasMode_EditMeshGradient::enterEvent(QEvent *e) @@ -370,7 +311,7 @@ m_view->setRedrawMarkerShown(false); m_selectedMeshPoints.clear(); m_gradientPoint = noPointDefined; - m_ScMW->propertiesPalette->updateColorSpecialGradient(); +// m_ScMW->propertiesPalette->updateColorSpecialGradient(); CanvasMode::deactivate(forGesture); } @@ -454,13 +395,13 @@ doUpdate = true; break; case Qt::Key_5: - if (m_view->editStrokeGradient == 6) + if (m_view->editStrokeGradient == GradientEdit::Mesh_Color) { QPair<int, int> selP = m_selectedMeshPoints[0]; currItem->meshGradientArray[selP.first][selP.second].controlColor = currItem->meshGradientArray[selP.first][selP.second].gridPoint; doUpdate = true; } - else if (m_view->editStrokeGradient == 7) + else if (m_view->editStrokeGradient == GradientEdit::Mesh_ControlPoints) { QPair<int, int> selP = m_selectedMeshPoints[0]; if (m_gradientPoint == useControlT) @@ -477,7 +418,7 @@ } if (isMoving) { - if (m_view->editStrokeGradient == 5) + if (m_view->editStrokeGradient == GradientEdit::Mesh_Point) { for (int mo = 0; mo < m_selectedMeshPoints.count(); mo++) { @@ -485,12 +426,12 @@ currItem->meshGradientArray[selP.first][selP.second].moveRel(moveX, moveY); } } - else if (m_view->editStrokeGradient == 6) + else if (m_view->editStrokeGradient == GradientEdit::Mesh_Color) { QPair<int, int> selP = m_selectedMeshPoints[0]; currItem->meshGradientArray[selP.first][selP.second].controlColor += FPoint(moveX, moveY); } - else if (m_view->editStrokeGradient == 7) + else if (m_view->editStrokeGradient == GradientEdit::Mesh_ControlPoints) { QPair<int, int> selP = m_selectedMeshPoints[0]; if (m_gradientPoint == useControlT) @@ -569,7 +510,7 @@ PageItem *currItem = m_doc->m_Selection->itemAt(0); QTransform pp = currItem->getTransform(); FPoint npf = npfN.transformPoint(pp, true); - if (m_view->editStrokeGradient == 6) + if (m_view->editStrokeGradient == GradientEdit::Mesh_Color) { if (m_selectedMeshPoints.count() > 0) { @@ -584,7 +525,7 @@ FPoint npx(m_Mxp - npfN.x(), m_Myp - npfN.y(), 0, 0, currItem->rotation(), 1, 1, true); if (m_selectedMeshPoints.count() > 0) { - if (m_view->editStrokeGradient == 5) + if (m_view->editStrokeGradient == GradientEdit::Mesh_Point) { for (int mo = 0; mo < m_selectedMeshPoints.count(); mo++) { @@ -592,12 +533,12 @@ currItem->meshGradientArray[selP.first][selP.second].moveRel(-npx.x(), -npx.y()); } } - else if (m_view->editStrokeGradient == 6) + else if (m_view->editStrokeGradient == GradientEdit::Mesh_Color) { QPair<int, int> selP = m_selectedMeshPoints[0]; currItem->meshGradientArray[selP.first][selP.second].controlColor -= npx; } - else if (m_view->editStrokeGradient == 7) + else if (m_view->editStrokeGradient == GradientEdit::Mesh_ControlPoints) { QPair<int, int> selP = m_selectedMeshPoints[0]; if (m_gradientPoint == useControlT) @@ -643,9 +584,31 @@ QTransform itemMatrix = currItem->getTransform(); bool found = false; QPair<int, int> selPoint; - if (m_view->editStrokeGradient == 5) + if (m_view->editStrokeGradient == GradientEdit::Mesh_Point) { +// m_gradientPoint = noPointDefined; +// for (int grow = 0; grow < currItem->meshGradientArray.count(); grow++) +// { +// for (int gcol = 0; gcol < currItem->meshGradientArray[grow].count(); gcol++) +// { +// MeshPoint mp = currItem->meshGradientArray[grow][gcol]; +// QPointF gradientPoint(mp.gridPoint.x(), mp.gridPoint.y()); +// gradientPoint = itemMatrix.map(gradientPoint); +// if (m_canvas->hitsCanvasPoint(mousePointDoc, gradientPoint)) +// { +// selPoint.first = grow; +// selPoint.second = gcol; +// found = true; +// *m_old_mesh = mp; +// break; +// } +// } +// if (found) +// break; +// } + m_gradientPoint = noPointDefined; + m_selectedMeshPoints.clear(); for (int grow = 0; grow < currItem->meshGradientArray.count(); grow++) { for (int gcol = 0; gcol < currItem->meshGradientArray[grow].count(); gcol++) @@ -653,12 +616,16 @@ MeshPoint mp = currItem->meshGradientArray[grow][gcol]; QPointF gradientPoint(mp.gridPoint.x(), mp.gridPoint.y()); gradientPoint = itemMatrix.map(gradientPoint); - if (m_canvas->hitsCanvasPoint(mousePointDoc, gradientPoint)) + QPointF gradientColorPoint(mp.controlColor.x(), mp.controlColor.y()); + gradientColorPoint = itemMatrix.map(gradientColorPoint); + if (m_canvas->hitsCanvasPoint(mousePointDoc, gradientPoint) || m_canvas->hitsCanvasPoint(mousePointDoc, gradientColorPoint)) { selPoint.first = grow; selPoint.second = gcol; + currItem->selectedMeshPointX = grow; + currItem->selectedMeshPointY = gcol; + *m_old_mesh = mp; found = true; - *m_old_mesh = mp; break; } } @@ -666,7 +633,7 @@ break; } } - else if (m_view->editStrokeGradient == 6) + else if (m_view->editStrokeGradient == GradientEdit::Mesh_Color) { m_gradientPoint = noPointDefined; m_selectedMeshPoints.clear(); @@ -694,7 +661,7 @@ break; } } - else if (m_view->editStrokeGradient == 7) + else if (m_view->editStrokeGradient == GradientEdit::Mesh_ControlPoints) { for (int grow = 0; grow < currItem->meshGradientArray.count(); grow++) { @@ -947,7 +914,7 @@ currItem->selectedMeshControlPoint = static_cast<int>(m_gradientPoint); } m_canvas->m_viewMode.m_MouseButtonPressed = true; - m_ScMW->propertiesPalette->updateColorSpecialGradient(); +// m_ScMW->propertiesPalette->updateColorSpecialGradient(); m_view->setCursor(QCursor(Qt::CrossCursor)); m_doc->regionsChanged()->update(itemMatrix.mapRect(QRectF(0, 0, currItem->width(), currItem->height())).adjusted(-currItem->width() / 2.0, -currItem->height() / 2.0, currItem->width(), currItem->height())); } Index: scribus/canvasmode_editmeshpatch.cpp =================================================================== --- scribus/canvasmode_editmeshpatch.cpp (Revision 26070) +++ scribus/canvasmode_editmeshpatch.cpp (Arbeitskopie) @@ -86,11 +86,13 @@ void CanvasMode_EditMeshPatch::drawControlsMeshPoint(QPainter* psx, const MeshPoint& mp, bool isSelected) { - QPen p8r = QPen(Qt::red, 8.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin); - QPen p8m = QPen(Qt::magenta, 8.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin); - QPen p14r = QPen(Qt::red, 18.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin); - QPen p14w = QPen(Qt::white, 18.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin); - if (m_view->editStrokeGradient == 8) +// QPen p14r = QPen(Qt::red, 18.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin); +// QPen p14w = QPen(Qt::white, 18.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin); + qreal scale = m_canvas->m_viewMode.scale; + + drawNodeHandle(psx, QPointF(mp.gridPoint.x(), mp.gridPoint.y()), pens().value("node"), scale, isSelected); + +/* if (m_view->editStrokeGradient == GradientEdit::PatchMesh_Color) { if (isSelected) psx->setPen(p14r); @@ -105,29 +107,29 @@ psx->setPen(p8m); psx->drawPoint(QPointF(mp.controlColor.x(), mp.controlColor.y())); } - else if (m_view->editStrokeGradient == 9) + else */if (m_view->editStrokeGradient == GradientEdit::PatchMesh_Point) { - if (isSelected) - psx->setPen(p8r); - else - psx->setPen(p8m); - psx->drawPoint(QPointF(mp.gridPoint.x(), mp.gridPoint.y())); +// if (isSelected) +// psx->setPen(p8r); +// else +// psx->setPen(p8m); +// psx->drawPoint(QPointF(mp.gridPoint.x(), mp.gridPoint.y())); + + } } void CanvasMode_EditMeshPatch::drawControlsMeshPatch(QPainter* psx, PageItem* currItem) { - QPen p1b = QPen(Qt::blue, 1.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); - QPen p1bd = QPen(Qt::blue, 1.0 / m_canvas->m_viewMode.scale, Qt::DotLine, Qt::FlatCap, Qt::MiterJoin); -// QPen p8b = QPen(Qt::blue, 8.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin); - QPen p8r = QPen(Qt::red, 8.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin); - QPen p8m = QPen(Qt::magenta, 8.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin); -// QPen p14r = QPen(Qt::red, 18.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin); -// QPen p14w = QPen(Qt::white, 18.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin); + qreal scale = m_canvas->m_viewMode.scale; + + psx->save(); psx->setTransform(currItem->getTransform(), true); - psx->setPen(p1b); + psx->setRenderHint(QPainter::Antialiasing); + psx->setPen(pens().value("vector")); psx->setBrush(Qt::NoBrush); + // Draw Vector Path for (int col = 0; col < currItem->meshGradientPatches.count(); col++) { meshGradientPatch patch = currItem->meshGradientPatches[col]; @@ -143,10 +145,11 @@ Bez.cubicTo(mp2.controlBottom.x(), mp2.controlBottom.y(), mp3.controlTop.x(), mp3.controlTop.y(), mp3.gridPoint.x(), mp3.gridPoint.y()); Bez.cubicTo(mp3.controlLeft.x(), mp3.controlLeft.y(), mp4.controlRight.x(), mp4.controlRight.y(), mp4.gridPoint.x(), mp4.gridPoint.y()); Bez.cubicTo(mp4.controlTop.x(), mp4.controlTop.y(), mp1.controlBottom.x(), mp1.controlBottom.y(), mp1.gridPoint.x(), mp1.gridPoint.y()); - psx->setPen(p1b); psx->drawPath(Bez); } } + + // Draw Selected Patch Mesh if (currItem->selectedMeshPointX >= 0) { meshGradientPatch patch = currItem->meshGradientPatches[currItem->selectedMeshPointX]; @@ -154,108 +157,92 @@ MeshPoint mp2 = patch.TR; MeshPoint mp3 = patch.BR; MeshPoint mp4 = patch.BL; - QPainterPath Bez; - Bez.moveTo(mp1.gridPoint.x(), mp1.gridPoint.y()); - Bez.cubicTo(mp1.controlRight.x(), mp1.controlRight.y(), mp2.controlLeft.x(), mp2.controlLeft.y(), mp2.gridPoint.x(), mp2.gridPoint.y()); - Bez.cubicTo(mp2.controlBottom.x(), mp2.controlBottom.y(), mp3.controlTop.x(), mp3.controlTop.y(), mp3.gridPoint.x(), mp3.gridPoint.y()); - Bez.cubicTo(mp3.controlLeft.x(), mp3.controlLeft.y(), mp4.controlRight.x(), mp4.controlRight.y(), mp4.gridPoint.x(), mp4.gridPoint.y()); - Bez.cubicTo(mp4.controlTop.x(), mp4.controlTop.y(), mp1.controlBottom.x(), mp1.controlBottom.y(), mp1.gridPoint.x(), mp1.gridPoint.y()); - psx->setPen(QPen(Qt::red, 1.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin)); - psx->drawPath(Bez); - drawControlsMeshPoint(psx, mp1, m_patchPoint == useTL); - drawControlsMeshPoint(psx, mp2, m_patchPoint == useTR); - drawControlsMeshPoint(psx, mp3, m_patchPoint == useBR); - drawControlsMeshPoint(psx, mp4, m_patchPoint == useBL); - if (m_view->editStrokeGradient == 10) + + // Draw Node Controls + if (m_view->editStrokeGradient == GradientEdit::PatchMesh_ControlPoints) { if (m_patchPoint == useTL) { - psx->setPen(p1bd); + psx->setPen(pens().value("node-handle")); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlBottom.x(), mp1.controlBottom.y())); psx->drawLine(QPointF(mp1.gridPoint.x(), mp1.gridPoint.y()), QPointF(mp1.controlRight.x(), mp1.controlRight.y())); - if (m_gradientPoint == useControlB) - psx->setPen(p8r); - else - psx->setPen(p8m); - psx->drawPoint(QPointF(mp1.controlBottom.x(), mp1.controlBottom.y())); - if (m_gradientPoint == useControlR) - psx->setPen(p8r); - else - psx->setPen(p8m); - psx->drawPoint(QPointF(mp1.controlRight.x(), mp1.controlRight.y())); + + drawNodeControl(psx, QPointF(mp1.controlBottom.x(), mp1.controlBottom.y()), pens().value("node"), scale, m_gradientPoint == useControlB); + drawNodeControl(psx, QPointF(mp1.controlRight.x(), mp1.controlRight.y()), pens().value("node"), scale, m_gradientPoint == useControlR); } else if (m_patchPoint == useTR) { - psx->setPen(p1bd); + psx->setPen(pens().value("node-handle")); psx->drawLine(QPointF(mp2.gridPoint.x(), mp2.gridPoint.y()), QPointF(mp2.controlBottom.x(), mp2.controlBottom.y())); psx->drawLine(QPointF(mp2.gridPoint.x(), mp2.gridPoint.y()), QPointF(mp2.controlLeft.x(), mp2.controlLeft.y())); - if (m_gradientPoint == useControlL) - psx->setPen(p8r); - else - psx->setPen(p8m); - psx->drawPoint(QPointF(mp2.controlLeft.x(), mp2.controlLeft.y())); - if (m_gradientPoint == useControlB) - psx->setPen(p8r); - else - psx->setPen(p8m); - psx->drawPoint(QPointF(mp2.controlBottom.x(), mp2.controlBottom.y())); + + drawNodeControl(psx, QPointF(mp2.controlLeft.x(), mp2.controlLeft.y()), pens().value("node"), scale, m_gradientPoint == useControlL); + drawNodeControl(psx, QPointF(mp2.controlBottom.x(), mp2.controlBottom.y()), pens().value("node"), scale, m_gradientPoint == useControlB); } else if (m_patchPoint == useBR) { - psx->setPen(p1bd); + psx->setPen(pens().value("node-handle")); psx->drawLine(QPointF(mp3.gridPoint.x(), mp3.gridPoint.y()), QPointF(mp3.controlTop.x(), mp3.controlTop.y())); psx->drawLine(QPointF(mp3.gridPoint.x(), mp3.gridPoint.y()), QPointF(mp3.controlLeft.x(), mp3.controlLeft.y())); - if (m_gradientPoint == useControlL) - psx->setPen(p8r); - else - psx->setPen(p8m); - psx->drawPoint(QPointF(mp3.controlLeft.x(), mp3.controlLeft.y())); - if (m_gradientPoint == useControlT) - psx->setPen(p8r); - else - psx->setPen(p8m); - psx->drawPoint(QPointF(mp3.controlTop.x(), mp3.controlTop.y())); + + drawNodeControl(psx, QPointF(mp3.controlTop.x(), mp3.controlTop.y()), pens().value("node"), scale, m_gradientPoint == useControlT); + drawNodeControl(psx, QPointF(mp3.controlLeft.x(), mp3.controlLeft.y()), pens().value("node"), scale, m_gradientPoint == useControlL); } else if (m_patchPoint == useBL) { - psx->setPen(p1bd); + psx->setPen(pens().value("node-handle")); psx->drawLine(QPointF(mp4.gridPoint.x(), mp4.gridPoint.y()), QPointF(mp4.controlTop.x(), mp4.controlTop.y())); psx->drawLine(QPointF(mp4.gridPoint.x(), mp4.gridPoint.y()), QPointF(mp4.controlRight.x(), mp4.controlRight.y())); - if (m_gradientPoint == useControlR) - psx->setPen(p8r); - else - psx->setPen(p8m); - psx->drawPoint(QPointF(mp4.controlRight.x(), mp4.controlRight.y())); - if (m_gradientPoint == useControlT) - psx->setPen(p8r); - else - psx->setPen(p8m); - psx->drawPoint(QPointF(mp4.controlTop.x(), mp4.controlTop.y())); + + drawNodeControl(psx, QPointF(mp4.controlRight.x(), mp4.controlRight.y()), pens().value("node"), scale, m_gradientPoint == useControlR); + drawNodeControl(psx, QPointF(mp4.controlTop.x(), mp4.controlTop.y()), pens().value("node"), scale, m_gradientPoint == useControlT); } } + + if (currItem->rotation() == 0 || currItem->rotation() == 90 || currItem->rotation() == 180 || currItem->rotation() == 270) + psx->setRenderHint(QPainter::Antialiasing, false); + + // Draw Nodes + QPainterPath Bez; + Bez.moveTo(mp1.gridPoint.x(), mp1.gridPoint.y()); + Bez.cubicTo(mp1.controlRight.x(), mp1.controlRight.y(), mp2.controlLeft.x(), mp2.controlLeft.y(), mp2.gridPoint.x(), mp2.gridPoint.y()); + Bez.cubicTo(mp2.controlBottom.x(), mp2.controlBottom.y(), mp3.controlTop.x(), mp3.controlTop.y(), mp3.gridPoint.x(), mp3.gridPoint.y()); + Bez.cubicTo(mp3.controlLeft.x(), mp3.controlLeft.y(), mp4.controlRight.x(), mp4.controlRight.y(), mp4.gridPoint.x(), mp4.gridPoint.y()); + Bez.cubicTo(mp4.controlTop.x(), mp4.controlTop.y(), mp1.controlBottom.x(), mp1.controlBottom.y(), mp1.gridPoint.x(), mp1.gridPoint.y()); + psx->setPen(pens().value("selection-group-inside")); + psx->setBrush(Qt::NoBrush); + psx->drawPath(Bez); + drawControlsMeshPoint(psx, mp1, m_patchPoint == useTL); + drawControlsMeshPoint(psx, mp2, m_patchPoint == useTR); + drawControlsMeshPoint(psx, mp3, m_patchPoint == useBR); + drawControlsMeshPoint(psx, mp4, m_patchPoint == useBL); + } - if (m_view->editStrokeGradient == 11) + if (m_view->editStrokeGradient == GradientEdit::PatchMesh_Polygon) { + psx->setBrush(Qt::NoBrush); + if (m_clickPointPolygon.size() > 1) { - psx->setPen(p1b); + psx->setPen(pens().value("vector")); psx->drawPolyline(m_clickPointPolygon); } - psx->setPen(p8r); + for (int col = 0; col < m_clickPointPolygon.size(); col++) - { - psx->drawPoint(m_clickPointPolygon.value(col)); - } + drawNodeHandle(psx, m_clickPointPolygon.value(col), pens().value("node"), scale, true); + if (!m_clickPointPolygon.empty()) { - psx->setPen(p1bd); + psx->setPen(pens().value("vector")); psx->drawLine(m_clickPointPolygon.value(m_clickPointPolygon.count() - 1), m_currentPoint); if (m_clickPointPolygon.size() == 3) psx->drawLine(m_clickPointPolygon.value(0), m_currentPoint); } - psx->setPen(p8r); - psx->drawPoint(m_currentPoint); + + drawNodeHandle(psx, m_currentPoint, pens().value("node"), scale, true); } + + psx->restore(); } void CanvasMode_EditMeshPatch::enterEvent(QEvent *e) @@ -303,7 +290,7 @@ m_currItem->selectedMeshPointX = -1; m_currItem->selectedMeshPointY = m_patchPoint; m_currItem->selectedMeshControlPoint = m_gradientPoint; - m_ScMW->propertiesPalette->updateColorSpecialGradient(); +// m_ScMW->propertiesPalette->updateColorSpecialGradient(); m_currItem->snapToPatchGrid = false; CanvasMode::deactivate(forGesture); @@ -396,7 +383,7 @@ doUpdate = true; break; case Qt::Key_5: - if (m_view->editStrokeGradient == 8) + if (m_view->editStrokeGradient == GradientEdit::PatchMesh_Color) { if (m_patchPoint == useTL) currItem->meshGradientPatches[currItem->selectedMeshPointX].TL.controlColor = currItem->meshGradientPatches[currItem->selectedMeshPointX].TL.gridPoint; @@ -408,7 +395,7 @@ currItem->meshGradientPatches[currItem->selectedMeshPointX].BL.controlColor = currItem->meshGradientPatches[currItem->selectedMeshPointX].BL.gridPoint; doUpdate = true; } - else if (m_view->editStrokeGradient == 10) + else if (m_view->editStrokeGradient == GradientEdit::PatchMesh_ControlPoints) { if (m_patchPoint == useTL) { @@ -446,7 +433,7 @@ { if (m_patchPoint != noPointDefined) { - if (m_view->editStrokeGradient == 8) + if (m_view->editStrokeGradient == GradientEdit::PatchMesh_Color) { if (m_patchPoint == useTL) currItem->meshGradientPatches[currItem->selectedMeshPointX].TL.controlColor += FPoint(moveX, moveY); @@ -457,7 +444,7 @@ if (m_patchPoint == useBL) currItem->meshGradientPatches[currItem->selectedMeshPointX].BL.controlColor += FPoint(moveX, moveY); } - else if (m_view->editStrokeGradient == 9) + else if (m_view->editStrokeGradient == GradientEdit::PatchMesh_Point) { if (m_patchPoint == useTL) currItem->meshGradientPatches[currItem->selectedMeshPointX].TL.moveRel(moveX, moveY); @@ -468,7 +455,7 @@ if (m_patchPoint == useBL) currItem->meshGradientPatches[currItem->selectedMeshPointX].BL.moveRel(moveX, moveY); } - else if (m_view->editStrokeGradient == 10) + else if (m_view->editStrokeGradient == GradientEdit::PatchMesh_ControlPoints) { if (m_patchPoint == useTL) { @@ -561,7 +548,7 @@ QTransform pp = m_currItem->getTransform(); FPoint npf = npfN.transformPoint(pp, true); FPoint npx(m_Mxp - npfN.x(), m_Myp - npfN.y(), 0, 0, m_currItem->rotation(), 1, 1, true); - if (m_view->editStrokeGradient == 11) + if (m_view->editStrokeGradient == GradientEdit::PatchMesh_Polygon) { m_currentPoint = QPointF(npf.x(), npf.y()); m_canvas->displayXYHUD(m->globalPosition(), npf.x(), npf.y()); @@ -577,7 +564,7 @@ { if (m_patchPoint != noPointDefined) { - if (m_view->editStrokeGradient == 8) + if (m_view->editStrokeGradient == GradientEdit::PatchMesh_Color) { FPoint cP; FPoint gP; @@ -611,75 +598,74 @@ if (m_patchPoint == useBL) m_currItem->meshGradientPatches[m_currItem->selectedMeshPointX].BL.controlColor -= npx; } - else if (m_view->editStrokeGradient == 9) + else if (m_view->editStrokeGradient == GradientEdit::PatchMesh_Point) { m_canvas->displayXYHUD(m->globalPosition(), npf.x(), npf.y()); - if (m_view->editStrokeGradient == 9) + + FPoint mp; + FPoint mp_orig; + double xx = 0.0; + double yy = 0.0; + if (m_patchPoint == useTL) { - FPoint mp; - FPoint mp_orig; - double xx = 0.0; - double yy = 0.0; - if (m_patchPoint == useTL) + mp_orig = m_currItem->meshGradientPatches[m_currItem->selectedMeshPointX].TL.gridPoint; + mp = mp_orig - npx; + xx = mp.x(); + yy = mp.y(); + if (m_currItem->snapToPatchGrid) + snapToOtherPatch(xx, yy); + m_currItem->meshGradientPatches[m_currItem->selectedMeshPointX].TL.moveAbs(xx, yy); + } + if (m_patchPoint == useTR) + { + mp_orig = m_currItem->meshGradientPatches[m_currItem->selectedMeshPointX].TR.gridPoint; + mp = mp_orig - npx; + xx = mp.x(); + yy = mp.y(); + if (m_currItem->snapToPatchGrid) + snapToOtherPatch(xx, yy); + m_currItem->meshGradientPatches[m_currItem->selectedMeshPointX].TR.moveAbs(xx, yy); + } + if (m_patchPoint == useBR) + { + mp_orig = m_currItem->meshGradientPatches[m_currItem->selectedMeshPointX].BR.gridPoint; + mp = mp_orig - npx; + xx = mp.x(); + yy = mp.y(); + if (m_currItem->snapToPatchGrid) + snapToOtherPatch(xx, yy); + m_currItem->meshGradientPatches[m_currItem->selectedMeshPointX].BR.moveAbs(xx, yy); + } + if (m_patchPoint == useBL) + { + mp_orig = m_currItem->meshGradientPatches[m_currItem->selectedMeshPointX].BL.gridPoint; + mp = mp_orig - npx; + xx = mp.x(); + yy = mp.y(); + if (m_currItem->snapToPatchGrid) + snapToOtherPatch(xx, yy); + m_currItem->meshGradientPatches[m_currItem->selectedMeshPointX].BL.moveAbs(xx, yy); + } + if (m->modifiers() & Qt::ShiftModifier) + { + for (int col = 0; col < m_currItem->meshGradientPatches.count(); col++) { - mp_orig = m_currItem->meshGradientPatches[m_currItem->selectedMeshPointX].TL.gridPoint; - mp = mp_orig - npx; - xx = mp.x(); - yy = mp.y(); - if (m_currItem->snapToPatchGrid) - snapToOtherPatch(xx, yy); - m_currItem->meshGradientPatches[m_currItem->selectedMeshPointX].TL.moveAbs(xx, yy); - } - if (m_patchPoint == useTR) - { - mp_orig = m_currItem->meshGradientPatches[m_currItem->selectedMeshPointX].TR.gridPoint; - mp = mp_orig - npx; - xx = mp.x(); - yy = mp.y(); - if (m_currItem->snapToPatchGrid) - snapToOtherPatch(xx, yy); - m_currItem->meshGradientPatches[m_currItem->selectedMeshPointX].TR.moveAbs(xx, yy); - } - if (m_patchPoint == useBR) - { - mp_orig = m_currItem->meshGradientPatches[m_currItem->selectedMeshPointX].BR.gridPoint; - mp = mp_orig - npx; - xx = mp.x(); - yy = mp.y(); - if (m_currItem->snapToPatchGrid) - snapToOtherPatch(xx, yy); - m_currItem->meshGradientPatches[m_currItem->selectedMeshPointX].BR.moveAbs(xx, yy); - } - if (m_patchPoint == useBL) - { - mp_orig = m_currItem->meshGradientPatches[m_currItem->selectedMeshPointX].BL.gridPoint; - mp = mp_orig - npx; - xx = mp.x(); - yy = mp.y(); - if (m_currItem->snapToPatchGrid) - snapToOtherPatch(xx, yy); - m_currItem->meshGradientPatches[m_currItem->selectedMeshPointX].BL.moveAbs(xx, yy); - } - if (m->modifiers() & Qt::ShiftModifier) - { - for (int col = 0; col < m_currItem->meshGradientPatches.count(); col++) + if (col != m_currItem->selectedMeshPointX) { - if (col != m_currItem->selectedMeshPointX) - { - if (m_currItem->meshGradientPatches[col].TL.gridPoint == mp_orig) - m_currItem->meshGradientPatches[col].TL.moveAbs(xx, yy); - if (m_currItem->meshGradientPatches[col].TR.gridPoint == mp_orig) - m_currItem->meshGradientPatches[col].TR.moveAbs(xx, yy); - if (m_currItem->meshGradientPatches[col].BR.gridPoint == mp_orig) - m_currItem->meshGradientPatches[col].BR.moveAbs(xx, yy); - if (m_currItem->meshGradientPatches[col].BL.gridPoint == mp_orig) - m_currItem->meshGradientPatches[col].BL.moveAbs(xx, yy); - } + if (m_currItem->meshGradientPatches[col].TL.gridPoint == mp_orig) + m_currItem->meshGradientPatches[col].TL.moveAbs(xx, yy); + if (m_currItem->meshGradientPatches[col].TR.gridPoint == mp_orig) + m_currItem->meshGradientPatches[col].TR.moveAbs(xx, yy); + if (m_currItem->meshGradientPatches[col].BR.gridPoint == mp_orig) + m_currItem->meshGradientPatches[col].BR.moveAbs(xx, yy); + if (m_currItem->meshGradientPatches[col].BL.gridPoint == mp_orig) + m_currItem->meshGradientPatches[col].BL.moveAbs(xx, yy); } } } + } - else if (m_view->editStrokeGradient == 10) + else if (m_view->editStrokeGradient == GradientEdit::PatchMesh_ControlPoints) { if (m_patchPoint == useTL) { @@ -744,7 +730,7 @@ m_currItem = m_doc->m_Selection->itemAt(0); QTransform itemMatrix = m_currItem->getTransform(); bool found = false; - if (m_view->editStrokeGradient == 11) + if (m_view->editStrokeGradient == GradientEdit::PatchMesh_Polygon) { m_gradientPoint = noControlPointDefined; m_patchPoint = noPointDefined; @@ -775,7 +761,7 @@ patch.BL = mgP; m_currItem->meshGradientPatches.append(patch); m_currItem->selectedMeshPointX = m_currItem->meshGradientPatches.count() - 1; - m_view->editStrokeGradient = 9; + m_view->editStrokeGradient = GradientEdit::PatchMesh_Point; m_click_count = 0; m_clickPointPolygon.clear(); m_ScMW->propertiesPalette->endPatchAdd(); @@ -785,7 +771,7 @@ { if (m_currItem->selectedMeshPointX >= 0) { - if (m_view->editStrokeGradient == 8) + if (m_view->editStrokeGradient == GradientEdit::PatchMesh_Color) { meshGradientPatch patch = m_currItem->meshGradientPatches[m_currItem->selectedMeshPointX]; MeshPoint mp1 = patch.TL; @@ -815,7 +801,7 @@ else m_patchPoint = noPointDefined; } - else if (m_view->editStrokeGradient == 9) + else if (m_view->editStrokeGradient == GradientEdit::PatchMesh_Point) { meshGradientPatch patch = m_currItem->meshGradientPatches[m_currItem->selectedMeshPointX]; MeshPoint mp1 = patch.TL; @@ -845,7 +831,7 @@ else m_patchPoint = noPointDefined; } - else if (m_view->editStrokeGradient == 10) + else if (m_view->editStrokeGradient == GradientEdit::PatchMesh_ControlPoints) { if (m_patchPoint != noPointDefined) { @@ -945,8 +931,8 @@ m_currItem->selectedMeshPointY = m_patchPoint; m_currItem->selectedMeshControlPoint = m_gradientPoint; } - m_canvas->m_viewMode.m_MouseButtonPressed = true; - m_ScMW->propertiesPalette->updateColorSpecialGradient(); + m_canvas->m_viewMode.m_MouseButtonPressed = true; +// m_ScMW->propertiesPalette->updateColorSpecialGradient(); m_view->setCursor(QCursor(Qt::CrossCursor)); m_doc->regionsChanged()->update(itemMatrix.mapRect(QRectF(0, 0, m_currItem->width(), m_currItem->height())).adjusted(-m_currItem->width() / 2.0, -m_currItem->height() / 2.0, m_currItem->width(), m_currItem->height())); @@ -957,7 +943,7 @@ m_canvas->m_viewMode.m_MouseButtonPressed = false; m_canvas->resetRenderMode(); m->accept(); - if (m_view->editStrokeGradient != 11 && m_currItem->selectedMeshPointX >=0 && m_patchPoint != noPointDefined && UndoManager::undoEnabled()) + if (m_view->editStrokeGradient != GradientEdit::PatchMesh_Polygon && m_currItem->selectedMeshPointX >=0 && m_patchPoint != noPointDefined && UndoManager::undoEnabled()) { auto *ss = new ScOldNewState<MeshPoint>(Um::GradPos); ss->set("MOVE_MESH_PATCH"); Index: scribus/canvasmode_editpolygon.cpp =================================================================== --- scribus/canvasmode_editpolygon.cpp (Revision 26070) +++ scribus/canvasmode_editpolygon.cpp (Arbeitskopie) @@ -87,47 +87,44 @@ void CanvasMode_EditPolygon::drawControlsPolygon(QPainter* psx, PageItem* currItem) { - QPen p1b = QPen(Qt::blue, 1.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); - QPen p1bd = QPen(Qt::red, 1.0 / m_canvas->m_viewMode.scale, Qt::DotLine, Qt::FlatCap, Qt::MiterJoin); - QPen p8b = QPen(Qt::blue, 8.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin); - QPen p8r = QPen(Qt::red, 8.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin); + qreal scale = m_canvas->m_viewMode.scale; + PageItem_RegularPolygon* item = currItem->asRegularPolygon(); + QPainterPath path = regularPolygonPath(item->width(), item->height(), m_polyCorners, m_polyUseFactor, m_polyFactor, m_polyRotation, m_polyCurvature, m_polyInnerRot, m_polyOuterCurvature); + + psx->save(); psx->setTransform(currItem->getTransform(), true); - psx->setPen(p1b); + psx->setRenderHint(QPainter::Antialiasing); + + // Draw Vector path + psx->setPen(pens().value("vector")); psx->setBrush(Qt::NoBrush); - PageItem_RegularPolygon* item = currItem->asRegularPolygon(); - QPainterPath path = regularPolygonPath(item->width(), item->height(), m_polyCorners, m_polyUseFactor, m_polyFactor, m_polyRotation, m_polyCurvature, m_polyInnerRot, m_polyOuterCurvature); psx->drawPath(path); - psx->setPen(p1bd); - psx->drawLine(m_startPoint, m_endPoint); + + // Draw Control Lines if (m_polyUseFactor) { + psx->setPen(pens().value("node-handle")); psx->drawLine(m_endPoint, m_innerCPoint); psx->drawLine(m_startPoint, m_outerCPoint); } - psx->setPen(p8b); - if (m_polygonPoint == useControlOuter) - psx->setPen(p8r); - else - psx->setPen(p8b); - psx->drawPoint(m_startPoint); - if (m_polygonPoint == useControlInner) - psx->setPen(p8r); - else - psx->setPen(p8b); - psx->drawPoint(m_endPoint); + psx->setPen(pens().value("node-dash")); + psx->drawLine(m_startPoint, m_endPoint); + + if (currItem->rotation() == 0 || currItem->rotation() == 90 || currItem->rotation() == 180 || currItem->rotation() == 270) + psx->setRenderHint(QPainter::Antialiasing, false); + + // Draw Node Handle + drawNodeHandle(psx, m_startPoint, pens().value("node"), scale, m_polygonPoint == useControlOuter); + drawNodeHandle(psx, m_endPoint, pens().value("node"), scale, m_polygonPoint == useControlInner); + + // Draw Node Controls if (m_polyUseFactor) { - if (m_polygonPoint == useControlInnerCurve) - psx->setPen(p8r); - else - psx->setPen(p8b); - psx->drawPoint(m_innerCPoint); - if (m_polygonPoint == useControlOuterCurve) - psx->setPen(p8r); - else - psx->setPen(p8b); - psx->drawPoint(m_outerCPoint); + drawNodeControl(psx, m_innerCPoint, pens().value("node"), scale, m_polygonPoint == useControlInnerCurve); + drawNodeControl(psx, m_outerCPoint, pens().value("node"), scale, m_polygonPoint == useControlOuterCurve); } + + psx->restore(); } void CanvasMode_EditPolygon::enterEvent(QEvent *e) Index: scribus/canvasmode_editspiral.cpp =================================================================== --- scribus/canvasmode_editspiral.cpp (Revision 26070) +++ scribus/canvasmode_editspiral.cpp (Arbeitskopie) @@ -71,21 +71,16 @@ void CanvasMode_EditSpiral::drawControlsSpiral(QPainter* psx, const PageItem* currItem) { - QPen p8b = QPen(Qt::blue, 8.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin); - QPen p8r = QPen(Qt::red, 8.0 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin); + qreal scale = m_canvas->m_viewMode.scale; psx->setTransform(currItem->getTransform(), true); - psx->setBrush(Qt::NoBrush); - psx->setPen(p8b); - if (m_arcPoint == useControlStart) - psx->setPen(p8r); + + if (currItem->rotation() == 0 || currItem->rotation() == 90 || currItem->rotation() == 180 || currItem->rotation() == 270) + psx->setRenderHint(QPainter::Antialiasing, false); else - psx->setPen(p8b); - psx->drawPoint(m_startPoint); - if (m_arcPoint == useControlEnd) - psx->setPen(p8r); - else - psx->setPen(p8b); - psx->drawPoint(m_endPoint); + psx->setRenderHint(QPainter::Antialiasing, true); + + drawNodeHandle(psx, m_startPoint, pens().value("node"), scale, m_arcPoint == useControlStart); + drawNodeHandle(psx, m_endPoint, pens().value("node"), scale, m_arcPoint == useControlEnd); } void CanvasMode_EditSpiral::enterEvent(QEvent *e) Index: scribus/canvasmode_nodeedit.cpp =================================================================== --- scribus/canvasmode_nodeedit.cpp (Revision 26070) +++ scribus/canvasmode_nodeedit.cpp (Arbeitskopie) @@ -33,7 +33,6 @@ #include "ui/pageselector.h" #include "ui/scrspinbox.h" - CanvasMode_NodeEdit::CanvasMode_NodeEdit(ScribusView* view) : CanvasMode(view) { m_ScMW = m_view->m_ScMW; @@ -52,7 +51,6 @@ p->scale(m_canvas->scale(), m_canvas->scale()); p->translate(-m_doc->minCanvasCoordinate.x(), -m_doc->minCanvasCoordinate.y()); p->setTransform(currItem->getTransform(), true); - p->setPen(QPen(Qt::blue, 1 / m_canvas->m_viewMode.scale, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin)); p->setBrush(Qt::NoBrush); if ((m_doc->nodeEdit.isContourLine()) && (!currItem->ContourLine.empty())) @@ -73,17 +71,20 @@ p->scale(1, -1); } } - } - // draw curve + } const double scale = m_canvas->m_viewMode.scale; - const double onePerScale = 1 / scale; + + // Draw Vector Path if (cli.size() > 3) { + p->save(); + p->setRenderHint(QPainter::Antialiasing); + for (int i = 0; i < cli.size() - 3; i += 4) { if (cli.isMarker(i)) continue; - p->setPen(QPen(Qt::blue, onePerScale, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin)); + const FPoint& a1 = cli.point(i); const FPoint& a2 = cli.point(i + 1); const FPoint& a3 = cli.point(i + 3); @@ -91,52 +92,51 @@ QPainterPath Bez; Bez.moveTo(a1.x(), a1.y()); Bez.cubicTo(a2.x(), a2.y(), a3.x(), a3.y(), a4.x(), a4.y()); + p->setPen(pens().value("vector")); p->drawPath(Bez); - p->setPen(QPen(Qt::blue, onePerScale, Qt::DotLine, Qt::FlatCap, Qt::MiterJoin)); + p->setPen(pens().value("node-handle")); p->drawLine(QPointF(a1.x(), a1.y()), QPointF(a2.x(), a2.y())); p->drawLine(QPointF(a3.x(), a3.y()), QPointF(a4.x(), a4.y())); } + p->restore(); } double x = 0.0; double y = 0.0; - // draw points + // Draw Nodes for (int i = 0; i < cli.size() - 1; i += 2) { if (cli.isMarker(i)) continue; - Qt::GlobalColor color1 = (m_doc->nodeEdit.clre() == (i + 1)) ? Qt::red : Qt::magenta; - Qt::GlobalColor color2 = (m_doc->nodeEdit.clre() == i) ? Qt::red : Qt::blue; + if (m_doc->nodeEdit.edPoints()) { - p->setPen(QPen(color1, 8 / scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin)); cli.point(i + 1, &x, &y); - p->drawPoint(QPointF(x, y)); - p->setPen(QPen(color2, 8 / scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin)); + drawNodeControl(p, QPointF(x, y), pens().value("node"), scale); + cli.point(i, &x, &y); - p->drawPoint(QPointF(x, y)); + drawNodeHandle(p, QPointF(x, y), pens().value("node"), scale); } else { - p->setPen(QPen(color2, 8 / scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin)); cli.point(i, &x, &y); - p->drawPoint(QPointF(x, y)); - p->setPen(QPen(color1, 8 / scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin)); + drawNodeHandle(p, QPointF(x, y), pens().value("node"), scale); + cli.point(i + 1, &x, &y); - p->drawPoint(QPointF(x, y)); + drawNodeControl(p, QPointF(x, y), pens().value("node"), scale); } } if (m_doc->nodeEdit.clre() != -1) { - p->setPen(QPen(Qt::red, 8 / scale, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin)); cli.point(m_doc->nodeEdit.clre(), &x, &y); - p->drawPoint(QPointF(x, y)); + drawNodeControl(p, QPointF(x, y), pens().value("node"), scale, true); + const auto& selectedNodes = m_doc->nodeEdit.selNode(); for (int i = 0; i < selectedNodes.count(); ++i) { int selectedNode = selectedNodes.at(i); cli.point(selectedNode, &x, &y); - p->drawPoint(QPointF(x, y)); + drawNodeHandle(p, QPointF(x, y), pens().value("node"), scale, true); } } Index: scribus/commonstrings.cpp =================================================================== --- scribus/commonstrings.cpp (Revision 26070) +++ scribus/commonstrings.cpp (Arbeitskopie) @@ -37,6 +37,7 @@ QString CommonStrings::tr_Save; QString CommonStrings::Warning; QString CommonStrings::trWarning; +QString CommonStrings::trCustom; QString CommonStrings::trYes; QString CommonStrings::trNo; @@ -314,6 +315,8 @@ CommonStrings::trYesKey = tr("&Yes"); CommonStrings::trNoKey = tr("&No"); + CommonStrings::trCustom = "Custom"; + CommonStrings::itemType_TextFrame = tr("Text Frame"); CommonStrings::itemType_ImageFrame = tr("Image Frame"); CommonStrings::itemType_Line = tr("Line"); Index: scribus/commonstrings.h =================================================================== --- scribus/commonstrings.h (Revision 26070) +++ scribus/commonstrings.h (Arbeitskopie) @@ -105,6 +105,7 @@ static QString trYesKey; //! \brief Translated "No" with key accelerator "&No" static QString trNoKey; + static QString trCustom; //Item Types static QString itemType_TextFrame; Index: scribus/designer/sectioncontainer_extension.cpp =================================================================== --- scribus/designer/sectioncontainer_extension.cpp (nicht existent) +++ scribus/designer/sectioncontainer_extension.cpp (Arbeitskopie) @@ -0,0 +1,63 @@ +#include "sectioncontainer_extension.h" + +#include "../ui/widgets/section_container.h" + +SectionContainerExtension::SectionContainerExtension(SectionContainer *widget, + QObject *parent) + : QObject(parent) + , myWidget(widget) +{ +} + +bool SectionContainerExtension::canAddWidget() const +{ + return !myWidget->hasBodyWidget(); +} + +void SectionContainerExtension::addWidget(QWidget *widget) +{ + myWidget->setWidget(widget); +} + +int SectionContainerExtension::count() const +{ + return 1; +} + +int SectionContainerExtension::currentIndex() const +{ + return 0; +} + +void SectionContainerExtension::insertWidget(int index, QWidget *widget) +{ + //myWidget->insertPage(index, widget); + Q_UNUSED(index); + Q_UNUSED(widget); + //addWidget(widget); +} + +bool SectionContainerExtension::canRemove(int index) const +{ + Q_UNUSED(index); + return myWidget->hasBodyWidget(); +} + +void SectionContainerExtension::remove(int index) +{ + //myWidget->removePage(index); + Q_UNUSED(index); + myWidget->removeWidget(); +} + +void SectionContainerExtension::setCurrentIndex(int index) +{ + Q_UNUSED(index); +} + +QWidget* SectionContainerExtension::widget(int index) const +{ + Q_UNUSED(index); + return myWidget->widget(); +} + Index: scribus/designer/sectioncontainer_extension.h =================================================================== --- scribus/designer/sectioncontainer_extension.h (nicht existent) +++ scribus/designer/sectioncontainer_extension.h (Arbeitskopie) @@ -0,0 +1,34 @@ +#ifndef SECTIONCONTAINEREXTENSION_H +#define SECTIONCONTAINEREXTENSION_H + +#include <QtDesigner/QDesignerContainerExtension> + +QT_BEGIN_NAMESPACE +class QExtensionManager; +QT_END_NAMESPACE +class SectionContainer; + +class SectionContainerExtension: public QObject, + public QDesignerContainerExtension +{ + Q_OBJECT + Q_INTERFACES(QDesignerContainerExtension) + +public: + explicit SectionContainerExtension(SectionContainer *widget, QObject *parent); + + bool canAddWidget() const override; + void addWidget(QWidget *widget) override; + int count() const override; + int currentIndex() const override; + void insertWidget(int index, QWidget *widget) override; + bool canRemove(int index) const override; + void remove(int index) override; + void setCurrentIndex(int index) override; + QWidget *widget(int index) const override; + +private: + SectionContainer *myWidget; +}; + +#endif // SECTIONCONTAINEREXTENSION_H Index: scribus/designer/sectioncontainer_extensionfactory.cpp =================================================================== --- scribus/designer/sectioncontainer_extensionfactory.cpp (nicht existent) +++ scribus/designer/sectioncontainer_extensionfactory.cpp (Arbeitskopie) @@ -0,0 +1,20 @@ +#include "sectioncontainer_extensionfactory.h" + +#include "sectioncontainer_extension.h" +#include "../ui/widgets/section_container.h" + + +SectionContainerExtensionFactory::SectionContainerExtensionFactory(QExtensionManager *parent) + : QExtensionFactory(parent) +{} + +QObject *SectionContainerExtensionFactory::createExtension(QObject *object, + const QString &iid, + QObject *parent) const +{ + SectionContainer *widget = qobject_cast<SectionContainer*>(object); + + if (widget && (iid == Q_TYPEID(QDesignerContainerExtension))) + return new SectionContainerExtension(widget, parent); + return nullptr; +} Index: scribus/designer/sectioncontainer_extensionfactory.h =================================================================== --- scribus/designer/sectioncontainer_extensionfactory.h (nicht existent) +++ scribus/designer/sectioncontainer_extensionfactory.h (Arbeitskopie) @@ -0,0 +1,21 @@ +#ifndef SECTIONCONTAINEREXTENSIONFACTORY_H +#define SECTIONCONTAINEREXTENSIONFACTORY_H + +#include <QtDesigner/QExtensionFactory> + +QT_BEGIN_NAMESPACE +class QExtensionManager; +QT_END_NAMESPACE + +class SectionContainerExtensionFactory: public QExtensionFactory +{ + Q_OBJECT + +public: + explicit SectionContainerExtensionFactory(QExtensionManager *parent = nullptr); + +protected: + QObject *createExtension(QObject *object, const QString &iid, QObject *parent) const override; +}; + +#endif // SECTIONCONTAINEREXTENSIONFACTORY_H Index: scribus/designer/sectioncontainer_plugin.cpp =================================================================== --- scribus/designer/sectioncontainer_plugin.cpp (nicht existent) +++ scribus/designer/sectioncontainer_plugin.cpp (Arbeitskopie) @@ -0,0 +1,101 @@ +#include <QtDesigner/QExtensionFactory> +#include <QtDesigner/QExtensionManager> +#include <QtDesigner/QDesignerFormEditorInterface> +#include <QtDesigner/QDesignerFormWindowInterface> +#include <QtDesigner/QDesignerContainerExtension> +#include <QtDesigner/QDesignerPropertySheetExtension> + +#include <QIcon> +#include <QtPlugin> + +#include "../ui/widgets/section_container.h" +#include "sectioncontainer_plugin.h" +#include "sectioncontainer_extensionfactory.h" + + +SectionContainerPlugin::SectionContainerPlugin(QObject *parent) + : QObject(parent) +{ +} + +QString SectionContainerPlugin::name() const +{ + return QLatin1String("SectionContainer"); +} + +QString SectionContainerPlugin::group() const +{ + return QLatin1String("Scribus UI"); +} + +QString SectionContainerPlugin::toolTip() const +{ + return QString(); +} + +QString SectionContainerPlugin::whatsThis() const +{ + return QString(); +} + +QString SectionContainerPlugin::includeFile() const +{ + return QLatin1String("ui/widgets/section_container.h"); +} + +QIcon SectionContainerPlugin::icon() const +{ + return QIcon(); +} + +bool SectionContainerPlugin::isContainer() const +{ + return true; +} + +QWidget *SectionContainerPlugin::createWidget(QWidget *parent) +{ + SectionContainer *widget = new SectionContainer(parent); +// connect(widget, &SectionContainer::currentIndexChanged, +// this, &SectionContainerPlugin::currentIndexChanged); + return widget; +} + +bool SectionContainerPlugin::isInitialized() const +{ + return initialized; +} + +void SectionContainerPlugin::initialize(QDesignerFormEditorInterface *formEditor) +{ + Q_UNUSED(formEditor) + if (initialized) + return; + + QExtensionManager *manager = formEditor->extensionManager(); + QExtensionFactory *factory = new SectionContainerExtensionFactory(manager); + + Q_ASSERT(manager != 0); + manager->registerExtensions(factory, Q_TYPEID(QDesignerContainerExtension)); + + initialized = true; +} + +QString SectionContainerPlugin::domXml() const +{ + return QLatin1String(R"( +<ui language="c++" displayname="Section Container"> + <widget class="SectionContainer" name="sectionContainer"> + <widget class="QWidget" name="page"> + <layout class="QVBoxLayout" name="verticalLayout"/> + </widget> + </widget> + <customwidgets> + <customwidget> + <class>SectionContainer</class> + <extends>QWidget</extends> + <addpagemethod>setWidget</addpagemethod> + </customwidget> + </customwidgets> +</ui>)"); +} Index: scribus/designer/sectioncontainer_plugin.h =================================================================== --- scribus/designer/sectioncontainer_plugin.h (nicht existent) +++ scribus/designer/sectioncontainer_plugin.h (Arbeitskopie) @@ -0,0 +1,36 @@ +#ifndef SECTIONCONTAINERPLUGIN_H +#define SECTIONCONTAINERPLUGIN_H + +#include <QtUiPlugin/QDesignerCustomWidgetInterface> + +QT_BEGIN_NAMESPACE +class QIcon; +class QWidget; +QT_END_NAMESPACE + +class SectionContainerPlugin: public QObject, public QDesignerCustomWidgetInterface +{ + Q_OBJECT +// Q_PLUGIN_METADATA(IID "net.scribus.uiwidgets") + Q_INTERFACES(QDesignerCustomWidgetInterface) + +public: + explicit SectionContainerPlugin(QObject *parent = nullptr); + + QString name() const override; + QString group() const override; + QString toolTip() const override; + QString whatsThis() const override; + QString includeFile() const override; + QIcon icon() const override; + bool isContainer() const override; + QWidget *createWidget(QWidget *parent) override; + bool isInitialized() const override; + void initialize(QDesignerFormEditorInterface *formEditor) override; + QString domXml() const override; + +private: + bool initialized = false; +}; + +#endif // SECTIONCONTAINERPLUGIN_H Index: scribus/designer/uiwidgets.cpp =================================================================== --- scribus/designer/uiwidgets.cpp (Revision 26070) +++ scribus/designer/uiwidgets.cpp (Arbeitskopie) @@ -1,10 +1,12 @@ #include "uiwidgets.h" #include "formwidget_plugin.h" +#include "sectioncontainer_plugin.h" UIWidgets::UIWidgets(QObject *parent) : QObject(parent) { widgets.append(new FormWidgetPlugin(this)); + widgets.append(new SectionContainerPlugin(this)); } QList<QDesignerCustomWidgetInterface*> UIWidgets::customWidgets() const Index: scribus/manager/widget_manager.cpp =================================================================== --- scribus/manager/widget_manager.cpp (nicht existent) +++ scribus/manager/widget_manager.cpp (Arbeitskopie) @@ -0,0 +1,46 @@ +#include "widget_manager.h" +#include <QDebug> +//#include "selection.h" + +#include "ui/widgets/floatingwindow.h" +#include "ui/colorpicker/colorpicker.h" + +WidgetManager* WidgetManager::m_instance = nullptr; + +WidgetManager::WidgetManager(QObject *parent) + : QObject(parent) +{ + +} + +WidgetManager &WidgetManager::instance() +{ + static WidgetManager m_instance; + return m_instance; +} + +void WidgetManager::setup(ScribusDoc *doc) +{ + m_doc = doc; + m_colorPicker = new ColorPicker(/*ColorPickerConfig::Default*/); + m_colorPicker->setDoc(m_doc); + m_colorPickerWindow = new FloatingWindow(m_colorPicker, new QWidget()); + connect(m_colorPickerWindow, &FloatingWindow::closed, m_colorPicker, &ColorPicker::parentClosed); + +} + + +FloatingWindow *WidgetManager::colorPickerWindow() +{ + return m_colorPickerWindow; +} + +ColorPicker *WidgetManager::colorPicker() +{ + return m_colorPicker; +} + +void WidgetManager::unitChange() +{ + m_colorPicker->unitChange(); +} Index: scribus/manager/widget_manager.h =================================================================== --- scribus/manager/widget_manager.h (nicht existent) +++ scribus/manager/widget_manager.h (Arbeitskopie) @@ -0,0 +1,39 @@ +#ifndef WIDGETMANAGER_H +#define WIDGETMANAGER_H + +#include "scribusdoc.h" +#include <QObject> + +class ColorPicker; +class FloatingWindow; + +class WidgetManager: public QObject +{ + + Q_OBJECT +public: + WidgetManager(WidgetManager const&) = delete; + void operator=(WidgetManager const&) = delete; + static WidgetManager &instance(); + + void setup(ScribusDoc *doc); + + FloatingWindow * colorPickerWindow(); + ColorPicker * colorPicker(); + + void unitChange(); + +private: + WidgetManager(QObject *parent = nullptr); + ~WidgetManager() = default; + + static WidgetManager* m_instance; + + // Widgets + ScribusDoc *m_doc; + FloatingWindow * m_colorPickerWindow; + ColorPicker * m_colorPicker; + +}; + +#endif // WIDGETMANAGER_H Index: scribus/models/gradientlistmodel.cpp =================================================================== --- scribus/models/gradientlistmodel.cpp (nicht existent) +++ scribus/models/gradientlistmodel.cpp (Arbeitskopie) @@ -0,0 +1,305 @@ +#include "gradientlistmodel.h" +//#include "gradientlistbox.h" +#include "commonstrings.h" +#include "scribusdoc.h" + +GradientPixmapValue::GradientPixmapValue(const GradientPixmapValue& other) + : m_gradient(other.m_gradient), + m_doc(other.m_doc), + m_name(other.m_name) +{ + +} + +GradientPixmapValue& GradientPixmapValue::operator= (const GradientPixmapValue& other) +{ + m_gradient = other.m_gradient; + m_doc = other.m_doc; + m_name = other.m_name; + return *this; +} + +GradientPixmapValue::GradientPixmapValue(const VGradient& gradient, ScribusDoc* doc, const QString& gradientName) + : m_gradient(gradient), + m_name(gradientName) +{ + m_doc = (doc) ? doc->guardedPtr() : nullptr; +} + +GradientListModel::GradientListModel(QObject *parent) + : QAbstractItemModel(parent) +{ + +} + +void GradientListModel::clear() +{ + beginResetModel(); + m_gradients.clear(); + endResetModel(); +} + +int GradientListModel::columnCount(const QModelIndex &/*parent*/) const +{ + return 1; +} + +QVariant GradientListModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid()) + return QVariant(); + + const auto* pColorValue = static_cast<GradientPixmapValue*>(index.internalPointer()); + if (!pColorValue) + return QVariant(); + + if (role == Qt::DisplayRole) + { + if (pColorValue->m_name == CommonStrings::trCustom) + return CommonStrings::trCustom; + return pColorValue->m_name; + } + + if (role == Qt::ToolTipRole) + { + const VGradient& gradient = pColorValue->m_gradient; + if (pColorValue->m_name == CommonStrings::trCustom) + return QVariant(); + + switch(gradient.type()) + { + case VGradient::diamond: + return tr("Diamond"); + break; + case VGradient::fourcolor: + return tr("4-Color"); + break; + case VGradient::freemesh: + return tr("Free Mesh"); + break; + case VGradient::linear: + return tr("Linear"); + break; + case VGradient::mesh: + return tr("Mesh"); + break; + case VGradient::radial: + return tr("Radial"); + break; + } + + return QVariant(); + } + + if (role == Qt::UserRole) + { + if (pColorValue->m_name == CommonStrings::trCustom) + return CommonStrings::trCustom; + return QVariant::fromValue(*pColorValue); + } + + return QVariant(); +} + +Qt::ItemFlags GradientListModel::flags(const QModelIndex &index) const +{ + if (!index.isValid()) + return Qt::ItemFlags(); + + Qt::ItemFlags flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable; + return flags; +} + +QModelIndex GradientListModel::index(int row, int column, const QModelIndex &parent) const +{ + if (!hasIndex(row, column, parent)) + return QModelIndex(); + + const auto* pColorValue = static_cast<GradientPixmapValue*>(parent.internalPointer()); + if (pColorValue) + return QModelIndex(); + + if (row < 0 || (row >= rowCount()) || (column != 0)) + return QModelIndex(); + + const GradientPixmapValue& colorValue = m_gradients.at(row); + return createIndex(row, column, const_cast<GradientPixmapValue*>(&colorValue)); +} + +void GradientListModel::insert(int i, const GradientPixmapValue& value) +{ + beginInsertRows(QModelIndex(), i, i); + m_gradients.insert(i, value); + endInsertRows(); +} + +QModelIndex GradientListModel::parent(const QModelIndex &/*child*/) const +{ + return QModelIndex(); +} + +bool GradientListModel::removeRow(int row, const QModelIndex& parent) +{ + if (row < 0 || row >= rowCount()) + return false; + + beginRemoveRows(parent, row, row); + m_gradients.remove(row); + endRemoveRows(); + + return true; +} + +bool GradientListModel::removeRows(int row, int count, const QModelIndex& parent) +{ + if (row < 0 || row >= rowCount()) + return false; + if (count <= 0) + return false; + + beginRemoveRows(parent, row, row + count - 1); + m_gradients.remove(row, count); + endRemoveRows(); + + return true; +} + +int GradientListModel::rowCount(const QModelIndex &parent) const +{ + if (m_gradients.count() == 0) + return 0; + + const auto* pColorValue = static_cast<GradientPixmapValue*>(parent.internalPointer()); + if (pColorValue) + return 0; + + return m_gradients.count(); +} + +void GradientListModel::setGradientList(const GradientList &gradientList) +{ + setGradientList(gradientList, m_isNoneColorShown); +} + +void GradientListModel::setGradientList(const GradientList& gradientList, bool showNone) +{ + ScribusDoc* doc = gradientList.document(); + + beginResetModel(); + + m_isNoneColorShown = showNone; + m_gradients.clear(); + m_gradients.reserve(gradientList.count()); + + if (m_isNoneColorShown) + m_gradients.append(GradientPixmapValue(VGradient(), nullptr, CommonStrings::trCustom)); + + GradientList::const_iterator iter; + for (iter = gradientList.begin(); iter != gradientList.end(); ++iter) + { + const QString& colorName = iter.key(); + const VGradient& gradient = iter.value(); + m_gradients.append(GradientPixmapValue(gradient, doc, colorName)); + } + + if (m_sortRule != SortByName) + { + if (m_sortRule == SortByType) + std::sort(m_gradients.begin(), m_gradients.end(), compareGradientTypes); + } + + endResetModel(); +} + +void GradientListModel::setShowNoneColor(bool showNone) +{ + if (m_isNoneColorShown == showNone) + return; + + beginResetModel(); + m_isNoneColorShown = showNone; + endResetModel(); +} + +void GradientListModel::setSortRule(SortRule sortRule) +{ + if (m_sortRule == sortRule) + return; + + beginResetModel(); + + m_sortRule = sortRule; + if (m_sortRule == SortByType) + std::sort(m_gradients.begin(), m_gradients.end(), compareGradientTypes); + else + std::sort(m_gradients.begin(), m_gradients.end(), compareGradientNames); + + endResetModel(); +} + +bool GradientListModel::compareGradientNames(const GradientPixmapValue& v1, const GradientPixmapValue& v2) +{ + if (v1.m_name == CommonStrings::trCustom) + return true; + if (v2.m_name == CommonStrings::trCustom) + return false; + + return (v1.m_name < v2.m_name); +} + +bool GradientListModel::compareGradientTypes(const GradientPixmapValue& v1, const GradientPixmapValue& v2) +{ + if (v1.m_name == CommonStrings::trCustom) + return true; + if (v2.m_name == CommonStrings::trCustom) + return false; + + QString sortString1("%1-%2"); + QString sortString2("%1-%2"); + + switch(v1.m_gradient.type()) + { + case VGradient::linear: + sortString1 = sortString1.arg("A", v1.m_name); + break; + case VGradient::radial: + sortString1 = sortString1.arg("B", v1.m_name); + break; + case VGradient::diamond: + sortString1 = sortString1.arg("C", v1.m_name); + break; + case VGradient::fourcolor: + sortString1 = sortString1.arg("D", v1.m_name); + break; + case VGradient::freemesh: + sortString1 = sortString1.arg("E", v1.m_name); + break; + case VGradient::mesh: + sortString1 = sortString1.arg("F", v1.m_name); + break; + } + + switch(v2.m_gradient.type()) + { + case VGradient::linear: + sortString2 = sortString2.arg("A", v2.m_name); + break; + case VGradient::radial: + sortString2 = sortString2.arg("B", v2.m_name); + break; + case VGradient::diamond: + sortString2 = sortString2.arg("C", v2.m_name); + break; + case VGradient::fourcolor: + sortString2 = sortString2.arg("D", v2.m_name); + break; + case VGradient::freemesh: + sortString2 = sortString2.arg("E", v2.m_name); + break; + case VGradient::mesh: + sortString2 = sortString2.arg("F", v2.m_name); + break; + } + + return (sortString1 < sortString2); +} Index: scribus/models/gradientlistmodel.h =================================================================== --- scribus/models/gradientlistmodel.h (nicht existent) +++ scribus/models/gradientlistmodel.h (Arbeitskopie) @@ -0,0 +1,104 @@ +#ifndef GRADIENTLISTMODEL_H +#define GRADIENTLISTMODEL_H + + +#include <QAbstractItemModel> +#include <QVector> + +#include "scguardedptr.h" +#include "scribusapi.h" +#include "vgradient.h" + +class ScribusDoc; + +struct SCRIBUS_API GradientPixmapValue +{ + VGradient m_gradient; + ScGuardedPtr<ScribusDoc> m_doc; + QString m_name { "invalid" }; + + GradientPixmapValue() = default; + GradientPixmapValue(const VGradient& gradient, ScribusDoc* doc, const QString& gradientName); + GradientPixmapValue(const GradientPixmapValue& other); + GradientPixmapValue& operator= (const GradientPixmapValue& other); +}; + +Q_DECLARE_METATYPE(GradientPixmapValue) + +class SCRIBUS_API GradientListModel : public QAbstractItemModel +{ + Q_OBJECT + +public: + //! Constructor + GradientListModel(QObject* parent = nullptr); + + enum SortRule + { + SortByName, + SortByType + }; + + //! Returns the color list + const QVector<GradientPixmapValue>& gradients() const { return m_gradients; } + + //! Returns if None color is shown as first item in the list + bool isNoneColorShown() const { return m_isNoneColorShown; } + + //! Remove all colors from list; + void clear(); + + //! Reimplement QAbstractItemModel columnCount() + int columnCount(const QModelIndex &parent = QModelIndex()) const; + + //! Reimplement QAbstractItemModel data() + QVariant data(const QModelIndex &index, int role) const; + + //! Reimplement QAbstractItemModel flags() + Qt::ItemFlags flags(const QModelIndex &index) const; + + //! Reimplement QAbstractItemModel index() + QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; + + //! Insert an item in the list at specified position + void insert(int i, const GradientPixmapValue& value); + + //! Reimplement QAbstractItemModel parent() + QModelIndex parent(const QModelIndex &child) const; + + //! Reimplement QAbstractItemModel removeRow() + bool removeRow(int row, const QModelIndex& parent = QModelIndex()); + + //! Reimplement QAbstractItemModel removeRowz() + bool removeRows(int row, int count, const QModelIndex& parent = QModelIndex()); + + //! Reimplement QAbstractItemModel rowCount() + int rowCount(const QModelIndex &parent = QModelIndex()) const; + + //! Set color list + void setGradientList(const GradientList& gradientList); + + //! Set color list and None color option at same time + void setGradientList(const GradientList &gradientList, bool showNone); + + //! Set if None color is shown as first item in the list + void setShowNoneColor(bool showNone); + + //! Set how colors should be sorted + void setSortRule(SortRule sortRule); + +protected: + //! If None color is shown as first item in the list + bool m_isNoneColorShown { false }; + + //! The color list + QVector<GradientPixmapValue> m_gradients; + + // SortRule m_sortRule + SortRule m_sortRule { SortByName }; + + static bool compareGradientNames(const GradientPixmapValue& v1, const GradientPixmapValue& v2); + static bool compareGradientTypes(const GradientPixmapValue& v1, const GradientPixmapValue& v2); +}; + +#endif // GRADIENTLISTMODEL_H Index: scribus/pageitem.cpp =================================================================== --- scribus/pageitem.cpp (Revision 26070) +++ scribus/pageitem.cpp (Arbeitskopie) @@ -2766,6 +2766,9 @@ break; } + if(mp == nullptr) + return; + UndoTransaction trans; if (UndoManager::undoEnabled()) { Index: scribus/prefsmanager.cpp =================================================================== --- scribus/prefsmanager.cpp (Revision 26070) +++ scribus/prefsmanager.cpp (Arbeitskopie) @@ -174,6 +174,7 @@ appPrefs.uiPrefs.showSplashOnStartup = true; appPrefs.uiPrefs.useSmallWidgets = false; appPrefs.uiPrefs.hideLabels = false; + appPrefs.uiPrefs.hideLabelsOfInactiveTabs = false; appPrefs.uiPrefs.useTabs = false; appPrefs.uiPrefs.stickyTools = false; appPrefs.uiPrefs.grayscaleIcons = false; @@ -1344,6 +1345,7 @@ dcUI.setAttribute("ShowSplashOnStartup", static_cast<int>(appPrefs.uiPrefs.showSplashOnStartup)); dcUI.setAttribute("UseSmallWidgets", static_cast<int>(appPrefs.uiPrefs.useSmallWidgets)); dcUI.setAttribute("HideLabels", static_cast<int>(appPrefs.uiPrefs.hideLabels)); + dcUI.setAttribute("HideLabelsOfInactiveTabs", static_cast<int>(appPrefs.uiPrefs.hideLabelsOfInactiveTabs)); dcUI.setAttribute("UseDocumentTabs", static_cast<int>(appPrefs.uiPrefs.useTabs)); dcUI.setAttribute("StickyTools", static_cast<int>(appPrefs.uiPrefs.stickyTools)); dcUI.setAttribute("Theme", appPrefs.uiPrefs.style); @@ -1991,6 +1993,7 @@ appPrefs.uiPrefs.showSplashOnStartup = static_cast<bool>(dc.attribute("UI_SHOWSPLASHSCREEN", "1").toInt()); appPrefs.uiPrefs.useSmallWidgets = dc.attribute("UseSmallWidgets").toInt(); appPrefs.uiPrefs.hideLabels = dc.attribute("HideLabels").toInt(); + appPrefs.uiPrefs.hideLabelsOfInactiveTabs = dc.attribute("HideLabelsOfInactiveTabs").toInt(); appPrefs.uiPrefs.useTabs = static_cast<bool>(dc.attribute("UseDocumentTabs", "0").toInt()); appPrefs.uiPrefs.stickyTools = static_cast<bool>(dc.attribute("StickyTools", "0").toInt()); appPrefs.uiPrefs.grayscaleIcons = static_cast<bool>(dc.attribute("UseGrayscaleIcons",nullptr).toInt()); Index: scribus/prefsstructs.h =================================================================== --- scribus/prefsstructs.h (Revision 26070) +++ scribus/prefsstructs.h (Arbeitskopie) @@ -123,6 +123,7 @@ QString userPreferredLocale; //! System or interface language number formats bool useSmallWidgets {false}; //! Use small widgets in the palettes bool hideLabels {false}; //! Hide UI additional labels (Professional Mode) + bool hideLabelsOfInactiveTabs {false}; //! Hide text label of inactive tabs of Adavanced Docking System bool useTabs {false}; //! Use a tabbed MainWidget a la FireFox bool showStartupDialog {true}; //! Whether to show the startup dialog or not bool showSplashOnStartup {true}; //! Whether to show the splashscreen or not Index: scribus/scribus.cpp =================================================================== --- scribus/scribus.cpp (Revision 26070) +++ scribus/scribus.cpp (Arbeitskopie) @@ -21,6 +21,7 @@ * * ***************************************************************************/ +#include "ui/colorpicker/colorpicker.h" #include <QAction> #include <QApplication> #include <QByteArray> @@ -160,7 +161,6 @@ #include "ui/charselect.h" #include "ui/checkDocument.h" #include "ui/collectforoutput_ui.h" -#include "ui/colorpalette.h" #include "ui/contentpalette.h" #include "ui/contextmenu.h" #include "ui/copypagetomasterpagedialog.h" @@ -232,7 +232,6 @@ #include "ui/symbolpalette.h" #include "ui/tabmanager.h" #include "ui/transformdialog.h" -#include "ui/transparencypalette.h" #include "ui/viewtoolbar.h" #include "undogui.h" #include "undomanager.h" @@ -269,7 +268,8 @@ extern bool emergencyActivated; ScribusMainWindow::ScribusMainWindow() : - m_prefsManager(PrefsManager::instance()) + m_prefsManager(PrefsManager::instance()), + m_widgetManager(WidgetManager::instance()) { #ifdef Q_OS_MACOS @@ -299,6 +299,7 @@ CDockManager::setConfigFlag(CDockManager::DockAreaHideDisabledButtons, true); CDockManager::setConfigFlag(CDockManager::FocusHighlighting, true); CDockManager::setConfigFlag(CDockManager::DisableTabTextEliding, true); + CDockManager::setConfigFlag(CDockManager::ShowTabTextOnlyForActiveTab, m_prefsManager.appPrefs.uiPrefs.hideLabelsOfInactiveTabs); // Documentation: https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/blob/master/doc/user-guide.md#auto-hide-configuration-flags // CDockManager::setAutoHideConfigFlags(CDockManager::DefaultAutoHideConfig); @@ -349,6 +350,7 @@ scrLayersActions.clear(); scrScrapActions.clear(); actionManager = new ActionManager(this); + m_widgetManager.setup(m_doc); appModeHelper = new AppModeHelper(); appModeHelper->setup(actionManager, &scrActions, &scrRecentFileActions, &scrWindowsActions, &scrScrapActions, &scrLayersActions, &scrRecentPasteActions); scrMenuMgr = new ScMWMenuManager(menuBar(), actionManager); @@ -7424,6 +7426,7 @@ alignDistributePalette->unitChange(); guidePalette->setupPage(); m_styleManager->unitChange(); + m_widgetManager.unitChange(); if (draw) view->DrawNew(); } @@ -7480,8 +7483,9 @@ } patternsDependingOnThis.prepend(temp); symbolPalette->editingStart(patternsDependingOnThis); - propertiesPalette->colorPalette->hideEditedPatterns(patternsDependingOnThis); - propertiesPalette->transparencyPalette->hideEditedPatterns(patternsDependingOnThis); +// propertiesPalette->colorPalette->hideEditedPatterns(patternsDependingOnThis); + WidgetManager::instance().colorPicker()->hideEditedPatterns(patternsDependingOnThis); +// propertiesPalette->transparencyPalette->hideEditedPatterns(patternsDependingOnThis); if (outlinePalette->isVisible()) outlinePalette->BuildTree(false); updateActiveWindowCaption( tr("Editing Symbol: %1").arg(temp)); @@ -9241,7 +9245,8 @@ // Update tools colors if needed m_prefsManager.replaceToolColors(dia->replaceColorMap); m_prefsManager.setColorSet(dia->m_colorList); - propertiesPalette->colorPalette->setColors(m_prefsManager.colorSet()); +// propertiesPalette->colorPalette->setColors(m_prefsManager.colorSet()); + WidgetManager::instance().colorPicker()->setColorList(m_prefsManager.colorSet()); m_prefsManager.appPrefs.defaultGradients = dia->dialogGradients; m_prefsManager.appPrefs.defaultPatterns = dia->dialogPatterns; QString Cpfad = QDir::toNativeSeparators(ScPaths::applicationDataDir())+"DefaultColors.xml"; Index: scribus/scribus.h =================================================================== --- scribus/scribus.h (Revision 26070) +++ scribus/scribus.h (Arbeitskopie) @@ -57,6 +57,7 @@ #include "scribusapi.h" #include "scribusdoc.h" #include "manager/dock_manager.h" +#include "manager/widget_manager.h" #include "styleoptions.h" #include "ui/customfdialog.h" #include "ui/scmessagebox.h" @@ -654,7 +655,8 @@ StyleManager *m_styleManager {nullptr}; UndoManager *m_undoManager {nullptr}; PrefsManager& m_prefsManager; - FormatsManager *m_formatsManager {nullptr}; + WidgetManager &m_widgetManager; + FormatsManager *m_formatsManager {nullptr}; QPointer<HelpBrowser> m_helpBrowser; QString m_osgFilterString; Index: scribus/scribusdoc.cpp =================================================================== --- scribus/scribusdoc.cpp (Revision 26070) +++ scribus/scribusdoc.cpp (Arbeitskopie) @@ -8437,6 +8437,35 @@ changedPagePreview(); } +void ScribusDoc::itemSelection_SetItemHatchFill(int mode, double distance, double angle, bool useBackground, const QString &background, const QString &foreground, Selection *customSelection) +{ + Selection* itemSelection = (customSelection != nullptr) ? customSelection : m_Selection; + int selectedItemCount = itemSelection->count(); + if (selectedItemCount == 0) + return; + + m_updateManager.setUpdatesDisabled(); + + UndoTransaction activeTransaction; + if (selectedItemCount > 1 && UndoManager::undoEnabled()) + activeTransaction = m_undoManager->beginTransaction(Um::Selection, Um::IPolygon, Um::SetFill, "", Um::IFill); + + PageItem *currItem; + for (int i = 0; i < selectedItemCount; ++i) + { + currItem = itemSelection->itemAt(i); + currItem->setHatchParameters(mode, distance, angle, useBackground, background, foreground); + currItem->update(); + } + + if (activeTransaction) + activeTransaction.commit(); + + m_updateManager.setUpdatesEnabled(); + changed(); + changedPagePreview(); +} + void ScribusDoc::itemSelection_SetItemStrokePattern(const QString& pattern, Selection* customSelection) { Selection* itemSelection = (customSelection != nullptr) ? customSelection : m_Selection; Index: scribus/scribusdoc.h =================================================================== --- scribus/scribusdoc.h (Revision 26070) +++ scribus/scribusdoc.h (Arbeitskopie) @@ -1608,6 +1608,7 @@ void itemSelection_SetItemGradFill(int typp, Selection* customSelection = nullptr); void itemSelection_SetItemPatternFill(const QString& pattern, Selection* customSelection = nullptr); void itemSelection_SetItemPatternProps(double scaleX, double scaleY, double offsetX, double offsetY, double rotation, double skewX, double skewY, bool mirrorX, bool mirrorY); + void itemSelection_SetItemHatchFill(int mode, double distance, double angle, bool useBackground, const QString& background, const QString& foreground, Selection* customSelection = nullptr); void itemSelection_SetItemStrokePattern(const QString& pattern, Selection* customSelection = nullptr); void itemSelection_SetItemStrokePatternProps(double scaleX, double scaleY, double offsetX, double offsetY, double rotation, double skewX, double skewY, double space, bool mirrorX, bool mirrorY, Selection* customSelection = nullptr); void itemSelection_SetItemStrokePatternType(bool type, Selection* customSelection = nullptr); Index: scribus/scribusstructs.h =================================================================== --- scribus/scribusstructs.h (Revision 26070) +++ scribus/scribusstructs.h (Arbeitskopie) @@ -117,6 +117,61 @@ Gradient_Hatch = 14 }; +static QString gradientTypeDebug(int type) +{ + switch(type) + { + case Gradient_None: + return "Gradient_None"; + break; + case Gradient_LinearLegacy1: + return "Gradient_LinearLegacy1"; + break; + case Gradient_LinearLegacy2: + return "Gradient_LinearLegacy2"; + break; + case Gradient_LinearLegacy3: + return "Gradient_LinearLegacy3"; + break; + case Gradient_LinearLegacy4: + return "Gradient_LinearLegacy4"; + break; + case Gradient_RadialLegacy5: + return "Gradient_RadialLegacy5"; + break; + case Gradient_Linear: + return "Gradient_Linear"; + break; + case Gradient_Radial: + return "Gradient_Radial"; + break; + case Gradient_Pattern: + return "Gradient_Pattern"; + break; + case Gradient_4Colors: + return "Gradient_4Colors"; + break; + case Gradient_Diamond: + return "Gradient_Diamond"; + break; + case Gradient_Mesh: + return "Gradient_Mesh"; + break; + case Gradient_PatchMesh: + return "Gradient_PatchMesh"; + break; + case Gradient_Conical: + return "Gradient_Conical"; + break; + case Gradient_Hatch: + return "Gradient_Hatch"; + break; + default: + return "undefinded type: " + QString::number(type); + break; + } +}; + enum { GradMask_None = 0, @@ -130,6 +185,108 @@ GradMask_PatternInverted = 8 }; +static QString gradientMaskDebug(int type) +{ + switch(type) + { + case GradMask_None: + return "GradMask_None"; + break; + case GradMask_Linear: + return "GradMask_Linear"; + break; + case GradMask_Radial: + return "GradMask_Radial"; + break; + case GradMask_Pattern: + return "GradMask_Pattern"; + break; + case GradMask_LinearLumAlpha: + return "GradMask_LinearLumAlpha"; + break; + case GradMask_RadialLumAlpha: + return "GradMask_RadialLumAlpha"; + break; + case GradMask_PatternLumAlpha: + return "GradMask_PatternLumAlpha"; + break; + case GradMask_PatternLumAlphaInverted: + return "GradMask_PatternLumAlphaInverted"; + break; + case GradMask_PatternInverted: + return "GradMask_PatternInverted"; + break; + default: + return "undefinded type: " + QString::number(type); + break; + } +}; + +enum class GradientEdit +{ + // Gradients + Gradient = 0, + Gradient_Stroke = 1, + Gradient_Mask = 2, + FourColors = 3, + Diamond = 4, + // Mesh + Mesh_Point = 5, + Mesh_Color = 6, + Mesh_ControlPoints = 7, + // Patch Mesh + PatchMesh_Color = 8, + PatchMesh_Point = 9, + PatchMesh_ControlPoints = 10, + PatchMesh_Polygon = 11 +}; +Q_DECLARE_METATYPE(GradientEdit) + +static QString gradientEditDebug(GradientEdit type) +{ + switch(type) + { + case GradientEdit::Gradient: + return "Gradient"; + break; + case GradientEdit::Gradient_Stroke: + return "Gradient_Stroke"; + break; + case GradientEdit::Gradient_Mask: + return "Gradient_Mask"; + break; + case GradientEdit::FourColors: + return "FourColors"; + break; + case GradientEdit::Diamond: + return "Diamond"; + break; + case GradientEdit::Mesh_Point: + return "Mesh_Point"; + break; + case GradientEdit::Mesh_Color: + return "Mesh_Color"; + break; + case GradientEdit::Mesh_ControlPoints: + return "Mesh_ControlPoints"; + break; + case GradientEdit::PatchMesh_Color: + return "PatchMesh_Color"; + break; + case GradientEdit::PatchMesh_Point: + return "PatchMesh_Point"; + break; + case GradientEdit::PatchMesh_ControlPoints: + return "PatchMesh_ControlPoints"; + break; + case GradientEdit::PatchMesh_Polygon: + return "PatchMesh_Polygon"; + break; + default: + return "missing type"; + } +}; + /** * This enum describes the sides that can be selected. A selection can be * expressed as an ORed combination of Left, Right, Top and Bottom. Index: scribus/scribusview.cpp =================================================================== --- scribus/scribusview.cpp (Revision 26070) +++ scribus/scribusview.cpp (Arbeitskopie) @@ -1227,7 +1227,7 @@ QRect rect = currItem->getRedrawBounding(m_canvas->scale()); m_canvas->Transform(currItem, matrix); FPointArray fpNew; - if (editStrokeGradient) + if (editStrokeGradient == GradientEdit::Gradient_Stroke) fpNew.setPoints(2, currItem->GrStrokeStartX, currItem->GrStrokeStartY, currItem->GrStrokeEndX, currItem->GrStrokeEndY); else fpNew.setPoints(2, currItem->GrStartX, currItem->GrStartY, currItem->GrEndX, currItem->GrEndY); Index: scribus/scribusview.h =================================================================== --- scribus/scribusview.h (Revision 26070) +++ scribus/scribusview.h (Arbeitskopie) @@ -151,7 +151,7 @@ bool Magnify { false }; bool storedFramesShown { false }; bool storedShowControls { false }; - int editStrokeGradient { 0 }; + GradientEdit editStrokeGradient { GradientEdit::Gradient }; bool m_AnnotChanged { false }; bool m_EditModeWasOn { false }; bool m_ChangedState { false }; Index: scribus/third_party/Qt-Advanced-Docking-System/CMakeLists.txt =================================================================== --- scribus/third_party/Qt-Advanced-Docking-System/CMakeLists.txt (Revision 26070) +++ scribus/third_party/Qt-Advanced-Docking-System/CMakeLists.txt (Arbeitskopie) @@ -1,5 +1,5 @@ ###<< Scribus -set(ADS_VERSION "4.2.0") +set(ADS_VERSION "4.2.1") ###>> Scribus cmake_minimum_required(VERSION 3.5) Index: scribus/third_party/Qt-Advanced-Docking-System/doc/user-guide.md =================================================================== --- scribus/third_party/Qt-Advanced-Docking-System/doc/user-guide.md (Revision 26070) +++ scribus/third_party/Qt-Advanced-Docking-System/doc/user-guide.md (Arbeitskopie) @@ -28,6 +28,7 @@ - [`FloatingContainerForceQWidgetTitleBar` (Linux only)](#floatingcontainerforceqwidgettitlebar-linux-only) - [`MiddleMouseButtonClosesTab`](#middlemousebuttonclosestab) - [`DisableTabTextEliding`](#disabletabtexteliding) + - [`ShowTabTextOnlyForActiveTab`](#showtabtextonlyforactivetab) - [Auto-Hide Configuration Flags](#auto-hide-configuration-flags) - [Auto Hide Dock Widgets](#auto-hide-dock-widgets) - [Pinning Auto-Hide Widgets to a certain border](#pinning-auto-hide-widgets-to-a-certain-border) @@ -486,6 +487,13 @@ ![DisableTabTextEliding false](cfg_flag_DisableTabTextEliding_false.png) +### `ShowTabTextOnlyForActiveTab` + +Set this flag (default = false) to show label texts in dock area tabs only +for active tabs. Inactive tabs only show their icon: + +![MShowTabTextOnlyForActiveTab true](cfg_flag_ShowTabTextOnlyForActiveTab_true.png) + ## Auto-Hide Configuration Flags ### Auto Hide Dock Widgets Index: scribus/third_party/Qt-Advanced-Docking-System/src/DockAreaWidget.cpp =================================================================== --- scribus/third_party/Qt-Advanced-Docking-System/src/DockAreaWidget.cpp (Revision 26070) +++ scribus/third_party/Qt-Advanced-Docking-System/src/DockAreaWidget.cpp (Arbeitskopie) @@ -464,7 +464,14 @@ return d->AutoHideDockContainer; } + //============================================================================ +CDockSplitter* CDockAreaWidget::parentSplitter() const +{ + return internal::findParent<CDockSplitter*>(this); +} + +//============================================================================ bool CDockAreaWidget::isAutoHide() const { return d->AutoHideDockContainer != nullptr; @@ -600,7 +607,7 @@ this->toggleView(false); // Hide empty parent splitters - auto Splitter = internal::findParent<CDockSplitter*>(this); + auto Splitter = parentSplitter(); internal::hideEmptyParentSplitters(Splitter); //Hide empty floating widget Index: scribus/third_party/Qt-Advanced-Docking-System/src/DockAreaWidget.h =================================================================== --- scribus/third_party/Qt-Advanced-Docking-System/src/DockAreaWidget.h (Revision 26070) +++ scribus/third_party/Qt-Advanced-Docking-System/src/DockAreaWidget.h (Arbeitskopie) @@ -47,6 +47,7 @@ class DockContainerWidgetPrivate; class CDockAreaTitleBar; class CDockingStateReader; +class CDockSplitter; /** @@ -217,6 +218,11 @@ CAutoHideDockContainer* autoHideDockContainer() const; /** + * Returns the parent splitter that contains this dock area + */ + CDockSplitter* parentSplitter() const; + + /** * Returns true if the dock area is in an auto hide container */ bool isAutoHide() const; Index: scribus/third_party/Qt-Advanced-Docking-System/src/DockContainerWidget.cpp =================================================================== --- scribus/third_party/Qt-Advanced-Docking-System/src/DockContainerWidget.cpp (Revision 26070) +++ scribus/third_party/Qt-Advanced-Docking-System/src/DockContainerWidget.cpp (Arbeitskopie) @@ -587,16 +587,7 @@ auto InsertParam = internal::dockAreaInsertParameters(area); auto NewDockAreas = FloatingContainer->findChildren<CDockAreaWidget*>( QString(), Qt::FindChildrenRecursively); - QSplitter* TargetAreaSplitter = internal::findParent<QSplitter*>(TargetArea); - - if (!TargetAreaSplitter) - { - QSplitter* Splitter = newSplitter(InsertParam.orientation()); - Layout->replaceWidget(TargetArea, Splitter); - Splitter->addWidget(TargetArea); - updateSplitterHandles(Splitter); - TargetAreaSplitter = Splitter; - } + auto TargetAreaSplitter = TargetArea->parentSplitter(); int AreaIndex = TargetAreaSplitter->indexOf(TargetArea); auto FloatingSplitter = FloatingContainer->rootSplitter(); if (TargetAreaSplitter->orientation() == InsertParam.orientation()) @@ -742,7 +733,7 @@ } auto InsertParam = internal::dockAreaInsertParameters(area); - QSplitter* TargetAreaSplitter = internal::findParent<QSplitter*>(TargetArea); + auto TargetAreaSplitter = TargetArea->parentSplitter(); int AreaIndex = TargetAreaSplitter->indexOf(TargetArea); auto Sizes = TargetAreaSplitter->sizes(); if (TargetAreaSplitter->orientation() == InsertParam.orientation()) @@ -877,7 +868,7 @@ // it already has and do nothing, if it is the same place. It would // also work without this check, but it looks nicer with the check // because there will be no layout updates - auto Splitter = internal::findParent<CDockSplitter*>(DroppedDockArea); + auto Splitter = DroppedDockArea->parentSplitter(); auto InsertParam = internal::dockAreaInsertParameters(area); if (Splitter == RootSplitter && InsertParam.orientation() == Splitter->orientation()) { @@ -1364,7 +1355,7 @@ NewDockArea->addDockWidget(Dockwidget); auto InsertParam = internal::dockAreaInsertParameters(area); - QSplitter* TargetAreaSplitter = internal::findParent<QSplitter*>(TargetDockArea); + auto TargetAreaSplitter = TargetDockArea->parentSplitter(); int index = TargetAreaSplitter ->indexOf(TargetDockArea); if (TargetAreaSplitter->orientation() == InsertParam.orientation()) { @@ -1381,7 +1372,7 @@ { ADS_PRINT("TargetAreaSplitter->orientation() != InsertParam.orientation()"); auto TargetAreaSizes = TargetAreaSplitter->sizes(); - QSplitter* NewSplitter = newSplitter(InsertParam.orientation()); + auto NewSplitter = newSplitter(InsertParam.orientation()); NewSplitter->addWidget(TargetDockArea); insertWidgetIntoSplitter(NewSplitter, NewDockArea, InsertParam.append()); @@ -1572,7 +1563,7 @@ area->disconnect(this); d->DockAreas.removeAll(area); - CDockSplitter* Splitter = internal::findParent<CDockSplitter*>(area); + auto Splitter = area->parentSplitter(); // Remove are from parent splitter and recursively hide tree of parent // splitters if it has no visible content @@ -1943,7 +1934,7 @@ //============================================================================ -QSplitter* CDockContainerWidget::rootSplitter() const +CDockSplitter* CDockContainerWidget::rootSplitter() const { return d->RootSplitter; } Index: scribus/third_party/Qt-Advanced-Docking-System/src/DockContainerWidget.h =================================================================== --- scribus/third_party/Qt-Advanced-Docking-System/src/DockContainerWidget.h (Revision 26070) +++ scribus/third_party/Qt-Advanced-Docking-System/src/DockContainerWidget.h (Arbeitskopie) @@ -53,6 +53,7 @@ class CDockingStateReader; class CAutoHideSideBar; class CAutoHideTab; +class CDockSplitter; struct AutoHideTabPrivate; struct AutoHideDockContainerPrivate; @@ -94,7 +95,7 @@ /** * Access function for the internal root splitter */ - QSplitter* rootSplitter() const; + CDockSplitter* rootSplitter() const; /** * Creates and initializes a dockwidget auto hide container into the given area. Index: scribus/third_party/Qt-Advanced-Docking-System/src/DockManager.cpp =================================================================== --- scribus/third_party/Qt-Advanced-Docking-System/src/DockManager.cpp (Revision 26070) +++ scribus/third_party/Qt-Advanced-Docking-System/src/DockManager.cpp (Arbeitskopie) @@ -1318,7 +1318,7 @@ { if (ContainedArea) { - auto Splitter = internal::findParent<CDockSplitter*>(ContainedArea); + auto Splitter = ContainedArea->parentSplitter(); if (Splitter) { return Splitter->sizes(); @@ -1335,7 +1335,7 @@ return; } - auto Splitter = internal::findParent<CDockSplitter*>(ContainedArea); + auto Splitter = ContainedArea->parentSplitter(); if (Splitter && Splitter->count() == sizes.count()) { Splitter->setSizes(sizes); Index: scribus/third_party/Qt-Advanced-Docking-System/src/DockManager.h =================================================================== --- scribus/third_party/Qt-Advanced-Docking-System/src/DockManager.h (Revision 26070) +++ scribus/third_party/Qt-Advanced-Docking-System/src/DockManager.h (Arbeitskopie) @@ -214,6 +214,7 @@ //! Users can overwrite this by setting the environment variable ADS_UseNativeTitle to "1" or "0". MiddleMouseButtonClosesTab = 0x2000000, //! If the flag is set, the user can use the mouse middle button to close the tab under the mouse DisableTabTextEliding = 0x4000000, //! Set this flag to disable eliding of tab texts in dock area tabs + ShowTabTextOnlyForActiveTab =0x8000000, //! Set this flag to show label texts in dock area tabs only for active tabs DefaultDockAreaButtons = DockAreaHasCloseButton | DockAreaHasUndockButton @@ -256,8 +257,7 @@ DefaultAutoHideConfig = AutoHideFeatureEnabled | DockAreaHasAutoHideButton - | AutoHideCloseButtonCollapsesDock - | AutoHideHasCloseButton + | AutoHideHasMinimizeButton }; Q_DECLARE_FLAGS(AutoHideFlags, eAutoHideFlag) Index: scribus/third_party/Qt-Advanced-Docking-System/src/DockWidget.cpp =================================================================== --- scribus/third_party/Qt-Advanced-Docking-System/src/DockWidget.cpp (Revision 26070) +++ scribus/third_party/Qt-Advanced-Docking-System/src/DockWidget.cpp (Arbeitskopie) @@ -184,11 +184,11 @@ DockArea->setCurrentDockWidget(_this); DockArea->toggleView(true); TabWidget->show(); - QSplitter* Splitter = internal::findParent<QSplitter*>(DockArea); + auto Splitter = DockArea->parentSplitter(); while (Splitter && !Splitter->isVisible() && !DockArea->isAutoHide()) { Splitter->show(); - Splitter = internal::findParent<QSplitter*>(Splitter); + Splitter = internal::findParent<CDockSplitter*>(Splitter); } CDockContainerWidget* Container = DockArea->dockContainer(); @@ -749,13 +749,12 @@ if (d->DockArea) { d->DockArea->toggleDockWidgetView(this, Open); + if (d->DockArea->isAutoHide()) + { + d->DockArea->autoHideDockContainer()->toggleView(Open); + } } - if (d->DockArea->isAutoHide()) - { - d->DockArea->autoHideDockContainer()->toggleView(Open); - } - if (Open && TopLevelDockWidgetBefore) { CDockWidget::emitTopLevelEventForWidget(TopLevelDockWidgetBefore, false); Index: scribus/third_party/Qt-Advanced-Docking-System/src/DockWidgetTab.cpp =================================================================== --- scribus/third_party/Qt-Advanced-Docking-System/src/DockWidgetTab.cpp (Revision 26070) +++ scribus/third_party/Qt-Advanced-Docking-System/src/DockWidgetTab.cpp (Arbeitskopie) @@ -421,12 +421,13 @@ break; default: - if (CDockManager::testConfigFlag(CDockManager::FocusHighlighting)) - { - d->focusController()->setDockWidgetTabPressed(false); - } - break; // do nothing + break; } + + if (CDockManager::testConfigFlag(CDockManager::FocusHighlighting)) + { + d->focusController()->setDockWidgetTabPressed(false); + } } else if (ev->button() == Qt::MiddleButton) { @@ -580,6 +581,14 @@ { d->updateCloseButtonVisibility(active); + if(CDockManager::testConfigFlag(CDockManager::ShowTabTextOnlyForActiveTab) && !d->Icon.isNull()) + { + if(active) + d->TitleLabel->setVisible(true); + else + d->TitleLabel->setVisible(false); + } + // Focus related stuff if (CDockManager::testConfigFlag(CDockManager::FocusHighlighting) && !d->DockWidget->dockManager()->isRestoringState()) { Index: scribus/third_party/Qt-Advanced-Docking-System/src/ads_globals.h =================================================================== --- scribus/third_party/Qt-Advanced-Docking-System/src/ads_globals.h (Revision 26070) +++ scribus/third_party/Qt-Advanced-Docking-System/src/ads_globals.h (Arbeitskopie) @@ -268,7 +268,7 @@ } parentWidget = parentWidget->parentWidget(); } - return 0; + return nullptr; } /** Index: scribus/third_party/Qt-Advanced-Docking-System/src/stylesheets/focus_highlighting.css =================================================================== --- scribus/third_party/Qt-Advanced-Docking-System/src/stylesheets/focus_highlighting.css (Revision 26070) +++ scribus/third_party/Qt-Advanced-Docking-System/src/stylesheets/focus_highlighting.css (Arbeitskopie) @@ -333,7 +333,7 @@ ads--CAutoHideDockContainer #dockAreaAutoHideButton { - qproperty-icon: url(:/ads/images/vs-pin-button-pinned-focused.svg), + qproperty-icon: url(:/ads/images/vs-pin-button-pinned-focused.svg); qproperty-iconSize: 16px; } Index: scribus/ui/colorlistbox.h =================================================================== --- scribus/ui/colorlistbox.h (Revision 26070) +++ scribus/ui/colorlistbox.h (Arbeitskopie) @@ -93,7 +93,7 @@ The list is cleared itself. Then is rendered an icon with color attributes (RGB/CMYK/Spot etc.). \param list a ColorList to present. */ - void setColors(ColorList& list, bool insertNone); + void setColors(ColorList &list, bool insertNone); /*! \brief Set the current color */ void setCurrentColor(QString colorName); Index: scribus/ui/colorpalette.cpp =================================================================== --- scribus/ui/colorpalette.cpp (Revision 26070) +++ scribus/ui/colorpalette.cpp (nicht existent) @@ -1,1913 +0,0 @@ -/* -For general Scribus (>=1.3.2) copyright and licensing information please refer -to the COPYING file provided with the program. Following this notice may exist -a copyright and/or license notice that predates the release of Scribus 1.3.2 -for which a new license (GPL+exception) is in place. -*/ -/*************************************************************************** - colorpalette.cpp - description - ------------------- - begin : Wed Apr 25 2001 - copyright : (C) 2001 by Franz Schmid - email : Franz.Schmid@altmuehlnet.de - ***************************************************************************/ - -/*************************************************************************** - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ - -#include "colorpalette.h" - -#include <QAbstractItemView> -#include <QEvent> -#include <QFont> -#include <QFrame> -#include <QGridLayout> -#include <QGroupBox> -#include <QHBoxLayout> -#include <QLabel> -#include <QListWidget> -#include <QListWidgetItem> -#include <QPixmap> -#include <QRect> -#include <QSpacerItem> -#include <QSpinBox> -#include <QStandardItem> -#include <QToolButton> -#include <QToolTip> -#include <QVBoxLayout> -#include <QCheckBox> -#include <QDebug> - -#include "colorlistbox.h" -#include "commonstrings.h" -#include "gradienteditor.h" -#include "iconmanager.h" -#include "insertTable.h" -#include "pageitem.h" -#include "sccolorengine.h" -#include "sclistwidgetdelegate.h" -#include "scpage.h" -#include "scpainter.h" -#include "scpattern.h" -#include "scribus.h" -#include "scribusdoc.h" -#include "scribusview.h" -#include "scrspinbox.h" -#include "selection.h" -#include "undomanager.h" -#include "units.h" -#include "util.h" - - -ColorPalette::ColorPalette(QWidget* parent) : QWidget(parent) -{ - undoManager = UndoManager::instance(); - CGradDia = new GradientVectorDialog(this->parentWidget()); - CGradDia->hide(); - - setupUi(this); - fillModeCombo->addItem( tr("Solid") ); - fillModeCombo->addItem( tr("Gradient") ); - fillModeCombo->addItem( tr("Hatch") ); - fillShade->setDecimals(0); - strokeShade->setDecimals(0); - color1Alpha->setDecimals(0); - color2Alpha->setDecimals(0); - color3Alpha->setDecimals(0); - color4Alpha->setDecimals(0); - color1Shade->setDecimals(0); - color2Shade->setDecimals(0); - color3Shade->setDecimals(0); - color4Shade->setDecimals(0); - shadeMeshPoint->setDecimals(0); - strokeModeCombo->addItem( tr("Solid") ); - strokeModeCombo->addItem( tr("Gradient") ); - - colorPoint1->setPixmapType(ColorCombo::fancyPixmaps); - colorPoint2->setPixmapType(ColorCombo::fancyPixmaps); - colorPoint3->setPixmapType(ColorCombo::fancyPixmaps); - colorPoint4->setPixmapType(ColorCombo::fancyPixmaps); - colorMeshPoint->setPixmapType(ColorCombo::fancyPixmaps); - colorListFill->setPixmapType(ColorListBox::fancyPixmap); - colorListStroke->setPixmapType(ColorListBox::fancyPixmap); - hatchLineColor->setPixmapType(ColorCombo::fancyPixmaps); - hatchBackground->setPixmapType(ColorCombo::fancyPixmaps); - -/* Setting a delegate to display only icons for the patterns */ -/* ScListWidgetDelegate* delegateF = new ScListWidgetDelegate(patternBox, patternBox); - delegateF->setIconOnly(true); - patternBox->setItemDelegate(delegateF); - ScListWidgetDelegate* delegateS = new ScListWidgetDelegate(patternBoxStroke, patternBoxStroke); - delegateS->setIconOnly(true); - patternBoxStroke->setItemDelegate(delegateS); -*/ - gradEdit->layout()->setAlignment(Qt::AlignTop); - gradEditStroke->layout()->setAlignment(Qt::AlignTop); - gradientTypeStroke->setCurrentIndex(0); - - tabFillStroke->setCurrentIndex(0); - setCurrentItem(nullptr); - hatchAngle->setDecimals(0); - hatchAngle->setNewUnit(6); - hatchAngle->setValues(-360, 360, 1, 0); - hatchDist->setDecimals(0); - hatchDist->setNewUnit(0); - hatchDist->setValues(1, 1000, 0, 1); - /*editFillColorSelector->setChecked(true); - editFillColorSelectorButton();*/ -} - -void ColorPalette::connectSignals() -{ - connect(CGradDia, SIGNAL(NewSpecial(double,double,double,double,double,double,double,double,double,double)), this, SIGNAL(NewSpecial(double,double,double,double,double,double,double,double,double,double))); - connect(CGradDia, SIGNAL(paletteShown(bool)), this, SLOT(setActiveGradDia(bool))); - connect(CGradDia, SIGNAL(editGradient(int)), this, SIGNAL(editGradient(int))); - connect(CGradDia, SIGNAL(createNewMesh()), this, SLOT(createNewMeshGradient())); - connect(CGradDia, SIGNAL(resetMesh()), this, SLOT(resetMeshGradient())); - connect(CGradDia, SIGNAL(meshToShape()), this, SLOT(meshGradientToShape())); - connect(CGradDia, SIGNAL(reset1Control()), this, SLOT(resetOneControlPoint())); - connect(CGradDia, SIGNAL(resetAllControl()), this, SLOT(resetAllControlPoints())); - connect(CGradDia, SIGNAL(removePatch()), this, SLOT(handleRemovePatch())); - connect(CGradDia, SIGNAL(snapToMGrid(bool)), this, SLOT(snapToPatchGrid(bool))); - - connect(colorPoint1 , SIGNAL(activated(int)), this, SLOT(setGradientColors())); - connect(colorPoint2 , SIGNAL(activated(int)), this, SLOT(setGradientColors())); - connect(colorPoint3 , SIGNAL(activated(int)), this, SLOT(setGradientColors())); - connect(colorPoint4 , SIGNAL(activated(int)), this, SLOT(setGradientColors())); - connect(color1Alpha , SIGNAL(valueChanged(double)), this, SLOT(setGradientColors())); - connect(color2Alpha , SIGNAL(valueChanged(double)), this, SLOT(setGradientColors())); - connect(color3Alpha , SIGNAL(valueChanged(double)), this, SLOT(setGradientColors())); - connect(color4Alpha , SIGNAL(valueChanged(double)), this, SLOT(setGradientColors())); - connect(color1Shade , SIGNAL(valueChanged(double)), this, SLOT(setGradientColors())); - connect(color2Shade , SIGNAL(valueChanged(double)), this, SLOT(setGradientColors())); - connect(color3Shade , SIGNAL(valueChanged(double)), this, SLOT(setGradientColors())); - connect(color4Shade , SIGNAL(valueChanged(double)), this, SLOT(setGradientColors())); - connect(colorListFill , SIGNAL(currentRowChanged(int)), this, SLOT(selectColorF(int))); - connect(colorListStroke, SIGNAL(currentRowChanged(int)), this, SLOT(selectColorS(int))); - connect(colorMeshPoint , SIGNAL(activated(int)), this, SLOT(updateMeshPoint())); - connect(editMeshColors , SIGNAL(clicked()), this, SLOT(editMeshPointColor())); - connect(editPatternProps , SIGNAL(clicked()) , this, SLOT(changePatternProps())); - connect(editPatternPropsStroke, SIGNAL(clicked()), this, SLOT(changePatternPropsStroke())); - connect(fillModeCombo , SIGNAL(currentIndexChanged(int)), this, SLOT(slotGrad(int))); - connect(fillShade , SIGNAL(valueChanged(double)), this, SIGNAL(NewBrushShade(double))); - connect(followsPath , SIGNAL(clicked()), this, SLOT(toggleStrokePattern())); - connect(gradientTypeStroke , SIGNAL(activated(int)), this, SLOT(slotGradTypeStroke(int))); - connect(gradEdit , SIGNAL(gradientChanged()), this, SLOT(handleFillGradient())); - connect(gradEditButton, SIGNAL(clicked()), this, SLOT(editGradientVector())); - connect(gradEditButtonStroke, SIGNAL(clicked()), this, SLOT(editGradientVectorStroke())); - connect(gradEditStroke, SIGNAL(gradientChanged()), this, SLOT(handleStrokeGradient())); - connect(gradientType , SIGNAL(activated(int)), this, SLOT(slotGradType(int))); - connect(gradientTypeStroke , SIGNAL(activated(int)), this, SLOT(slotGradTypeStroke(int))); - connect(namedGradient , SIGNAL(currentTextChanged(QString)), this, SLOT(setNamedGradient(QString))); - connect(namedGradientStroke, SIGNAL(currentTextChanged(QString)), this, SLOT(setNamedGradientStroke(QString))); - connect(overPrintCombo , SIGNAL(activated(int)), this, SIGNAL(NewOverprint(int))); - connect(patternBox , SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(selectPattern(QListWidgetItem*))); - connect(patternBoxStroke , SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(selectPatternS(QListWidgetItem*))); - connect(shadeMeshPoint , SIGNAL(valueChanged(double)), this, SLOT(updateMeshPoint())); - connect(strokeShade , SIGNAL(valueChanged(double)), this, SIGNAL(NewPenShade(double))); - connect(strokeModeCombo , SIGNAL(currentIndexChanged(int)), this, SLOT(slotGradStroke(int))); - connect(tabFillStroke , SIGNAL(currentChanged(int)), this, SLOT(fillStrokeSelector(int))); - connect(transparencyMeshPoint, SIGNAL(valueChanged(double)), this, SLOT(updateMeshPoint())); - connect(hatchAngle, SIGNAL(valueChanged(double)), this, SLOT(changeHatchProps())); - connect(hatchDist, SIGNAL(valueChanged(double)), this, SLOT(changeHatchProps())); - connect(hatchType, SIGNAL(activated(int)), this, SLOT(changeHatchProps())); - connect(hatchBackground, SIGNAL(activated(int)), this, SLOT(changeHatchProps())); - connect(hatchLineColor, SIGNAL(activated(int)), this, SLOT(changeHatchProps())); - connect(gradientExtend , SIGNAL(activated(int)), this, SLOT(handleGradientExtend(int))); - connect(GradientExtendS , SIGNAL(activated(int)), this, SLOT(handleStrokeGradientExtend(int))); -} - -void ColorPalette::disconnectSignals() -{ - disconnect(CGradDia, SIGNAL(NewSpecial(double,double,double,double,double,double,double,double,double,double)), this, SIGNAL(NewSpecial(double,double,double,double,double,double,double,double,double,double))); - disconnect(CGradDia, SIGNAL(paletteShown(bool)), this, SLOT(setActiveGradDia(bool))); - disconnect(CGradDia, SIGNAL(editGradient(int)), this, SIGNAL(editGradient(int))); - disconnect(CGradDia, SIGNAL(createNewMesh()), this, SLOT(createNewMeshGradient())); - disconnect(CGradDia, SIGNAL(resetMesh()), this, SLOT(resetMeshGradient())); - disconnect(CGradDia, SIGNAL(meshToShape()), this, SLOT(meshGradientToShape())); - disconnect(CGradDia, SIGNAL(reset1Control()), this, SLOT(resetOneControlPoint())); - disconnect(CGradDia, SIGNAL(resetAllControl()), this, SLOT(resetAllControlPoints())); - disconnect(CGradDia, SIGNAL(removePatch()), this, SLOT(handleRemovePatch())); - disconnect(CGradDia, SIGNAL(snapToMGrid(bool)), this, SLOT(snapToPatchGrid(bool))); - - disconnect(colorPoint1 , SIGNAL(activated(int)), this, SLOT(setGradientColors())); - disconnect(colorPoint2 , SIGNAL(activated(int)), this, SLOT(setGradientColors())); - disconnect(colorPoint3 , SIGNAL(activated(int)), this, SLOT(setGradientColors())); - disconnect(colorPoint4 , SIGNAL(activated(int)), this, SLOT(setGradientColors())); - disconnect(color1Alpha , SIGNAL(valueChanged(double)), this, SLOT(setGradientColors())); - disconnect(color2Alpha , SIGNAL(valueChanged(double)), this, SLOT(setGradientColors())); - disconnect(color3Alpha , SIGNAL(valueChanged(double)), this, SLOT(setGradientColors())); - disconnect(color4Alpha , SIGNAL(valueChanged(double)), this, SLOT(setGradientColors())); - disconnect(color1Shade , SIGNAL(valueChanged(double)), this, SLOT(setGradientColors())); - disconnect(color2Shade , SIGNAL(valueChanged(double)), this, SLOT(setGradientColors())); - disconnect(color3Shade , SIGNAL(valueChanged(double)), this, SLOT(setGradientColors())); - disconnect(color4Shade , SIGNAL(valueChanged(double)), this, SLOT(setGradientColors())); - disconnect(colorListFill , SIGNAL(currentRowChanged(int)), this, SLOT(selectColorF(int))); - disconnect(colorListStroke, SIGNAL(currentRowChanged(int)), this, SLOT(selectColorS(int))); - disconnect(colorMeshPoint , SIGNAL(activated(int)), this, SLOT(updateMeshPoint())); - disconnect(editMeshColors , SIGNAL(clicked()), this, SLOT(editMeshPointColor())); - disconnect(editPatternProps , SIGNAL(clicked()) , this, SLOT(changePatternProps())); - disconnect(editPatternPropsStroke, SIGNAL(clicked()), this, SLOT(changePatternPropsStroke())); - disconnect(fillModeCombo , SIGNAL(currentIndexChanged(int)), this, SLOT(slotGrad(int))); - disconnect(fillShade , SIGNAL(valueChanged(double)), this, SIGNAL(NewBrushShade(double))); - disconnect(followsPath , SIGNAL(clicked()), this, SLOT(toggleStrokePattern())); - disconnect(gradientTypeStroke , SIGNAL(activated(int)), this, SLOT(slotGradTypeStroke(int))); - disconnect(gradEdit , SIGNAL(gradientChanged()), this, SLOT(handleFillGradient())); - disconnect(gradEditButton, SIGNAL(clicked()), this, SLOT(editGradientVector())); - disconnect(gradEditButtonStroke, SIGNAL(clicked()), this, SLOT(editGradientVectorStroke())); - disconnect(gradEditStroke, SIGNAL(gradientChanged()), this, SLOT(handleStrokeGradient())); - disconnect(gradientType , SIGNAL(activated(int)), this, SLOT(slotGradType(int))); - disconnect(gradientTypeStroke , SIGNAL(activated(int)), this, SLOT(slotGradTypeStroke(int))); - disconnect(namedGradient , SIGNAL(currentTextChanged(QString)), this, SLOT(setNamedGradient(QString))); - disconnect(namedGradientStroke, SIGNAL(currentTextChanged(QString)), this, SLOT(setNamedGradientStroke(QString))); - disconnect(overPrintCombo , SIGNAL(activated(int)), this, SIGNAL(NewOverprint(int))); - disconnect(patternBox , SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(selectPattern(QListWidgetItem*))); - disconnect(patternBoxStroke , SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(selectPatternS(QListWidgetItem*))); - disconnect(shadeMeshPoint, SIGNAL(valueChanged(double)), this, SLOT(updateMeshPoint())); - disconnect(strokeModeCombo , SIGNAL(currentIndexChanged(int)), this, SLOT(slotGradStroke(int))); - disconnect(strokeShade , SIGNAL(valueChanged(double)), this, SIGNAL(NewPenShade(double))); - disconnect(tabFillStroke , SIGNAL(currentChanged(int)), this, SLOT(fillStrokeSelector(int))); - disconnect(transparencyMeshPoint, SIGNAL(valueChanged(double)), this, SLOT(updateMeshPoint())); - disconnect(hatchAngle, SIGNAL(valueChanged(double)), this, SLOT(changeHatchProps())); - disconnect(hatchDist, SIGNAL(valueChanged(double)), this, SLOT(changeHatchProps())); - disconnect(hatchType, SIGNAL(activated(int)), this, SLOT(changeHatchProps())); - disconnect(hatchBackground, SIGNAL(activated(int)), this, SLOT(changeHatchProps())); - disconnect(hatchLineColor, SIGNAL(activated(int)), this, SLOT(changeHatchProps())); - disconnect(gradientExtend , SIGNAL(activated(int)), this, SLOT(handleGradientExtend(int))); - disconnect(GradientExtendS , SIGNAL(activated(int)), this, SLOT(handleStrokeGradientExtend(int))); -} - -void ColorPalette::setCurrentItem(PageItem* item) -{ - if ((item == nullptr) || (currentItem != item)) - { - editStrokeGradient = 0; - CGradDia->hide(); - editMeshColors->setEnabled(true); - gradEditButton->setEnabled(true); - } - - currentItem = item; - disconnectSignals(); - - if (!currentItem) - return; - - enablePatterns(patternList->count() != 0); - showOverprint(currentItem->doOverprint ? 1 : 0); - showColorValues(currentItem->lineColor(), currentItem->fillColor(), currentItem->lineShade(), currentItem->fillShade()); - showGradient(currentItem->gradientType()); - showGradientStroke(currentItem->strokeGradientType()); - gradEdit->setGradient(currentItem->fill_gradient); - gradEditStroke->setGradient(currentItem->stroke_gradient); - if (!currentItem->gradient().isEmpty()) - { - setCurrentComboItem(namedGradient, currentItem->gradient()); - gradEdit->setGradientEditable(false); - } - else - { - namedGradient->setCurrentIndex(0); - gradEdit->setGradientEditable(true); - } - if (!currentItem->strokeGradient().isEmpty()) - { - setCurrentComboItem(namedGradientStroke, currentItem->strokeGradient()); - gradEditStroke->setGradientEditable(false); - } - else - { - namedGradientStroke->setCurrentIndex(0); - gradEditStroke->setGradientEditable(true); - } - if (currentItem->GrTypeStroke > 0) - { - if (currentItem->GrTypeStroke == Gradient_Linear) - gradientTypeStroke->setCurrentIndex(0); - else - gradientTypeStroke->setCurrentIndex(1); - } - if (currentItem->gradientType() == 12) - setMeshPatchPoint(); - else - setMeshPoint(); - if (CGradDia && gradEditButton->isChecked()) - { - if (tabFillStroke->currentIndex() == 0) - setGradientVectorValues(); - else - setGradientVectorStrokeValues(); - } - editMeshColors->setEnabled(!CGradDia->isVisible()); - gradEditButton->setEnabled(!editMeshColors->isChecked()); - fillModeCombo->setEnabled(!gradEditButton->isChecked() && !editMeshColors->isChecked()); - gradientType->setEnabled(!gradEditButton->isChecked() && !editMeshColors->isChecked()); - strokeModeCombo->setEnabled(!gradEditButtonStroke->isChecked() && !editMeshColors->isChecked()); - gradientTypeStroke->setEnabled(!gradEditButtonStroke->isChecked() && !editMeshColors->isChecked()); - - bool mirrorX, mirrorY; - const ScPatternTransform& patternTrans = currentItem->patternTransform(); - currentItem->patternFlip(mirrorX, mirrorY); - setCurrentPattern(currentItem->pattern(), patternTrans, mirrorX, mirrorY); - const ScStrokePatternTransform& strokePatternTrans = currentItem->strokePatternTransform(); - currentItem->strokePatternFlip(mirrorX, mirrorY); - setCurrentPatternStroke(currentItem->strokePattern(), strokePatternTrans, mirrorX, mirrorY, currentItem->isStrokePatternToPath()); - - connectSignals(); -} - -void ColorPalette::updateFromItem() -{ - setCurrentItem(currentItem); -} - -void ColorPalette::setDocument(ScribusDoc* doc) -{ - this->disconnect(SIGNAL(NewPen(QString))); - this->disconnect(SIGNAL(NewBrush(QString))); - this->disconnect(SIGNAL(NewPenShade(double))); - this->disconnect(SIGNAL(NewBrushShade(double))); - this->disconnect(SIGNAL(NewGradient(int))); - this->disconnect(SIGNAL(NewGradientS(int))); - this->disconnect(SIGNAL(NewPattern(QString))); - this->disconnect(SIGNAL(NewPatternProps(double,double,double,double,double,double,double,bool,bool))); - this->disconnect(SIGNAL(NewOverprint(int))); - this->disconnect(SIGNAL(NewPatternS(QString))); - this->disconnect(SIGNAL(NewPatternTypeS(bool))); - this->disconnect(SIGNAL(NewPatternPropsS(double,double,double,double,double,double,double,double,bool,bool))); - disconnect(displayAllColors, SIGNAL(clicked()), this, SLOT(toggleColorDisplay())); - - if (currentDoc) - { - disconnect(currentDoc->m_Selection, SIGNAL(selectionChanged()), this, SLOT(handleSelectionChanged())); - disconnect(currentDoc , SIGNAL(docChanged()) , this, SLOT(handleSelectionChanged())); - disconnect(currentDoc->scMW() , SIGNAL(UpdateRequest(int)), this, SLOT(handleUpdateRequest(int))); - } - - ScribusDoc* oldDoc = currentDoc; - currentDoc = doc; - - if (doc == nullptr) - { - colorListStroke->cList = nullptr; - colorListFill->cList = nullptr; - disconnectSignals(); - } - else - { - colorListStroke->cList = &doc->PageColors; - colorListFill->cList = &doc->PageColors; - gradEdit->setColors(doc->PageColors); - currentUnit = doc->unitIndex(); - - updateColorList(); - updateCList(); - - connect(this, SIGNAL(NewPen(QString)) , doc, SLOT(itemSelection_SetItemPen(QString))); - connect(this, SIGNAL(NewBrush(QString)) , doc, SLOT(itemSelection_SetItemBrush(QString))); - connect(this, SIGNAL(NewPenShade(double)) , this, SLOT(handleStrokeShade(double))); - connect(this, SIGNAL(NewBrushShade(double)) , this, SLOT(handleFillShade(double))); - connect(this, SIGNAL(NewGradient(int)) , doc, SLOT(itemSelection_SetItemGradFill(int))); - connect(this, SIGNAL(NewGradientS(int)) , doc, SLOT(itemSelection_SetItemGradStroke(int))); - connect(this, SIGNAL(NewPattern(QString)) , doc, SLOT(itemSelection_SetItemPatternFill(QString))); - connect(this, SIGNAL(NewPatternProps(double,double,double,double,double,double,double,bool,bool)), doc, SLOT(itemSelection_SetItemPatternProps(double,double,double,double,double,double,double,bool,bool))); - connect(this, SIGNAL(NewOverprint(int)) , this, SLOT(handleOverprint(int))); - connect(this, SIGNAL(NewPatternS(QString)) , doc, SLOT(itemSelection_SetItemStrokePattern(QString))); - connect(this, SIGNAL(NewPatternTypeS(bool)), doc, SLOT(itemSelection_SetItemStrokePatternType(bool))); - connect(this, SIGNAL(NewPatternPropsS(double,double,double,double,double,double,double,double,bool,bool)), doc, SLOT(itemSelection_SetItemStrokePatternProps(double,double,double,double,double,double,double,double,bool,bool))); - connect(displayAllColors, SIGNAL(clicked()), this, SLOT(toggleColorDisplay())); - - connect(currentDoc->m_Selection, SIGNAL(selectionChanged()), this, SLOT(handleSelectionChanged())); - connect(currentDoc , SIGNAL(docChanged()) , this, SLOT(handleSelectionChanged())); - connect(currentDoc->scMW() , SIGNAL(UpdateRequest(int)), this, SLOT(handleUpdateRequest(int))); - } - - if (oldDoc != currentDoc) - { - showGradient(0); - } -} - -PageItem* ColorPalette::currentItemFromSelection() -{ - PageItem *currentItem = nullptr; - if (currentDoc) - currentItem = currentDoc->m_Selection->itemAt(0); - return currentItem; -} - -void ColorPalette::enablePatterns(bool enable) -{ - if (enable) - { - if (fillModeCombo->count() < 4) - fillModeCombo->addItem( tr("Pattern") ); - if (strokeModeCombo->count() < 3) - strokeModeCombo->addItem( tr("Pattern") ); - } - else - { - if (fillModeCombo->count() == 4) - fillModeCombo->removeItem(3); - if (strokeModeCombo->count() == 3) - strokeModeCombo->removeItem(2); - } -} - -void ColorPalette::handleSelectionChanged() -{ - if (currentDoc && !updatesBlocked()) - { - PageItem* currentItem = currentItemFromSelection(); - setCurrentItem(currentItem); - } -} - -void ColorPalette::handleUpdateRequest(int updateFlags) -{ - if (updateFlags & reqColorsUpdate) - updateColorList(); -} - -void ColorPalette::updateColorList() -{ - if (!currentDoc) - return; - - if (currentItem) - disconnectSignals(); - - this->setColors(currentDoc->PageColors); - this->setGradients(¤tDoc->docGradients); - this->setPatterns(¤tDoc->docPatterns); - - if (currentItem) - setCurrentItem(currentItem); -} - -void ColorPalette::updateCList() -{ - bool sigBlocked1 = colorListStroke->blockSignals(true); - bool sigBlocked2 = colorListFill->blockSignals(true); - - if (displayAllColors->isChecked()) - { - if (currentDoc != nullptr) - currentDoc->getUsedColors(colorList); - } - colorListFill->setColors(colorList, true); - colorListStroke->setColors(colorList, true); - gradEditStroke->setColors(colorList); - gradEdit->setColors(colorList); - colorPoint1->setColors(colorList, true); - colorPoint2->setColors(colorList, true); - colorPoint3->setColors(colorList, true); - colorPoint4->setColors(colorList, true); - colorMeshPoint->setColors(colorList, true); - colorListFill->clearSelection(); - colorListStroke->clearSelection(); - hatchLineColor->setColors(colorList, false); - hatchBackground->setColors(colorList, true); - - colorListStroke->blockSignals(sigBlocked1); - colorListFill->blockSignals(sigBlocked2); -} - -void ColorPalette::toggleColorDisplay() -{ - if (!currentDoc) - return; - colorListStroke->cList = ¤tDoc->PageColors; - colorListFill->cList = ¤tDoc->PageColors; - colorList = currentDoc->PageColors; - updateColorList(); -} - -void ColorPalette::showOverprint(int val) -{ - bool sigBlocked = overPrintCombo->blockSignals(true); - overPrintCombo->setCurrentIndex(val); - overPrintCombo->blockSignals(sigBlocked); -} - -void ColorPalette::handleFillShade(double val) -{ - if (!currentDoc) - return; - blockUpdates(true); - currentDoc->itemSelection_SetItemBrushShade(static_cast<int>(val)); - blockUpdates(false); -} - -void ColorPalette::handleStrokeShade(double val) -{ - if (!currentDoc) - return; - blockUpdates(true); - currentDoc->itemSelection_SetItemPenShade(static_cast<int>(val)); - blockUpdates(false); -} - -void ColorPalette::handleOverprint(int val) -{ - if (!currentDoc) - return; - bool setter = true; - if (val == 0) - setter = false; - currentDoc->itemSelection_SetOverprint(setter); -} - -void ColorPalette::handleFillGradient() -{ - if (!currentDoc) - return; - VGradient gradient(gradEdit->gradient()); - blockUpdates(true); - currentDoc->updateManager()->setUpdatesDisabled(); - currentDoc->itemSelection_SetFillGradient(gradient); - currentDoc->updateManager()->setUpdatesEnabled(); - blockUpdates(false); -} - -void ColorPalette::handleStrokeGradient() -{ - if (!currentDoc) - return; - VGradient gradient(gradEditStroke->gradient()); - blockUpdates(true); - currentDoc->updateManager()->setUpdatesDisabled(); - currentDoc->itemSelection_SetLineGradient(gradient); - currentDoc->updateManager()->setUpdatesEnabled(); - blockUpdates(false); -} - -void ColorPalette::handleStrokeGradientExtend(int val) -{ - if (!currentDoc) - return; - if (val == 0) - currentItem->setStrokeGradientExtend(VGradient::none); - else - currentItem->setStrokeGradientExtend(VGradient::pad); - currentItem->update(); - currentDoc->regionsChanged()->update(QRect()); -} - -void ColorPalette::handleGradientExtend(int val) -{ - if (!currentDoc) - return; - if (val == 0) - currentItem->setGradientExtend(VGradient::none); - else - currentItem->setGradientExtend(VGradient::pad); - currentItem->update(); - currentDoc->regionsChanged()->update(QRect()); -} - -void ColorPalette::showColorValues(const QString& stroke, const QString& fill, int sShade, int fShade) -{ - bool sigBlocked1 = fillShade->blockSignals(true); - bool sigBlocked2 = strokeShade->blockSignals(true); - bool sigBlocked3 = colorListStroke->blockSignals(true); - bool sigBlocked4 = colorListFill->blockSignals(true); - - strokeShade->setValue(sShade); - fillShade->setValue(fShade); - if ((stroke != CommonStrings::None) && (!stroke.isEmpty())) - colorListStroke->setCurrentColor(stroke); - else - colorListStroke->setCurrentRow(0); - if ((fill != CommonStrings::None) && (!fill.isEmpty())) - colorListFill->setCurrentColor(fill); - else - colorListFill->setCurrentRow(0); - - fillShade->blockSignals(sigBlocked1); - strokeShade->blockSignals(sigBlocked2); - colorListStroke->blockSignals(sigBlocked3); - colorListFill->blockSignals(sigBlocked4); -} - -void ColorPalette::selectColorS(int row) -{ - QString colorName; - QVariant varValue = colorListStroke->data(row, Qt::UserRole); - if (varValue.canConvert<ColorPixmapValue>()) - { - ColorPixmapValue value(varValue.value<ColorPixmapValue>()); - colorName = value.m_name; - } - else - { - colorName = varValue.toString(); - } - if (colorName.isEmpty()) - return; - emit NewPen(colorName); -} - -void ColorPalette::selectColorF(int row) -{ - QString colorName; - QVariant varValue = colorListFill->data(row, Qt::UserRole); - if (varValue.canConvert<ColorPixmapValue>()) - { - ColorPixmapValue value(varValue.value<ColorPixmapValue>()); - colorName = value.m_name; - } - else - { - colorName = varValue.toString(); - } - if (colorName.isEmpty()) - return; - emit NewBrush(colorName); -} - -void ColorPalette::setColors(const ColorList& newColorList) -{ - colorList.clear(); - colorList = newColorList; - updateCList(); -} - -void ColorPalette::fillStrokeSelector(int /*index*/) -{ - if (gradEditButton->isChecked() || editMeshColors->isChecked()) - { - editStrokeGradient = 0; - CGradDia->hide(); - editMeshColors->setEnabled(true); - editMeshColors->setChecked(false); - gradEditButton->setEnabled(true); - gradEditButton->setChecked(false); - emit editGradient(editStrokeGradient); - } - updateFromItem(); -} - -/*void ColorPalette::editLineColorSelectorButton() -{ - if (editLineColorSelector->isChecked()) - { - stackedWidget->setCurrentIndex(0); - editFillColorSelector->setChecked(false); - } - updateFromItem(); -} - -void ColorPalette::editFillColorSelectorButton() -{ - if (editFillColorSelector->isChecked()) - { - stackedWidget->setCurrentIndex(1); - editLineColorSelector->setChecked(false); - } - updateFromItem(); -}*/ - -void ColorPalette::updateGradientList() -{ - bool sigBlocked1 = namedGradient->blockSignals(true); - bool sigBlocked2 = namedGradientStroke->blockSignals(true); - - namedGradient->clear(); - namedGradient->setIconSize(QSize(48, 12)); - namedGradient->addItem( tr("Custom")); - namedGradientStroke->clear(); - namedGradientStroke->setIconSize(QSize(48, 12)); - namedGradientStroke->addItem( tr("Custom")); - QStringList patK = gradientList->keys(); - patK.sort(); - for (int i = 0; i < patK.count(); i++) - { - VGradient gr = gradientList->value(patK[i]); - QImage pixm(48, 12, QImage::Format_ARGB32_Premultiplied); - QPainter pb; - QBrush b(QColor(205,205,205), IconManager::instance().loadPixmap("testfill.png")); - pb.begin(&pixm); - pb.fillRect(0, 0, 48, 12, b); - pb.end(); - ScPainter *p = new ScPainter(&pixm, 48, 12); - p->setPen(Qt::black, 1, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); - p->setFillMode(ScPainter::Gradient); - p->fill_gradient = gr; - p->setGradient(VGradient::linear, FPoint(0,6), FPoint(48, 6), FPoint(0,0), 1, 0); - p->drawRect(0, 0, 48, 12); - p->end(); - delete p; - QPixmap pm; - pm = QPixmap::fromImage(pixm); - namedGradient->addItem(pm, patK[i]); - namedGradientStroke->addItem(pm, patK[i]); - } - namedGradient->blockSignals(sigBlocked1); - namedGradientStroke->blockSignals(sigBlocked2); -} - -void ColorPalette::setGradients(QHash<QString, VGradient> *docGradients) -{ - gradientList = docGradients; - updateGradientList(); -} - -void ColorPalette::setGradientColors() -{ - QString color1 = colorPoint1->currentText(); - if (color1 == CommonStrings::tr_NoneColor) - color1 = CommonStrings::None; - QString color2 = colorPoint2->currentText(); - if (color2 == CommonStrings::tr_NoneColor) - color2 = CommonStrings::None; - QString color3 = colorPoint3->currentText(); - if (color3 == CommonStrings::tr_NoneColor) - color3 = CommonStrings::None; - QString color4 = colorPoint4->currentText(); - if (color4 == CommonStrings::tr_NoneColor) - color4 = CommonStrings::None; - double t1 = color1Alpha->value() / 100.0; - double t2 = color2Alpha->value() / 100.0; - double t3 = color3Alpha->value() / 100.0; - double t4 = color4Alpha->value() / 100.0; - UndoTransaction trans; - if (UndoManager::undoEnabled()) - trans = undoManager->beginTransaction(Um::Selection, Um::IFill, Um::GradVal, QString(), Um::IFill); - currentItem->set4ColorShade(static_cast<int>(color1Shade->value()), static_cast<int>(color2Shade->value()), static_cast<int>(color3Shade->value()), static_cast<int>(color4Shade->value())); - currentItem->set4ColorTransparency(t1, t2, t3, t4); - currentItem->set4ColorColors(color1, color2, color3, color4); - if (trans) - trans.commit(); - currentItem->update(); -} - -void ColorPalette::setNamedGradient(const QString &name) -{ - if (namedGradient->currentIndex() == 0) - { - gradEdit->setGradient(currentItem->fill_gradient); - currentItem->setGradient(""); - gradEdit->setGradientEditable(true); - } - else - { - gradEdit->setGradient(gradientList->value(name)); - gradEdit->setGradientEditable(false); - currentItem->setGradient(name); - } - if (gradientType->currentIndex() == 0) - emit NewGradient(Gradient_Linear); - else if (gradientType->currentIndex() == 1) - emit NewGradient(Gradient_Radial); - else if (gradientType->currentIndex() == 2) - emit NewGradient(Gradient_Conical); - else if (gradientType->currentIndex() == 3) - { - setGradientColors(); - emit NewGradient(Gradient_4Colors); - } - else if (gradientType->currentIndex() == 4) - emit NewGradient(Gradient_Diamond); - else if (gradientType->currentIndex() == 5) - emit NewGradient(Gradient_Mesh); -} - -void ColorPalette::setNamedGradientStroke(const QString &name) -{ - if (namedGradientStroke->currentIndex() == 0) - { - gradEditStroke->setGradient(currentItem->stroke_gradient); - currentItem->setStrokeGradient(""); - gradEditStroke->setGradientEditable(true); - } - else - { - gradEditStroke->setGradient(gradientList->value(name)); - gradEditStroke->setGradientEditable(false); - currentItem->setStrokeGradient(name); - } - if (gradientTypeStroke->currentIndex() == 0) - emit NewGradientS(Gradient_Linear); - else - emit NewGradientS(Gradient_Radial); -} - -void ColorPalette::updatePatternList() -{ - disconnect(patternBox, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(selectPattern(QListWidgetItem*))); - patternBox->clear(); - patternBox->setIconSize(QSize(48, 48)); - patternBoxStroke->clear(); - patternBoxStroke->setIconSize(QSize(48, 48)); - QStringList patK = patternList->keys(); - patK.sort(); - for (int a = 0; a < patK.count(); a++) - { - ScPattern sp = patternList->value(patK[a]); - QPixmap pm; - if (sp.getPattern()->width() >= sp.getPattern()->height()) - pm = QPixmap::fromImage(sp.getPattern()->scaledToWidth(48, Qt::SmoothTransformation)); - else - pm = QPixmap::fromImage(sp.getPattern()->scaledToHeight(48, Qt::SmoothTransformation)); - QPixmap pm2(48, 48); - pm2.fill(palette().color(QPalette::Base)); - QPainter p; - p.begin(&pm2); - p.drawPixmap(24 - pm.width() / 2, 24 - pm.height() / 2, pm); - p.end(); - QListWidgetItem *item = new QListWidgetItem(pm2, patK[a], patternBox); - item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); - QListWidgetItem *itemS = new QListWidgetItem(pm2, patK[a], patternBoxStroke); - itemS->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); - } - patternBox->clearSelection(); - patternBoxStroke->clearSelection(); - connect(patternBox, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(selectPattern(QListWidgetItem*))); -} - -void ColorPalette::hideEditedPatterns(QStringList names) -{ - for (int i = 0; i < names.count(); i++) - { - QList<QListWidgetItem*> items = patternBox->findItems(names[i], Qt::MatchExactly); - if (items.count() > 0) - items[0]->setHidden(true); - items = patternBoxStroke->findItems(names[i], Qt::MatchExactly); - if (items.count() > 0) - items[0]->setHidden(true); - } -} - -void ColorPalette::setPatterns(QHash<QString, ScPattern> *docPatterns) -{ - patternList = docPatterns; - updatePatternList(); -} - -void ColorPalette::selectPattern(QListWidgetItem *c) -{ - if (c == nullptr) - return; - emit NewPattern(c->text()); -} - -void ColorPalette::selectPatternS(QListWidgetItem *c) -{ - if (c == nullptr) - return; - emit NewPatternS(c->text()); -} - -void ColorPalette::setCurrentPatternStroke(const QString& pattern, const ScStrokePatternTransform& patternTrans, bool mirrorX, bool mirrorY, bool pathF) -{ - bool sigBlocked = patternBoxStroke->blockSignals(true); - QList<QListWidgetItem*> itl = patternBoxStroke->findItems(pattern, Qt::MatchExactly); - if (itl.count() != 0) - { - QListWidgetItem *it = itl[0]; - patternBoxStroke->setCurrentItem(it); - } - else - patternBoxStroke->clearSelection(); - m_strokePatternTrans = patternTrans; - m_Pattern_mirrorXS = mirrorX; - m_Pattern_mirrorYS = mirrorY; - followsPath->setChecked(pathF); - patternBoxStroke->blockSignals(sigBlocked); -} - -void ColorPalette::setCurrentPattern(const QString& pattern, const ScPatternTransform& patternTrans, bool mirrorX, bool mirrorY) -{ - bool sigBlocked = patternBox->blockSignals(true); - QList<QListWidgetItem*> itl = patternBox->findItems(pattern, Qt::MatchExactly); - if (itl.count() != 0) - { - QListWidgetItem *it = itl[0]; - patternBox->setCurrentItem(it); - } - else - patternBox->clearSelection(); - m_patternTrans = patternTrans; - m_Pattern_mirrorX = mirrorX; - m_Pattern_mirrorY = mirrorY; - patternBox->blockSignals(sigBlocked); -} - -void ColorPalette::slotGradStroke(int number) -{ - if (number == 1) - { - bool sigBlocked = namedGradientStroke->blockSignals(true); - if (!currentItem->strokeGradient().isEmpty()) - { - setCurrentComboItem(namedGradientStroke, currentItem->strokeGradient()); - gradEditStroke->setGradient(gradientList->value(currentItem->strokeGradient())); - gradEditStroke->setGradientEditable(false); - } - else - { - namedGradientStroke->setCurrentIndex(0); - gradEditStroke->setGradient(currentItem->stroke_gradient); - gradEditStroke->setGradientEditable(true); - } - emit NewPatternS(""); - if (gradientTypeStroke->currentIndex() == 0) - emit NewGradientS(Gradient_Linear); - else - emit NewGradientS(Gradient_Radial); - namedGradientStroke->blockSignals(sigBlocked); - } - else if (number == 2) - { - emit NewGradientS(Gradient_Pattern); - if (patternBoxStroke->currentItem()) - emit NewPatternS(patternBoxStroke->currentItem()->text()); - } - else - { - emit NewGradientS(Gradient_None); - emit NewPatternS(""); - } - strokeModeStack->setCurrentIndex(number); -} - -void ColorPalette::showGradient(int number) -{ - bool sigBlocked = fillModeCombo->blockSignals(true); - if (number == -1) - { - fillModeCombo->setCurrentIndex(0); - } - if (number == 0) - fillModeCombo->setCurrentIndex(0); - else if (((number > 0) && (number < 8)) || ((number >= 9) && (number <= 13))) - { - if ((number == 5) || (number == 7) || (number == 13)) - { - stackedWidget_2->setCurrentIndex(0); - if ((number == 5) || (number == 7)) - gradientType->setCurrentIndex(1); - if (number == 13) - gradientType->setCurrentIndex(2); - } - else if (number == 9) - { - stackedWidget_2->setCurrentIndex(1); - gradientType->setCurrentIndex(3); - if ((currentItem->GrColorP1 != CommonStrings::None) && (!currentItem->GrColorP1.isEmpty())) - setCurrentComboItem(colorPoint1, currentItem->GrColorP1); - else - colorPoint1->setCurrentIndex(0); - if ((currentItem->GrColorP2 != CommonStrings::None) && (!currentItem->GrColorP2.isEmpty())) - setCurrentComboItem(colorPoint2, currentItem->GrColorP2); - else - colorPoint2->setCurrentIndex(0); - if ((currentItem->GrColorP3 != CommonStrings::None) && (!currentItem->GrColorP3.isEmpty())) - setCurrentComboItem(colorPoint3, currentItem->GrColorP3); - else - colorPoint3->setCurrentIndex(0); - if ((currentItem->GrColorP4 != CommonStrings::None) && (!currentItem->GrColorP4.isEmpty())) - setCurrentComboItem(colorPoint4, currentItem->GrColorP4); - else - colorPoint4->setCurrentIndex(0); - color1Alpha->setValue(qRound(currentItem->GrCol1transp * 100)); - color2Alpha->setValue(qRound(currentItem->GrCol2transp * 100)); - color3Alpha->setValue(qRound(currentItem->GrCol3transp * 100)); - color4Alpha->setValue(qRound(currentItem->GrCol4transp * 100)); - color1Shade->setValue(currentItem->GrCol1Shade); - color2Shade->setValue(currentItem->GrCol2Shade); - color3Shade->setValue(currentItem->GrCol3Shade); - color4Shade->setValue(currentItem->GrCol4Shade); - } - else if (number == 10) - { - stackedWidget_2->setCurrentIndex(0); - gradientType->setCurrentIndex(4); - } - else if (number == 11) - { - stackedWidget_2->setCurrentIndex(2); - if ((currentItem->selectedMeshPointX > -1) && (currentItem->selectedMeshPointY > -1L)) - { - MeshPoint mp = currentItem->meshGradientArray[currentItem->selectedMeshPointX][currentItem->selectedMeshPointY]; - setCurrentComboItem(colorMeshPoint, mp.colorName); - shadeMeshPoint->setValue(mp.shade); - transparencyMeshPoint->setValue(mp.transparency * 100); - } - gradientType->setCurrentIndex(5); - } - else if (number == 12) - { - stackedWidget_2->setCurrentIndex(2); - gradientType->setCurrentIndex(6); - } - else - { - stackedWidget_2->setCurrentIndex(0); - gradientType->setCurrentIndex(0); - } - fillModeCombo->setCurrentIndex(1); - if (currentItem->getGradientExtend() == VGradient::none) - gradientExtend->setCurrentIndex(0); - else - gradientExtend->setCurrentIndex(1); - } - else if (number == 14) - { - fillModeCombo->setCurrentIndex(2); - hatchAngle->setValue(currentItem->hatchAngle); - hatchDist->setValue(currentItem->hatchDistance * unitGetRatioFromIndex(currentUnit)); - hatchType->setCurrentIndex(currentItem->hatchType); - if ((currentItem->hatchForeground != CommonStrings::None) && (!currentItem->hatchForeground.isEmpty())) - setCurrentComboItem(hatchLineColor, currentItem->hatchForeground); - if (currentItem->hatchUseBackground) - { - if (!currentItem->hatchBackground.isEmpty()) - setCurrentComboItem(hatchBackground, currentItem->hatchBackground); - } - else - setCurrentComboItem(hatchBackground, CommonStrings::None); - } - else - { - if (patternList->count() == 0) - { - fillModeCombo->setCurrentIndex(0); - emit NewGradient(Gradient_None); - } - else - fillModeCombo->setCurrentIndex(3); - } - fillModeStack->setCurrentIndex( fillModeCombo->currentIndex() ); - fillModeCombo->blockSignals(sigBlocked); -} - -void ColorPalette::showGradientStroke(int number) -{ - bool sigBlocked = strokeModeCombo->blockSignals(true); - if (number == -1 || number == 0) - strokeModeCombo->setCurrentIndex(0); - else if (number > 0 && number < 8) - { - if (number == 7) - gradientTypeStroke->setCurrentIndex(1); - else - gradientTypeStroke->setCurrentIndex(0); - strokeModeCombo->setCurrentIndex(1); - if (currentItem->getStrokeGradientExtend() == VGradient::none) - GradientExtendS->setCurrentIndex(0); - else - GradientExtendS->setCurrentIndex(1); - } - else - { - if (patternList->count() == 0) - { - strokeModeCombo->setCurrentIndex(0); - emit NewGradientS(Gradient_None); - } - else - strokeModeCombo->setCurrentIndex(2); - } - strokeModeStack->setCurrentIndex( strokeModeCombo->currentIndex() ); - strokeModeCombo->blockSignals(sigBlocked); -} - -void ColorPalette::slotGrad(int number) -{ - if (number == 1) - { - bool sigBlocked1 = gradEdit->blockSignals(true); - bool sigBlocked2 = gradientType->blockSignals(true); - bool sigBlocked3 = namedGradient->blockSignals(true); - if (!currentItem->gradient().isEmpty()) - { - setCurrentComboItem(namedGradient, currentItem->gradient()); - gradEdit->setGradient(gradientList->value(currentItem->gradient())); - gradEdit->setGradientEditable(false); - } - else - { - namedGradient->setCurrentIndex(0); - gradEdit->setGradient(currentItem->fill_gradient); - gradEdit->setGradientEditable(true); - } - if (gradientType->currentIndex() == 0) - { - stackedWidget_2->setCurrentIndex(0); - emit NewGradient(Gradient_Linear); - } - else if (gradientType->currentIndex() == 1) - { - stackedWidget_2->setCurrentIndex(0); - emit NewGradient(Gradient_Radial); - } - else if (gradientType->currentIndex() == 2) - { - stackedWidget_2->setCurrentIndex(0); - emit NewGradient(Gradient_Conical); - } - else if (gradientType->currentIndex() == 3) - { - stackedWidget_2->setCurrentIndex(1); - if ((currentItem->GrColorP1 != CommonStrings::None) && (!currentItem->GrColorP1.isEmpty())) - setCurrentComboItem(colorPoint1, currentItem->GrColorP1); - else - colorPoint1->setCurrentIndex(0); - if ((currentItem->GrColorP2 != CommonStrings::None) && (!currentItem->GrColorP2.isEmpty())) - setCurrentComboItem(colorPoint2, currentItem->GrColorP2); - else - colorPoint2->setCurrentIndex(0); - if ((currentItem->GrColorP3 != CommonStrings::None) && (!currentItem->GrColorP3.isEmpty())) - setCurrentComboItem(colorPoint3, currentItem->GrColorP3); - else - colorPoint3->setCurrentIndex(0); - if ((currentItem->GrColorP4 != CommonStrings::None) && (!currentItem->GrColorP4.isEmpty())) - setCurrentComboItem(colorPoint4, currentItem->GrColorP4); - else - colorPoint4->setCurrentIndex(0); - color1Alpha->setValue(qRound(currentItem->GrCol1transp * 100)); - color2Alpha->setValue(qRound(currentItem->GrCol2transp * 100)); - color3Alpha->setValue(qRound(currentItem->GrCol3transp * 100)); - color4Alpha->setValue(qRound(currentItem->GrCol4transp * 100)); - color1Shade->setValue(currentItem->GrCol1Shade); - color2Shade->setValue(currentItem->GrCol2Shade); - color3Shade->setValue(currentItem->GrCol3Shade); - color4Shade->setValue(currentItem->GrCol4Shade); - emit NewGradient(Gradient_4Colors); - } - else if (gradientType->currentIndex() == 4) - { - stackedWidget_2->setCurrentIndex(0); - emit NewGradient(Gradient_Diamond); - } - else if (gradientType->currentIndex() == 5) - { - stackedWidget_2->setCurrentIndex(2); - if ((currentItem->selectedMeshPointX > -1) && (currentItem->selectedMeshPointY > -1L)) - { - MeshPoint mp = currentItem->meshGradientArray[currentItem->selectedMeshPointX][currentItem->selectedMeshPointY]; - setCurrentComboItem(colorMeshPoint, mp.colorName); - shadeMeshPoint->setValue(mp.shade); - transparencyMeshPoint->setValue(mp.transparency * 100); - } - emit NewGradient(Gradient_Mesh); - } - else if (gradientType->currentIndex() == 6) - { - stackedWidget_2->setCurrentIndex(2); - emit NewGradient(Gradient_PatchMesh); - } - gradEdit->blockSignals(sigBlocked1); - gradientType->blockSignals(sigBlocked2); - namedGradient->blockSignals(sigBlocked3); - } - else if (number == 2) - { - hatchAngle->setValue(currentItem->hatchAngle); - hatchDist->setValue(currentItem->hatchDistance * unitGetRatioFromIndex(currentUnit)); - hatchType->setCurrentIndex(currentItem->hatchType); - if ((currentItem->hatchForeground != CommonStrings::None) && (!currentItem->hatchForeground.isEmpty())) - setCurrentComboItem(hatchLineColor, currentItem->hatchForeground); - if (currentItem->hatchUseBackground) - { - if (!currentItem->hatchBackground.isEmpty()) - setCurrentComboItem(hatchBackground, currentItem->hatchBackground); - } - else - setCurrentComboItem(hatchBackground, CommonStrings::None); - emit NewGradient(Gradient_Hatch); - } - else if (number == 3) - emit NewGradient(Gradient_Pattern); - else - emit NewGradient(Gradient_None); - fillModeStack->setCurrentIndex(number); -} - -void ColorPalette::slotGradType(int type) -{ - if (type == 0) - { - stackedWidget_2->setCurrentIndex(0); - emit NewGradient(Gradient_Linear); - } - else if (type == 1) - { - stackedWidget_2->setCurrentIndex(0); - emit NewGradient(Gradient_Radial); - } - else if (type == 2) - { - stackedWidget_2->setCurrentIndex(0); - emit NewGradient(Gradient_Conical); - } - else if (type == 3) - { - stackedWidget_2->setCurrentIndex(1); - if ((currentItem->GrColorP1 != CommonStrings::None) && (!currentItem->GrColorP1.isEmpty())) - setCurrentComboItem(colorPoint1, currentItem->GrColorP1); - else - colorPoint1->setCurrentIndex(0); - if ((currentItem->GrColorP2 != CommonStrings::None) && (!currentItem->GrColorP2.isEmpty())) - setCurrentComboItem(colorPoint2, currentItem->GrColorP2); - else - colorPoint2->setCurrentIndex(0); - if ((currentItem->GrColorP3 != CommonStrings::None) && (!currentItem->GrColorP3.isEmpty())) - setCurrentComboItem(colorPoint3, currentItem->GrColorP3); - else - colorPoint3->setCurrentIndex(0); - if ((currentItem->GrColorP4 != CommonStrings::None) && (!currentItem->GrColorP4.isEmpty())) - setCurrentComboItem(colorPoint4, currentItem->GrColorP4); - else - colorPoint4->setCurrentIndex(0); - color1Alpha->setValue(qRound(currentItem->GrCol1transp * 100)); - color2Alpha->setValue(qRound(currentItem->GrCol2transp * 100)); - color3Alpha->setValue(qRound(currentItem->GrCol3transp * 100)); - color4Alpha->setValue(qRound(currentItem->GrCol4transp * 100)); - color1Shade->setValue(currentItem->GrCol1Shade); - color2Shade->setValue(currentItem->GrCol2Shade); - color3Shade->setValue(currentItem->GrCol3Shade); - color4Shade->setValue(currentItem->GrCol4Shade); - emit NewGradient(Gradient_4Colors); - } - else if (type == 4) - { - stackedWidget_2->setCurrentIndex(0); - emit NewGradient(Gradient_Diamond); - } - else if (type == 5) - { - stackedWidget_2->setCurrentIndex(2); - if ((currentItem->selectedMeshPointX > -1) && (currentItem->selectedMeshPointY > -1L)) - { - MeshPoint mp = currentItem->meshGradientArray[currentItem->selectedMeshPointX][currentItem->selectedMeshPointY]; - setCurrentComboItem(colorMeshPoint, mp.colorName); - shadeMeshPoint->setValue(mp.shade); - transparencyMeshPoint->setValue(mp.transparency * 100); - } - emit NewGradient(Gradient_Mesh); - } - else if (type == 6) - { - stackedWidget_2->setCurrentIndex(2); - emit NewGradient(Gradient_PatchMesh); - } -} - -void ColorPalette::slotGradTypeStroke(int type) -{ - if (type == 0) - emit NewGradientS(Gradient_Linear); - else - emit NewGradientS(Gradient_Radial); -} - -void ColorPalette::editMeshPointColor() -{ - if (editMeshColors->isChecked()) - { - if (currentItem->gradientType() == 11) - editStrokeGradient = 6; - else if (currentItem->gradientType() == 12) - editStrokeGradient = 8; - else - editStrokeGradient = 0; - gradEditButton->setEnabled(false); - } - else - { - editStrokeGradient = 0; - gradEditButton->setEnabled(true); - } - fillModeCombo->setEnabled(!gradEditButton->isChecked() && !editMeshColors->isChecked()); - gradientType->setEnabled(!gradEditButton->isChecked() && !editMeshColors->isChecked()); - strokeModeCombo->setEnabled(!gradEditButtonStroke->isChecked() && !editMeshColors->isChecked()); - gradientTypeStroke->setEnabled(!gradEditButtonStroke->isChecked() && !editMeshColors->isChecked()); - emit editGradient(editStrokeGradient); -} - -void ColorPalette::createNewMeshGradient() -{ - InsertTable* dia = new InsertTable(this, 255, 255); - dia->setWindowTitle( tr( "Create Mesh" ) ); - if (dia->exec()) - { - currentItem->createGradientMesh(dia->Rows->value(), dia->Cols->value()); - currentItem->update(); - currentDoc->regionsChanged()->update(QRect()); - } - delete dia; -} - -void ColorPalette::resetMeshGradient() -{ - currentItem->resetGradientMesh(); - currentItem->update(); - currentDoc->regionsChanged()->update(QRect()); -} - -void ColorPalette::meshGradientToShape() -{ - currentItem->meshToShape(); - currentItem->update(); - currentDoc->regionsChanged()->update(QRect()); -} - -void ColorPalette::resetOneControlPoint() -{ - int grow = currentItem->selectedMeshPointX; - int gcol = currentItem->selectedMeshPointY; - int cont = currentItem->selectedMeshControlPoint; - MeshPoint tmp; - if (currentItem->gradientType() == 12) - { - if ((grow == -1) || (gcol == 0)) - return; - ScOldNewState<MeshPoint> *ss = nullptr; - if (UndoManager::undoEnabled()) - { - ss = new ScOldNewState<MeshPoint>(Um::GradPos); - ss->set("MOVE_MESH_PATCH"); - ss->set("ARRAY", false); - ss->set("X", grow); - ss->set("Y", gcol); - } - switch (gcol) - { - case 1: - tmp = currentItem->meshGradientPatches[grow].TL; - if (cont == 2) - tmp.controlBottom = tmp.gridPoint; - if (cont == 4) - tmp.controlRight = tmp.gridPoint; - if (UndoManager::undoEnabled()) - ss->setStates(currentItem->meshGradientPatches[grow].TL, tmp); - currentItem->meshGradientPatches[grow].TL = tmp; - break; - case 2: - tmp = currentItem->meshGradientPatches[grow].TR; - if (cont == 2) - tmp.controlBottom = tmp.gridPoint; - if (cont == 3) - tmp.controlLeft = tmp.gridPoint; - if (UndoManager::undoEnabled()) - ss->setStates(currentItem->meshGradientPatches[grow].TR, tmp); - currentItem->meshGradientPatches[grow].TR = tmp; - break; - case 3: - tmp = currentItem->meshGradientPatches[grow].BR; - if (cont == 1) - tmp.controlTop = tmp.gridPoint; - if (cont == 3) - tmp.controlLeft = tmp.gridPoint; - if (UndoManager::undoEnabled()) - ss->setStates(currentItem->meshGradientPatches[grow].BR, tmp); - currentItem->meshGradientPatches[grow].BR = tmp; - break; - case 4: - tmp = currentItem->meshGradientPatches[grow].BL; - if (cont == 1) - tmp.controlTop = tmp.gridPoint; - if (cont == 4) - tmp.controlRight = tmp.gridPoint; - if (UndoManager::undoEnabled()) - ss->setStates(currentItem->meshGradientPatches[grow].BL, tmp); - currentItem->meshGradientPatches[grow].BL = tmp; - break; - } - if (UndoManager::undoEnabled()) - undoManager->action(currentItem,ss); - } - else - { - if ((grow == -1) || (gcol == -1)) - return; - - tmp = currentItem->meshGradientArray[grow][gcol]; - if (cont == 1) - tmp.controlTop = tmp.gridPoint; - else if (cont == 2) - tmp.controlBottom = tmp.gridPoint; - else if (cont == 3) - tmp.controlLeft = tmp.gridPoint; - else if (cont == 4) - tmp.controlRight = tmp.gridPoint; - - if (UndoManager::undoEnabled()) - { - auto *ss = new ScOldNewState<MeshPoint>(Um::GradPos); - ss->set("MOVE_MESH_PATCH"); - ss->set("ARRAY", true); - ss->set("X", grow); - ss->set("Y", gcol); - ss->setStates(currentItem->meshGradientArray[grow][gcol], tmp); - undoManager->action(currentItem,ss); - } - currentItem->meshGradientArray[grow][gcol] = tmp; - } - currentItem->update(); - currentDoc->regionsChanged()->update(QRect()); -} - -void ColorPalette::resetAllControlPoints() -{ - int grow = currentItem->selectedMeshPointX; - int gcol = currentItem->selectedMeshPointY; - MeshPoint tmp; - if (currentItem->gradientType() == 12) - { - if ((grow == -1) || (gcol == 0)) - return; - ScOldNewState<MeshPoint> *ss = nullptr; - if (UndoManager::undoEnabled()) - { - ss = new ScOldNewState<MeshPoint>(Um::GradPos); - ss->set("MOVE_MESH_PATCH"); - ss->set("ARRAY", false); - ss->set("X", grow); - ss->set("Y", gcol); - } - switch (gcol) - { - case 1: - tmp = currentItem->meshGradientPatches[grow].TL; - tmp.controlTop = tmp.gridPoint; - tmp.controlLeft = tmp.gridPoint; - tmp.controlRight = tmp.gridPoint; - tmp.controlBottom = tmp.gridPoint; - if (UndoManager::undoEnabled()) - ss->setStates(currentItem->meshGradientPatches[grow].TL, tmp); - currentItem->meshGradientPatches[grow].TL = tmp; - break; - case 2: - tmp = currentItem->meshGradientPatches[grow].TR; - tmp.controlTop = tmp.gridPoint; - tmp.controlLeft = tmp.gridPoint; - tmp.controlRight = tmp.gridPoint; - tmp.controlBottom = tmp.gridPoint; - if (UndoManager::undoEnabled()) - ss->setStates(currentItem->meshGradientPatches[grow].TR, tmp); - currentItem->meshGradientPatches[grow].TR = tmp; - break; - case 3: - tmp = currentItem->meshGradientPatches[grow].BR; - tmp.controlTop = tmp.gridPoint; - tmp.controlLeft = tmp.gridPoint; - tmp.controlRight = tmp.gridPoint; - tmp.controlBottom = tmp.gridPoint; - if (UndoManager::undoEnabled()) - ss->setStates(currentItem->meshGradientPatches[grow].BR, tmp); - currentItem->meshGradientPatches[grow].BR = tmp; - break; - case 4: - tmp = currentItem->meshGradientPatches[grow].BL; - tmp.controlTop = tmp.gridPoint; - tmp.controlLeft = tmp.gridPoint; - tmp.controlRight = tmp.gridPoint; - tmp.controlBottom = tmp.gridPoint; - if (UndoManager::undoEnabled()) - ss->setStates(currentItem->meshGradientPatches[grow].BL, tmp); - currentItem->meshGradientPatches[grow].BL = tmp; - break; - } - if (UndoManager::undoEnabled()) - undoManager->action(currentItem,ss); - } - else - { - if ((grow == -1) || (gcol == -1)) - return; - tmp = currentItem->meshGradientArray[grow][gcol]; - tmp.controlTop = tmp.gridPoint; - tmp.controlLeft = tmp.gridPoint; - tmp.controlRight = tmp.gridPoint; - tmp.controlBottom = tmp.gridPoint; - if (UndoManager::undoEnabled()) - { - auto *ss = new ScOldNewState<MeshPoint>(Um::GradPos); - ss->set("MOVE_MESH_PATCH"); - ss->set("ARRAY", true); - ss->set("X", grow); - ss->set("Y", gcol); - ss->setStates(currentItem->meshGradientArray[grow][gcol], tmp); - undoManager->action(currentItem,ss); - } - currentItem->meshGradientArray[grow][gcol] = tmp; - } - currentItem->update(); - currentDoc->regionsChanged()->update(QRect()); -} - -void ColorPalette::editGradientVector() -{ - if (gradEditButton->isChecked()) - { - setGradientVectorValues(); - CGradDia->show(); - } - else - { - CGradDia->hide(); - editMeshColors->setEnabled(true); - } - if (currentItem->gradientType() == 9) - editStrokeGradient = 3; - else if (currentItem->gradientType() == 10) - editStrokeGradient = 4; - else if (currentItem->gradientType() == 11) - editStrokeGradient = 5; - else if (currentItem->gradientType() == 12) - editStrokeGradient = 9; - else - editStrokeGradient = 0; - fillModeCombo->setEnabled(!gradEditButton->isChecked() && !editMeshColors->isChecked()); - gradientType->setEnabled(!gradEditButton->isChecked() && !editMeshColors->isChecked()); - emit editGradient(editStrokeGradient); -} - -void ColorPalette::editGradientVectorStroke() -{ - if (gradEditButtonStroke->isChecked()) - { - setGradientVectorStrokeValues(); - CGradDia->show(); - } - else - { - CGradDia->hide(); - } - editStrokeGradient = 1; - strokeModeCombo->setEnabled(!gradEditButtonStroke->isChecked() && !editMeshColors->isChecked()); - gradientTypeStroke->setEnabled(!gradEditButtonStroke->isChecked() && !editMeshColors->isChecked()); - emit editGradient(editStrokeGradient); -} - -void ColorPalette::setGradientVectorValues() -{ - if (!gradEditButton->isChecked()) - return; - CGradDia->unitChange(currentDoc->unitIndex()); - CGradDia->setValues(currentItem->gradientStartX(), currentItem->gradientStartY(), currentItem->gradientEndX(), currentItem->gradientEndY(), currentItem->GrFocalX, currentItem->GrFocalY, currentItem->GrScale, currentItem->GrSkew, 0, 0); - if (currentItem->gradientType() == 6) - CGradDia->selectLinear(); - else if (currentItem->gradientType() == 7) - CGradDia->selectRadial(); - else if (currentItem->gradientType() == 9) - { - CGradDia->setValues(currentItem->GrControl1.x(), currentItem->GrControl1.y(), currentItem->GrControl2.x(), currentItem->GrControl2.y(), currentItem->GrControl3.x(), currentItem->GrControl3.y(), currentItem->GrControl4.x(), currentItem->GrControl4.y(), 0, 0); - CGradDia->selectFourColor(); - } - else if (currentItem->gradientType() == 10) - { - CGradDia->setValues(currentItem->GrControl1.x(), currentItem->GrControl1.y(), currentItem->GrControl2.x(), currentItem->GrControl2.y(), currentItem->GrControl3.x(), currentItem->GrControl3.y(), currentItem->GrControl4.x(), currentItem->GrControl4.y(), currentItem->GrControl5.x(), currentItem->GrControl5.y()); - CGradDia->selectDiamond(); - } - else if (currentItem->gradientType() == 11) - { - CGradDia->selectMesh(); - editMeshColors->setEnabled(false); - } - else if (currentItem->gradientType() == 12) - { - CGradDia->selectPatchMesh(); - editMeshColors->setEnabled(false); - } - else if (currentItem->gradientType() == 13) - CGradDia->selectConical(); -} - -void ColorPalette::setGradientVectorStrokeValues() -{ - if (!gradEditButtonStroke->isChecked()) - return; - CGradDia->unitChange(currentDoc->unitIndex()); - CGradDia->setValues(currentItem->GrStrokeStartX, currentItem->GrStrokeStartY, currentItem->GrStrokeEndX, currentItem->GrStrokeEndY, currentItem->GrStrokeFocalX, currentItem->GrStrokeFocalY, currentItem->GrStrokeScale, currentItem->GrStrokeSkew, 0, 0); - if (currentItem->strokeGradientType() == 6) - CGradDia->selectLinear(); - else - CGradDia->selectRadial(); -} - -void ColorPalette::setActiveGradDia(bool active) -{ - if (active) - return; - if (editStrokeGradient == 1) - gradEditButtonStroke->setChecked(false); - else - gradEditButton->setChecked(false); - emit editGradient(editStrokeGradient); - fillModeCombo->setEnabled(!gradEditButton->isChecked() && !editMeshColors->isChecked()); - gradientType->setEnabled(!gradEditButton->isChecked() && !editMeshColors->isChecked()); - strokeModeCombo->setEnabled(!gradEditButtonStroke->isChecked() && !editMeshColors->isChecked()); - gradientTypeStroke->setEnabled(!gradEditButtonStroke->isChecked() && !editMeshColors->isChecked()); - editMeshColors->setEnabled(true); -} - -void ColorPalette::setSpecialGradient(double x1, double y1, double x2, double y2, double fx, double fy, double sg, double sk, double cx, double cy) -{ - if (CGradDia) - CGradDia->setValues(x1, y1, x2, y2, fx, fy, sg, sk, cx, cy); -} - -void ColorPalette::setMeshPoint() -{ - if ((currentItem->selectedMeshPointX > -1) && (currentItem->selectedMeshPointY > -1)) - { - colorMeshPoint->setEnabled(true); - shadeMeshPoint->setEnabled(true); - transparencyMeshPoint->setEnabled(true); - MeshPoint mp = currentItem->meshGradientArray[currentItem->selectedMeshPointX][currentItem->selectedMeshPointY]; - setCurrentComboItem(colorMeshPoint, mp.colorName); - shadeMeshPoint->setValue(mp.shade); - transparencyMeshPoint->setValue(mp.transparency * 100); - } - else - { - colorMeshPoint->setEnabled(false); - shadeMeshPoint->setEnabled(false); - transparencyMeshPoint->setEnabled(false); - } -} - -void ColorPalette::endPatchAdd() -{ - CGradDia->endPAddButton(); -} - -void ColorPalette::snapToPatchGrid(bool val) -{ - currentItem->setSnapToPatchGrid(val); -} - -void ColorPalette::handleRemovePatch() -{ - if ((currentItem->selectedMeshPointX > -1) && (currentItem->meshGradientPatches.count() > 1)) - { - if (UndoManager::undoEnabled()) - { - ScItemState<meshGradientPatch> *ss = new ScItemState<meshGradientPatch>(Um::RemoveMeshPatch,"",Um::ILine); - ss->set("REMOVE_MESH_PATCH"); - ss->setItem(currentItem->meshGradientPatches.takeAt(currentItem->selectedMeshPointX)); - ss->set("POS", currentItem->selectedMeshPointX); - undoManager->action(currentItem,ss); - } - currentItem->selectedMeshPointX = -1; - CGradDia->changebuttonRemovePatch((currentItem->selectedMeshPointX > -1) && (currentItem->meshGradientPatches.count() > 1)); - currentItem->update(); - currentDoc->regionsChanged()->update(QRect()); - editStrokeGradient = 9; - emit editGradient(editStrokeGradient); - } -} - -void ColorPalette::updateMeshPoint() -{ - QString color = colorMeshPoint->currentText(); - if (color == CommonStrings::tr_NoneColor) - color = CommonStrings::None; - double t = transparencyMeshPoint->value() / 100.0; - currentItem->setMeshPointColor(currentItem->selectedMeshPointX, currentItem->selectedMeshPointY, color, static_cast<int>(shadeMeshPoint->value()), t, currentDoc->view()->editStrokeGradient == 8); - currentItem->update(); - currentDoc->regionsChanged()->update(QRect()); -} - -void ColorPalette::setMeshPatchPoint() -{ - if ((currentItem->selectedMeshPointX > -1) && (currentItem->selectedMeshPointY > 0)) - { - colorMeshPoint->setEnabled(true); - shadeMeshPoint->setEnabled(true); - transparencyMeshPoint->setEnabled(true); - meshGradientPatch patch = currentItem->meshGradientPatches[currentItem->selectedMeshPointX]; - MeshPoint mp; - switch (currentItem->selectedMeshPointY) - { - case 1: - mp = patch.TL; - break; - case 2: - mp = patch.TR; - break; - case 3: - mp = patch.BR; - break; - case 4: - mp = patch.BL; - break; - } - setCurrentComboItem(colorMeshPoint, mp.colorName); - shadeMeshPoint->setValue(mp.shade); - transparencyMeshPoint->setValue(mp.transparency * 100); - } - else - { - colorMeshPoint->setEnabled(false); - shadeMeshPoint->setEnabled(false); - transparencyMeshPoint->setEnabled(false); - } -} - -void ColorPalette::setMeshPatch() -{ - CGradDia->changebuttonRemovePatch((currentItem->selectedMeshPointX > -1) && (currentItem->meshGradientPatches.count() > 1)); -} - -void ColorPalette::changePatternProps() -{ - PatternPropsDialog *dia = new PatternPropsDialog(this, currentUnit, false); - dia->spinXscaling->setValue(m_patternTrans.scaleX * 100.0); - dia->spinYscaling->setValue(m_patternTrans.scaleY * 100.0); - if (m_patternTrans.scaleX == m_patternTrans.scaleY) - dia->keepScaleRatio->setChecked(true); - dia->spinXoffset->setValue(m_patternTrans.offsetX); - dia->spinYoffset->setValue(m_patternTrans.offsetY); - dia->spinAngle->setValue(m_patternTrans.rotation); - double asina = atan(m_patternTrans.skewX); - dia->spinXSkew->setValue(asina / (M_PI / 180.0)); - double asinb = atan(m_patternTrans.skewY); - dia->spinYSkew->setValue(asinb / (M_PI / 180.0)); - dia->FlipH->setChecked(m_Pattern_mirrorX); - dia->FlipV->setChecked(m_Pattern_mirrorY); - connect(dia, SIGNAL(NewPatternProps(double,double,double,double,double,double,double,bool,bool)), this, SIGNAL(NewPatternProps(double,double,double,double,double,double,double,bool,bool))); - dia->exec(); - m_patternTrans.scaleX = dia->spinXscaling->value() / 100.0; - m_patternTrans.scaleY = dia->spinYscaling->value() / 100.0; - m_patternTrans.offsetX = dia->spinXoffset->value(); - m_patternTrans.offsetY = dia->spinYoffset->value(); - m_patternTrans.rotation = dia->spinAngle->value(); - double skewX = dia->spinXSkew->value(); - double a; - if (skewX == 90.0) - a = 1.0; - else if (skewX == 180.0) - a = 0.0; - else if (skewX == 270.0) - a = -1.0; - else if (skewX == 360.0) - a = 0.0; - else - a = tan(M_PI / 180.0 * skewX); - m_patternTrans.skewX = tan(a); - skewX = dia->spinYSkew->value(); - if (skewX == 90.0) - a = 1.0; - else if (skewX == 180.0) - a = 0.0; - else if (skewX == 270.0) - a = -1.0; - else if (skewX == 360.0) - a = 0.0; - else - a = tan(M_PI / 180.0 * skewX); - m_patternTrans.skewY = tan(a); - m_Pattern_mirrorX = dia->FlipH->isChecked(); - m_Pattern_mirrorY = dia->FlipV->isChecked(); - delete dia; - fillModeCombo->setCurrentIndex(3); - emit NewGradient(Gradient_Pattern); -} - -void ColorPalette::changePatternPropsStroke() -{ - PatternPropsDialog *dia = new PatternPropsDialog(this, currentUnit, true); - dia->spinXscaling->setValue(m_strokePatternTrans.scaleX * 100.0); - dia->spinYscaling->setValue(m_strokePatternTrans.scaleY * 100.0); - if (m_strokePatternTrans.scaleX == m_strokePatternTrans.scaleY) - dia->keepScaleRatio->setChecked(true); - dia->spinXoffset->setValue(m_strokePatternTrans.offsetX); - dia->spinYoffset->setValue(m_strokePatternTrans.offsetY); - dia->spinAngle->setValue(m_strokePatternTrans.rotation); - dia->spinSpacing->setValue(m_strokePatternTrans.space * 100.0); - double asina = atan(m_strokePatternTrans.skewX); - dia->spinXSkew->setValue(asina / (M_PI / 180.0)); - double asinb = atan(m_strokePatternTrans.skewY); - dia->spinYSkew->setValue(asinb / (M_PI / 180.0)); - dia->FlipH->setChecked(m_Pattern_mirrorXS); - dia->FlipV->setChecked(m_Pattern_mirrorYS); - connect(dia, SIGNAL(NewPatternPropsS(double,double,double,double,double,double,double,double,bool,bool)), this, SIGNAL(NewPatternPropsS(double,double,double,double,double,double,double,double,bool,bool))); - dia->exec(); - m_strokePatternTrans.scaleX = dia->spinXscaling->value() / 100.0; - m_strokePatternTrans.scaleY = dia->spinYscaling->value() / 100.0; - m_strokePatternTrans.offsetX = dia->spinXoffset->value(); - m_strokePatternTrans.offsetY = dia->spinYoffset->value(); - m_strokePatternTrans.rotation = dia->spinAngle->value(); - double skewX = dia->spinXSkew->value(); - double a; - if (skewX == 90) - a = 1; - else if (skewX == 180) - a = 0; - else if (skewX == 270) - a = -1; - else if (skewX == 360) - a = 0; - else - a = tan(M_PI / 180.0 * skewX); - m_strokePatternTrans.skewX = tan(a); - skewX = dia->spinYSkew->value(); - if (skewX == 90) - a = 1; - else if (skewX == 180) - a = 0; - else if (skewX == 270) - a = -1; - else if (skewX == 360) - a = 0; - else - a = tan(M_PI / 180.0 * skewX); - m_strokePatternTrans.skewY = tan(a); - m_strokePatternTrans.space = dia->spinSpacing->value() / 100.0; - m_Pattern_mirrorXS = dia->FlipH->isChecked(); - m_Pattern_mirrorYS = dia->FlipV->isChecked(); - delete dia; -} - -void ColorPalette::changeHatchProps() -{ - QString color1 = hatchLineColor->currentText(); - if (color1 == CommonStrings::tr_NoneColor) - color1 = CommonStrings::None; - QString color2 = hatchBackground->currentText(); - if (color2 == CommonStrings::tr_NoneColor) - color2 = CommonStrings::None; - bool useB = (color2 != CommonStrings::None); - double angle = hatchAngle->value(); - double dist = hatchDist->value() / unitGetRatioFromIndex(currentUnit); - currentItem->setHatchParameters(hatchType->currentIndex(), dist, angle, useB, color2, color1); - currentItem->update(); - currentDoc->regionsChanged()->update(QRect()); -} - -void ColorPalette::toggleStrokePattern() -{ - emit NewPatternTypeS(followsPath->isChecked()); -} - -void ColorPalette::unitChange(double, double, int unitIndex) -{ - if (CGradDia) - CGradDia->unitChange(unitIndex); - hatchDist->setNewUnit(unitIndex); - currentUnit = unitIndex; -} - -void ColorPalette::languageChange() -{ - // Needed to avoid issues if an item is selected and patterns are available - if (currentItem) - disconnectSignals(); - - // Save fill tab state - int oldFillModeComboIndex = fillModeCombo->currentIndex(); - int oldGradientTypeIndex = gradientType->currentIndex(); - int oldGradientExtendIndex = gradientExtend->currentIndex(); - int oldHatchTypeIndex = hatchType->currentIndex(); - - // Save stroke tab state - int oldStrokeModeComboIndex = strokeModeCombo->currentIndex(); - int oldGradientTypeStrokeIndex = gradientTypeStroke->currentIndex(); - int oldGradientExtendSIndex = GradientExtendS->currentIndex(); - - // Save properties outside of tabs - int oldOverPrintComboIndex = overPrintCombo->currentIndex(); - - // Retranslate UI - retranslateUi(this); - - fillModeCombo->clear(); - fillModeCombo->addItem( tr("Solid")); - fillModeCombo->addItem( tr("Gradient")); - fillModeCombo->addItem( tr("Hatch")); - - strokeModeCombo->clear(); - strokeModeCombo->addItem( tr("Solid")); - strokeModeCombo->addItem( tr("Gradient")); - - if (currentDoc) - enablePatterns(patternList->count() != 0); - - // Restore properties - fillModeCombo->setCurrentIndex(oldFillModeComboIndex); - gradientType->setCurrentIndex(oldGradientTypeIndex); - gradientExtend->setCurrentIndex(oldGradientExtendIndex); - hatchType->setCurrentIndex(oldHatchTypeIndex); - - strokeModeCombo->setCurrentIndex(oldStrokeModeComboIndex); - gradientTypeStroke->setCurrentIndex(oldGradientTypeStrokeIndex); - GradientExtendS->setCurrentIndex(oldGradientExtendSIndex); - - overPrintCombo->setCurrentIndex(oldOverPrintComboIndex); - - // Reconnect signals if necessary - if (currentItem) - connectSignals(); -} Property changes on: scribus/ui/colorpalette.cpp ___________________________________________________________________ Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:keywords ## -1 +0,0 ## -Author Date Id Revision \ No newline at end of property Index: scribus/ui/colorpalette.h =================================================================== --- scribus/ui/colorpalette.h (Revision 26070) +++ scribus/ui/colorpalette.h (nicht existent) @@ -1,187 +0,0 @@ -/* -For general Scribus (>=1.3.2) copyright and licensing information please refer -to the COPYING file provided with the program. Following this notice may exist -a copyright and/or license notice that predates the release of Scribus 1.3.2 -for which a new license (GPL+exception) is in place. -*/ -/*************************************************************************** - colorpalette.h - description - ------------------- - begin : Wed Apr 25 2001 - copyright : (C) 2001 by Franz Schmid - email : Franz.Schmid@altmuehlnet.de - ***************************************************************************/ - -/*************************************************************************** - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ - -#ifndef COLORPALETTE_H -#define COLORPALETTE_H - -#include <QGroupBox> -#include <QPointer> -#include <QPushButton> -#include <QToolButton> -#include <QWidget> - -#include "scribusapi.h" -#include "gradienteditor.h" -#include "scribusdoc.h" -#include "scpatterntransform.h" -#include "ui/scrpalettebase.h" -#include "ui_colorpalette.h" -#include "ui/gradientvectordialog.h" -#include "ui/patternpropsdialog.h" - -class ColorListBox; -class PageItem; -class ScrSpinBox; -class ScPattern; -class UndoManager; - -/** - *@author Franz Schmid - */ - -class SCRIBUS_API ColorPalette : public QWidget, Ui::colorPalette -{ - Q_OBJECT - - friend class PropertiesPalette; - -public: - ColorPalette(QWidget* parent); - ~ColorPalette() = default; - - void setDocument(ScribusDoc* doc); - - void updateColorList(); - - void setColors(const ColorList& newColorList); - void setGradients(QHash<QString, VGradient> *docGradients); - void setPatterns(QHash<QString, ScPattern> *docPatterns); - - void setCurrentPattern(const QString& pattern, const ScPatternTransform& patternTrans, bool mirrorX, bool mirrorY); - void setCurrentPatternStroke(const QString& pattern, const ScStrokePatternTransform& patternTrans, bool mirrorX, bool mirrorY, bool pathF); - void setSpecialGradient(double x1, double y1, double x2, double y2, double fx, double fy, double sg, double sk, double cx, double cy); - -private: - - PageItem* currentItemFromSelection(); - UndoManager* undoManager {nullptr}; - -public slots: - void handleSelectionChanged(); - void handleUpdateRequest(int); - - /*void editLineColorSelectorButton(); - void editFillColorSelectorButton();*/ - void fillStrokeSelector(int /*index*/); - void handleFillShade(double); - void handleStrokeShade(double); - void handleOverprint(int); - void handleFillGradient(); - void handleStrokeGradient(); - void handleStrokeGradientExtend(int val); - void handleGradientExtend(int val); - void showColorValues(const QString& stroke, const QString& fille, int sShade, int fShade); - void showGradient(int nr); - void showGradientStroke(int nr); - void showOverprint(int); - void toggleColorDisplay(); - void setNamedGradient(const QString &name); - void setNamedGradientStroke(const QString &name); - void selectPattern(QListWidgetItem *c); - void selectPatternS(QListWidgetItem *c); - void hideEditedPatterns(QStringList names); - void selectColorS(int row); - void selectColorF(int row); - void slotGradStroke(int number); - void slotGrad(int nr); - void slotGradType(int type); - void slotGradTypeStroke(int type); - void setGradientColors(); - void editMeshPointColor(); - void createNewMeshGradient(); - void resetMeshGradient(); - void meshGradientToShape(); - void resetOneControlPoint(); - void resetAllControlPoints(); - void editGradientVector(); - void editGradientVectorStroke(); - void setActiveGradDia(bool active); - void setMeshPoint(); - void endPatchAdd(); - void snapToPatchGrid(bool val); - void handleRemovePatch(); - void setMeshPatch(); - void setMeshPatchPoint(); - void updateMeshPoint(); - void changePatternProps(); - void changePatternPropsStroke(); - void toggleStrokePattern(); - void changeHatchProps(); - -signals: - void NewPen(QString); - void NewBrush(QString); - void NewPenShade(double); - void NewBrushShade(double); - void NewGradient(int); - void NewGradientS(int); - void NewPattern(QString); - void NewPatternProps(double, double, double, double, double, double, double, bool, bool); - void NewPatternS(QString); - void NewPatternTypeS(bool); - void NewPatternPropsS(double, double, double, double, double, double, double, double, bool, bool); - void NewSpecial(double, double, double, double, double, double, double, double, double, double); - void NewOverprint(int); - void editGradient(int); - -protected: - ColorList colorList; - GradientVectorDialog* CGradDia { nullptr }; - PageItem* currentItem { nullptr }; - QHash<QString, ScPattern> *patternList { nullptr }; - QHash<QString, VGradient> *gradientList { nullptr }; - QPointer<ScribusDoc> currentDoc; - - ScPatternTransform m_patternTrans; - ScStrokePatternTransform m_strokePatternTrans; - bool m_Pattern_mirrorX { false }; - bool m_Pattern_mirrorXS { false }; - bool m_Pattern_mirrorY { false }; - bool m_Pattern_mirrorYS { false }; - int currentUnit {0}; - int editStrokeGradient {0}; - - void connectSignals(); - void disconnectSignals(); - - void setCurrentItem(PageItem* item); - void updateFromItem(); - - void setGradientVectorValues(); - void setGradientVectorStrokeValues(); - - int m_blockUpdates {0}; - void blockUpdates(bool block) { if (block) ++m_blockUpdates; else --m_blockUpdates; } - bool updatesBlocked() { return (m_blockUpdates > 0); } - - void enablePatterns(bool enable); - - void updateCList(); - void updateGradientList(); - void updatePatternList(); - - void languageChange(); - void unitChange(double, double, int unitIndex); -}; - -#endif Property changes on: scribus/ui/colorpalette.h ___________________________________________________________________ Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:keywords ## -1 +0,0 ## -Author Date Id Revision \ No newline at end of property Index: scribus/ui/colorpalette.ui =================================================================== --- scribus/ui/colorpalette.ui (Revision 26070) +++ scribus/ui/colorpalette.ui (nicht existent) @@ -1,1192 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>colorPalette</class> - <widget class="QWidget" name="colorPalette"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>320</width> - <height>360</height> - </rect> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <property name="spacing"> - <number>3</number> - </property> - <property name="leftMargin"> - <number>3</number> - </property> - <property name="topMargin"> - <number>3</number> - </property> - <property name="rightMargin"> - <number>3</number> - </property> - <property name="bottomMargin"> - <number>3</number> - </property> - <item> - <widget class="QTabWidget" name="tabFillStroke"> - <property name="currentIndex"> - <number>0</number> - </property> - <widget class="QWidget" name="tabFill"> - <attribute name="title"> - <string>Fill</string> - </attribute> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <property name="spacing"> - <number>3</number> - </property> - <property name="leftMargin"> - <number>3</number> - </property> - <property name="topMargin"> - <number>3</number> - </property> - <property name="rightMargin"> - <number>3</number> - </property> - <property name="bottomMargin"> - <number>3</number> - </property> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_2"> - <property name="spacing"> - <number>3</number> - </property> - <item> - <widget class="QLabel" name="fillModeLabel"> - <property name="text"> - <string>Fill Mode</string> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="fillModeCombo"/> - </item> - </layout> - </item> - <item> - <widget class="Line" name="line"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - </widget> - </item> - <item> - <widget class="QStackedWidget" name="fillModeStack"> - <property name="currentIndex"> - <number>0</number> - </property> - <widget class="QWidget" name="solidFillPage"> - <layout class="QVBoxLayout" name="verticalLayout_3"> - <property name="spacing"> - <number>3</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="ColorListBox" name="colorListFill"/> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_3"> - <property name="spacing"> - <number>3</number> - </property> - <item> - <widget class="QLabel" name="fillShadeLabel"> - <property name="text"> - <string>Shade:</string> - </property> - </widget> - </item> - <item> - <widget class="ScrSpinBox" name="fillShade"> - <property name="suffix"> - <string>%</string> - </property> - <property name="maximum"> - <double>100.000000000000000</double> - </property> - <property name="value"> - <double>100.000000000000000</double> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - <widget class="QWidget" name="gradientFillPage"> - <layout class="QVBoxLayout" name="verticalLayout_5"> - <property name="spacing"> - <number>3</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_4"> - <property name="spacing"> - <number>3</number> - </property> - <item> - <widget class="QComboBox" name="gradientType"> - <item> - <property name="text"> - <string>Linear</string> - </property> - </item> - <item> - <property name="text"> - <string>Radial</string> - </property> - </item> - <item> - <property name="text"> - <string>Conical</string> - </property> - </item> - <item> - <property name="text"> - <string>4 Colors</string> - </property> - </item> - <item> - <property name="text"> - <string>Diamond</string> - </property> - </item> - <item> - <property name="text"> - <string>Mesh</string> - </property> - </item> - <item> - <property name="text"> - <string>Patch Mesh</string> - </property> - </item> - </widget> - </item> - <item> - <widget class="QToolButton" name="gradEditButton"> - <property name="text"> - <string>Move Vector</string> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - </widget> - </item> - </layout> - </item> - <item> - <widget class="QStackedWidget" name="stackedWidget_2"> - <property name="currentIndex"> - <number>0</number> - </property> - <widget class="QWidget" name="page_3"> - <layout class="QVBoxLayout" name="verticalLayout_4"> - <property name="spacing"> - <number>3</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="QComboBox" name="namedGradient"/> - </item> - <item> - <widget class="GradientEditor" name="gradEdit"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> - </property> - </widget> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_10"> - <property name="spacing"> - <number>3</number> - </property> - <item> - <widget class="QLabel" name="gradientExtendLabel"> - <property name="text"> - <string>Extend:</string> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="gradientExtend"> - <item> - <property name="text"> - <string>None</string> - </property> - </item> - <item> - <property name="text"> - <string>Pad</string> - </property> - </item> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - <widget class="QWidget" name="page_4"> - <layout class="QVBoxLayout" name="verticalLayout_8"> - <property name="spacing"> - <number>3</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <layout class="QGridLayout" name="gridLayout_4"> - <property name="spacing"> - <number>3</number> - </property> - <item row="0" column="0"> - <widget class="QLabel" name="colorPointLabel"> - <property name="text"> - <string>Color</string> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QLabel" name="colorShadeLabel"> - <property name="text"> - <string>Shade</string> - </property> - </widget> - </item> - <item row="0" column="2"> - <widget class="QLabel" name="colorAlphaLabel"> - <property name="text"> - <string>Transparency</string> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="ColorCombo" name="colorPoint1"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="ScrSpinBox" name="color1Shade"> - <property name="suffix"> - <string> %</string> - </property> - <property name="minimum"> - <double>0.000000000000000</double> - </property> - <property name="maximum"> - <double>100.000000000000000</double> - </property> - <property name="singleStep"> - <double>10.000000000000000</double> - </property> - <property name="value"> - <double>100.000000000000000</double> - </property> - </widget> - </item> - <item row="1" column="2"> - <widget class="ScrSpinBox" name="color1Alpha"> - <property name="suffix"> - <string> %</string> - </property> - <property name="maximum"> - <double>100.000000000000000</double> - </property> - <property name="singleStep"> - <double>10.000000000000000</double> - </property> - <property name="value"> - <double>100.000000000000000</double> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="ColorCombo" name="colorPoint2"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="ScrSpinBox" name="color2Shade"> - <property name="suffix"> - <string> %</string> - </property> - <property name="minimum"> - <double>0.000000000000000</double> - </property> - <property name="maximum"> - <double>100.000000000000000</double> - </property> - <property name="singleStep"> - <double>10.000000000000000</double> - </property> - <property name="value"> - <double>100.000000000000000</double> - </property> - </widget> - </item> - <item row="2" column="2"> - <widget class="ScrSpinBox" name="color2Alpha"> - <property name="suffix"> - <string> %</string> - </property> - <property name="maximum"> - <double>100.000000000000000</double> - </property> - <property name="singleStep"> - <double>10.000000000000000</double> - </property> - <property name="value"> - <double>100.000000000000000</double> - </property> - </widget> - </item> - <item row="3" column="0"> - <widget class="ColorCombo" name="colorPoint3"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - </widget> - </item> - <item row="3" column="1"> - <widget class="ScrSpinBox" name="color3Shade"> - <property name="suffix"> - <string> %</string> - </property> - <property name="minimum"> - <double>0.000000000000000</double> - </property> - <property name="maximum"> - <double>100.000000000000000</double> - </property> - <property name="singleStep"> - <double>10.000000000000000</double> - </property> - <property name="value"> - <double>100.000000000000000</double> - </property> - </widget> - </item> - <item row="3" column="2"> - <widget class="ScrSpinBox" name="color3Alpha"> - <property name="suffix"> - <string> %</string> - </property> - <property name="maximum"> - <double>100.000000000000000</double> - </property> - <property name="singleStep"> - <double>10.000000000000000</double> - </property> - <property name="value"> - <double>100.000000000000000</double> - </property> - </widget> - </item> - <item row="4" column="0"> - <widget class="ColorCombo" name="colorPoint4"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - </widget> - </item> - <item row="4" column="1"> - <widget class="ScrSpinBox" name="color4Shade"> - <property name="suffix"> - <string> %</string> - </property> - <property name="minimum"> - <double>0.000000000000000</double> - </property> - <property name="maximum"> - <double>100.000000000000000</double> - </property> - <property name="singleStep"> - <double>10.000000000000000</double> - </property> - <property name="value"> - <double>100.000000000000000</double> - </property> - </widget> - </item> - <item row="4" column="2"> - <widget class="ScrSpinBox" name="color4Alpha"> - <property name="suffix"> - <string> %</string> - </property> - <property name="maximum"> - <double>100.000000000000000</double> - </property> - <property name="singleStep"> - <double>10.000000000000000</double> - </property> - <property name="value"> - <double>100.000000000000000</double> - </property> - </widget> - </item> - </layout> - </item> - <item> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>70</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - <widget class="QWidget" name="page_5"> - <layout class="QVBoxLayout" name="verticalLayout_9"> - <property name="spacing"> - <number>3</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <layout class="QGridLayout" name="gridLayout_5"> - <property name="spacing"> - <number>3</number> - </property> - <item row="0" column="0"> - <widget class="QLabel" name="colorMeshPointLabel"> - <property name="text"> - <string>Color:</string> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="ColorCombo" name="colorMeshPoint"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="shadeMeshPointLabel"> - <property name="text"> - <string>Shade:</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="ScrSpinBox" name="shadeMeshPoint"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="suffix"> - <string> %</string> - </property> - <property name="minimum"> - <double>0.000000000000000</double> - </property> - <property name="maximum"> - <double>100.000000000000000</double> - </property> - <property name="singleStep"> - <double>10.000000000000000</double> - </property> - <property name="value"> - <double>100.000000000000000</double> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="transparencyMeshPointLabel"> - <property name="text"> - <string>Opacity:</string> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="ScrSpinBox" name="transparencyMeshPoint"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="suffix"> - <string> %</string> - </property> - <property name="maximum"> - <double>100.000000000000000</double> - </property> - <property name="singleStep"> - <double>10.000000000000000</double> - </property> - <property name="value"> - <double>100.000000000000000</double> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_8"> - <property name="spacing"> - <number>3</number> - </property> - <item> - <widget class="QToolButton" name="editMeshColors"> - <property name="text"> - <string>Edit Colors</string> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer_2"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </item> - <item> - <spacer name="verticalSpacer_2"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>101</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - </widget> - </item> - </layout> - </widget> - <widget class="QWidget" name="page"> - <layout class="QVBoxLayout" name="verticalLayout_12"> - <property name="spacing"> - <number>3</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <layout class="QGridLayout" name="gridLayout"> - <property name="spacing"> - <number>3</number> - </property> - <item row="0" column="0"> - <widget class="QLabel" name="hatchDistLabel"> - <property name="text"> - <string>Distance:</string> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="ScrSpinBox" name="hatchDist"/> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="hatchAngleLabel"> - <property name="text"> - <string>Angle:</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="ScrSpinBox" name="hatchAngle"> - <property name="minimum"> - <double>-360.000000000000000</double> - </property> - <property name="maximum"> - <double>360.000000000000000</double> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="hatchTypeLabel"> - <property name="text"> - <string>Type:</string> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="QComboBox" name="hatchType"> - <item> - <property name="text"> - <string>Single</string> - </property> - </item> - <item> - <property name="text"> - <string>Double</string> - </property> - </item> - <item> - <property name="text"> - <string>Triple</string> - </property> - </item> - </widget> - </item> - <item row="3" column="0"> - <widget class="QLabel" name="hatchLineColorLabel"> - <property name="text"> - <string>Line Color:</string> - </property> - </widget> - </item> - <item row="3" column="1"> - <widget class="ColorCombo" name="hatchLineColor"/> - </item> - <item row="4" column="0"> - <widget class="QLabel" name="hatchBackgroundLabel"> - <property name="text"> - <string>Background:</string> - </property> - </widget> - </item> - <item row="4" column="1"> - <widget class="ColorCombo" name="hatchBackground"/> - </item> - </layout> - </item> - <item> - <spacer name="verticalSpacer_3"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>75</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - <widget class="QWidget" name="patternFillPage"> - <layout class="QVBoxLayout" name="verticalLayout_6"> - <property name="spacing"> - <number>3</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="QListWidget" name="patternBox"> - <property name="movement"> - <enum>QListView::Snap</enum> - </property> - <property name="flow"> - <enum>QListView::LeftToRight</enum> - </property> - <property name="isWrapping" stdset="0"> - <bool>true</bool> - </property> - <property name="resizeMode"> - <enum>QListView::Adjust</enum> - </property> - <property name="viewMode"> - <enum>QListView::IconMode</enum> - </property> - <property name="wordWrap"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_5"> - <property name="spacing"> - <number>3</number> - </property> - <item> - <widget class="QToolButton" name="editPatternProps"> - <property name="text"> - <string>Properties...</string> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer_3"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </item> - </layout> - </widget> - </widget> - </item> - </layout> - </widget> - <widget class="QWidget" name="tabStroke"> - <attribute name="title"> - <string>Stroke</string> - </attribute> - <layout class="QVBoxLayout" name="verticalLayout_11"> - <property name="spacing"> - <number>3</number> - </property> - <property name="leftMargin"> - <number>3</number> - </property> - <property name="topMargin"> - <number>3</number> - </property> - <property name="rightMargin"> - <number>3</number> - </property> - <property name="bottomMargin"> - <number>3</number> - </property> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_6"> - <property name="spacing"> - <number>3</number> - </property> - <item> - <widget class="QLabel" name="strokeModeLabel"> - <property name="text"> - <string>Stroke Mode</string> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="strokeModeCombo"/> - </item> - </layout> - </item> - <item> - <widget class="Line" name="line_2"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - </widget> - </item> - <item> - <widget class="QStackedWidget" name="strokeModeStack"> - <property name="currentIndex"> - <number>0</number> - </property> - <widget class="QWidget" name="solidStrokePage"> - <layout class="QVBoxLayout" name="verticalLayout_7"> - <property name="spacing"> - <number>3</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="ColorListBox" name="colorListStroke"/> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_7"> - <property name="spacing"> - <number>3</number> - </property> - <item> - <widget class="QLabel" name="strokeShadeLabel"> - <property name="text"> - <string>Shade:</string> - </property> - </widget> - </item> - <item> - <widget class="ScrSpinBox" name="strokeShade"> - <property name="suffix"> - <string>%</string> - </property> - <property name="maximum"> - <double>100.000000000000000</double> - </property> - <property name="value"> - <double>100.000000000000000</double> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - <widget class="QWidget" name="gradientStrokePage"> - <layout class="QVBoxLayout" name="verticalLayout_10"> - <property name="spacing"> - <number>3</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_9"> - <property name="spacing"> - <number>3</number> - </property> - <item> - <widget class="QComboBox" name="gradientTypeStroke"> - <item> - <property name="text"> - <string>Linear</string> - </property> - </item> - <item> - <property name="text"> - <string>Radial</string> - </property> - </item> - </widget> - </item> - <item> - <widget class="QToolButton" name="gradEditButtonStroke"> - <property name="text"> - <string>Move Vector</string> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - </widget> - </item> - </layout> - </item> - <item> - <widget class="QComboBox" name="namedGradientStroke"/> - </item> - <item> - <widget class="GradientEditor" name="gradEditStroke"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> - </property> - </widget> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_12"> - <property name="spacing"> - <number>3</number> - </property> - <item> - <widget class="QLabel" name="GradientExtendSLabel"> - <property name="text"> - <string>Extend:</string> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="GradientExtendS"> - <item> - <property name="text"> - <string>None</string> - </property> - </item> - <item> - <property name="text"> - <string>Pad</string> - </property> - </item> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - <widget class="QWidget" name="patternStrokePage"> - <layout class="QVBoxLayout" name="verticalLayout_14"> - <property name="spacing"> - <number>3</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="QListWidget" name="patternBoxStroke"> - <property name="movement"> - <enum>QListView::Snap</enum> - </property> - <property name="flow"> - <enum>QListView::LeftToRight</enum> - </property> - <property name="isWrapping" stdset="0"> - <bool>true</bool> - </property> - <property name="resizeMode"> - <enum>QListView::Adjust</enum> - </property> - <property name="viewMode"> - <enum>QListView::IconMode</enum> - </property> - <property name="wordWrap"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_11"> - <property name="spacing"> - <number>3</number> - </property> - <item> - <widget class="QToolButton" name="editPatternPropsStroke"> - <property name="text"> - <string>Properties...</string> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer_5"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QCheckBox" name="followsPath"> - <property name="layoutDirection"> - <enum>Qt::RightToLeft</enum> - </property> - <property name="text"> - <string>Pattern follows Path</string> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - </widget> - </item> - </layout> - </widget> - </widget> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout"> - <property name="spacing"> - <number>3</number> - </property> - <item> - <widget class="QLabel" name="overPrintLabel"> - <property name="text"> - <string>Overprinting</string> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="overPrintCombo"> - <item> - <property name="text"> - <string>Knockout</string> - </property> - </item> - <item> - <property name="text"> - <string>Overprint</string> - </property> - </item> - </widget> - </item> - </layout> - </item> - <item> - <widget class="QCheckBox" name="displayAllColors"> - <property name="layoutDirection"> - <enum>Qt::RightToLeft</enum> - </property> - <property name="text"> - <string>Display only used colors</string> - </property> - </widget> - </item> - </layout> - </widget> - <customwidgets> - <customwidget> - <class>ScrSpinBox</class> - <extends>QDoubleSpinBox</extends> - <header>ui/scrspinbox.h</header> - </customwidget> - <customwidget> - <class>GradientEditor</class> - <extends>QFrame</extends> - <header>ui/gradienteditor.h</header> - <container>1</container> - </customwidget> - <customwidget> - <class>ColorListBox</class> - <extends>QListView</extends> - <header>ui/colorlistbox.h</header> - </customwidget> - <customwidget> - <class>ColorCombo</class> - <extends>QComboBox</extends> - <header>ui/colorcombo.h</header> - </customwidget> - </customwidgets> - <resources/> - <connections/> -</ui> Index: scribus/ui/colorpicker/colorpicker.cpp =================================================================== --- scribus/ui/colorpicker/colorpicker.cpp (nicht existent) +++ scribus/ui/colorpicker/colorpicker.cpp (Arbeitskopie) @@ -0,0 +1,766 @@ +#include "colorpicker.h" + +#include <QButtonGroup> +#include "iconmanager.h" +#include "scribus.h" +#include "scribusapp.h" +#include "selection.h" +#include "ui/widgets/popup_menu.h" + +/* ********************************************************************************* * + * + * Constructor + Setup + * + * ********************************************************************************* */ + +ColorPicker::ColorPicker(Context context, QWidget *parent) : QWidget(parent) +{ + setupUi(this); + + comboOverprint = new QComboBox(); + checkboxUsedColors = new QCheckBox(); + + buttonGroup = new QButtonGroup(); + buttonGroup->addButton(buttonSolid, (int)Mode::Solid); + buttonGroup->addButton(buttonGradient, (int)Mode::Gradient); + buttonGroup->addButton(buttonHatch, (int)Mode::Hatch); + buttonGroup->addButton(buttonPattern, (int)Mode::Pattern); + + gradientEdit->setSelector(comboType); // required; gradientEdit has no gradient type selector + comboType->setVisible(false); + buttonPattern->setEnabled(false); // Button will enabled only if there are document patterns + buttonPreview->setFixedSize(32, 32); + + initContextMenu(); + languageChange(); + iconSetChange(); + setContext(context); + + stack->setCurrentWidget(colorEdit); + + // Picker + connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(iconSetChange())); + connect(buttonGroup, &QButtonGroup::buttonClicked, this, &ColorPicker::changedTab); + connect(comboOverprint, &QComboBox::activated, this, &ColorPicker::updateOverPrint); + connect(checkboxUsedColors, &QCheckBox::toggled, this, &ColorPicker::toggleColorLists); + connect(stack, &StackedContainer::currentChanged, this, &ColorPicker::updateSize); + // Color + connect(colorEdit, &ColorPickerColor::colorChanged, this, &ColorPicker::updateColor); + connect(colorEdit, &ColorPickerColor::sizeChanged, this, &ColorPicker::updateSize); + // Gradient + connect(gradientEdit, &ColorPickerGradient::gradientChanged, this, &ColorPicker::updateGradient); + connect(gradientEdit, &ColorPickerGradient::gradientVectorChanged, this, &ColorPicker::updateGradientVector); + connect(gradientEdit, &ColorPickerGradient::gradientMeshChanged, this, &ColorPicker::updateGradientMesh); + connect(gradientEdit, &ColorPickerGradient::sizeChanged, this, &ColorPicker::updateSize); + connect(gradientEdit->Properties(), &ColorPickerGradientProperties::createNewMesh, this, &ColorPicker::createNewMesh); + connect(gradientEdit->Properties(), &ColorPickerGradientProperties::resetMesh, this, &ColorPicker::resetMesh); + connect(gradientEdit->Properties(), &ColorPickerGradientProperties::meshToShape, this, &ColorPicker::meshToShape); + connect(gradientEdit->Properties(), &ColorPickerGradientProperties::reset1Control, this, &ColorPicker::reset1Control); + connect(gradientEdit->Properties(), &ColorPickerGradientProperties::resetAllControl, this,&ColorPicker::resetAllControl); + connect(gradientEdit->Properties(), &ColorPickerGradientProperties::removePatch, this, &ColorPicker::removePatch); + connect(gradientEdit->Properties(), &ColorPickerGradientProperties::snapToMGrid, this, &ColorPicker::snapToMGrid); + // Hatch + connect(hatchEdit, &ColorPickerHatch::hatchChanged, this, &ColorPicker::updateHatch); + connect(hatchEdit, &ColorPickerHatch::sizeChanged, this, &ColorPicker::updateSize); + // Pattern + connect(patternEdit, &ColorPickerPattern::patternChanged, this, &ColorPicker::updatePattern); + connect(patternEdit, &ColorPickerPattern::sizeChanged, this, &ColorPicker::updateSize); + +} + +/* ********************************************************************************* * + * + * Members + * + * ********************************************************************************* */ + +void ColorPicker::setGeneralData(CPGeneralData data) +{ + m_generalData = data; + + QSignalBlocker sigOverprint(comboOverprint); + comboOverprint->setCurrentIndex(m_generalData.overprint ? 1 : 0); +} + +CPGeneralData ColorPicker::generalData() +{ + return m_generalData; +} + +void ColorPicker::setColorData(CPColorData data) +{ + QSignalBlocker sig(colorEdit); + colorEdit->setColorData(data); +} + +CPColorData ColorPicker::colorData() const +{ + return colorEdit->colorData(); +} + +void ColorPicker::setGradientData(CPGradientData data) +{ + QSignalBlocker sig(gradientEdit); + gradientEdit->setGradientData(data); + +} + +CPGradientData ColorPicker::gradientData() const +{ + return gradientEdit->gradientData(); +} + +void ColorPicker::setGradientVectorData(CPGradientVectorData data) +{ + QSignalBlocker sig(gradientEdit); + gradientEdit->setGradientVectorData(data); +} + +CPGradientVectorData ColorPicker::gradientVectorData() const +{ + return gradientEdit->gradientVectorData(); +} + +void ColorPicker::setGradientMeshData(CPColorData data) +{ + QSignalBlocker sig(gradientEdit); + gradientEdit->setGradientMeshData(data); +} + +CPColorData ColorPicker::gradientMeshData() +{ + return gradientEdit->gradientMeshData(); +} + +void ColorPicker::setPatternData(CPPatternData data) +{ + QSignalBlocker sig(patternEdit); + patternEdit->setPatternData(data); +} + +CPPatternData ColorPicker::patternData() const +{ + return patternEdit->patternData(); +} + +void ColorPicker::setHatchData(CPHatchData data) +{ + QSignalBlocker sig(hatchEdit); + hatchEdit->setHatchData(data); +} + +CPHatchData ColorPicker::hatchData() const +{ + return hatchEdit->hatchData(); +} + +void ColorPicker::setColorButton(ColorButton *button) +{ + if (m_colorButton != button) + gradientEdit->disableGradientEditProperties(); + + m_colorButton = button; + + if (m_colorButton) + m_colorButton->installEventFilter(this); +} + +ColorButton *ColorPicker::colorButton() +{ + return m_colorButton; +} + +QString ColorPicker::toolTipText() const +{ + switch(m_mode) + { + default: + case Mode::Solid: + return colorEdit->toolTipText(); + break; + case Mode::Gradient: + return gradientEdit->toolTipText(); + break; + case Mode::Hatch: + return hatchEdit->toolTipText(); + break; + case Mode::Pattern: + return patternEdit->toolTipText(); + break; + } + + return QString(); +} + +void ColorPicker::setColorList(const ColorList &list) +{ + colorList = list; + + if (checkboxUsedColors->isChecked() && m_doc != nullptr) + m_doc->getUsedColors(colorList); + + colorEdit->setColorList(colorList, true); + gradientEdit->setColorList(colorList); + hatchEdit->setColorList(colorList); +} + +void ColorPicker::setGradientList(const GradientList &list) +{ + gradientEdit->setGradientList(list); +} + +void ColorPicker::setPatternList(QHash<QString, ScPattern> *docPatterns) +{ + patternEdit->setPatternList(docPatterns); +} + +PageItem *ColorPicker::currentItemFromSelection() +{ + PageItem *currentItem = nullptr; + if (m_doc) + currentItem = m_doc->m_Selection->itemAt(0); + + return currentItem; +} + +bool ColorPicker::eventFilter(QObject *object, QEvent *event) +{ + ColorButton *colButton = qobject_cast<ColorButton*>(object); + if (!colButton) + return false; + + if (colButton == m_colorButton) + { + switch(event->type()) + { + case QEvent::EnabledChange: + case QEvent::Hide: + case QEvent::Close: + gradientEdit->disableGradientEditProperties(); + closeParent(); + return true; + break; + default: + return false; + } + } + + return false; +} + +void ColorPicker::initContextMenu() +{ + IconManager &iconManager = IconManager::instance(); + + QVBoxLayout *layoutMenu = new QVBoxLayout(); + layoutMenu->addWidget(comboOverprint); + layoutMenu->addWidget(checkboxUsedColors); + + QWidget *menu = new QWidget(); + menu->setLayout(layoutMenu); + menu->adjustSize(); + + contextMenu = new PopupMenu(menu); + buttonMenu->setMenu(contextMenu); + buttonMenu->setPopupMode(QToolButton::InstantPopup); + buttonMenu->setIcon(iconManager.loadIcon("context-menu")); +} + +Context ColorPicker::context() +{ + return m_context; +} + +void ColorPicker::setContext(Context config) +{ + if (m_context == config) + return; + + m_context = config; + + setUpdatesEnabled(false); + + colorEdit->setContext(m_context); + gradientEdit->setContext(m_context); + hatchEdit->setContext(m_context); + patternEdit->setContext(m_context); + + switch(m_context) + { + default: + case Context::Simple: + case Context::LineMask: + buttonSolid->setVisible(false); + buttonGradient->setVisible(false); + buttonHatch->setVisible(false); + buttonPattern->setVisible(false); + buttonMenu->setVisible(false); + // menu + checkboxUsedColors->setVisible(false); + comboOverprint->setVisible(false); + break; + case Context::DropShadow: + buttonSolid->setVisible(false); + buttonGradient->setVisible(false); + buttonHatch->setVisible(false); + buttonPattern->setVisible(false); + buttonMenu->setVisible(true); + // menu + checkboxUsedColors->setVisible(true); + comboOverprint->setVisible(false); + break; + case Context::Fill: + buttonSolid->setVisible(true); + buttonGradient->setVisible(true); + buttonHatch->setVisible(true); + buttonPattern->setVisible(true); + buttonMenu->setVisible(true); + // menu + checkboxUsedColors->setVisible(true); + comboOverprint->setVisible(true); + break; + case Context::FillMask: + buttonSolid->setVisible(true); + buttonGradient->setVisible(true); + buttonHatch->setVisible(false); + buttonPattern->setVisible(true); + buttonMenu->setVisible(true); + // menu + checkboxUsedColors->setVisible(true); + comboOverprint->setVisible(false); + break; + case Context::Line: + buttonSolid->setVisible(true); + buttonGradient->setVisible(true); + buttonHatch->setVisible(false); + buttonPattern->setVisible(true); + buttonMenu->setVisible(true); + // menu + checkboxUsedColors->setVisible(true); + comboOverprint->setVisible(true); + break; + } + + setUpdatesEnabled(true); + + updateSize(); +} + +Mode ColorPicker::mode() +{ + return m_mode; +} + +bool ColorPicker::gradientEditPropertiesEnabled() +{ + return gradientEdit->gradientEditPropertiesEnabled() && gradientEdit->isVisible(); +} + +void ColorPicker::setGradientEditPropertiesEnabled(bool enabled) +{ + gradientEdit->setGradientEditPropertiesEnabled(enabled); +} + +GradientEdit ColorPicker::gradientEditMode() +{ + return gradientEdit->gradientEditMode(); +} + +int ColorPicker::type() +{ + return m_type; +} + +void ColorPicker::setType(int type) +{ + m_type = type; +} + +/* ********************************************************************************* * + * + * Methods + * + * ********************************************************************************* */ + +void ColorPicker::loadLists() +{ + if (!m_doc) + return; + + // colors + setColorList(m_doc->PageColors); + + // gradients + GradientList lGradient; + lGradient.addGradients(m_doc->docGradients); + setGradientList(lGradient); + + // patterns + setPatternList(&m_doc->docPatterns); + +} + + +void ColorPicker::unsetDoc() +{ + if (m_doc) + { + disconnect(m_doc->m_Selection, SIGNAL(selectionChanged()), this, SLOT(handleSelectionChanged())); + disconnect(m_doc, SIGNAL(docChanged()), this, SLOT(handleSelectionChanged())); + } + + setDoc(nullptr); +} + +void ColorPicker::updateUiByMode(Mode mode) +{ + if (m_mode == mode) + return; + + m_mode = mode; + + switch(m_mode) + { + case Mode::Solid: + buttonSolid->setChecked(true); + stack->setCurrentWidget(colorEdit); + comboType->setVisible(false); + + break; + case Mode::Gradient: + buttonGradient->setChecked(true); + stack->setCurrentWidget(gradientEdit); + comboType->setVisible(true); + + break; + case Mode::Hatch: + buttonHatch->setChecked(true); + stack->setCurrentWidget(hatchEdit); + comboType->setVisible(false); + + break; + case Mode::Pattern: + buttonPattern->setChecked(true); + stack->setCurrentWidget(patternEdit); + comboType->setVisible(false); + + break; + } + +} + +void ColorPicker::updateUiByType(int type) +{ + setType(type); + + // set UI mode + if (m_context == Context::FillMask) + { + switch(type) + { + case GradMask_None: + updateUiByMode(Mode::Solid); + break; + case GradMask_Linear: + case GradMask_LinearLumAlpha: + case GradMask_Radial: + case GradMask_RadialLumAlpha: + updateUiByMode(Mode::Gradient); + break; + case GradMask_Pattern: + case GradMask_PatternInverted: + case GradMask_PatternLumAlpha: + case GradMask_PatternLumAlphaInverted: + updateUiByMode(Mode::Pattern); + break; + } + } + else + { + switch(type) + { + case Gradient_None: + updateUiByMode(Mode::Solid); + break; + case Gradient_Linear: + case Gradient_Conical: + case Gradient_Radial: + case Gradient_Diamond: + case Gradient_4Colors: + case Gradient_Mesh: + case Gradient_PatchMesh: + updateUiByMode(Mode::Gradient); + break; + case Gradient_Pattern: + updateUiByMode(Mode::Pattern); + break; + case Gradient_Hatch: + updateUiByMode(Mode::Hatch); + break; + } + } +} + +void ColorPicker::updatePreview() +{ + buttonPreview->setToolTip(toolTipText()); + buttonPreview->setContext(context()); + buttonPreview->setDoc(m_doc); + buttonPreview->setType(type()); + buttonPreview->setColorData(colorData()); + buttonPreview->setGradientData(gradientData()); + buttonPreview->setHatchData(hatchData()); + buttonPreview->setPatternData(patternData()); + buttonPreview->updatePreview(); +} + +void ColorPicker::hideEditedPatterns(QStringList names) +{ + patternEdit->hideEditedPatterns(names); +} + +void ColorPicker::enablePatterns() +{ + bool enable = false; + + if (m_doc) + enable = !m_doc->docPatterns.empty(); + + buttonPattern->setEnabled(enable); + + if (!enable && (mode() == Mode::Pattern)) + updateUiByMode(Mode::Solid); + +} + +void ColorPicker::closeParent() +{ + QWidget *widget = static_cast<QWidget*>(parent()); + + if (widget) + widget->close(); +} + + +/* ********************************************************************************* * + * + * Slots + * + * ********************************************************************************* */ + +void ColorPicker::setDoc(ScribusDoc *doc) +{ + if (m_doc) + { + disconnect(m_doc->m_Selection, SIGNAL(selectionChanged()), this, SLOT(handleSelectionChanged())); + disconnect(m_doc , SIGNAL(docChanged()) , this, SLOT(handleSelectionChanged())); + disconnect(m_doc->scMW() , SIGNAL(UpdateRequest(int)), this, SLOT(handleUpdateRequest(int))); + } + + m_doc = doc; + colorEdit->setDoc(m_doc); + gradientEdit->setDoc(m_doc); + hatchEdit->setDoc(m_doc); + patternEdit->setDoc(m_doc); + + if (m_doc) + { + loadLists(); + enablePatterns(); + + // Connect automatic selection handling only if the context handles the items within the color picker + if ( (context() == Context::Fill) || (context() == Context::FillMask) || (context() == Context::Line) || (context() == Context::LineMask)) + { + connect(m_doc->m_Selection, SIGNAL(selectionChanged()), this, SLOT(handleSelectionChanged())); + connect(m_doc , SIGNAL(docChanged()) , this, SLOT(handleSelectionChanged())); + connect(m_doc->scMW() , SIGNAL(UpdateRequest(int)), this, SLOT(handleUpdateRequest(int))); + } + + } +} + +void ColorPicker::languageChange() +{ + colorEdit->languageChange(); + gradientEdit->languageChange(); + hatchEdit->languageChange(); + patternEdit->languageChange(); + + int oldOverPrintComboIndex = comboOverprint->currentIndex(); + QSignalBlocker sigOverPrint(comboOverprint); + comboOverprint->clear(); + comboOverprint->addItem( tr("Knockout") ); + comboOverprint->addItem( tr("Overprint") ); + comboOverprint->setCurrentIndex(oldOverPrintComboIndex); + + checkboxUsedColors->setText( tr("Display only used colors") ); + +} + +void ColorPicker::iconSetChange() +{ + IconManager &iconManager = IconManager::instance(); + + buttonSolid->setIcon( iconManager.loadIcon("colorpicker-solid")); + buttonGradient->setIcon( iconManager.loadIcon("colorpicker-gradient")); + buttonHatch->setIcon( iconManager.loadIcon("colorpicker-hatch")); + buttonPattern->setIcon( iconManager.loadIcon("colorpicker-pattern")); +} + +void ColorPicker::unitChange() +{ + hatchEdit->unitChange(); + patternEdit->unitChange(); +} + +void ColorPicker::parentClosed() +{ + gradientEdit->disableGradientEditProperties(); +} + +void ColorPicker::endPatchAdd() +{ + gradientEdit->Properties()->endPAddButton(); +} + +void ColorPicker::enableButtonRemovePatch(bool enable) +{ + gradientEdit->Properties()->changebuttonRemovePatch(enable); +} + +void ColorPicker::enableMeshColor(bool enable) +{ + gradientEdit->enableMeshColor(enable); +} + +void ColorPicker::toggleColorLists() +{ + if (m_doc) + loadLists(); + + emit colorListChanged(); +} + +void ColorPicker::updateColor() +{ + setType(colorEdit->type()); + updatePreview(); + emit changed(); + emit colorChanged(); +} + +void ColorPicker::updateGradient() +{ + setType(gradientEdit->type()); + updatePreview(); + emit changed(); + emit gradientChanged(); +} + +void ColorPicker::updateGradientVector() +{ + setType(gradientEdit->type()); + emit gradientVectorChanged(); +} + +void ColorPicker::updateGradientMesh() +{ + setType(gradientEdit->type()); + emit gradientMeshChanged(); +} + +void ColorPicker::updateHatch() +{ + setType(hatchEdit->type()); + updatePreview(); + emit changed(); + emit hatchChanged(); +} + +void ColorPicker::updatePattern() +{ + setType(patternEdit->type()); + updatePreview(); + emit changed(); + emit patternChanged(); +} + +void ColorPicker::updateSize() +{ + setUpdatesEnabled(false); + + stack->adjustSize(); + adjustSize(); + + QWidget *parentWidget = qobject_cast<QWidget*>(parent()); + if (parentWidget) + parentWidget->adjustSize(); + + setUpdatesEnabled(true); + + emit sizeChanged(); +} + +void ColorPicker::updateOverPrint(int val) +{ + if (!m_doc) + return; + + bool setter = (val == 0) ? false : true; + m_generalData.overprint = val; + m_doc->itemSelection_SetOverprint(setter); +} + +void ColorPicker::changedTab() +{ + Mode fillMode = static_cast<Mode>(buttonGroup->checkedId()); + updateUiByMode(fillMode); + + switch(fillMode) + { + case Mode::Solid: + updateColor(); + gradientEdit->disableGradientEditProperties(); + break; + case Mode::Gradient: + updateGradient(); + updateGradientMesh(); + gradientEdit->handleGradientEditProperties(); + break; + case Mode::Hatch: + updateHatch(); + gradientEdit->disableGradientEditProperties(); + break; + case Mode::Pattern: + updatePattern(); + gradientEdit->disableGradientEditProperties(); + break; + } + +} + +void ColorPicker::handleSelectionChanged() +{ + if (m_doc) + enablePatterns(); +} + +void ColorPicker::handleUpdateRequest(int updateFlags) +{ + if (updateFlags & reqColorsUpdate) + loadLists(); +} + +/* ********************************************************************************* * + * + * Events + * + * ********************************************************************************* */ + +void ColorPicker::changeEvent(QEvent *e) +{ + if (e->type() == QEvent::LanguageChange) + languageChange(); + + QWidget::changeEvent(e); +} Index: scribus/ui/colorpicker/colorpicker.h =================================================================== --- scribus/ui/colorpicker/colorpicker.h (nicht existent) +++ scribus/ui/colorpicker/colorpicker.h (Arbeitskopie) @@ -0,0 +1,143 @@ +#ifndef COLORPICKER_H +#define COLORPICKER_H + +#include "ui_colorpicker.h" +#include <QWidget> +#include "sccolor.h" +#include "scribusdoc.h" +#include "colorpicker_enum.h" + +class UndoManager; +class PopupMenu; +class ColorButton; + +class ColorPicker : public QWidget, Ui::ColorPicker +{ + Q_OBJECT + +public: + + explicit ColorPicker(Context context = Context::Simple, QWidget *parent = nullptr); + ~ColorPicker() {}; + + void setGeneralData(CPGeneralData data); + CPGeneralData generalData(); + void setColorData(CPColorData data); + CPColorData colorData() const; + void setGradientData(CPGradientData data); + CPGradientData gradientData() const; + void setGradientVectorData(CPGradientVectorData data); + CPGradientVectorData gradientVectorData() const; + void setGradientMeshData(CPColorData data); + CPColorData gradientMeshData(); + void setPatternData(CPPatternData data); + CPPatternData patternData() const; + void setHatchData(CPHatchData data); + CPHatchData hatchData() const; + + void setColorButton(ColorButton *button); + ColorButton *colorButton(); + + QString toolTipText() const; + + Context context(); + void setContext(Context config); + + void setColorList(const ColorList& list); + + Mode mode(); + + bool gradientEditPropertiesEnabled(); + void setGradientEditPropertiesEnabled(bool enabled); + GradientEdit gradientEditMode(); + + int type(); + + void updateUiByType(int type); + void updatePreview(); + + void hideEditedPatterns(QStringList names); + + void loadLists(); + void unsetDoc(); + +public slots: + + void setDoc(ScribusDoc *doc); + void languageChange(); + void iconSetChange(); + void unitChange(); + void parentClosed(); + void endPatchAdd(); + void enableButtonRemovePatch(bool enable); + void enableMeshColor(bool enable); + +private slots: + void toggleColorLists(); + + void updateColor(); + void updateGradient(); + void updateGradientVector(); + void updateGradientMesh(); + void updateHatch(); + void updatePattern(); + void updateSize(); + void updateOverPrint(int val); + + void changedTab(); + + void handleSelectionChanged(); + void handleUpdateRequest(int updateFlags); + +private: + ColorButton * m_colorButton; + QPointer<ScribusDoc> m_doc; + Context m_context {Context::Simple}; + Mode m_mode {Mode::Solid}; + QButtonGroup *buttonGroup; + int m_type; + QComboBox *comboOverprint; + QCheckBox *checkboxUsedColors; + PopupMenu *contextMenu; + ColorList colorList; + CPGeneralData m_generalData; + + PageItem * currentItemFromSelection(); + + bool eventFilter(QObject *object, QEvent *event); + void initContextMenu(); + void setGradientList(const GradientList& list); + void setPatternList(QHash<QString, ScPattern> *docPatterns); + void setType(int type); + void updateUiByMode(Mode mode); + void enablePatterns(); + void closeParent(); + +protected: + void changeEvent(QEvent *e); + +signals: + void changed(); + void sizeChanged(); + void colorChanged(); + void gradientChanged(); + void gradientVectorChanged(); + void gradientVectorEditMode(GradientEdit); + void gradientVectorEdit(bool); + void gradientMeshChanged(); + void hatchChanged(); + void patternChanged(); + void colorListChanged(); + + // Gradient Properties + void createNewMesh(); + void resetMesh(); + void meshToShape(); + void reset1Control(); + void resetAllControl(); + void removePatch(); + void snapToMGrid(bool); + +}; + +#endif // COLORPICKER_H Index: scribus/ui/colorpicker/colorpicker.ui =================================================================== --- scribus/ui/colorpicker/colorpicker.ui (nicht existent) +++ scribus/ui/colorpicker/colorpicker.ui (Arbeitskopie) @@ -0,0 +1,245 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>ColorPicker</class> + <widget class="QWidget" name="ColorPicker"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>360</width> + <height>189</height> + </rect> + </property> + <property name="minimumSize"> + <size> + <width>360</width> + <height>0</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>360</width> + <height>16777215</height> + </size> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>0</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <layout class="QHBoxLayout" name="layoutButtons"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>4</number> + </property> + <property name="topMargin"> + <number>4</number> + </property> + <property name="rightMargin"> + <number>4</number> + </property> + <property name="bottomMargin"> + <number>4</number> + </property> + <item> + <widget class="QToolButton" name="buttonSolid"> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="checked"> + <bool>true</bool> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="buttonGradient"> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="buttonHatch"> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="buttonPattern"> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <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> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>8</number> + </property> + <property name="topMargin"> + <number>8</number> + </property> + <property name="rightMargin"> + <number>8</number> + </property> + <property name="bottomMargin"> + <number>8</number> + </property> + <item> + <widget class="ColorButton" name="buttonPreview"> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_3"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>8</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QComboBox" name="comboType"/> + </item> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QToolButton" name="buttonMenu"> + <property name="text"> + <string/> + </property> + <property name="popupMode"> + <enum>QToolButton::InstantPopup</enum> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="StackedContainer" name="stack"> + <widget class="ColorPickerColor" name="colorEdit"/> + <widget class="ColorPickerGradient" name="gradientEdit"/> + <widget class="ColorPickerHatch" name="hatchEdit"/> + <widget class="ColorPickerPattern" name="patternEdit"/> + </widget> + </item> + </layout> + </widget> + <customwidgets> + <customwidget> + <class>ColorButton</class> + <extends>QToolButton</extends> + <header>ui/widgets/color_button.h</header> + </customwidget> + <customwidget> + <class>StackedContainer</class> + <extends>QStackedWidget</extends> + <header>ui/widgets/stacked_container.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>ColorPickerColor</class> + <extends>QWidget</extends> + <header>ui/colorpicker/colorpicker_color.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>ColorPickerGradient</class> + <extends>QWidget</extends> + <header>ui/colorpicker/colorpicker_gradient.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>ColorPickerHatch</class> + <extends>QWidget</extends> + <header>ui/colorpicker/colorpicker_hatch.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>ColorPickerPattern</class> + <extends>QWidget</extends> + <header>ui/colorpicker/colorpicker_pattern.h</header> + <container>1</container> + </customwidget> + </customwidgets> + <resources/> + <connections/> +</ui> Index: scribus/ui/colorpicker/colorpicker_color.cpp =================================================================== --- scribus/ui/colorpicker/colorpicker_color.cpp (nicht existent) +++ scribus/ui/colorpicker/colorpicker_color.cpp (Arbeitskopie) @@ -0,0 +1,190 @@ +#include "colorpicker_color.h" + +/* ********************************************************************************* * + * + * Constructor + Setup + * + * ********************************************************************************* */ + +ColorPickerColor::ColorPickerColor(QWidget *parent) : QWidget(parent) +{ + setupUi(this); + + languageChange(); + + connectSlots(); + connect(sectionSwatches, &SectionContainer::sizeChanged, this, &ColorPickerColor::updateSize); +} + +void ColorPickerColor::connectSlots() +{ + connect(swatches, &ColorPickerColorSwatches::colorChanged, this, &ColorPickerColor::updateColorFromSwatches); + connect(numberShade, &ScrSpinBox::valueChanged, this, &ColorPickerColor::updateColorShade); + connect(numberAlpha, &ScrSpinBox::valueChanged, this, &ColorPickerColor::updateColorAlpha); +} + +void ColorPickerColor::disconnectSlots() +{ + disconnect(swatches, &ColorPickerColorSwatches::colorChanged, this, &ColorPickerColor::updateColorFromSwatches); + disconnect(numberShade, &ScrSpinBox::valueChanged, this, &ColorPickerColor::updateColorShade); + disconnect(numberAlpha, &ScrSpinBox::valueChanged, this, &ColorPickerColor::updateColorAlpha); +} + +/* ********************************************************************************* * + * + * Members + * + * ********************************************************************************* */ + +CPColorData ColorPickerColor::colorData() const +{ + return m_color; +} + +void ColorPickerColor::setColorList(const ColorList &list, bool insertNone) +{ + QSignalBlocker sigSwatches(swatches); + swatches->setColors(list, insertNone); +} + +Context ColorPickerColor::context() +{ + return m_context; +} + +void ColorPickerColor::setContext(Context config) +{ + m_context = config; + isMask = false; + + switch(m_context) + { + default: + case Context::Simple: + sectionSwatches->setVisible(true); + numberShade->setVisible(false); + labelShade->setVisible(false); + numberAlpha->setVisible(false); + labelAlpha->setVisible(false); + break; + case Context::Fill: + sectionSwatches->setVisible(true); + numberShade->setVisible(true); + labelShade->setVisible(true); + numberAlpha->setVisible(false); + labelAlpha->setVisible(false); + break; + case Context::Line: + sectionSwatches->setVisible(true); + numberShade->setVisible(true); + labelShade->setVisible(true); + numberAlpha->setVisible(false); + labelAlpha->setVisible(false); + break; + case Context::FillMask: + case Context::LineMask: + sectionSwatches->setVisible(false); + numberShade->setVisible(false); + labelShade->setVisible(false); + numberAlpha->setVisible(true); + labelAlpha->setVisible(true); + isMask = true; + break; + case Context::DropShadow: + sectionSwatches->setVisible(true); + numberShade->setVisible(true); + labelShade->setVisible(true); + numberAlpha->setVisible(false); + labelAlpha->setVisible(false); + break; + } + + updateSize(); +} + +QString ColorPickerColor::toolTipText() const +{ + int op = 100 - m_color.Opacity * 100.0; + int sh = m_color.Shade; + + if(isMask) + return QString( tr("Opacity: %1 %").arg(op) ); + else + { + QString name = m_color.Name.isEmpty() ? CommonStrings::tr_None : m_color.Name; + QString shade = sh < 100 ? QString(", Shade: %1 %").arg(sh) : ""; + QString opacity = op < 100 ? QString(", Opacity: %1 %").arg(op) : ""; + return QString( tr("Color: %1%2%3").arg(name).arg(shade).arg(opacity) ); + } +} + +/* ********************************************************************************* * + * + * Slots + * + * ********************************************************************************* */ + +void ColorPickerColor::setDoc(ScribusDoc *doc) +{ + m_doc = doc; +} + +void ColorPickerColor::setColorData(CPColorData color) +{ + m_color = color; + + // update UI + controls + QSignalBlocker sigSwatches(swatches); + swatches->setCurrentColor(m_color.Name); + + QSignalBlocker sigShade(numberShade); + numberShade->setValue(m_color.Shade); + numberShade->setEnabled(m_color.Name != CommonStrings::tr_NoneColor); + + QSignalBlocker sigAlpha(numberAlpha); + numberAlpha->setValue(qRound(100 - (m_color.Opacity * 100))); + numberAlpha->setEnabled(m_color.Name != CommonStrings::tr_NoneColor); + +} + +void ColorPickerColor::languageChange() +{ + sectionSwatches->setText( tr("Color Swatches")); +} + +void ColorPickerColor::updateColorFromSwatches() +{ + m_color.Name = swatches->currentColor(); + numberShade->setEnabled(m_color.Name != CommonStrings::tr_NoneColor); + numberAlpha->setEnabled(m_color.Name != CommonStrings::tr_NoneColor); + + updateColor(); +} + +void ColorPickerColor::updateColorShade() +{ + m_color.Shade = numberShade->value(); + updateColor(); +} + +void ColorPickerColor::updateColorAlpha() +{ + m_color.Opacity = (100 - numberAlpha->value()) / 100.0; + updateColor(); +} + +void ColorPickerColor::updateColor() +{ + // setColorData(m_color); + emit colorChanged(); +} + +void ColorPickerColor::updateSize() +{ + int w = this->width(); + adjustSize(); + resize(w, sizeHint().height()); + emit sizeChanged(); +} + + Index: scribus/ui/colorpicker/colorpicker_color.h =================================================================== --- scribus/ui/colorpicker/colorpicker_color.h (nicht existent) +++ scribus/ui/colorpicker/colorpicker_color.h (Arbeitskopie) @@ -0,0 +1,54 @@ +#ifndef COLORPICKER_COLOR_H +#define COLORPICKER_COLOR_H + +#include <QWidget> +#include "ui_colorpicker_color.h" +#include "scribusdoc.h" +#include "colorpicker_enum.h" + +class ColorPickerColor : public QWidget, Ui::ColorPickerColor +{ + Q_OBJECT + +public: + explicit ColorPickerColor(QWidget *parent = nullptr); + ~ColorPickerColor() {}; + + CPColorData colorData() const; + void setColorList(const ColorList& list, bool insertNone = true); + + Context context(); + void setContext(Context config); + + int type() { return Gradient_None; }; + + QString toolTipText() const; + +public slots: + void setDoc(ScribusDoc *doc); + void setColorData(CPColorData color); + void languageChange(); + +private slots: + void updateColorFromSwatches(); + void updateColorShade(); + void updateColorAlpha(); + void updateColor(); + void updateSize(); + +private: + ScribusDoc *m_doc {nullptr}; + CPColorData m_color; + Context m_context {Context::Simple}; + bool isMask {false}; + + void connectSlots(); + void disconnectSlots(); + +signals: + void colorChanged(); + void sizeChanged(); + +}; + +#endif // COLORPICKER_COLOR_H Index: scribus/ui/colorpicker/colorpicker_color.ui =================================================================== --- scribus/ui/colorpicker/colorpicker_color.ui (nicht existent) +++ scribus/ui/colorpicker/colorpicker_color.ui (Arbeitskopie) @@ -0,0 +1,146 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>ColorPickerColor</class> + <widget class="QWidget" name="ColorPickerColor"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>300</width> + <height>122</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>0</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <layout class="QGridLayout" name="gridLayout"> + <property name="leftMargin"> + <number>8</number> + </property> + <property name="topMargin"> + <number>4</number> + </property> + <property name="rightMargin"> + <number>8</number> + </property> + <property name="bottomMargin"> + <number>4</number> + </property> + <property name="spacing"> + <number>4</number> + </property> + <item row="1" column="2"> + <widget class="ScrSpinBox" name="numberAlpha"> + <property name="suffix"> + <string> %</string> + </property> + <property name="maximum"> + <double>100.000000000000000</double> + </property> + <property name="singleStep"> + <double>10.000000000000000</double> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QLabel" name="labelAlpha"> + <property name="text"> + <string>Opacity:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLabel" name="labelShade"> + <property name="text"> + <string>Shade:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + </item> + <item row="0" column="2"> + <widget class="ScrSpinBox" name="numberShade"> + <property name="suffix"> + <string> %</string> + </property> + <property name="maximum"> + <double>100.000000000000000</double> + </property> + <property name="singleStep"> + <double>10.000000000000000</double> + </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> + <widget class="SectionContainer" name="sectionSwatches"> + <property name="title" stdset="0"> + <string>Color Swatches</string> + </property> + <widget class="ColorPickerColorSwatches" name="swatches"/> + </widget> + </item> + </layout> + </widget> + <customwidgets> + <customwidget> + <class>SectionContainer</class> + <extends>QWidget</extends> + <header>ui/widgets/section_container.h</header> + <addpagemethod>setWidget</addpagemethod> + <container>1</container> + </customwidget> + <customwidget> + <class>ScrSpinBox</class> + <extends>QDoubleSpinBox</extends> + <header location="global">ui/scrspinbox.h</header> + </customwidget> + <customwidget> + <class>ColorPickerColorSwatches</class> + <extends>QWidget</extends> + <header>ui/colorpicker/colorpicker_color_swatches.h</header> + <container>1</container> + </customwidget> + </customwidgets> + <tabstops> + <tabstop>numberShade</tabstop> + <tabstop>numberAlpha</tabstop> + </tabstops> + <resources/> + <connections/> +</ui> Index: scribus/ui/colorpicker/colorpicker_color_swatches.cpp =================================================================== --- scribus/ui/colorpicker/colorpicker_color_swatches.cpp (nicht existent) +++ scribus/ui/colorpicker/colorpicker_color_swatches.cpp (Arbeitskopie) @@ -0,0 +1,41 @@ +#include "colorpicker_color_swatches.h" + +ColorPickerColorSwatches::ColorPickerColorSwatches(QWidget *parent) : QWidget(parent) +{ + setupUi(this); + + listSwatches->setPixmapType(ColorListBox::fancyPixmap); + + connect(listSwatches, &ColorListBox::currentTextChanged, this, &ColorPickerColorSwatches::setColorFromWidget); +} + +QString ColorPickerColorSwatches::currentColor() const +{ + return listSwatches->currentColor(); +} + +void ColorPickerColorSwatches::setColors(const ColorList &list, bool insertNone) +{ + ColorListModel* clm = qobject_cast<ColorListModel*>(listSwatches->model()); + if (!clm) + return; + + clm->setColorList(list, insertNone); +} + +void ColorPickerColorSwatches::setCurrentColor(QString colorName) +{ + if (colorName == CommonStrings::tr_NoneColor || colorName == CommonStrings::None) + colorName = CommonStrings::tr_NoneColor; + + // update color list + QSignalBlocker sig(listSwatches); + listSwatches->setCurrentColor(colorName); + +} + +void ColorPickerColorSwatches::setColorFromWidget(QString colorName) +{ + emit colorChanged(); +} + Index: scribus/ui/colorpicker/colorpicker_color_swatches.h =================================================================== --- scribus/ui/colorpicker/colorpicker_color_swatches.h (nicht existent) +++ scribus/ui/colorpicker/colorpicker_color_swatches.h (Arbeitskopie) @@ -0,0 +1,34 @@ +#ifndef COLORPICKER_COLOR_SWATCHES_H +#define COLORPICKER_COLOR_SWATCHES_H + +#include "ui_colorpicker_color_swatches.h" +#include <QWidget> +#include "sccolor.h" + +class ColorPickerColorSwatches : public QWidget, Ui::ColorPickerColorSwatches +{ + Q_OBJECT + +public: + + explicit ColorPickerColorSwatches(QWidget *parent = nullptr); + ~ColorPickerColorSwatches() {}; + + QString currentColor() const; + void setColors(const ColorList& list, bool insertNone = true); + +public slots: + void setCurrentColor(QString colorName); + +private slots: + void setColorFromWidget(QString colorName); + +private: + +signals: + void colorChanged(); + +}; + +#endif // COLORPICKER_COLOR_SWATCHES_H + Index: scribus/ui/colorpicker/colorpicker_color_swatches.ui =================================================================== --- scribus/ui/colorpicker/colorpicker_color_swatches.ui (nicht existent) +++ scribus/ui/colorpicker/colorpicker_color_swatches.ui (Arbeitskopie) @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>ColorPickerColorSwatches</class> + <widget class="QWidget" name="ColorPickerColorSwatches"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>311</width> + <height>300</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>0</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ColorListBox" name="listSwatches"/> + </item> + </layout> + </widget> + <customwidgets> + <customwidget> + <class>ColorListBox</class> + <extends>QListView</extends> + <header>ui/colorlistbox.h</header> + </customwidget> + </customwidgets> + <resources/> + <connections/> +</ui> Index: scribus/ui/colorpicker/colorpicker_enum.h =================================================================== --- scribus/ui/colorpicker/colorpicker_enum.h (nicht existent) +++ scribus/ui/colorpicker/colorpicker_enum.h (Arbeitskopie) @@ -0,0 +1,116 @@ +#ifndef COLORPICKER_ENUM_H +#define COLORPICKER_ENUM_H + +#include <QString> +#include "vgradient.h" +#include "commonstrings.h" + +enum class Context +{ + Simple = 0, + Fill = 1, + FillMask = 2, + Line = 3, + LineMask = 4, + Text = 5, + TextOutline = 6, + TextBackground = 7, + DropShadow = 8, + TableCellFill = 9, + TableCellStroke = 10 +}; + +enum class Mode +{ + Solid = 0, + Gradient = 1, + Hatch = 2, + Pattern = 3 +}; + +struct CPGeneralData +{ + int overprint = 0; +}; + +struct CPHatchData +{ + QString ColorForeground = CommonStrings::tr_NoneColor; + QString ColorBackground = CommonStrings::tr_NoneColor; + bool HasBackgroundColor = false; + double Angle = 0.0; + double Distance = 1.0; + int Type = 0; +}; + +struct CPGradientData +{ + VGradient Gradient; + QString Name = ""; + int Type = 0; + VGradient::VGradientRepeatMethod repeatMethod = VGradient::pad; + // Four Colors + QString Color1Name = CommonStrings::tr_NoneColor; + QString Color2Name = CommonStrings::tr_NoneColor; + QString Color3Name = CommonStrings::tr_NoneColor; + QString Color4Name = CommonStrings::tr_NoneColor; + double Color1Shade = 100.0; + double Color2Shade = 100.0; + double Color3Shade = 100.0; + double Color4Shade = 100.0; + double Color1Alpha = 1.0; + double Color2Alpha = 1.0; + double Color3Alpha = 1.0; + double Color4Alpha = 1.0; +}; + +struct CPGradientVectorData +{ + // Regular Gradient Vector + double StartX; + double EndX; + double StartY; + double EndY; + double Skew; + double Scale; + double FocalX; + double FocalY; + // Control Points for Four Colors & Diamond + double C1X; + double C1Y; + double C2X; + double C2Y; + double C3X; + double C3Y; + double C4X; + double C4Y; + double C5X; + double C5Y; + +}; + +struct CPColorData +{ + QString Name = CommonStrings::tr_NoneColor; + double Opacity = 1.0; + double Shade = 100.0; +}; + +struct CPPatternData +{ + QString Name = ""; + double OffsetX = 0.0; + double OffsetY = 0.0; + double ScaleX = 1.0; + double ScaleY = 1.0; + double SkewX = 0.0; + double SkewY = 0.0; + double Angle = 0.0; + double Spacing = 1.0; + bool MirrorX = false; + bool MirrorY = false; + bool OnPath = false; +}; + + +#endif // COLORPICKER_ENUM_H Index: scribus/ui/colorpicker/colorpicker_gradient.cpp =================================================================== --- scribus/ui/colorpicker/colorpicker_gradient.cpp (nicht existent) +++ scribus/ui/colorpicker/colorpicker_gradient.cpp (Arbeitskopie) @@ -0,0 +1,780 @@ +#include "colorpicker_gradient.h" + +#include "util_gui.h" +#include "ui/gradienteditor.h" +#include "scribus.h" +#include "scribusview.h" +#include "selection.h" + +/* ********************************************************************************* * + * + * Constructor + Setup + * + * ********************************************************************************* */ + +ColorPickerGradient::ColorPickerGradient(QWidget *parent) : + QWidget(parent) +{ + setupUi(this); + + sectionVector->collapse(); + + listColor1Swatches = new ColorListBox(ColorListBox::fancyPixmap); + listColor2Swatches = new ColorListBox(ColorListBox::fancyPixmap); + listColor3Swatches = new ColorListBox(ColorListBox::fancyPixmap); + listColor4Swatches = new ColorListBox(ColorListBox::fancyPixmap); + listColorMesh = new ColorListBox(ColorListBox::fancyPixmap); + + buttonColor1->setContextWidget(listColor1Swatches); + buttonColor2->setContextWidget(listColor2Swatches); + buttonColor3->setContextWidget(listColor3Swatches); + buttonColor4->setContextWidget(listColor4Swatches); + buttonColorMesh->setContextWidget(listColorMesh); + + numberColor1Alpha->setDecimals(0); + numberColor2Alpha->setDecimals(0); + numberColor3Alpha->setDecimals(0); + numberColor4Alpha->setDecimals(0); + numberColorMeshAlpha->setDecimals(0); + numberColor1Shade->setDecimals(0); + numberColor2Shade->setDecimals(0); + numberColor3Shade->setDecimals(0); + numberColor4Shade->setDecimals(0); + numberColorMeshShade->setDecimals(0); + + gradientSelector = new QComboBox(); // dummy selector + + languageChange(); + connectSlots(); + + connect(properties, &ColorPickerGradientProperties::currentChanged, this, &ColorPickerGradient::updateSize); + connect(stackGradientPicker, &StackedContainer::currentChanged, this, &ColorPickerGradient::updateSize); + connect(sectionGradient, &SectionContainer::sizeChanged, this, &ColorPickerGradient::updateSize); + connect(sectionSwatches, &SectionContainer::sizeChanged, this, &ColorPickerGradient::updateSize); + connect(sectionVector, &SectionContainer::sizeChanged, this, &ColorPickerGradient::updateSize); +} + +void ColorPickerGradient::connectSlots() +{ + connect(sectionVector, &SectionContainer::collapsedStateChanged, this, &ColorPickerGradient::handleGradientEditProperties); + connect(swatches, &ColorPickerGradientSwatches::gradientChanged, this, &ColorPickerGradient::updateGradientFromSwatches); + connect(gradientSelector, &QComboBox::currentIndexChanged, this, &ColorPickerGradient::updateGradientTypeFromSelector); + connect(checkboxLumAlpha, &QCheckBox::stateChanged, this, &ColorPickerGradient::gradientChanged); + connect(gradientEditor, &GradientEditor::gradientChanged, this, &ColorPickerGradient::updateGradientFromEditor); + connect(gradientEditor, &GradientEditor::repeatMethodChanged, this, &ColorPickerGradient::updateRepeatMethod); + connect(properties, &ColorPickerGradientProperties::gradientVectorChanged, this, &ColorPickerGradient::gradientVectorChanged); + connect(properties, &ColorPickerGradientProperties::gradientEditMode, this, &ColorPickerGradient::setGradientEditMode); + + connect(numberColor1Alpha, &ScrSpinBox::valueChanged, this, &ColorPickerGradient::updateFourColors); + connect(numberColor2Alpha, &ScrSpinBox::valueChanged, this, &ColorPickerGradient::updateFourColors); + connect(numberColor3Alpha, &ScrSpinBox::valueChanged, this, &ColorPickerGradient::updateFourColors); + connect(numberColor4Alpha, &ScrSpinBox::valueChanged, this, &ColorPickerGradient::updateFourColors); + connect(numberColor1Shade, &ScrSpinBox::valueChanged, this, &ColorPickerGradient::updateFourColors); + connect(numberColor2Shade, &ScrSpinBox::valueChanged, this, &ColorPickerGradient::updateFourColors); + connect(numberColor3Shade, &ScrSpinBox::valueChanged, this, &ColorPickerGradient::updateFourColors); + connect(numberColor4Shade, &ScrSpinBox::valueChanged, this, &ColorPickerGradient::updateFourColors); + connect(listColor1Swatches, &ColorListBox::itemSelectionChanged, this, &ColorPickerGradient::updateFourColors); + connect(listColor2Swatches, &ColorListBox::itemSelectionChanged, this, &ColorPickerGradient::updateFourColors); + connect(listColor3Swatches, &ColorListBox::itemSelectionChanged, this, &ColorPickerGradient::updateFourColors); + connect(listColor4Swatches, &ColorListBox::itemSelectionChanged, this, &ColorPickerGradient::updateFourColors); + + connect(numberColorMeshAlpha, &ScrSpinBox::valueChanged, this, &ColorPickerGradient::updateMeshColor); + connect(numberColorMeshShade, &ScrSpinBox::valueChanged, this, &ColorPickerGradient::updateMeshColor); + connect(listColorMesh, &ColorListBox::itemSelectionChanged, this, &ColorPickerGradient::updateMeshColor); +} + +void ColorPickerGradient::disconnectSlots() +{ + disconnect(sectionVector, &SectionContainer::collapsedStateChanged, this, &ColorPickerGradient::handleGradientEditProperties); + disconnect(swatches, &ColorPickerGradientSwatches::gradientChanged, this, &ColorPickerGradient::updateGradientFromSwatches); + disconnect(gradientSelector, &QComboBox::currentIndexChanged, this, &ColorPickerGradient::updateGradientTypeFromSelector); + disconnect(checkboxLumAlpha, &QCheckBox::stateChanged, this, &ColorPickerGradient::gradientChanged); + disconnect(gradientEditor, &GradientEditor::gradientChanged, this, &ColorPickerGradient::updateGradientFromEditor); + disconnect(gradientEditor, &GradientEditor::repeatMethodChanged, this, &ColorPickerGradient::updateRepeatMethod); + disconnect(properties, &ColorPickerGradientProperties::gradientVectorChanged, this, &ColorPickerGradient::gradientVectorChanged); + disconnect(properties, &ColorPickerGradientProperties::gradientEditMode, this, &ColorPickerGradient::setGradientEditMode); + + disconnect(numberColor1Alpha, &ScrSpinBox::valueChanged, this, &ColorPickerGradient::updateFourColors); + disconnect(numberColor2Alpha, &ScrSpinBox::valueChanged, this, &ColorPickerGradient::updateFourColors); + disconnect(numberColor3Alpha, &ScrSpinBox::valueChanged, this, &ColorPickerGradient::updateFourColors); + disconnect(numberColor4Alpha, &ScrSpinBox::valueChanged, this, &ColorPickerGradient::updateFourColors); + disconnect(numberColor1Shade, &ScrSpinBox::valueChanged, this, &ColorPickerGradient::updateFourColors); + disconnect(numberColor2Shade, &ScrSpinBox::valueChanged, this, &ColorPickerGradient::updateFourColors); + disconnect(numberColor3Shade, &ScrSpinBox::valueChanged, this, &ColorPickerGradient::updateFourColors); + disconnect(numberColor4Shade, &ScrSpinBox::valueChanged, this, &ColorPickerGradient::updateFourColors); + disconnect(listColor1Swatches, &ColorListBox::itemSelectionChanged, this, &ColorPickerGradient::updateFourColors); + disconnect(listColor2Swatches, &ColorListBox::itemSelectionChanged, this, &ColorPickerGradient::updateFourColors); + disconnect(listColor3Swatches, &ColorListBox::itemSelectionChanged, this, &ColorPickerGradient::updateFourColors); + disconnect(listColor4Swatches, &ColorListBox::itemSelectionChanged, this, &ColorPickerGradient::updateFourColors); + + disconnect(numberColorMeshAlpha, &ScrSpinBox::valueChanged, this, &ColorPickerGradient::updateMeshColor); + disconnect(numberColorMeshShade, &ScrSpinBox::valueChanged, this, &ColorPickerGradient::updateMeshColor); + disconnect(listColorMesh, &ColorListBox::itemSelectionChanged, this, &ColorPickerGradient::updateMeshColor); +} + +/* ********************************************************************************* * + * + * Members + * + * ********************************************************************************* */ + +void ColorPickerGradient::setGradientList(const GradientList &list) +{ + swatches->setGradients(list, true); +} + +void ColorPickerGradient::setColorList(const ColorList &list) +{ + QSignalBlocker sig1(gradientEditor); + QSignalBlocker sig2(listColor1Swatches); + QSignalBlocker sig3(listColor2Swatches); + QSignalBlocker sig4(listColor3Swatches); + QSignalBlocker sig5(listColor4Swatches); + QSignalBlocker sig6(listColorMesh); + + colList = list; + gradientEditor->setColors(colList); + listColor1Swatches->setColors(colList, true); + listColor2Swatches->setColors(colList, true); + listColor3Swatches->setColors(colList, true); + listColor4Swatches->setColors(colList, true); + listColorMesh->setColors(colList, true); +} + +Context ColorPickerGradient::context() +{ + return m_context; +} + +void ColorPickerGradient::setContext(Context config) +{ + m_context = config; + + disconnectSlots(); + + // reset controls + gradientSelector->clear(); + + switch(m_context){ + case Context::Line: + gradientSelector->addItem(tr("Linear"), Gradient_Linear); + gradientSelector->addItem(tr("Radial"), Gradient_Radial); + gradientSelector->setCurrentIndex(0); + checkboxLumAlpha->setVisible(false); + gradientEditor->setExtendVisible(true); + break; + case Context::FillMask: + gradientSelector->addItem(tr("Linear"), Gradient_Linear); + gradientSelector->addItem(tr("Radial"), Gradient_Radial); + gradientSelector->setCurrentIndex(0); + checkboxLumAlpha->setVisible(true); + gradientEditor->setExtendVisible(false); + break; + case Context::Fill: + gradientSelector->addItem(tr("Linear"), Gradient_Linear); + gradientSelector->addItem(tr("Radial"), Gradient_Radial); + gradientSelector->addItem(tr("Conical"), Gradient_Conical); + gradientSelector->addItem(tr("Diamond"), Gradient_Diamond); + gradientSelector->addItem(tr("4 Colors"), Gradient_4Colors); + gradientSelector->addItem(tr("Mesh"), Gradient_Mesh); + gradientSelector->addItem(tr("Patch Mesh"), Gradient_PatchMesh); + gradientSelector->setCurrentIndex(0); + checkboxLumAlpha->setVisible(false); + gradientEditor->setExtendVisible(true); + break; + default: + case Context::Simple: + break; + } + + connectSlots(); + + updateSize(); +} + +void ColorPickerGradient::setSelector(QComboBox *selector) +{ + disconnect(gradientSelector, &QComboBox::currentIndexChanged, this, &ColorPickerGradient::updateGradientTypeFromSelector); + gradientSelector = selector; + connect(gradientSelector, &QComboBox::currentIndexChanged, this, &ColorPickerGradient::updateGradientTypeFromSelector); +} + +void ColorPickerGradient::setGradientData(CPGradientData gradient) +{ + m_gradient = gradient; + + // update UI + controls + setCurrentGradientType(gradient.Type); + setCurrentGradientName(gradient.Name); + setCurrentGradient(gradient.Gradient); + setCurrentFourColors( + gradient.Color1Name, gradient.Color2Name, gradient.Color3Name, gradient.Color4Name, + gradient.Color1Shade, gradient.Color2Shade, gradient.Color3Shade, gradient.Color4Shade, + gradient.Color1Alpha, gradient.Color2Alpha, gradient.Color3Alpha, gradient.Color4Alpha + ); + setCurrentRepeatMethod(gradient.repeatMethod); + +} + + +CPGradientData ColorPickerGradient::gradientData() +{ + return m_gradient; +} + +void ColorPickerGradient::setGradientVectorData(CPGradientVectorData data) +{ + QSignalBlocker sig(properties); + properties->setGradientVectorData(data); + // properties->setConfig(type(), isMask()); + +} + +CPGradientVectorData ColorPickerGradient::gradientVectorData() +{ + return properties->gradientVectorData(); +} + +void ColorPickerGradient::setGradientMeshData(CPColorData data) +{ + m_gradientMesh = data; + setCurrentMeshPoint(m_gradientMesh.Name, m_gradientMesh.Shade, m_gradientMesh.Opacity); +} + +CPColorData ColorPickerGradient::gradientMeshData() +{ + return m_gradientMesh; +} + +int ColorPickerGradient::type() +{ + int index = qvariant_cast<int>(gradientSelector->currentData().toInt()); + + if (isMask()) + { + switch(index) + { + case Gradient_Linear: + if(checkboxLumAlpha->isChecked()) + index = GradMask_LinearLumAlpha; + else + index = GradMask_Linear; + break; + case Gradient_Radial: + if(checkboxLumAlpha->isChecked()) + index = GradMask_RadialLumAlpha; + else + index = GradMask_Radial; + break; + } + } + + return index; +} + +GradientEdit ColorPickerGradient::gradientEditMode() +{ + int etype = type(); + GradientEdit m_gradType; + + if (isMask()) + { + switch(etype) + { + default: + case GradMask_Linear: + case GradMask_LinearLumAlpha: + case GradMask_Radial: + case GradMask_RadialLumAlpha: + m_gradType = GradientEdit::Gradient_Mask; + break; + } + } + else if (m_context == Context::Line) + m_gradType = GradientEdit::Gradient_Stroke; + else + { + switch(etype) + { + default: + case Gradient_Linear: + case Gradient_Radial: + case Gradient_Conical: + m_gradType = GradientEdit::Gradient; + break; + case Gradient_4Colors: + m_gradType = GradientEdit::FourColors; + break; + case Gradient_Diamond: + m_gradType = GradientEdit::Diamond; + break; + case Gradient_Mesh: + case Gradient_PatchMesh: + m_gradType = m_gradientMeshEdit; + break; + } + } + + return m_gradType; +} + +void ColorPickerGradient::setGradientEditMode(GradientEdit mode) +{ + m_gradientMeshEdit = mode; + + handleGradientEditProperties(); +} + +void ColorPickerGradient::setGradientEditPropertiesEnabled(bool enabled) +{ + QSignalBlocker sig(sectionVector); + sectionVector->setIsCollapsed(!enabled); + // handleGradientEditProperties(); // break m_ScMW->view->requestMode(); + updateSize(); +} + +bool ColorPickerGradient::gradientEditPropertiesEnabled() +{ + return !sectionVector->isCollapsed(); +} + +QString ColorPickerGradient::toolTipText() const +{ + QString name = m_gradient.Name.isEmpty() ? CommonStrings::trCustom : m_gradient.Name; + return QString( tr("Gradient: %1") ).arg(name); +} + +void ColorPickerGradient::disableGradientEditProperties() +{ + if (gradientEditPropertiesEnabled()) + { + setGradientEditPropertiesEnabled(false); + handleGradientEditProperties(); + } + +} + +void ColorPickerGradient::setDoc(ScribusDoc *doc) +{ + m_doc = doc; + unitChange(); +} + +/* ********************************************************************************* * + * + * Slots + * + * ********************************************************************************* */ + +void ColorPickerGradient::languageChange() +{ + sectionVector->setText( tr("Vector")); + sectionGradient->setText( tr("Gradient")); + sectionSwatches->setText( tr("Gradient Swatches")); + + retranslateUi(this); + +} + +void ColorPickerGradient::unitChange() +{ + if (!m_doc) + return; + + currentUnit = m_doc->unitIndex(); + properties->unitChange(currentUnit); +} + +void ColorPickerGradient::updateGradientFromSwatches(QString name, VGradient gradient) +{ + // use local gradient if gradient name is "custom" + if(name.isEmpty()) + gradient = this->gradientData().Gradient; + + gradientEditor->setGradientEditable(name.isEmpty()); + + m_gradient.Gradient = gradient; + m_gradient.Name = name; + updateGradient(); +} + +void ColorPickerGradient::updateGradientFromEditor() +{ + m_gradient.Gradient = gradientEditor->gradient(); + m_gradient.Name = ""; + updateGradient(); +} + +void ColorPickerGradient::updateGradientTypeFromSelector() +{ + VGradient::VGradientType gradType = VGradient::linear; + + switch(type()) + { + default: + case Gradient_Linear: + gradType = VGradient::linear; + break; + case Gradient_Radial: + gradType = VGradient::radial; + break; + case Gradient_Diamond: + gradType = VGradient::diamond; + break; + case Gradient_4Colors: + gradType = VGradient::fourcolor; + break; + case Gradient_Mesh: + gradType = VGradient::mesh; + break; + case Gradient_Conical: + case Gradient_PatchMesh: + gradType = VGradient::freemesh; + break; + } + + int gtype = type(); + + m_gradient.Gradient.setType(gradType); + m_gradient.Type = gtype; + + updateUI(); + updateGradient(); + + emit properties->gradientEditMode(properties->gradientEditType()); + +} + +void ColorPickerGradient::updateFourColors() +{ + QString color1 = listColor1Swatches->currentColor(); + if (color1 == CommonStrings::tr_NoneColor) + color1 = CommonStrings::None; + QString color2 = listColor2Swatches->currentColor(); + if (color2 == CommonStrings::tr_NoneColor) + color2 = CommonStrings::None; + QString color3 = listColor3Swatches->currentColor(); + if (color3 == CommonStrings::tr_NoneColor) + color3 = CommonStrings::None; + QString color4 = listColor4Swatches->currentColor(); + if (color4 == CommonStrings::tr_NoneColor) + color4 = CommonStrings::None; + + m_gradient.Color1Name = color1; + m_gradient.Color2Name = color2; + m_gradient.Color3Name = color3; + m_gradient.Color4Name = color4; + m_gradient.Color1Alpha = numberColor1Alpha->value() / 100.0; + m_gradient.Color2Alpha = numberColor2Alpha->value() / 100.0; + m_gradient.Color3Alpha = numberColor3Alpha->value() / 100.0; + m_gradient.Color4Alpha = numberColor4Alpha->value() / 100.0; + m_gradient.Color1Shade = numberColor1Shade->value(); + m_gradient.Color2Shade = numberColor2Shade->value(); + m_gradient.Color3Shade = numberColor3Shade->value(); + m_gradient.Color4Shade = numberColor4Shade->value(); + + // render color buttons + buttonColor1->setBackground(colorBrush(buttonColor1->backgroundDotSize(), m_gradient.Color1Name, m_gradient.Color1Shade, m_gradient.Color1Alpha)); + buttonColor1->setToolTip(m_gradient.Color1Name); + buttonColor2->setBackground(colorBrush(buttonColor2->backgroundDotSize(), m_gradient.Color2Name, m_gradient.Color2Shade, m_gradient.Color2Alpha)); + buttonColor2->setToolTip(m_gradient.Color2Name); + buttonColor3->setBackground(colorBrush(buttonColor3->backgroundDotSize(), m_gradient.Color3Name, m_gradient.Color3Shade, m_gradient.Color3Alpha)); + buttonColor3->setToolTip(m_gradient.Color3Name); + buttonColor4->setBackground(colorBrush(buttonColor4->backgroundDotSize(), m_gradient.Color4Name, m_gradient.Color4Shade, m_gradient.Color4Alpha)); + buttonColor4->setToolTip(m_gradient.Color4Name); + + updateGradient(); +} + +void ColorPickerGradient::updateMeshColor() +{ + QString colorMesh = listColorMesh->currentColor(); + if (colorMesh == CommonStrings::tr_NoneColor) + colorMesh = CommonStrings::None; + + m_gradientMesh.Name = colorMesh; + m_gradientMesh.Shade = numberColorMeshShade->value(); + m_gradientMesh.Opacity = numberColorMeshAlpha->value() / 100.0; + + // render color button + buttonColorMesh->setBackground(colorBrush(buttonColorMesh->backgroundDotSize(), m_gradientMesh.Name, m_gradientMesh.Shade, m_gradientMesh.Opacity)); + buttonColorMesh->setToolTip(m_gradientMesh.Name); + + if (gradientEditPropertiesEnabled() && (type() == Gradient_PatchMesh || type() == Gradient_Mesh)) + updateGradientMesh(); +} + +void ColorPickerGradient::updateRepeatMethod() +{ + m_gradient.repeatMethod = gradientEditor->repeatMethod(); + updateGradient(); +} + +void ColorPickerGradient::updateSize() +{ + int w = this->width(); + adjustSize(); + resize(w, sizeHint().height()); + emit sizeChanged(); +} + +void ColorPickerGradient::handleGradientEditProperties() +{ + if (!m_doc) + return; + + ScribusMainWindow *m_ScMW = m_doc->scMW(); + if (!m_ScMW || !m_ScMW->view) + return; + + GradientEdit type = gradientEditMode(); + bool editingOn = gradientEditPropertiesEnabled(); + + m_ScMW->view->editStrokeGradient = type; + + // Reference: void PropertiesPalette::toggleGradientEdit(int stroke) + + if (editingOn) + { + if ((type == GradientEdit::Mesh_Point) /*|| (type == GradientEdit::Mesh_Color)*/ || (type == GradientEdit::Mesh_ControlPoints)) + m_ScMW->view->requestMode(modeEditMeshGradient); + else if (/*(type == GradientEdit::PatchMesh_Color) ||*/ (type == GradientEdit::PatchMesh_Point) || (type == GradientEdit::PatchMesh_ControlPoints) || (type == GradientEdit::PatchMesh_Polygon)) + m_ScMW->view->requestMode(modeEditMeshPatch); + else + m_ScMW->view->requestMode(modeEditGradientVectors); + } + else + m_ScMW->view->requestMode(modeNormal); + + PageItem *currentItem = m_doc->m_Selection->itemAt(0); + + if (currentItem) + { + m_ScMW->view->RefreshGradient(currentItem); + + if ( (type == GradientEdit::Mesh_Point || type == GradientEdit::PatchMesh_Point) && (currentItem->selectedMeshPointX > -1) && (currentItem->selectedMeshPointY > -1)) + enableMeshColor(true); + else + enableMeshColor(false); + } +} + +/* ********************************************************************************* * + * + * Methods + * + * ********************************************************************************* */ + +void ColorPickerGradient::setCurrentGradientType(int type) +{ + if (isMask()) + { + QSignalBlocker sigLumAlpha(checkboxLumAlpha); + + switch(type) + { + default: + case GradMask_Linear: + type = Gradient_Linear; + checkboxLumAlpha->setChecked(false); + break; + case GradMask_LinearLumAlpha: + type = Gradient_Linear; + checkboxLumAlpha->setChecked(true); + break; + case GradMask_Radial: + type = Gradient_Radial; + checkboxLumAlpha->setChecked(false); + break; + case GradMask_RadialLumAlpha: + type = Gradient_Radial; + checkboxLumAlpha->setChecked(true); + break; + } + } + + QSignalBlocker sigType(gradientSelector); + + int index = gradientSelector->findData(type); + if ( index != -1 ) + gradientSelector->setCurrentIndex(index); + else + gradientSelector->setCurrentIndex(0); + + updateUI(); +} + +void ColorPickerGradient::setCurrentGradientName(QString name) +{ + QSignalBlocker sigGradientEditor(gradientEditor); + gradientEditor->setGradientEditable(name.isEmpty()); + + QSignalBlocker sigSwatches(swatches); + swatches->setCurrentGradient(name); +} + +void ColorPickerGradient::setCurrentGradient(VGradient gradient) +{ + QSignalBlocker sigGradientEditor(gradientEditor); + gradientEditor->setGradient(gradient); +} + +void ColorPickerGradient::setCurrentFourColors(QString color1, QString color2, QString color3, QString color4, double color1Shade, double color2Shade, double color3Shade, double color4Shade, double color1Alpha, double color2Alpha, double color3Alpha, double color4Alpha) +{ + + QSignalBlocker sigColor1Alpha(numberColor1Alpha); + QSignalBlocker sigColor2Alpha(numberColor2Alpha); + QSignalBlocker sigColor3Alpha(numberColor3Alpha); + QSignalBlocker sigColor4Alpha(numberColor4Alpha); + numberColor1Alpha->setValue(color1Alpha * 100.0); + numberColor2Alpha->setValue(color2Alpha * 100.0); + numberColor3Alpha->setValue(color3Alpha * 100.0); + numberColor4Alpha->setValue(color4Alpha * 100.0); + m_gradient.Color1Alpha = color1Alpha; + m_gradient.Color2Alpha = color2Alpha; + m_gradient.Color3Alpha = color3Alpha; + m_gradient.Color4Alpha = color4Alpha; + + QSignalBlocker sigColor1Shade(numberColor1Shade); + QSignalBlocker sigColor2Shade(numberColor2Shade); + QSignalBlocker sigColor3Shade(numberColor3Shade); + QSignalBlocker sigColor4Shade(numberColor4Shade); + numberColor1Shade->setValue(color1Shade); + numberColor2Shade->setValue(color2Shade); + numberColor3Shade->setValue(color3Shade); + numberColor4Shade->setValue(color4Shade); + m_gradient.Color1Shade = color1Shade; + m_gradient.Color2Shade = color2Shade; + m_gradient.Color3Shade = color3Shade; + m_gradient.Color4Shade = color4Shade; + + QSignalBlocker sigListColor1(listColor1Swatches); + QSignalBlocker sigListColor2(listColor2Swatches); + QSignalBlocker sigListColor3(listColor3Swatches); + QSignalBlocker sigListColor4(listColor4Swatches); + listColor1Swatches->setCurrentColor(color1); + listColor2Swatches->setCurrentColor(color2); + listColor3Swatches->setCurrentColor(color3); + listColor4Swatches->setCurrentColor(color4); + m_gradient.Color1Name = color1; + m_gradient.Color2Name = color2; + m_gradient.Color3Name = color3; + m_gradient.Color4Name = color4; + + QSignalBlocker sigButtonColor1(buttonColor1); + QSignalBlocker sigButtonColor2(buttonColor2); + QSignalBlocker sigButtonColor3(buttonColor3); + QSignalBlocker sigButtonColor4(buttonColor4); + buttonColor1->setBackground(colorBrush(buttonColor1->backgroundDotSize(), color1, m_gradient.Color1Shade, m_gradient.Color1Alpha)); + buttonColor1->setToolTip(color1); + buttonColor2->setBackground(colorBrush(buttonColor2->backgroundDotSize(), color2, m_gradient.Color2Shade, m_gradient.Color2Alpha)); + buttonColor2->setToolTip(color2); + buttonColor3->setBackground(colorBrush(buttonColor3->backgroundDotSize(), color3, m_gradient.Color3Shade, m_gradient.Color3Alpha)); + buttonColor3->setToolTip(color3); + buttonColor4->setBackground(colorBrush(buttonColor4->backgroundDotSize(), color4, m_gradient.Color4Shade, m_gradient.Color4Alpha)); + buttonColor4->setToolTip(color4); + +} + +void ColorPickerGradient::setCurrentMeshPoint(QString colorName, double shade, double alpha) +{ + + QSignalBlocker sigMeshListColor(listColorMesh); + listColorMesh->setCurrentColor(colorName); + m_gradientMesh.Name = colorName; + + QSignalBlocker sigMeshShade(numberColorMeshShade); + numberColorMeshShade->setValue(shade); + m_gradientMesh.Shade = shade; + + QSignalBlocker sigMeshAlpha(numberColorMeshAlpha); + numberColorMeshAlpha->setValue(alpha * 100); + m_gradientMesh.Opacity = alpha; + + QSignalBlocker sigMeshColor(buttonColorMesh); + buttonColorMesh->setBackground(colorBrush(buttonColorMesh->backgroundDotSize(), m_gradientMesh.Name, m_gradientMesh.Shade, m_gradientMesh.Opacity)); + buttonColorMesh->setToolTip(m_gradientMesh.Name); +} + +void ColorPickerGradient::setCurrentRepeatMethod(VGradient::VGradientRepeatMethod method) +{ + gradientEditor->setRepeatMethod(method); +} + +QBrush ColorPickerGradient::colorBrush(QSize size, QString colorName, double shade, double opacity) +{ + if (!m_doc || colorName == CommonStrings::tr_NoneColor || colorName == CommonStrings::None) + return renderEmptyPattern(size); + else + { + ScColor sColor(0, 0, 0); + + shade = qBound(0.0, shade, 100.0); + opacity = qBound(0.0, opacity, 1.0); + + if(m_doc->PageColors.contains(colorName)) + sColor = m_doc->PageColors.value(colorName); + + QColor qColorShade = ScColorEngine::getDisplayColor(sColor, m_doc, shade); + QColor qColor = ScColorEngine::getDisplayColor(sColor, m_doc, 100.0); + + return renderColor(size, qColor, qColorShade, opacity); + } +} + +void ColorPickerGradient::updateGradient() +{ + m_gradient.Type = type(); + setGradientData(m_gradient); + emit gradientChanged(); +} + +void ColorPickerGradient::updateGradientMesh() +{ + setGradientMeshData(m_gradientMesh); + emit gradientMeshChanged(); +} + +void ColorPickerGradient::updateUI() +{ + int gtype = type(); + + properties->setConfig(gtype, isMask()); + + switch(gtype) + { + default: + case Gradient_Conical: + case Gradient_Linear: + case Gradient_Radial: + case Gradient_Diamond: + stackGradientPicker->setCurrentWidget(pageNormal); + sectionSwatches->setVisible(true); + break; + case Gradient_Mesh: + case Gradient_PatchMesh: + stackGradientPicker->setCurrentWidget(pageMesh); + sectionSwatches->setVisible(false); + break; + case Gradient_4Colors: + stackGradientPicker->setCurrentWidget(pageFourColors); + sectionSwatches->setVisible(false); + break; + } + + updateSize(); + +} + +void ColorPickerGradient::enableMeshColor(bool enable) +{ + buttonColorMesh->setEnabled(enable); + numberColorMeshShade->setEnabled(enable); + numberColorMeshAlpha->setEnabled(enable); +} + +bool ColorPickerGradient::isMask() +{ + return (m_context == Context::FillMask || m_context == Context::LineMask); +} + Index: scribus/ui/colorpicker/colorpicker_gradient.h =================================================================== --- scribus/ui/colorpicker/colorpicker_gradient.h (nicht existent) +++ scribus/ui/colorpicker/colorpicker_gradient.h (Arbeitskopie) @@ -0,0 +1,112 @@ +#ifndef COLORPICKER_GRADIENT_H +#define COLORPICKER_GRADIENT_H + +#include "ui_colorpicker_gradient.h" +#include <QWidget> +#include <QComboBox> +#include "scribusdoc.h" +#include "colorpicker_enum.h" + +class ColorPickerGradient : public QWidget, Ui::ColorPickerGradient +{ + Q_OBJECT + +public: + explicit ColorPickerGradient(QWidget *parent = nullptr); + ~ColorPickerGradient() {}; + + void setGradientList(const GradientList& list); + void setColorList(const ColorList& list); + + Context context(); + void setContext(Context config); + + void setSelector(QComboBox *selector); + + void setGradientData(CPGradientData gradient); + CPGradientData gradientData(); + + void setGradientVectorData(CPGradientVectorData data); + CPGradientVectorData gradientVectorData(); + + void setGradientMeshData(CPColorData data); + CPColorData gradientMeshData(); + + int type(); + + GradientEdit gradientEditMode(); + void setGradientEditMode(GradientEdit mode); + + void setGradientEditPropertiesEnabled(bool enabled); + bool gradientEditPropertiesEnabled(); + + QString toolTipText() const; + + ColorPickerGradientProperties *Properties() { return properties; }; + ColorPickerGradientSwatches * Swatches() { return swatches; }; + + void disableGradientEditProperties(); + void enableMeshColor(bool enable); + +public slots: + void setDoc(ScribusDoc *doc); + void languageChange(); + void unitChange(); + + void handleGradientEditProperties(); + +private slots: + void updateGradientFromSwatches(QString name, VGradient gradient); + void updateGradientFromEditor(); + void updateGradientTypeFromSelector(); + void updateFourColors(); + void updateMeshColor(); + void updateRepeatMethod(); + void updateSize(); + +private: + void updateGradient(); + void updateGradientMesh(); + void updateUI(); + + ScribusDoc *m_doc {nullptr}; + CPGradientData m_gradient; + CPColorData m_gradientMesh; + Context m_context {Context::Simple}; + ColorListBox *listColor1Swatches; + ColorListBox *listColor2Swatches; + ColorListBox *listColor3Swatches; + ColorListBox *listColor4Swatches; + ColorListBox *listColorMesh; + int currentUnit {0}; +// int m_uiState {-1}; + ColorList colList; + QComboBox *gradientSelector; + GradientEdit m_gradientMeshEdit; + + bool isMask(); + + void connectSlots(); + void disconnectSlots(); + + void setCurrentGradientType(int type); + void setCurrentGradientName(QString name); + void setCurrentGradient(VGradient gradient); + void setCurrentFourColors(QString color1, QString color2, QString color3, QString color4, + double color1Shade, double color2Shade, double color3Shade, double color4Shade, + double color1Alpha, double color2Alpha, double color3Alpha, double color4Alpha + ); + void setCurrentMeshPoint(QString colorName, double shade, double alpha); + void setCurrentRepeatMethod(VGradient::VGradientRepeatMethod method); + QBrush colorBrush(QSize size, QString colorName, double shade, double opacity); + +signals: + void gradientChanged(); + void gradientVectorChanged(); + void gradientMeshChanged(); + void gradientVectorEditMode(); + void sizeChanged(); + +}; + +#endif // COLORPICKER_GRADIENT_H Index: scribus/ui/colorpicker/colorpicker_gradient.ui =================================================================== --- scribus/ui/colorpicker/colorpicker_gradient.ui (nicht existent) +++ scribus/ui/colorpicker/colorpicker_gradient.ui (Arbeitskopie) @@ -0,0 +1,997 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>ColorPickerGradient</class> + <widget class="QWidget" name="ColorPickerGradient"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>276</width> + <height>378</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>0</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="SectionContainer" name="sectionVector"> + <property name="title" stdset="0"> + <string>Vector</string> + </property> + <property name="isCollapsed"> + <bool>true</bool> + </property> + <property name="hasStyle"> + <bool>true</bool> + </property> + <widget class="ColorPickerGradientProperties" name="properties"/> + </widget> + </item> + <item> + <widget class="SectionContainer" name="sectionGradient"> + <property name="title" stdset="0"> + <string>Gradient</string> + </property> + <widget class="StackedContainer" name="stackGradientPicker"> + <property name="currentIndex"> + <number>2</number> + </property> + <widget class="QWidget" name="pageNormal"> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <property name="spacing"> + <number>0</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>8</number> + </property> + <item> + <widget class="GradientEditor" name="gradientEditor"> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + </widget> + </item> + <item> + <spacer name="verticalSpacer_2"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <widget class="QWidget" name="pageMesh"> + <layout class="QGridLayout" name="gridLayout_2"> + <property name="leftMargin"> + <number>8</number> + </property> + <property name="topMargin"> + <number>8</number> + </property> + <property name="rightMargin"> + <number>8</number> + </property> + <property name="bottomMargin"> + <number>8</number> + </property> + <property name="spacing"> + <number>4</number> + </property> + <item row="1" column="0"> + <spacer name="verticalSpacer_3"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + <item row="0" column="0"> + <layout class="QHBoxLayout" name="horizontalLayout_17"> + <property name="spacing"> + <number>4</number> + </property> + <item> + <widget class="FormWidget" name="formWidget_13"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Color</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_18"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ColorButton" name="buttonColorMesh"> + <property name="text"> + <string/> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="FormWidget" name="formWidget_14"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Shade</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_19"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QDoubleSpinBox" name="numberColorMeshShade"/> + </item> + </layout> + </widget> + </item> + <item> + <widget class="FormWidget" name="formWidget_15"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Opacity</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_20"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QDoubleSpinBox" name="numberColorMeshAlpha"/> + </item> + </layout> + </widget> + </item> + </layout> + </item> + <item row="0" column="3"> + <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> + </widget> + <widget class="QWidget" name="pageFourColors"> + <layout class="QGridLayout" name="gridLayout"> + <property name="leftMargin"> + <number>8</number> + </property> + <property name="topMargin"> + <number>8</number> + </property> + <property name="rightMargin"> + <number>8</number> + </property> + <property name="bottomMargin"> + <number>8</number> + </property> + <property name="horizontalSpacing"> + <number>16</number> + </property> + <property name="verticalSpacing"> + <number>4</number> + </property> + <item row="2" column="6"> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + <item row="2" column="0"> + <layout class="QHBoxLayout" name="horizontalLayout_10"> + <property name="spacing"> + <number>4</number> + </property> + <item> + <widget class="FormWidget" name="formWidget_3"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Color</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ColorButton" name="buttonColor3"> + <property name="text"> + <string/> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="FormWidget" name="formWidget_6"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Shade</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_6"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="numberColor3Shade"> + <property name="suffix"> + <string> %</string> + </property> + <property name="maximum"> + <double>100.000000000000000</double> + </property> + <property name="singleStep"> + <double>10.000000000000000</double> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="FormWidget" name="formWidget_10"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Opacity</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_14"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="numberColor3Alpha"> + <property name="suffix"> + <string> %</string> + </property> + <property name="maximum"> + <double>100.000000000000000</double> + </property> + <property name="singleStep"> + <double>10.000000000000000</double> + </property> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </item> + <item row="1" column="0"> + <layout class="QHBoxLayout" name="horizontalLayout_11"> + <property name="spacing"> + <number>4</number> + </property> + <item> + <widget class="FormWidget" name="formWidget_2"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Color</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ColorButton" name="buttonColor2"> + <property name="text"> + <string/> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="FormWidget" name="formWidget_8"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Shade</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_8"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="numberColor2Shade"> + <property name="suffix"> + <string> %</string> + </property> + <property name="maximum"> + <double>100.000000000000000</double> + </property> + <property name="singleStep"> + <double>10.000000000000000</double> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="FormWidget" name="formWidget_12"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Opacity</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_16"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="numberColor2Alpha"> + <property name="suffix"> + <string> %</string> + </property> + <property name="maximum"> + <double>100.000000000000000</double> + </property> + <property name="singleStep"> + <double>10.000000000000000</double> + </property> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </item> + <item row="0" column="0"> + <layout class="QHBoxLayout" name="horizontalLayout_9"> + <property name="spacing"> + <number>4</number> + </property> + <item> + <widget class="FormWidget" name="formWidget"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Color</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ColorButton" name="buttonColor1"> + <property name="text"> + <string/> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="FormWidget" name="formWidget_5"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Shade</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="numberColor1Shade"> + <property name="suffix"> + <string> %</string> + </property> + <property name="maximum"> + <double>100.000000000000000</double> + </property> + <property name="singleStep"> + <double>10.000000000000000</double> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="FormWidget" name="formWidget_9"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Opacity</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_13"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="numberColor1Alpha"> + <property name="suffix"> + <string> %</string> + </property> + <property name="maximum"> + <double>100.000000000000000</double> + </property> + <property name="singleStep"> + <double>10.000000000000000</double> + </property> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </item> + <item row="5" column="0"> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + <item row="4" column="0"> + <layout class="QHBoxLayout" name="horizontalLayout_12"> + <property name="spacing"> + <number>4</number> + </property> + <item> + <widget class="FormWidget" name="formWidget_4"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Color</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_5"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ColorButton" name="buttonColor4"> + <property name="text"> + <string/> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="FormWidget" name="formWidget_7"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Shade</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_7"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="numberColor4Shade"> + <property name="suffix"> + <string> %</string> + </property> + <property name="maximum"> + <double>100.000000000000000</double> + </property> + <property name="singleStep"> + <double>10.000000000000000</double> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="FormWidget" name="formWidget_11"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Opacity</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_15"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="numberColor4Alpha"> + <property name="suffix"> + <string> %</string> + </property> + <property name="maximum"> + <double>100.000000000000000</double> + </property> + <property name="singleStep"> + <double>10.000000000000000</double> + </property> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + </widget> + </widget> + </item> + <item> + <widget class="SectionContainer" name="sectionSwatches"> + <property name="title" stdset="0"> + <string>Gradient Swatches</string> + </property> + <widget class="ColorPickerGradientSwatches" name="swatches"/> + </widget> + </item> + <item> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>8</number> + </property> + <property name="rightMargin"> + <number>8</number> + </property> + <property name="bottomMargin"> + <number>8</number> + </property> + <item> + <widget class="QCheckBox" name="checkboxLumAlpha"> + <property name="text"> + <string>Use Luminosity as Alpha</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <customwidgets> + <customwidget> + <class>FormWidget</class> + <extends>QWidget</extends> + <header>ui/widgets/form_widget.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>SectionContainer</class> + <extends>QWidget</extends> + <header>ui/widgets/section_container.h</header> + <addpagemethod>setWidget</addpagemethod> + <container>1</container> + </customwidget> + <customwidget> + <class>ColorButton</class> + <extends>QToolButton</extends> + <header>ui/widgets/color_button.h</header> + </customwidget> + <customwidget> + <class>StackedContainer</class> + <extends>QStackedWidget</extends> + <header>ui/widgets/stacked_container.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>ScrSpinBox</class> + <extends>QDoubleSpinBox</extends> + <header location="global">ui/scrspinbox.h</header> + </customwidget> + <customwidget> + <class>GradientEditor</class> + <extends>QFrame</extends> + <header>ui/gradienteditor.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>ColorPickerGradientSwatches</class> + <extends>QWidget</extends> + <header>ui/colorpicker/colorpicker_gradient_swatches.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>ColorPickerGradientProperties</class> + <extends>QWidget</extends> + <header>ui/colorpicker/colorpicker_gradient_properties.h</header> + <container>1</container> + </customwidget> + </customwidgets> + <tabstops> + <tabstop>buttonColor1</tabstop> + <tabstop>numberColor1Shade</tabstop> + <tabstop>numberColor1Alpha</tabstop> + <tabstop>buttonColor2</tabstop> + <tabstop>numberColor2Shade</tabstop> + <tabstop>numberColor2Alpha</tabstop> + <tabstop>buttonColor3</tabstop> + <tabstop>numberColor3Shade</tabstop> + <tabstop>numberColor3Alpha</tabstop> + <tabstop>buttonColor4</tabstop> + <tabstop>numberColor4Shade</tabstop> + <tabstop>numberColor4Alpha</tabstop> + <tabstop>buttonColorMesh</tabstop> + <tabstop>numberColorMeshShade</tabstop> + <tabstop>numberColorMeshAlpha</tabstop> + <tabstop>checkboxLumAlpha</tabstop> + </tabstops> + <resources/> + <connections/> +</ui> Index: scribus/ui/colorpicker/colorpicker_gradient_properties.cpp =================================================================== --- scribus/ui/colorpicker/colorpicker_gradient_properties.cpp (nicht existent) +++ scribus/ui/colorpicker/colorpicker_gradient_properties.cpp (Arbeitskopie) @@ -0,0 +1,494 @@ +#include "colorpicker_gradient_properties.h" +#include "units.h" +#include "iconmanager.h" + +ColorPickerGradientProperties::ColorPickerGradientProperties(QWidget* parent) : StackedContainer(parent) +{ + m_unitRatio = 1.0; + + setupUi(this); + + gSk->setNewUnit(6); + gSk->setValues(-89, 89, 2, 0); + gSk_2->setNewUnit(6); + gSk_2->setValues(-89, 89, 2, 0); + gSc->setSuffix(" %"); + gSc->setValue( 100 ); + + connectSlots(); + + // Mesh + connect(buttonNewGrid, SIGNAL(clicked()), this, SIGNAL(createNewMesh())); + connect(buttonResetGrid, SIGNAL(clicked()), this, SIGNAL(resetMesh())); + connect(buttonPoLIne, SIGNAL(clicked()), this, SIGNAL(meshToShape())); + connect(editPoints, SIGNAL(clicked()), this, SLOT(handleEditButton())); + connect(editControlPoints, SIGNAL(clicked()), this, SLOT(handleEditControlButton())); + connect(resetControlPoint, SIGNAL(clicked()), this, SIGNAL(reset1Control())); + connect(resetAllControlPoints, SIGNAL(clicked()), this, SIGNAL(resetAllControl())); + // Patch Mesh + connect(editPPoint, SIGNAL(clicked()), this, SLOT(handlePEditButton())); + connect(editPControlPoints, SIGNAL(clicked()), this, SLOT(handlePEditControlButton())); + connect(buttonAddPatch, SIGNAL(clicked()), this, SLOT(handlePAddButton())); + connect(buttonRemovePatch, SIGNAL(clicked()), this, SIGNAL(removePatch())); + connect(resetPControlPoint, SIGNAL(clicked()), this, SIGNAL(reset1Control())); + connect(resetAllPControlPoints, SIGNAL(clicked()), this, SIGNAL(resetAllControl())); + connect(snapToGrid, SIGNAL(clicked()), this, SLOT(handleSnapToGridBox())); + + iconSetChange(); + languageChange(); + selectLinear(); +} + +void ColorPickerGradientProperties::changeEvent(QEvent *e) +{ + if (e->type() == QEvent::LanguageChange) + languageChange(); + + QWidget::changeEvent(e); +} + +void ColorPickerGradientProperties::selectLinear() +{ + this->setCurrentIndex(0); + m_gradientEditType = GradientEdit::Gradient; +} + +void ColorPickerGradientProperties::selectRadial() +{ + this->setCurrentIndex(1); + labelSkew2->show(); + gSk_2->show(); + m_gradientEditType = GradientEdit::Gradient; +} + +void ColorPickerGradientProperties::selectConical() +{ + this->setCurrentIndex(1); + labelSkew2->hide(); + gSk_2->hide(); + m_gradientEditType = GradientEdit::Gradient; +} + +void ColorPickerGradientProperties::selectFourColor() +{ + this->setCurrentIndex(2); + m_gradientEditType = GradientEdit::FourColors; +} + +void ColorPickerGradientProperties::selectDiamond() +{ + this->setCurrentIndex(3); + m_gradientEditType = GradientEdit::Diamond; +} + +void ColorPickerGradientProperties::selectMesh() +{ + QSignalBlocker sig(this); + + this->setCurrentIndex(4); + editPoints->setChecked(true); + m_gradientEditType = GradientEdit::Mesh_Point; +} + +void ColorPickerGradientProperties::selectPatchMesh() +{ + QSignalBlocker sig(this); + + this->setCurrentIndex(5); + editPPoint->setChecked(true); + snapToGrid->setChecked(false); + snapToGrid->setEnabled(true); + m_gradientEditType = GradientEdit::PatchMesh_Point; +} + +CPGradientVectorData ColorPickerGradientProperties::gradientVectorData() +{ + return m_data; +} + +void ColorPickerGradientProperties::setConfig(int type, bool isMask) +{ + int t = type; + + // normalize type based on mask mode + if (isMask) + { + switch (t) + { + default: + case GradMask_Linear: + case GradMask_LinearLumAlpha: + t = Gradient_Linear; + break; + case GradMask_Radial: + case GradMask_RadialLumAlpha: + t = Gradient_Radial; + break; + case GradMask_Pattern: + case GradMask_PatternInverted: + case GradMask_PatternLumAlphaInverted: + case GradMask_PatternLumAlpha: + // not handled + break; + } + } + + if (m_type == type) + return; + + m_type = t; + + switch (t) + { + default: + case Gradient_Linear: + selectLinear(); + break; + case Gradient_Radial: + selectRadial(); + break; + case Gradient_Diamond: + selectDiamond(); + break; + case Gradient_4Colors: + selectFourColor(); + break; + case Gradient_Conical: + selectConical(); + break; + case Gradient_Mesh: + selectMesh(); + break; + case Gradient_PatchMesh: + selectPatchMesh(); + break; + } + +// qDebug() << Q_FUNC_INFO << gradientTypeDebug(t); + +} + +GradientEdit ColorPickerGradientProperties::gradientEditType() +{ + return m_gradientEditType; +} + +void ColorPickerGradientProperties::languageChange() +{ + retranslateUi(this); +} + +void ColorPickerGradientProperties::handleEditButton() +{ + if (editPoints->isChecked()) + { + resetAllControlPoints->setEnabled(false); + resetControlPoint->setEnabled(false); + m_gradientEditType = GradientEdit::Mesh_Point; + emit gradientEditMode(gradientEditType()); + } +} + +void ColorPickerGradientProperties::handleEditControlButton() +{ + if (editControlPoints->isChecked()) + { + resetAllControlPoints->setEnabled(true); + resetControlPoint->setEnabled(true); + m_gradientEditType = GradientEdit::Mesh_ControlPoints; + emit gradientEditMode(gradientEditType()); + } +} + +void ColorPickerGradientProperties::handlePEditButton() +{ + if (editPPoint->isChecked()) + { + snapToGrid->setEnabled(true); + resetAllPControlPoints->setEnabled(false); + resetPControlPoint->setEnabled(false); + m_gradientEditType = GradientEdit::PatchMesh_Point; + emit gradientEditMode(gradientEditType()); + } +} + +void ColorPickerGradientProperties::handlePEditControlButton() +{ + if (editPControlPoints->isChecked()) + { + snapToGrid->setEnabled(false); + resetAllPControlPoints->setEnabled(true); + resetPControlPoint->setEnabled(true); + m_gradientEditType = GradientEdit::PatchMesh_ControlPoints; + emit gradientEditMode(gradientEditType()); + } +} + +void ColorPickerGradientProperties::handleSnapToGridBox() +{ + emit snapToMGrid(snapToGrid->isChecked()); +} + +void ColorPickerGradientProperties::handlePAddButton() +{ + editPPoint->setChecked(true); + editPPoint->setEnabled(false); + editPControlPoints->setEnabled(false); + resetAllPControlPoints->setEnabled(false); + resetPControlPoint->setEnabled(false); + buttonAddPatch->setEnabled(false); + m_gradientEditType = GradientEdit::PatchMesh_Polygon; + emit gradientEditMode(gradientEditType()); +} + +void ColorPickerGradientProperties::endPAddButton() +{ + editPPoint->setChecked(true); + editPPoint->setEnabled(true); + editPControlPoints->setEnabled(true); + resetAllPControlPoints->setEnabled(false); + resetPControlPoint->setEnabled(false); + buttonAddPatch->setChecked(false); + buttonAddPatch->setEnabled(true); + m_gradientEditType = GradientEdit::PatchMesh_Point; + emit gradientEditMode(gradientEditType()); +} + +void ColorPickerGradientProperties::changebuttonRemovePatch(bool val) +{ + buttonRemovePatch->setEnabled(val); +} + +void ColorPickerGradientProperties::setGradientVectorData(CPGradientVectorData data) +{ + disconnectSlots(); + + m_data = data; + // Linear + gX1->setValue(data.StartX * m_unitRatio); + gX2->setValue(data.EndX * m_unitRatio); + gY1->setValue(data.StartY * m_unitRatio); + gY2->setValue(data.EndY * m_unitRatio); + gSk->setValue(data.Skew); + // Radial + gX1_2->setValue(data.StartX * m_unitRatio); + gX2_2->setValue(data.EndX * m_unitRatio); + gY1_2->setValue(data.StartY * m_unitRatio); + gY2_2->setValue(data.EndY * m_unitRatio); + gFX->setValue(data.FocalX * m_unitRatio); + gFY->setValue(data.FocalY * m_unitRatio); + gSc->setValue(data.Scale * 100.0); + gSk_2->setValue(data.Skew); + // Four Colors + gC1X->setValue(data.C1X * m_unitRatio); + gC1Y->setValue(data.C1Y * m_unitRatio); + gC2X->setValue(data.C2X * m_unitRatio); + gC2Y->setValue(data.C2Y * m_unitRatio); + gC3X->setValue(data.C3X * m_unitRatio); + gC3Y->setValue(data.C3Y * m_unitRatio); + gC4X->setValue(data.C4X * m_unitRatio); + gC4Y->setValue(data.C4Y * m_unitRatio); + // Diamond + gC1XD->setValue(data.C1X * m_unitRatio); + gC1YD->setValue(data.C1Y * m_unitRatio); + gC2XD->setValue(data.C2X * m_unitRatio); + gC2YD->setValue(data.C2Y * m_unitRatio); + gC3XD->setValue(data.C3X * m_unitRatio); + gC3YD->setValue(data.C3Y * m_unitRatio); + gC4XD->setValue(data.C4X * m_unitRatio); + gC4YD->setValue(data.C4Y * m_unitRatio); + gC5XD->setValue(data.C5X * m_unitRatio); + gC5YD->setValue(data.C5Y * m_unitRatio); + + connectSlots(); +} + +void ColorPickerGradientProperties::changeSpecialLinear() +{ + m_data.StartX = gX1->value() / m_unitRatio; + m_data.StartY = gY1->value() / m_unitRatio; + m_data.EndX = gX2->value() / m_unitRatio; + m_data.EndY = gY2->value() / m_unitRatio; + m_data.FocalX = gFX->value() / m_unitRatio; + m_data.FocalY = gFY->value() / m_unitRatio; + m_data.Scale = 1; + m_data.Skew = gSk->value(); + + emit gradientVectorChanged(); +} + +void ColorPickerGradientProperties::changeSpecialRadial() +{ + m_data.StartX = gX1_2->value() / m_unitRatio; + m_data.StartY = gY1_2->value() / m_unitRatio; + m_data.EndX = gX2_2->value() / m_unitRatio; + m_data.EndY = gY2_2->value() / m_unitRatio; + m_data.FocalX = gFX->value() / m_unitRatio; + m_data.FocalY = gFY->value() / m_unitRatio; + m_data.Scale = gSc->value() / 100.0; + m_data.Skew = gSk_2->value(); + + emit gradientVectorChanged(); +} + +void ColorPickerGradientProperties::changeSpecialFourColors() +{ + m_data.C1X = gC1X->value() / m_unitRatio; + m_data.C1Y = gC1Y->value() / m_unitRatio; + m_data.C2X = gC2X->value() / m_unitRatio; + m_data.C2Y = gC2Y->value() / m_unitRatio; + m_data.C3X = gC3X->value() / m_unitRatio; + m_data.C3Y = gC3Y->value() / m_unitRatio; + m_data.C4X = gC4X->value() / m_unitRatio; + m_data.C4Y = gC4Y->value() / m_unitRatio; + + emit gradientVectorChanged(); +} + +void ColorPickerGradientProperties::changeSpecialDiamond() +{ + m_data.C1X = gC1XD->value() / m_unitRatio; + m_data.C1Y = gC1YD->value() / m_unitRatio; + m_data.C2X = gC2XD->value() / m_unitRatio; + m_data.C2Y = gC2YD->value() / m_unitRatio; + m_data.C3X = gC3XD->value() / m_unitRatio; + m_data.C3Y = gC3YD->value() / m_unitRatio; + m_data.C4X = gC4XD->value() / m_unitRatio; + m_data.C4Y = gC4YD->value() / m_unitRatio; + m_data.C5X = gC5XD->value() / m_unitRatio; + m_data.C5Y = gC5YD->value() / m_unitRatio; + + emit gradientVectorChanged(); +} + +void ColorPickerGradientProperties::iconSetChange() +{ + IconManager& im = IconManager::instance(); + editPoints->setIcon(im.loadIcon("MoveNode.png")); + editControlPoints->setIcon(im.loadIcon("MoveKontrol.png")); + resetControlPoint->setIcon(im.loadIcon("Reset1Node.png")); + resetAllControlPoints->setIcon(im.loadIcon("ResetNode.png")); + editPPoint->setIcon(im.loadIcon("MoveNode.png")); + editPControlPoints->setIcon(im.loadIcon("MoveKontrol.png")); + resetPControlPoint->setIcon(im.loadIcon("Reset1Node.png")); + resetAllPControlPoints->setIcon(im.loadIcon("ResetNode.png")); +} + +void ColorPickerGradientProperties::unitChange(int unitIndex) +{ + m_unitRatio = unitGetRatioFromIndex(unitIndex); + + disconnectSlots(); + + gX1->setNewUnit(unitIndex); + gY1->setNewUnit(unitIndex); + gX2->setNewUnit(unitIndex); + gY2->setNewUnit(unitIndex); + + gX1_2->setNewUnit(unitIndex); + gY1_2->setNewUnit(unitIndex); + gX2_2->setNewUnit(unitIndex); + gY2_2->setNewUnit(unitIndex); + gFX->setNewUnit(unitIndex); + gFY->setNewUnit(unitIndex); + + gC1X->setNewUnit(unitIndex); + gC1Y->setNewUnit(unitIndex); + gC2X->setNewUnit(unitIndex); + gC2Y->setNewUnit(unitIndex); + gC3X->setNewUnit(unitIndex); + gC3Y->setNewUnit(unitIndex); + gC4X->setNewUnit(unitIndex); + gC4Y->setNewUnit(unitIndex); + + gC1XD->setNewUnit(unitIndex); + gC1YD->setNewUnit(unitIndex); + gC2XD->setNewUnit(unitIndex); + gC2YD->setNewUnit(unitIndex); + gC3XD->setNewUnit(unitIndex); + gC3YD->setNewUnit(unitIndex); + gC4XD->setNewUnit(unitIndex); + gC4YD->setNewUnit(unitIndex); + gC5XD->setNewUnit(unitIndex); + gC5YD->setNewUnit(unitIndex); + + connectSlots(); +} + +void ColorPickerGradientProperties::connectSlots() +{ + // Linear + connect(gX1, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialLinear())); + connect(gX2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialLinear())); + connect(gY1, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialLinear())); + connect(gY2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialLinear())); + connect(gSk, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialLinear())); + // Radial + connect(gX1_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialRadial())); + connect(gX2_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialRadial())); + connect(gY1_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialRadial())); + connect(gY2_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialRadial())); + connect(gFX, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialRadial())); + connect(gFY, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialRadial())); + connect(gSk_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialRadial())); + connect(gSc, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialRadial())); + // Four Colors + connect(gC1X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialFourColors())); + connect(gC1Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialFourColors())); + connect(gC2X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialFourColors())); + connect(gC2Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialFourColors())); + connect(gC3X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialFourColors())); + connect(gC3Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialFourColors())); + connect(gC4X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialFourColors())); + connect(gC4Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialFourColors())); + // Diamond + connect(gC1XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialDiamond())); + connect(gC1YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialDiamond())); + connect(gC2XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialDiamond())); + connect(gC2YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialDiamond())); + connect(gC3XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialDiamond())); + connect(gC3YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialDiamond())); + connect(gC4XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialDiamond())); + connect(gC4YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialDiamond())); + connect(gC5XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialDiamond())); + connect(gC5YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialDiamond())); +} + +void ColorPickerGradientProperties::disconnectSlots() +{ + // Linear + disconnect(gX1, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialLinear())); + disconnect(gX2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialLinear())); + disconnect(gY1, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialLinear())); + disconnect(gY2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialLinear())); + disconnect(gSk, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialLinear())); + // Radial + disconnect(gX1_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialRadial())); + disconnect(gX2_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialRadial())); + disconnect(gY1_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialRadial())); + disconnect(gY2_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialRadial())); + disconnect(gFX, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialRadial())); + disconnect(gFY, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialRadial())); + disconnect(gSk_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialRadial())); + disconnect(gSc, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialRadial())); + // Four Colors + disconnect(gC1X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialFourColors())); + disconnect(gC1Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialFourColors())); + disconnect(gC2X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialFourColors())); + disconnect(gC2Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialFourColors())); + disconnect(gC3X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialFourColors())); + disconnect(gC3Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialFourColors())); + disconnect(gC4X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialFourColors())); + disconnect(gC4Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialFourColors())); + // Diamond + disconnect(gC1XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialDiamond())); + disconnect(gC1YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialDiamond())); + disconnect(gC2XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialDiamond())); + disconnect(gC2YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialDiamond())); + disconnect(gC3XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialDiamond())); + disconnect(gC3YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialDiamond())); + disconnect(gC4XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialDiamond())); + disconnect(gC4YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialDiamond())); + disconnect(gC5XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialDiamond())); + disconnect(gC5YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialDiamond())); +} Index: scribus/ui/colorpicker/colorpicker_gradient_properties.h =================================================================== --- scribus/ui/colorpicker/colorpicker_gradient_properties.h (nicht existent) +++ scribus/ui/colorpicker/colorpicker_gradient_properties.h (Arbeitskopie) @@ -0,0 +1,81 @@ +#ifndef COLORPICKER_GRADIENT_PROPERTIES_H +#define COLORPICKER_GRADIENT_PROPERTIES_H + +#include <QWidget> +#include <QLayout> +#include <QLabel> +#include <QEvent> +//#include "scribusapi.h" +#include "scribusstructs.h" +#include "ui_colorpicker_gradient_properties.h" +#include "colorpicker_enum.h" +#include "ui/widgets/stacked_container.h" + +class ColorPickerGradientProperties : public StackedContainer, Ui::ColorPickerGradientProperties +{ + Q_OBJECT + +public: + ColorPickerGradientProperties( QWidget* parent = nullptr); + ~ColorPickerGradientProperties() {}; + + void selectLinear(); + void selectRadial(); + void selectConical(); + void selectFourColor(); + void selectDiamond(); + void selectMesh(); + void selectPatchMesh(); + + void setGradientVectorData(CPGradientVectorData data); + CPGradientVectorData gradientVectorData(); + + void setConfig(int type, bool isMask); + GradientEdit gradientEditType(); + +public slots: + void languageChange(); + void handleEditButton(); + void handleEditControlButton(); + void handlePEditButton(); + void handlePEditControlButton(); + void handlePAddButton(); + void handleSnapToGridBox(); + void endPAddButton(); + void changebuttonRemovePatch(bool val); + void changeSpecialLinear(); + void changeSpecialRadial(); + void changeSpecialFourColors(); + void changeSpecialDiamond(); + + void iconSetChange(); + void unitChange(int unitIndex); + +protected: + double m_unitRatio; + GradientEdit m_gradientEditType {GradientEdit::Gradient}; + int m_type = -1; + CPGradientVectorData m_data; + void connectSlots(); + void disconnectSlots(); + + void changeEvent(QEvent *e) override; + +signals: + + // Gradient Vector + void gradientVectorChanged(); + + // Mesh + void gradientEditMode(GradientEdit); + void createNewMesh(); + void resetMesh(); + void meshToShape(); + void reset1Control(); + void resetAllControl(); + void removePatch(); + void snapToMGrid(bool); + +}; + +#endif // COLORPICKER_GRADIENT_PROPERTIES_H Index: scribus/ui/colorpicker/colorpicker_gradient_properties.ui =================================================================== --- scribus/ui/colorpicker/colorpicker_gradient_properties.ui (nicht existent) +++ scribus/ui/colorpicker/colorpicker_gradient_properties.ui (Arbeitskopie) @@ -0,0 +1,1402 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>ColorPickerGradientProperties</class> + <widget class="StackedContainer" name="ColorPickerGradientProperties"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>309</width> + <height>177</height> + </rect> + </property> + <property name="currentIndex"> + <number>1</number> + </property> + <widget class="QWidget" name="pageLinear"> + <layout class="QGridLayout" name="gridLayout_3"> + <property name="leftMargin"> + <number>8</number> + </property> + <property name="topMargin"> + <number>8</number> + </property> + <property name="rightMargin"> + <number>8</number> + </property> + <property name="bottomMargin"> + <number>8</number> + </property> + <property name="spacing"> + <number>4</number> + </property> + <item row="0" column="3"> + <spacer name="horizontalSpacer_5"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="2"> + <widget class="FormWidget" name="formWidget_3"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>End</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_7"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="gY2"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="1" column="0"> + <widget class="FormWidget" name="formWidget"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string/> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <property name="preserveLabelSpace"> + <bool>true</bool> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_5"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QLabel" name="label_33"> + <property name="text"> + <string>Y:</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="0" column="2"> + <widget class="ScrSpinBox" name="gX2"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="label_32"> + <property name="text"> + <string>X:</string> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="FormWidget" name="labelSkew"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Skew</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_8"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="gSk"> + <property name="minimum"> + <double>-89.000000000000000</double> + </property> + <property name="maximum"> + <double>89.000000000000000</double> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="0" column="1"> + <widget class="ScrSpinBox" name="gX1"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="FormWidget" name="formWidget_2"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Start</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_6"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="gY1"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="3" column="1"> + <spacer name="verticalSpacer_3"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <widget class="QWidget" name="pageRadial"> + <layout class="QGridLayout" name="gridLayout"> + <property name="leftMargin"> + <number>8</number> + </property> + <property name="topMargin"> + <number>8</number> + </property> + <property name="rightMargin"> + <number>8</number> + </property> + <property name="bottomMargin"> + <number>8</number> + </property> + <property name="spacing"> + <number>4</number> + </property> + <item row="0" column="0"> + <widget class="QLabel" name="label"> + <property name="text"> + <string>X:</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="FormWidget" name="formWidget_6"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Start</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_10"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="gY1_2"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="1" column="0"> + <widget class="FormWidget" name="formWidget_5"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string/> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <property name="preserveLabelSpace"> + <bool>true</bool> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_9"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>Y:</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="1" column="3"> + <widget class="FormWidget" name="formWidget_8"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Focal</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_12"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="gFY"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="1" column="2"> + <widget class="FormWidget" name="formWidget_7"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>End</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_11"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="gY2_2"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="2" column="2"> + <widget class="FormWidget" name="labelSkew2"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Skew</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_13"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="gSk_2"> + <property name="minimum"> + <double>-89.000000000000000</double> + </property> + <property name="maximum"> + <double>89.000000000000000</double> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="0" column="4"> + <spacer name="horizontalSpacer_6"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + <item row="0" column="3"> + <widget class="ScrSpinBox" name="gFX"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="FormWidget" name="formWidget_10"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Scale</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_14"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="gSc"> + <property name="minimum"> + <double>0.010000000000000</double> + </property> + <property name="maximum"> + <double>100.000000000000000</double> + </property> + <property name="value"> + <double>100.000000000000000</double> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="0" column="2"> + <widget class="ScrSpinBox" name="gX2_2"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="ScrSpinBox" name="gX1_2"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + <item row="3" column="1"> + <spacer name="verticalSpacer_5"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <widget class="QWidget" name="pageFourColor"> + <layout class="QGridLayout" name="gridLayout_4"> + <property name="leftMargin"> + <number>8</number> + </property> + <property name="topMargin"> + <number>8</number> + </property> + <property name="rightMargin"> + <number>8</number> + </property> + <property name="bottomMargin"> + <number>8</number> + </property> + <property name="spacing"> + <number>4</number> + </property> + <item row="1" column="2"> + <widget class="QLabel" name="label_17"> + <property name="text"> + <string>/</string> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="label_15"> + <property name="text"> + <string>3. Point:</string> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="ScrSpinBox" name="gC3X"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + <item row="2" column="3"> + <widget class="ScrSpinBox" name="gC3Y"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + <item row="3" column="2"> + <widget class="QLabel" name="label_20"> + <property name="text"> + <string>/</string> + </property> + </widget> + </item> + <item row="3" column="3"> + <widget class="ScrSpinBox" name="gC4Y"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + <item row="1" column="3"> + <widget class="ScrSpinBox" name="gC2Y"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="ScrSpinBox" name="gC2X"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + <item row="0" column="3"> + <widget class="ScrSpinBox" name="gC1Y"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + <item row="0" column="2"> + <widget class="QLabel" name="label_18"> + <property name="text"> + <string>/</string> + </property> + </widget> + </item> + <item row="3" column="1"> + <widget class="ScrSpinBox" name="gC4X"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="ScrSpinBox" name="gC1X"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_16"> + <property name="text"> + <string>2. Point:</string> + </property> + </widget> + </item> + <item row="3" column="0"> + <widget class="QLabel" name="label_21"> + <property name="text"> + <string>4. Point:</string> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="label_19"> + <property name="text"> + <string>1. Point:</string> + </property> + </widget> + </item> + <item row="2" column="2"> + <widget class="QLabel" name="label_14"> + <property name="text"> + <string>/</string> + </property> + </widget> + </item> + <item row="4" column="1"> + <spacer name="verticalSpacer_4"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <widget class="QWidget" name="pageDiamond"> + <layout class="QGridLayout" name="gridLayout_2"> + <property name="leftMargin"> + <number>8</number> + </property> + <property name="topMargin"> + <number>8</number> + </property> + <property name="rightMargin"> + <number>8</number> + </property> + <property name="bottomMargin"> + <number>8</number> + </property> + <property name="spacing"> + <number>4</number> + </property> + <item row="0" column="0"> + <widget class="QLabel" name="label_23"> + <property name="text"> + <string>1. Point:</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="ScrSpinBox" name="gC1XD"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + <item row="0" column="2"> + <widget class="QLabel" name="label_26"> + <property name="text"> + <string>/</string> + </property> + </widget> + </item> + <item row="0" column="3"> + <widget class="ScrSpinBox" name="gC1YD"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_25"> + <property name="text"> + <string>2. Point:</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="ScrSpinBox" name="gC2XD"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + <item row="1" column="2"> + <widget class="QLabel" name="label_24"> + <property name="text"> + <string>/</string> + </property> + </widget> + </item> + <item row="1" column="3"> + <widget class="ScrSpinBox" name="gC2YD"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="label_27"> + <property name="text"> + <string>3. Point:</string> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="ScrSpinBox" name="gC3XD"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + <item row="2" column="2"> + <widget class="QLabel" name="label_29"> + <property name="text"> + <string>/</string> + </property> + </widget> + </item> + <item row="2" column="3"> + <widget class="ScrSpinBox" name="gC3YD"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + <item row="3" column="0"> + <widget class="QLabel" name="label_28"> + <property name="text"> + <string>4. Point:</string> + </property> + </widget> + </item> + <item row="3" column="1"> + <widget class="ScrSpinBox" name="gC4XD"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + <item row="3" column="2"> + <widget class="QLabel" name="label_22"> + <property name="text"> + <string>/</string> + </property> + </widget> + </item> + <item row="3" column="3"> + <widget class="ScrSpinBox" name="gC4YD"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + <item row="4" column="0"> + <widget class="QLabel" name="label_30"> + <property name="text"> + <string>5. Point:</string> + </property> + </widget> + </item> + <item row="4" column="1"> + <widget class="ScrSpinBox" name="gC5XD"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + <item row="4" column="2"> + <widget class="QLabel" name="label_31"> + <property name="text"> + <string>/</string> + </property> + </widget> + </item> + <item row="4" column="3"> + <widget class="ScrSpinBox" name="gC5YD"> + <property name="minimum"> + <double>-3000.000000000000000</double> + </property> + <property name="maximum"> + <double>3000.000000000000000</double> + </property> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="pageMesh"> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>8</number> + </property> + <property name="topMargin"> + <number>8</number> + </property> + <property name="rightMargin"> + <number>8</number> + </property> + <property name="bottomMargin"> + <number>8</number> + </property> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <layout class="QGridLayout" name="gridLayout_5"> + <item row="0" column="0"> + <widget class="QToolButton" name="editPoints"> + <property name="minimumSize"> + <size> + <width>22</width> + <height>22</height> + </size> + </property> + <property name="toolTip"> + <string>Edit Grid Points</string> + </property> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="autoExclusive"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QToolButton" name="editControlPoints"> + <property name="minimumSize"> + <size> + <width>22</width> + <height>22</height> + </size> + </property> + <property name="toolTip"> + <string>Edit Control Points</string> + </property> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="autoExclusive"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QToolButton" name="resetControlPoint"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="minimumSize"> + <size> + <width>22</width> + <height>22</height> + </size> + </property> + <property name="toolTip"> + <string>Reset selected Control Point</string> + </property> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>false</bool> + </property> + <property name="autoExclusive"> + <bool>false</bool> + </property> + </widget> + </item> + <item row="1" column="2"> + <widget class="QToolButton" name="resetAllControlPoints"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="minimumSize"> + <size> + <width>22</width> + <height>22</height> + </size> + </property> + <property name="toolTip"> + <string>Reset all Control Points</string> + </property> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>false</bool> + </property> + <property name="autoExclusive"> + <bool>false</bool> + </property> + </widget> + </item> + </layout> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <layout class="QGridLayout" name="gridLayout_6"> + <item row="0" column="0"> + <widget class="QPushButton" name="buttonNewGrid"> + <property name="text"> + <string>New Mesh...</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QPushButton" name="buttonResetGrid"> + <property name="text"> + <string>Reset Mesh</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QPushButton" name="buttonPoLIne"> + <property name="text"> + <string>Mesh -> Shape</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>18</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <widget class="QWidget" name="pagePatch"> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>8</number> + </property> + <property name="topMargin"> + <number>8</number> + </property> + <property name="rightMargin"> + <number>8</number> + </property> + <property name="bottomMargin"> + <number>8</number> + </property> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <layout class="QGridLayout" name="gridLayout_7"> + <item row="0" column="0"> + <widget class="QToolButton" name="editPPoint"> + <property name="minimumSize"> + <size> + <width>22</width> + <height>22</height> + </size> + </property> + <property name="toolTip"> + <string>Edit Grid Points</string> + </property> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="autoExclusive"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QToolButton" name="editPControlPoints"> + <property name="minimumSize"> + <size> + <width>22</width> + <height>22</height> + </size> + </property> + <property name="toolTip"> + <string>Edit Control Points</string> + </property> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="autoExclusive"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QToolButton" name="resetPControlPoint"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="minimumSize"> + <size> + <width>22</width> + <height>22</height> + </size> + </property> + <property name="toolTip"> + <string>Reset selected Control Point</string> + </property> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>false</bool> + </property> + <property name="autoExclusive"> + <bool>false</bool> + </property> + </widget> + </item> + <item row="1" column="2"> + <widget class="QToolButton" name="resetAllPControlPoints"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="minimumSize"> + <size> + <width>22</width> + <height>22</height> + </size> + </property> + <property name="toolTip"> + <string>Reset all Control Points</string> + </property> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>false</bool> + </property> + <property name="autoExclusive"> + <bool>false</bool> + </property> + </widget> + </item> + </layout> + </item> + <item> + <spacer name="horizontalSpacer_3"> + <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> + <widget class="QCheckBox" name="snapToGrid"> + <property name="text"> + <string>Snap to other Mesh Points</string> + </property> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <item> + <widget class="QPushButton" name="buttonAddPatch"> + <property name="enabled"> + <bool>true</bool> + </property> + <property name="text"> + <string>Add Patch</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="buttonRemovePatch"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="text"> + <string>Remove Patch</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_4"> + <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> + <spacer name="verticalSpacer_2"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </widget> + <customwidgets> + <customwidget> + <class>FormWidget</class> + <extends>QWidget</extends> + <header>ui/widgets/form_widget.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>StackedContainer</class> + <extends>QStackedWidget</extends> + <header>ui/widgets/stacked_container.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>ScrSpinBox</class> + <extends>QDoubleSpinBox</extends> + <header location="global">ui/scrspinbox.h</header> + </customwidget> + </customwidgets> + <tabstops> + <tabstop>gX1_2</tabstop> + <tabstop>gY1_2</tabstop> + <tabstop>gX2_2</tabstop> + <tabstop>gY2_2</tabstop> + <tabstop>gFX</tabstop> + <tabstop>gFY</tabstop> + <tabstop>gSc</tabstop> + <tabstop>gSk_2</tabstop> + <tabstop>gC1X</tabstop> + <tabstop>gC1Y</tabstop> + <tabstop>gC2X</tabstop> + <tabstop>gC2Y</tabstop> + <tabstop>gC3X</tabstop> + <tabstop>gC3Y</tabstop> + <tabstop>gC4X</tabstop> + <tabstop>gC4Y</tabstop> + <tabstop>gC1XD</tabstop> + <tabstop>gC1YD</tabstop> + <tabstop>gC2XD</tabstop> + <tabstop>gC2YD</tabstop> + <tabstop>gC3XD</tabstop> + <tabstop>gC3YD</tabstop> + <tabstop>gC4XD</tabstop> + <tabstop>gC4YD</tabstop> + <tabstop>gC5XD</tabstop> + <tabstop>gC5YD</tabstop> + <tabstop>editPoints</tabstop> + <tabstop>editControlPoints</tabstop> + <tabstop>resetControlPoint</tabstop> + <tabstop>resetAllControlPoints</tabstop> + <tabstop>buttonNewGrid</tabstop> + <tabstop>buttonResetGrid</tabstop> + <tabstop>buttonPoLIne</tabstop> + <tabstop>editPPoint</tabstop> + <tabstop>editPControlPoints</tabstop> + <tabstop>resetPControlPoint</tabstop> + <tabstop>resetAllPControlPoints</tabstop> + <tabstop>snapToGrid</tabstop> + <tabstop>buttonAddPatch</tabstop> + <tabstop>buttonRemovePatch</tabstop> + <tabstop>gX1</tabstop> + <tabstop>gY1</tabstop> + <tabstop>gX2</tabstop> + <tabstop>gY2</tabstop> + <tabstop>gSk</tabstop> + </tabstops> + <resources/> + <connections/> +</ui> Index: scribus/ui/colorpicker/colorpicker_gradient_swatches.cpp =================================================================== --- scribus/ui/colorpicker/colorpicker_gradient_swatches.cpp (nicht existent) +++ scribus/ui/colorpicker/colorpicker_gradient_swatches.cpp (Arbeitskopie) @@ -0,0 +1,39 @@ +#include "colorpicker_gradient_swatches.h" +#include "ui/widgets/gradientlistbox.h" + +ColorPickerGradientSwatches::ColorPickerGradientSwatches(QWidget *parent) : QWidget(parent) +{ + setupUi(this); + + listSwatches->setPixmapType(GradientListBox::widePixmap); + + connect(listSwatches, &GradientListBox::currentTextChanged, this, &ColorPickerGradientSwatches::setGradientFromWidget); +} + +void ColorPickerGradientSwatches::setGradients(const GradientList &list, bool insertNone) +{ + GradientListModel* clm = qobject_cast<GradientListModel*>(listSwatches->model()); + if (!clm) + return; + + clm->setGradientList(list, insertNone); +} + +void ColorPickerGradientSwatches::setCurrentGradient(QString gradientName) +{ + m_gradientName = gradientName == "" ? CommonStrings::trCustom : gradientName; + + // update color list + QSignalBlocker sig(listSwatches); + listSwatches->setCurrentGradient(m_gradientName); + +} + +void ColorPickerGradientSwatches::setGradientFromWidget(QString gradientName) +{ + if (gradientName == CommonStrings::trCustom) + gradientName = ""; + + setCurrentGradient(gradientName); + emit gradientChanged(gradientName, listSwatches->currentGradient()); +} Index: scribus/ui/colorpicker/colorpicker_gradient_swatches.h =================================================================== --- scribus/ui/colorpicker/colorpicker_gradient_swatches.h (nicht existent) +++ scribus/ui/colorpicker/colorpicker_gradient_swatches.h (Arbeitskopie) @@ -0,0 +1,33 @@ +#ifndef COLORPICKER_GRADIENT_SWATCHES_H +#define COLORPICKER_GRADIENT_SWATCHES_H + +#include "ui_colorpicker_gradient_swatches.h" +#include <QWidget> +#include "vgradient.h" + +class ColorPickerGradientSwatches : public QWidget, Ui::ColorPickerGradientSwatches +{ + Q_OBJECT + +public: + + explicit ColorPickerGradientSwatches(QWidget *parent = nullptr); + ~ColorPickerGradientSwatches() {}; + + void setGradients(const GradientList& list, bool insertNone = true); + +public slots: + void setCurrentGradient(QString gradientName); + +private slots: + void setGradientFromWidget(QString gradientName); + +private: + QString m_gradientName; + +signals: + void gradientChanged(QString name, VGradient gradient); + +}; + +#endif // COLORPICKER_GRADIENT_SWATCHES_H Index: scribus/ui/colorpicker/colorpicker_gradient_swatches.ui =================================================================== --- scribus/ui/colorpicker/colorpicker_gradient_swatches.ui (nicht existent) +++ scribus/ui/colorpicker/colorpicker_gradient_swatches.ui (Arbeitskopie) @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>ColorPickerGradientSwatches</class> + <widget class="QWidget" name="ColorPickerGradientSwatches"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>314</width> + <height>299</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>0</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="GradientListBox" name="listSwatches"/> + </item> + </layout> + </widget> + <customwidgets> + <customwidget> + <class>GradientListBox</class> + <extends>QListView</extends> + <header>ui/widgets/gradientlistbox.h</header> + </customwidget> + </customwidgets> + <resources/> + <connections/> +</ui> Index: scribus/ui/colorpicker/colorpicker_hatch.cpp =================================================================== --- scribus/ui/colorpicker/colorpicker_hatch.cpp (nicht existent) +++ scribus/ui/colorpicker/colorpicker_hatch.cpp (Arbeitskopie) @@ -0,0 +1,207 @@ +#include "colorpicker_hatch.h" +#include "units.h" +#include "util_gui.h" +#include "sccolorengine.h" +#include "sccolor.h" +#include "ui/colorlistbox.h" + +ColorPickerHatch::ColorPickerHatch(QWidget *parent) : + QWidget(parent) +{ + setupUi(this); + + listForegroundSwatches = new ColorListBox(ColorListBox::fancyPixmap); + listBackgroundSwatches = new ColorListBox(ColorListBox::fancyPixmap); + + buttonLineColor->setContextWidget(listForegroundSwatches); + buttonBackgroundColor->setContextWidget(listBackgroundSwatches); + + hatchAngle->setDecimals(0); + hatchAngle->setNewUnit(6); + hatchAngle->setValues(-360, 360, 1, 0); + hatchDist->setDecimals(0); + hatchDist->setNewUnit(0); + hatchDist->setValues(1, 1000, 0, 1); + + connectSlots(); +} + +void ColorPickerHatch::connectSlots() +{ + connect(hatchAngle, SIGNAL(valueChanged(double)), this, SLOT(updateHatch())); + connect(hatchDist, SIGNAL(valueChanged(double)), this, SLOT(updateHatch())); + connect(hatchType, SIGNAL(activated(int)), this, SLOT(updateHatch())); + connect(listForegroundSwatches, &ColorListBox::itemSelectionChanged, this, &ColorPickerHatch::updateHatch); + connect(listBackgroundSwatches, &ColorListBox::itemSelectionChanged, this, &ColorPickerHatch::updateHatch); +} + +void ColorPickerHatch::disconnectSlots() +{ + disconnect(hatchAngle, SIGNAL(valueChanged(double)), this, SLOT(updateHatch())); + disconnect(hatchDist, SIGNAL(valueChanged(double)), this, SLOT(updateHatch())); + disconnect(hatchType, SIGNAL(activated(int)), this, SLOT(updateHatch())); + disconnect(listForegroundSwatches, &ColorListBox::itemSelectionChanged, this, &ColorPickerHatch::updateHatch); + disconnect(listBackgroundSwatches, &ColorListBox::itemSelectionChanged, this, &ColorPickerHatch::updateHatch); +} + +/* ********************************************************************************* * + * + * Members + * + * ********************************************************************************* */ + +Context ColorPickerHatch::context() +{ + return m_context; +} + +void ColorPickerHatch::setContext(Context config) +{ + m_context = config; +} + +void ColorPickerHatch::setColorList(const ColorList &list) +{ + QSignalBlocker sig1(listForegroundSwatches); + QSignalBlocker sig2(listBackgroundSwatches); + + colList = list; + listForegroundSwatches->setColors(colList, false); + listBackgroundSwatches->setColors(colList, true); +} + +CPHatchData ColorPickerHatch::hatchData() +{ + return m_hatch; +} + +QString ColorPickerHatch::toolTipText() const +{ + return QString( tr("Hatch") ); +} + +void ColorPickerHatch::setDoc(ScribusDoc *doc) +{ + m_doc = doc; + unitChange(); +} + +void ColorPickerHatch::setHatchData(CPHatchData hatch) +{ + m_hatch = hatch; + + disconnectSlots(); + + hatchAngle->setValue(m_hatch.Angle); + hatchDist->setValue(m_hatch.Distance * unitGetRatioFromIndex(currentUnit)); + hatchType->setCurrentIndex(m_hatch.Type); + + if ((m_hatch.ColorForeground != CommonStrings::None) && (!m_hatch.ColorForeground.isEmpty())) + listForegroundSwatches->setCurrentColor(m_hatch.ColorForeground); + + if (m_hatch.HasBackgroundColor) + { + if (!m_hatch.ColorBackground.isEmpty()) + listBackgroundSwatches->setCurrentColor(m_hatch.ColorBackground); + } + else + listBackgroundSwatches->setCurrentColor(CommonStrings::None); + + buttonLineColor->setBackground( colorBrush(buttonLineColor->backgroundDotSize(), m_hatch.ColorForeground) ); + buttonLineColor->setToolTip(m_hatch.ColorForeground); + buttonBackgroundColor->setBackground( colorBrush(buttonBackgroundColor->backgroundDotSize(), m_hatch.ColorBackground) ); + buttonBackgroundColor->setToolTip(m_hatch.ColorBackground); + + connectSlots(); +} + +/* ********************************************************************************* * + * + * Public Slots + * + * ********************************************************************************* */ + +void ColorPickerHatch::languageChange() +{ + + int oldHatchTypeIndex = hatchType->currentIndex(); + QSignalBlocker sigType(hatchType); + + // Retranslate UI + retranslateUi(this); + + hatchType->setCurrentIndex(oldHatchTypeIndex); + +} + +void ColorPickerHatch::unitChange() +{ + if (!m_doc) + return; + + currentUnit = m_doc->unitIndex(); + hatchDist->setNewUnit(currentUnit); +} + +/* ********************************************************************************* * + * + * Private Slots + * + * ********************************************************************************* */ + +void ColorPickerHatch::updateSize() +{ + int w = this->width(); + adjustSize(); + resize(w, sizeHint().height()); + emit sizeChanged(); +} + +void ColorPickerHatch::updateHatch() +{ + QString color1 = listForegroundSwatches->currentColor(); + if (color1 == CommonStrings::tr_NoneColor) + color1 = CommonStrings::None; + QString color2 = listBackgroundSwatches->currentColor(); + if (color2 == CommonStrings::tr_NoneColor) + color2 = CommonStrings::None; + + m_hatch.ColorForeground = color1; + m_hatch.ColorBackground = color2; + m_hatch.HasBackgroundColor = (color2 != CommonStrings::None); + m_hatch.Angle = hatchAngle->value(); + m_hatch.Distance = hatchDist->value() / unitGetRatioFromIndex(currentUnit); + m_hatch.Type = hatchType->currentIndex(); + + buttonLineColor->setBackground( colorBrush(buttonLineColor->backgroundDotSize(), m_hatch.ColorForeground) ); + buttonLineColor->setToolTip(m_hatch.ColorForeground); + buttonBackgroundColor->setBackground( colorBrush(buttonBackgroundColor->backgroundDotSize(), m_hatch.ColorBackground) ); + buttonBackgroundColor->setToolTip(m_hatch.ColorBackground); + + emit hatchChanged(); +} + +QColor ColorPickerHatch::colorFromName(QString colorName, double shade) +{ + if (!m_doc) + return QColor(); + + ScColor sColor(0, 0, 0); + shade = qBound(0.0, shade, 100.0); + + if (m_doc->PageColors.contains(colorName)) + sColor = m_doc->PageColors.value(colorName); + + return ScColorEngine::getDisplayColor(sColor, m_doc, shade); +} + +QBrush ColorPickerHatch::colorBrush(QSize size, QString colorName, double shade, double opacity) +{ + if (!m_doc || colorName == CommonStrings::tr_NoneColor || colorName == CommonStrings::None) + return renderEmptyPattern(size); + else + return renderColor(size, colorFromName(colorName, 100.0), colorFromName(colorName, shade), opacity); +} + + + Index: scribus/ui/colorpicker/colorpicker_hatch.h =================================================================== --- scribus/ui/colorpicker/colorpicker_hatch.h (nicht existent) +++ scribus/ui/colorpicker/colorpicker_hatch.h (Arbeitskopie) @@ -0,0 +1,62 @@ +#ifndef COLORPICKER_HATCH_H +#define COLORPICKER_HATCH_H + +#include <QWidget> +#include "ui_colorpicker_hatch.h" +#include "scribusdoc.h" +#include "colorpicker_enum.h" + +class ColorList; +class ColorListBox; + +class ColorPickerHatch : public QWidget, Ui::ColorPickerHatch +{ + Q_OBJECT + +public: + explicit ColorPickerHatch(QWidget *parent = nullptr); + ~ColorPickerHatch() {}; + + Context context(); + void setContext(Context config); + + void setColorList(const ColorList& list); + + CPHatchData hatchData(); + int type() { return Gradient_Hatch; }; + + QString toolTipText() const; + +public slots: + void setDoc(ScribusDoc *doc); + void setHatchData(CPHatchData hatch); + void languageChange(); + void unitChange(); + +private slots: + void updateSize(); + void updateHatch(); + +private: + ScribusDoc *m_doc {nullptr}; + QBrush m_background; + Context m_context {Context::Simple}; + CPHatchData m_hatch; + int currentUnit {0}; + ColorList colList; + ColorListBox *listForegroundSwatches; + ColorListBox *listBackgroundSwatches; + + QColor colorFromName(QString colorName, double shade); + QBrush colorBrush(QSize size, QString colorName, double shade = 100.0, double opacity = 1.0); + + void connectSlots(); + void disconnectSlots(); + +signals: + void hatchChanged(); + void sizeChanged(); + +}; + +#endif // COLORPICKER_HATCH_H Index: scribus/ui/colorpicker/colorpicker_hatch.ui =================================================================== --- scribus/ui/colorpicker/colorpicker_hatch.ui (nicht existent) +++ scribus/ui/colorpicker/colorpicker_hatch.ui (Arbeitskopie) @@ -0,0 +1,310 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>ColorPickerHatch</class> + <widget class="QWidget" name="ColorPickerHatch"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>265</width> + <height>138</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>8</number> + </property> + <property name="topMargin"> + <number>8</number> + </property> + <property name="rightMargin"> + <number>8</number> + </property> + <property name="bottomMargin"> + <number>8</number> + </property> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="spacing"> + <number>4</number> + </property> + <item> + <widget class="FormWidget" name="hatchDistLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Distance</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="hatchDist"/> + </item> + </layout> + </widget> + </item> + <item> + <widget class="FormWidget" name="hatchAngleLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Angle</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="hatchAngle"> + <property name="minimum"> + <double>-360.000000000000000</double> + </property> + <property name="maximum"> + <double>360.000000000000000</double> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="FormWidget" name="hatchTypeLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Type</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QComboBox" name="hatchType"> + <item> + <property name="text"> + <string>Single</string> + </property> + </item> + <item> + <property name="text"> + <string>Double</string> + </property> + </item> + <item> + <property name="text"> + <string>Triple</string> + </property> + </item> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_2"> + <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> + <layout class="QHBoxLayout" name="horizontalLayout_5"> + <item> + <widget class="FormWidget" name="hatchLineColorLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Line</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_7"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ColorButton" name="buttonLineColor"> + <property name="text"> + <string/> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="FormWidget" name="hatchBackgroundLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Background</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_6"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ColorButton" name="buttonBackgroundColor"> + <property name="text"> + <string/> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <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> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <customwidgets> + <customwidget> + <class>FormWidget</class> + <extends>QWidget</extends> + <header>ui/widgets/form_widget.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>ScrSpinBox</class> + <extends>QDoubleSpinBox</extends> + <header location="global">ui/scrspinbox.h</header> + </customwidget> + <customwidget> + <class>ColorButton</class> + <extends>QToolButton</extends> + <header>ui/widgets/color_button.h</header> + </customwidget> + </customwidgets> + <resources/> + <connections/> +</ui> Index: scribus/ui/colorpicker/colorpicker_pattern.cpp =================================================================== --- scribus/ui/colorpicker/colorpicker_pattern.cpp (nicht existent) +++ scribus/ui/colorpicker/colorpicker_pattern.cpp (Arbeitskopie) @@ -0,0 +1,365 @@ +#include "colorpicker_pattern.h" +#include "scribusapp.h" +#include "iconmanager.h" +#include "units.h" +#include "util_gui.h" +#include "ui/linkbutton.h" + +ColorPickerPattern::ColorPickerPattern(QWidget *parent) : + QWidget(parent) +{ + setupUi(this); + + iconSetChange(); + + // offset + numberOffsetX->setMinimum(-3000); + numberOffsetX->setMaximum(3000); + numberOffsetX->setNewUnit(SC_POINTS); + numberOffsetY->setMinimum(-3000); + numberOffsetY->setMaximum(3000); + numberOffsetY->setNewUnit(SC_POINTS); + // scale + numberScaleX->setMinimum(0.01); + numberScaleX->setMaximum(500); + numberScaleX->setNewUnit(SC_PERCENT); + numberScaleX->setValue( 100 ); + numberScaleY->setMinimum(0.01); + numberScaleY->setMaximum(500); + numberScaleY->setNewUnit(SC_PERCENT); + numberScaleY->setValue( 100 ); + buttonScaleRatio->setCheckable( true ); + buttonScaleRatio->setAutoRaise( true ); + // angle + numberAngle->setMinimum(-180); + numberAngle->setMaximum(180); + numberAngle->setNewUnit(SC_DEGREES); + // skew + numberSkewX->setMinimum(-89); + numberSkewX->setMaximum(89); + numberSkewX->setNewUnit(SC_DEGREES); + numberSkewX->setValue( 0 ); + numberSkewY->setMinimum(-89); + numberSkewY->setMaximum(89); + numberSkewY->setNewUnit(SC_DEGREES); + numberSkewY->setValue( 0 ); + // spacing + numberSpacing->setMinimum(1); + numberSpacing->setMaximum(500); + numberSpacing->setValue( 100 ); + // flip + buttonFlipHorizontal->setCheckable( true ); + buttonFlipVertical->setCheckable( true ); + + connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(iconSetChange())); + connect(sectionProperties, &SectionContainer::sizeChanged, this, &ColorPickerPattern::updateSize); + connect(sectionSwatches, &SectionContainer::sizeChanged, this, &ColorPickerPattern::updateSize); + + connectSlots(); + +} + + +void ColorPickerPattern::connectSlots() +{ + connect(listPattern, &QListWidget::itemClicked, this, &ColorPickerPattern::updateName); + connect(numberOffsetX, &ScrSpinBox::valueChanged, this, &ColorPickerPattern::updatePattern); + connect(numberOffsetY, &ScrSpinBox::valueChanged, this, &ColorPickerPattern::updatePattern); + connect(numberScaleX, &ScrSpinBox::valueChanged, this, &ColorPickerPattern::updateScaleX); + connect(numberScaleY, &ScrSpinBox::valueChanged, this, &ColorPickerPattern::updateScaleY); + connect(numberSkewX, &ScrSpinBox::valueChanged, this, &ColorPickerPattern::updatePattern); + connect(numberSkewY, &ScrSpinBox::valueChanged, this, &ColorPickerPattern::updatePattern); + connect(numberAngle, &ScrSpinBox::valueChanged, this, &ColorPickerPattern::updatePattern); + connect(numberSpacing, &ScrSpinBox::valueChanged, this, &ColorPickerPattern::updatePattern); + connect(buttonFlipHorizontal, &QToolButton::toggled, this, &ColorPickerPattern::updatePattern); + connect(buttonFlipVertical, &QToolButton::toggled, this, &ColorPickerPattern::updatePattern); + connect(buttonScaleRatio, &LinkButton::toggled, this, &ColorPickerPattern::toggleScaleRatio); + connect(checkboxFollowsPath, &QCheckBox::toggled, this, &ColorPickerPattern::updatePattern); + connect(checkboxLumAlpha, &QCheckBox::toggled, this, &ColorPickerPattern::updatePattern); + connect(checkboxInvertedPattern, &QCheckBox::toggled, this, &ColorPickerPattern::updatePattern); +} + +void ColorPickerPattern::disconnectSlots() +{ + disconnect(listPattern, &QListWidget::itemClicked, this, &ColorPickerPattern::updateName); + disconnect(numberOffsetX, &ScrSpinBox::valueChanged, this, &ColorPickerPattern::updatePattern); + disconnect(numberOffsetY, &ScrSpinBox::valueChanged, this, &ColorPickerPattern::updatePattern); + disconnect(numberScaleX, &ScrSpinBox::valueChanged, this, &ColorPickerPattern::updateScaleX); + disconnect(numberScaleY, &ScrSpinBox::valueChanged, this, &ColorPickerPattern::updateScaleY); + disconnect(numberSkewX, &ScrSpinBox::valueChanged, this, &ColorPickerPattern::updatePattern); + disconnect(numberSkewY, &ScrSpinBox::valueChanged, this, &ColorPickerPattern::updatePattern); + disconnect(numberAngle, &ScrSpinBox::valueChanged, this, &ColorPickerPattern::updatePattern); + disconnect(numberSpacing, &ScrSpinBox::valueChanged, this, &ColorPickerPattern::updatePattern); + disconnect(buttonFlipHorizontal, &QToolButton::toggled, this, &ColorPickerPattern::updatePattern); + disconnect(buttonFlipVertical, &QToolButton::toggled, this, &ColorPickerPattern::updatePattern); + disconnect(buttonScaleRatio, &LinkButton::toggled, this, &ColorPickerPattern::toggleScaleRatio); + disconnect(checkboxFollowsPath, &QCheckBox::toggled, this, &ColorPickerPattern::updatePattern); + disconnect(checkboxLumAlpha, &QCheckBox::toggled, this, &ColorPickerPattern::updatePattern); + disconnect(checkboxInvertedPattern, &QCheckBox::toggled, this, &ColorPickerPattern::updatePattern); +} + +/* ********************************************************************************* * + * + * Members + * + * ********************************************************************************* */ + +void ColorPickerPattern::setPatternList(QHash<QString, ScPattern> *docPatterns) +{ + QSignalBlocker sigListPattern(listPattern); + + listPattern->clear(); + listPattern->setIconSize(QSize(48, 48)); + QStringList patK = docPatterns->keys(); + patK.sort(); + for (int a = 0; a < patK.count(); a++) + { + ScPattern sp = docPatterns->value(patK[a]); + QListWidgetItem *item = new QListWidgetItem(renderPattern(listPattern->iconSize(), sp), patK[a], listPattern); + item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); + } + listPattern->clearSelection(); +} + +CPPatternData ColorPickerPattern::patternData() +{ + return m_pattern; +} + +Context ColorPickerPattern::context() +{ + return m_context; +} + +void ColorPickerPattern::setContext(Context config) +{ + m_context = config; + + switch(m_context) + { + case Context::Line: + checkboxLumAlpha->setVisible(false); + checkboxInvertedPattern->setVisible(false); + checkboxFollowsPath->setVisible(true); + labelSpacing->setVisible(true); + break; + case Context::FillMask: + checkboxLumAlpha->setVisible(true); + checkboxInvertedPattern->setVisible(true); + checkboxFollowsPath->setVisible(false); + labelSpacing->setVisible(false); + break; + case Context::Fill: + checkboxLumAlpha->setVisible(false); + checkboxInvertedPattern->setVisible(false); + checkboxFollowsPath->setVisible(false); + labelSpacing->setVisible(false); + break; + default: + case Context::Simple: + break; + } + + updateSize(); +} + +void ColorPickerPattern::hideEditedPatterns(QStringList names) +{ + for (int i = 0; i < names.count(); i++) + { + QList<QListWidgetItem*> items = listPattern->findItems(names[i], Qt::MatchExactly); + if (items.count() > 0) + items[0]->setHidden(true); + } +} + +int ColorPickerPattern::type() +{ + switch(m_context){ + case Context::FillMask: + if (checkboxLumAlpha->isChecked()) + { + if (checkboxInvertedPattern->isChecked()) + return GradMask_PatternLumAlphaInverted; + else + return GradMask_PatternLumAlpha; + } + else + { + if (checkboxInvertedPattern->isChecked()) + return GradMask_PatternInverted; + else + return GradMask_Pattern; + } + break; + default: + return Gradient_Pattern; + break; + } +} + +QString ColorPickerPattern::toolTipText() const +{ + return QString( tr("Pattern: %1") ).arg(m_pattern.Name); +} + +void ColorPickerPattern::setDoc(ScribusDoc *doc) +{ + m_doc = doc; + unitChange(); +} + +void ColorPickerPattern::setPatternData(CPPatternData pattern) +{ + m_pattern = pattern; + + disconnectSlots(); + + // no patterns available + if (m_pattern.Name.isEmpty() && (listPattern->count() == 0)) + return; + // set name by first pattern in the list + if (m_pattern.Name.isEmpty() && (listPattern->count() > 0)) + m_pattern.Name = listPattern->item(0)->text(); + + QList<QListWidgetItem*> itl = listPattern->findItems(m_pattern.Name, Qt::MatchExactly); + if (itl.count() != 0) + { + QListWidgetItem *it = itl[0]; + listPattern->setCurrentItem(it); + } + else + listPattern->clearSelection(); + + numberOffsetX->setValue(m_pattern.OffsetX * unitGetRatioFromIndex(currentUnit)); + numberOffsetY->setValue(m_pattern.OffsetY * unitGetRatioFromIndex(currentUnit)); + numberScaleX->setValue(m_pattern.ScaleX * 100.0); + numberScaleY->setValue(m_pattern.ScaleY * 100.0); + numberSpacing->setValue(m_pattern.Spacing * 100.0); + numberSpacing->setEnabled(m_pattern.OnPath); + double asina = atan(m_pattern.SkewX); + numberSkewX->setValue(asina / (M_PI / 180.0)); + double asinb = atan(m_pattern.SkewY); + numberSkewY->setValue(asinb / (M_PI / 180.0)); + numberAngle->setValue(m_pattern.Angle); + buttonFlipHorizontal->setChecked(m_pattern.MirrorX); + buttonFlipVertical->setChecked(m_pattern.MirrorY); + checkboxFollowsPath->setChecked(m_pattern.OnPath); + buttonScaleRatio->setChecked( m_pattern.ScaleX == m_pattern.ScaleY ); + + connectSlots(); + +} + +/* ********************************************************************************* * + * + * Slots + * + * ********************************************************************************* */ + +void ColorPickerPattern::languageChange() +{ + sectionProperties->setText( tr("Properties") ); + sectionSwatches->setText( tr("Patterns") ); + + labelOffset->setText( tr("Offset") ); + labelScale->setText( tr("Scale") ); + labelSkew->setText( tr("Skew") ); + labelRotation->setText( tr("Rotation") ); + labelFlip->setText( tr("Flip") ); + labelX->setText( tr("X:") ); + labelY->setText( tr("Y:") ); + +} + +void ColorPickerPattern::iconSetChange() +{ + IconManager &iconManager = IconManager::instance(); + + buttonFlipHorizontal->setIcon( iconManager.loadIcon("16/flip-object-horizontal.png")); + buttonFlipVertical->setIcon( iconManager.loadIcon("16/flip-object-vertical.png")); +} + +void ColorPickerPattern::unitChange() +{ + if (!m_doc) + return; + + currentUnit = m_doc->unitIndex(); + + numberOffsetX->setNewUnit(currentUnit); + numberOffsetY->setNewUnit(currentUnit); +} + +void ColorPickerPattern::updatePattern() +{ + m_pattern.OffsetX = numberOffsetX->value() / unitGetRatioFromIndex(currentUnit); + m_pattern.OffsetY = numberOffsetY->value() / unitGetRatioFromIndex(currentUnit); + m_pattern.ScaleX = numberScaleX->value() / 100.0; + m_pattern.ScaleY = numberScaleY->value() / 100.0; + double a = M_PI / 180.0 * numberSkewX->value(); + double b = M_PI / 180.0 * numberSkewY->value(); + m_pattern.SkewX = tan(a); + m_pattern.SkewY = tan(b); + m_pattern.MirrorX = buttonFlipHorizontal->isChecked(); + m_pattern.MirrorY = buttonFlipVertical->isChecked(); + m_pattern.Spacing = numberSpacing->value() / 100.0; + m_pattern.Angle = numberAngle->value(); + m_pattern.OnPath = checkboxFollowsPath->isChecked(); + + numberSpacing->setEnabled(checkboxFollowsPath->isChecked()); + + emit patternChanged(); +} + +void ColorPickerPattern::updateScaleX() +{ + QSignalBlocker sigScaleY(numberScaleY); + + if (buttonScaleRatio->isChecked()) + numberScaleY->setValue(numberScaleX->value()); + + updatePattern(); +} + +void ColorPickerPattern::updateScaleY() +{ + QSignalBlocker sigScaleX(numberScaleX); + + if (buttonScaleRatio->isChecked()) + numberScaleX->setValue(numberScaleY->value()); + + updatePattern(); +} + +void ColorPickerPattern::updateName(QListWidgetItem *item) +{ + if (!item) + return; + m_pattern.Name = item->text(); + updatePattern(); +} + +void ColorPickerPattern::updateSize() +{ + int w = this->width(); + adjustSize(); + resize(w, sizeHint().height()); + emit sizeChanged(); +} + +void ColorPickerPattern::toggleScaleRatio() +{ + QSignalBlocker sigScaleY(numberScaleY); + + if (buttonScaleRatio->isChecked()) + { + numberScaleY->setValue(numberScaleX->value()); + updatePattern(); + buttonScaleRatio->setChecked(true); + } + else + buttonScaleRatio->setChecked(false); +} + + Index: scribus/ui/colorpicker/colorpicker_pattern.h =================================================================== --- scribus/ui/colorpicker/colorpicker_pattern.h (nicht existent) +++ scribus/ui/colorpicker/colorpicker_pattern.h (Arbeitskopie) @@ -0,0 +1,61 @@ +#ifndef COLORPICKER_PATTERN_H +#define COLORPICKER_PATTERN_H + +#include <QWidget> +#include "ui_colorpicker_pattern.h" +#include "scribusdoc.h" +#include "colorpicker_enum.h" + +class ColorPickerPattern : public QWidget, Ui::ColorPickerPattern +{ + Q_OBJECT + +public: + explicit ColorPickerPattern(QWidget *parent = nullptr); + ~ColorPickerPattern(){}; + + void setPatternList(QHash<QString, ScPattern> *docPatterns); + + CPPatternData patternData(); + + Context context(); + void setContext(Context config); + + void hideEditedPatterns(QStringList names); + + int type(); + + QString toolTipText() const; + +public slots: + void setDoc(ScribusDoc *doc); + void setPatternData(CPPatternData pattern); + void languageChange(); + void iconSetChange(); + void unitChange(); + +private slots: + void updatePattern(); + void updateScaleX(); + void updateScaleY(); + void updateName(QListWidgetItem *item); + void updateSize(); + void toggleScaleRatio(); + +private: + ScribusDoc *m_doc {nullptr}; + QBrush m_background; + Context m_context {Context::Simple}; + CPPatternData m_pattern; + int currentUnit {0}; + + void connectSlots(); + void disconnectSlots(); + +signals: + void patternChanged(); + void sizeChanged(); + +}; + +#endif // COLORPICKER_PATTERN_H Index: scribus/ui/colorpicker/colorpicker_pattern.ui =================================================================== --- scribus/ui/colorpicker/colorpicker_pattern.ui (nicht existent) +++ scribus/ui/colorpicker/colorpicker_pattern.ui (Arbeitskopie) @@ -0,0 +1,514 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>ColorPickerPattern</class> + <widget class="QWidget" name="ColorPickerPattern"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>271</width> + <height>496</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>0</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="SectionContainer" name="sectionProperties"> + <property name="title" stdset="0"> + <string>Properties</string> + </property> + <widget class="QWidget" name="widgetProperties"> + <layout class="QGridLayout" name="gridLayout_2"> + <property name="leftMargin"> + <number>8</number> + </property> + <property name="topMargin"> + <number>8</number> + </property> + <property name="rightMargin"> + <number>8</number> + </property> + <property name="bottomMargin"> + <number>8</number> + </property> + <property name="spacing"> + <number>4</number> + </property> + <item row="2" column="1" colspan="4"> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <property name="spacing"> + <number>16</number> + </property> + <item> + <widget class="FormWidget" name="labelRotation"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Rotation</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="numberAngle"/> + </item> + </layout> + </widget> + </item> + <item> + <widget class="FormWidget" name="labelSpacing"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Spacing</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_7"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="numberSpacing"/> + </item> + </layout> + </widget> + </item> + <item> + <widget class="FormWidget" name="labelFlip"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Flip</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QToolButton" name="buttonFlipHorizontal"> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="buttonFlipVertical"> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <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 row="1" column="1"> + <widget class="FormWidget" name="labelOffset"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Offset</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="numberOffsetY"/> + </item> + </layout> + </widget> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="labelX"> + <property name="text"> + <string>X:</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="ScrSpinBox" name="numberOffsetX"/> + </item> + <item row="0" column="5"> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="0"> + <widget class="FormWidget" name="formWidget_8"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string/> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <property name="preserveLabelSpace"> + <bool>true</bool> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_8"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QLabel" name="labelY"> + <property name="text"> + <string>Y:</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="1" column="4"> + <widget class="FormWidget" name="labelSkew"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Skew</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_6"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="numberSkewY"/> + </item> + </layout> + </widget> + </item> + <item row="1" column="2"> + <widget class="FormWidget" name="labelScale"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Scale</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_5"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="numberScaleY"/> + </item> + </layout> + </widget> + </item> + <item row="0" column="2"> + <widget class="ScrSpinBox" name="numberScaleX"/> + </item> + <item row="0" column="4"> + <widget class="ScrSpinBox" name="numberSkewX"/> + </item> + <item row="0" column="3" rowspan="2"> + <widget class="FormWidget" name="formWidget"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string/> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <property name="preserveLabelSpace"> + <bool>true</bool> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_9"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="LinkButton" name="buttonScaleRatio"> + <property name="text"> + <string/> + </property> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + </widget> + </item> + <item> + <widget class="SectionContainer" name="sectionSwatches"> + <property name="title" stdset="0"> + <string>Patterns</string> + </property> + <widget class="QListWidget" name="listPattern"/> + </widget> + </item> + <item> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>8</number> + </property> + <property name="topMargin"> + <number>4</number> + </property> + <property name="rightMargin"> + <number>8</number> + </property> + <property name="bottomMargin"> + <number>8</number> + </property> + <item> + <widget class="QCheckBox" name="checkboxLumAlpha"> + <property name="text"> + <string>Use Luminosity as Alpha</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="checkboxInvertedPattern"> + <property name="text"> + <string>User inverted Pattern</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="checkboxFollowsPath"> + <property name="text"> + <string>Pattern follows Path</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <customwidgets> + <customwidget> + <class>FormWidget</class> + <extends>QWidget</extends> + <header>ui/widgets/form_widget.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>SectionContainer</class> + <extends>QWidget</extends> + <header>ui/widgets/section_container.h</header> + <addpagemethod>setWidget</addpagemethod> + <container>1</container> + </customwidget> + <customwidget> + <class>ScrSpinBox</class> + <extends>QDoubleSpinBox</extends> + <header location="global">ui/scrspinbox.h</header> + </customwidget> + <customwidget> + <class>LinkButton</class> + <extends>QToolButton</extends> + <header>ui/linkbutton.h</header> + </customwidget> + </customwidgets> + <tabstops> + <tabstop>numberOffsetX</tabstop> + <tabstop>numberOffsetY</tabstop> + <tabstop>numberScaleX</tabstop> + <tabstop>numberScaleY</tabstop> + <tabstop>buttonScaleRatio</tabstop> + <tabstop>numberSkewX</tabstop> + <tabstop>numberSkewY</tabstop> + <tabstop>numberAngle</tabstop> + <tabstop>numberSpacing</tabstop> + <tabstop>buttonFlipHorizontal</tabstop> + <tabstop>buttonFlipVertical</tabstop> + <tabstop>checkboxLumAlpha</tabstop> + <tabstop>checkboxInvertedPattern</tabstop> + <tabstop>checkboxFollowsPath</tabstop> + </tabstops> + <resources/> + <connections/> +</ui> Index: scribus/ui/dasheditor.cpp =================================================================== --- scribus/ui/dasheditor.cpp (Revision 26070) +++ scribus/ui/dasheditor.cpp (Arbeitskopie) @@ -175,7 +175,7 @@ cHandle = palette().color(QPalette::WindowText); } - renderPointerHandle(&pw, QPointF(xPos, yPos), RADIUS * 2 - 2, cHandle ); + drawPointerHandle(&pw, QPointF(xPos, yPos), RADIUS * 2 - 2, cHandle ); } Index: scribus/ui/delegates/sclistitemdelegate.cpp =================================================================== --- scribus/ui/delegates/sclistitemdelegate.cpp (Revision 26070) +++ scribus/ui/delegates/sclistitemdelegate.cpp (Arbeitskopie) @@ -6,20 +6,41 @@ #include <QFlags> -ScListItemDelegate::ScListItemDelegate(QSize iconSize, TextPosition textPosition, QObject *parent) : QAbstractItemDelegate (parent) +ScListItemDelegate::ScListItemDelegate(QListView::ViewMode mode, QSize iconSize, TextPosition textPosition, Style style, QObject *parent) : QItemDelegate (parent) { setIconSize(iconSize); setTextPosition(textPosition); + setStyle(style); + setViewMode(mode); } void ScListItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const{ int padding = 8; - qreal margin = 4.5; + qreal margin = 2.5; int radius = 2; - QColor cHighlight = QApplication::palette().highlight().color(); + QPalette::ColorGroup cg = option.state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled; + QColor cBaseFill = option.palette.brush(cg, QPalette::AlternateBase).color(); + QColor cLinePen = option.palette.brush(cg, QPalette::Mid).color(); + QColor cText = option.palette.brush(cg, QPalette::Text).color(); + QColor cHighlight = option.palette.brush(cg, QPalette::Highlight).color(); + + QPen linePen(cLinePen, 1, Qt::SolidLine); + QPen lineMarkedPen(cHighlight, 1, Qt::SolidLine); + QPen fontPen(cText, 1, Qt::SolidLine); + + QBrush fillNormal(cBaseFill); cHighlight.setAlphaF(0.2); + QBrush fillSelected(cHighlight); + if(m_style == Style::Simple) + { + radius = 0; + margin = 0; + linePen = Qt::NoPen; + lineMarkedPen = Qt::NoPen; + } + QTextOption tOptions; QRect rIcon = option.rect; @@ -27,13 +48,7 @@ QRectF rItem = option.rect; rItem = rItem.adjusted(margin, margin, -margin, -margin); - QPen linePen(QApplication::palette().mid().color(), 1, Qt::SolidLine); - QPen lineMarkedPen(QApplication::palette().highlight().color(), 1, Qt::SolidLine); - QPen fontPen(QApplication::palette().text().color(), 1, Qt::SolidLine); - - QBrush fillNormal(QApplication::palette().alternateBase().color()); - QBrush fillSelected(cHighlight); - + painter->save(); painter->setRenderHint(QPainter::Antialiasing, true); if (option.state & QStyle::State_Selected) @@ -92,10 +107,29 @@ painter->setFont(QFont()); painter->drawText(rText, tOptions.flags(), title, &rText); } + + painter->restore(); } QSize ScListItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const{ - return option.rect.size(); + + QSize sh = option.rect.size(); + + switch(m_mode){ + default: + case QListView::ViewMode::IconMode: + { + } + break; + case QListView::ViewMode::ListMode: + { + sh.setWidth(0); + sh.setHeight(m_iconSize.height() + 16); + } + break; + } + + return sh;//QSize(sh.width(), sh.height()); } QSize ScListItemDelegate::iconSize() @@ -117,3 +151,23 @@ { m_textPosition = position; } + +ScListItemDelegate::Style ScListItemDelegate::style() +{ + return m_style; +} + +void ScListItemDelegate::setStyle(Style style) +{ + m_style = style; +} + +QListView::ViewMode ScListItemDelegate::viewMode() +{ + return m_mode; +} + +void ScListItemDelegate::setViewMode(QListView::ViewMode mode) +{ + m_mode = mode; +} Index: scribus/ui/delegates/sclistitemdelegate.h =================================================================== --- scribus/ui/delegates/sclistitemdelegate.h (Revision 26070) +++ scribus/ui/delegates/sclistitemdelegate.h (Arbeitskopie) @@ -1,10 +1,11 @@ #ifndef SCLISTITEMDELEGATE_H #define SCLISTITEMDELEGATE_H -#include <QAbstractItemDelegate> +#include <QItemDelegate> +#include <QListWidget> #include "scribusapi.h" -class SCRIBUS_API ScListItemDelegate : public QAbstractItemDelegate +class SCRIBUS_API ScListItemDelegate : public QItemDelegate { public: @@ -13,7 +14,12 @@ Right = 1 }; - ScListItemDelegate(QSize tileSize, TextPosition textPosition = TextPosition::Bottom, QObject *parent = nullptr); + enum Style { + Simple = 0, + Card = 1 + }; + + ScListItemDelegate(QListView::ViewMode mode, QSize tileSize, TextPosition textPosition = TextPosition::Bottom, Style style = Style::Card, QObject *parent = nullptr); virtual ~ScListItemDelegate(){}; void paint( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const; @@ -23,10 +29,16 @@ void setIconSize(QSize size); TextPosition textPosition(); void setTextPosition(TextPosition position); + Style style(); + void setStyle(Style style); + QListView::ViewMode viewMode(); + void setViewMode(QListView::ViewMode mode); private: - QSize m_iconSize = {QSize(64, 64)}; - TextPosition m_textPosition = {TextPosition::Bottom}; + QSize m_iconSize = { QSize(64, 64) }; + TextPosition m_textPosition = { TextPosition::Bottom }; + Style m_style = { Style::Card }; + QListView::ViewMode m_mode = { QListWidget::IconMode }; }; #endif // SCLISTITEMDELEGATE_H Index: scribus/ui/gradienteditor.cpp =================================================================== --- scribus/ui/gradienteditor.cpp (Revision 26070) +++ scribus/ui/gradienteditor.cpp (Arbeitskopie) @@ -5,11 +5,11 @@ for which a new license (GPL+exception) is in place. */ /*************************************************************************** - gradienteditor - description - ------------------- - begin : Mit Mai 26 2004 - copyright : (C) 2004 by Franz Schmid - email : Franz.Schmid@altmuehlnet.de + gradienteditor - description + ------------------- + begin : Mit Mai 26 2004 + copyright : (C) 2004 by Franz Schmid + email : Franz.Schmid@altmuehlnet.de ***************************************************************************/ /*************************************************************************** @@ -25,7 +25,7 @@ #include <QEvent> #include <QToolTip> -#include "util.h" +#include "util_gui.h" // Note : use temporarily editingFinished() signal to track value changes in stopPos, stopOpacity and // stopShade spinboxes. valueChanged() cause focus problems in these widgets due to signals emitted @@ -34,18 +34,24 @@ GradientEditor::GradientEditor(QWidget *pa) : QFrame(pa) { setupUi(this); - stopColor->setPixmapType(ColorCombo::fancyPixmaps); + stopPos->setDecimals(0); stopOpacity->setDecimals(0); stopShade->setDecimals(0); + + colorListBox = new ColorListBox(ColorListBox::fancyPixmap); + buttonColor->setContextWidget(colorListBox); + setExtendVisible(false); + initExtend(); + connect(stopPos , SIGNAL(valueChanged(double)), this, SLOT(changePos(double))); - connect(stopColor , SIGNAL(textActivated(QString)), this, SLOT(setStopColor(QString))); - connect(stopOpacity, SIGNAL(valueChanged(double)), this, SLOT(setStopTrans(double))); - connect(stopShade , SIGNAL(valueChanged(double)), this, SLOT(setStopShade(double))); + connect(stopOpacity, SIGNAL(valueChanged(double)), this, SLOT(setStopColor())); + connect(stopShade , SIGNAL(valueChanged(double)), this, SLOT(setStopColor())); connect(Preview, SIGNAL(selectedStop(VColorStop*)), this, SLOT(slotDisplayStop(VColorStop*))); - connect(Preview, SIGNAL(currStep(double)), this, SLOT(setPos(double))); - connect(Preview, SIGNAL(currStep(double)), this, SIGNAL(gradientChanged())); - connect(Preview, SIGNAL(gradientChanged()), this, SIGNAL(gradientChanged())); + connect(Preview, SIGNAL(selectedPosition(double)), this, SLOT(setPos(double))); + connect(colorListBox, SIGNAL(itemSelectionChanged()), this, SLOT(setStopColor())); + connect(this, SIGNAL(gradientChanged()), this, SLOT(updateColorButton())); + connect(comboExtend, &QComboBox::currentIndexChanged, this, &GradientEditor::repeatMethodChanged); } void GradientEditor::setGradient(const VGradient& grad) @@ -62,21 +68,19 @@ void GradientEditor::setColors(ColorList &colorList) { m_colorList = colorList; - stopColor->setColors(colorList, true); + colorListBox->setColors(colorList, true); } void GradientEditor::setPos(double p) { - stopPos->blockSignals(true); + QSignalBlocker sig1(stopPos); stopPos->setValue(qRound(p * 100)); - stopPos->blockSignals(false); } void GradientEditor::setGradTrans(double val) { - stopOpacity->blockSignals(true); + QSignalBlocker sig1(stopOpacity); stopOpacity->setValue(qRound(val * 100)); - stopOpacity->blockSignals(false); } void GradientEditor::slotDisplayStop(VColorStop* stop) @@ -84,12 +88,15 @@ setPos(stop->rampPoint); slotColor(stop->name, stop->shade); setGradTrans(stop->opacity); + updateColorButton(); + emit gradientChanged(); } void GradientEditor::slotColor(const QString& name, int shade) { - stopColor->blockSignals(true); - stopShade->blockSignals(true); + QSignalBlocker sig1(colorListBox); + QSignalBlocker sig2(stopShade); + stopShade->setValue(shade); QString nam = name; if (name == CommonStrings::None) @@ -100,12 +107,10 @@ } else { - stopShade->setEnabled(true); - stopOpacity->setEnabled(true); + stopShade->setEnabled(Preview->isEditable()); + stopOpacity->setEnabled(Preview->isEditable()); } - setCurrentComboItem(stopColor, nam); - stopColor->blockSignals(false); - stopShade->blockSignals(false); + colorListBox->setCurrentColor(nam); } void GradientEditor::setGradientEditable(bool val) @@ -112,14 +117,36 @@ { stopShade->setEnabled(val); stopOpacity->setEnabled(val); - stopColor->setEnabled(val); + buttonColor->setEnabled(val); stopPos->setEnabled(val); - Preview->setGradientEditable(val); + Preview->setIsEditable(val); } +VGradient::VGradientRepeatMethod GradientEditor::repeatMethod() +{ + return qvariant_cast<VGradient::VGradientRepeatMethod>(comboExtend->currentData()); +} + +void GradientEditor::setRepeatMethod(VGradient::VGradientRepeatMethod method) +{ + QSignalBlocker sigExtend(comboExtend); + + int index = comboExtend->findData(method); + if ( index != -1 ) + comboExtend->setCurrentIndex(index); + else + comboExtend->setCurrentIndex(0); + +} + +void GradientEditor::setExtendVisible(bool visible) +{ + extendLabel->setVisible(visible); +} + void GradientEditor::changePos(double v) { - Preview->setActStep(v / 100.0); + Preview->setActiveStopPosition(v / 100.0); emit gradientChanged(); } @@ -129,37 +156,25 @@ return ScColorEngine::getShadeColorProof(color, m_colorList.document(), shad); } -void GradientEditor::setStopColor(const QString &Color) +void GradientEditor::setStopColor() { + QString Color = colorListBox->currentColor(); + if (Color == CommonStrings::tr_NoneColor) { - Preview->setActColor(QColor(0, 0, 0, 0), CommonStrings::None, 100); - Preview->setActTrans(0.0); + Preview->setActiveStopColor(QColor(0, 0, 0, 0), CommonStrings::None, 100, 0.0); stopShade->setEnabled(false); stopOpacity->setEnabled(false); } else { - Preview->setActColor(setColor(Color, stopShade->value()), Color, stopShade->value()); - Preview->setActTrans(stopOpacity->value() / 100.0); - stopShade->setEnabled(true); - stopOpacity->setEnabled(true); + Preview->setActiveStopColor(setColor(Color, stopShade->value()), Color, stopShade->value(), stopOpacity->value() / 100.0); + stopShade->setEnabled(Preview->isEditable()); + stopOpacity->setEnabled(Preview->isEditable()); } emit gradientChanged(); } -void GradientEditor::setStopTrans(double val) -{ - Preview->setActTrans(val / 100.0); - emit gradientChanged(); -} - -void GradientEditor::setStopShade(double val) -{ - Preview->setActColor(setColor(stopColor->currentText(), val), stopColor->currentText(), val); - emit gradientChanged(); -} - void GradientEditor::changeEvent(QEvent *e) { if (e->type() == QEvent::LanguageChange) @@ -172,12 +187,43 @@ void GradientEditor::languageChange() { + initExtend(); retranslateUi(this); } +void GradientEditor::updateColorButton() +{ + QString colorName = colorListBox->currentColor(); + QBrush brush; + + if (colorName == CommonStrings::tr_NoneColor || colorName == CommonStrings::None) + brush = renderEmptyPattern(buttonColor->backgroundDotSize()); + else + { + const ScColor& color = m_colorList[colorName]; + + QColor qColorShade = ScColorEngine::getDisplayColor(color, m_colorList.document(), stopShade->value()); + QColor qColor = ScColorEngine::getDisplayColor(color, m_colorList.document(), 100.0); + + brush = QBrush(renderColor(buttonColor->backgroundDotSize(), qColor, qColorShade, stopOpacity->value() / 100.0)); + } + + buttonColor->setBackground(brush); +} + +void GradientEditor::initExtend() +{ + int oldGradientExtendIndex = comboExtend->currentIndex(); + QSignalBlocker sigExtend(comboExtend); + comboExtend->clear(); + comboExtend->addItem( tr("None"), VGradient::none ); + comboExtend->addItem( tr("Pad"), VGradient::pad ); + comboExtend->setCurrentIndex(oldGradientExtendIndex); +} + bool GradientEditor::event(QEvent * event) { - if (event->type() == QEvent::ToolTip) + if (event->type() == QEvent::ToolTip) { QHelpEvent *helpEvent = static_cast<QHelpEvent *>(event); QToolTip::showText(helpEvent->globalPos(), tr( "Add, change or remove color stops here" ), Preview, QRect(10,43, Preview->width()-20, 13)); Index: scribus/ui/gradienteditor.h =================================================================== --- scribus/ui/gradienteditor.h (Revision 26070) +++ scribus/ui/gradienteditor.h (Arbeitskopie) @@ -37,6 +37,7 @@ #include "gradientpreview.h" #include "ui_gradienteditor.h" #include "sccolorengine.h" +#include "colorlistbox.h" class SCRIBUS_API GradientEditor : public QFrame, Ui::GradientEditorBase { @@ -52,6 +53,11 @@ QColor setColor(const QString& colorName, int shad); void setGradientEditable(bool val); + VGradient::VGradientRepeatMethod repeatMethod(); + void setRepeatMethod(VGradient::VGradientRepeatMethod method); + + void setExtendVisible(bool visible); + public slots: void setPos(double); void changePos(double); @@ -58,17 +64,24 @@ void slotColor(const QString& name, int shade); void slotDisplayStop(VColorStop* stop); void setGradTrans(double val); - void setStopColor(const QString &); - void setStopTrans(double val); - void setStopShade(double val); + void setStopColor(); +// void setStopTrans(double val); +// void setStopShade(double val); void languageChange(); +private slots: + void updateColorButton(); + signals: void gradientChanged(); + void repeatMethodChanged(); protected: ColorList m_colorList; + ColorListBox *colorListBox; + void initExtend(); + void changeEvent(QEvent *e) override; bool event(QEvent * event ) override; }; Index: scribus/ui/gradienteditor.ui =================================================================== --- scribus/ui/gradienteditor.ui (Revision 26070) +++ scribus/ui/gradienteditor.ui (Arbeitskopie) @@ -6,8 +6,8 @@ <rect> <x>0</x> <y>0</y> - <width>210</width> - <height>178</height> + <width>369</width> + <height>128</height> </rect> </property> <property name="frameShape"> @@ -16,139 +16,285 @@ <property name="frameShadow"> <enum>QFrame::Plain</enum> </property> - <layout class="QGridLayout" name="gridLayout"> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>4</number> + </property> <property name="leftMargin"> - <number>0</number> + <number>8</number> </property> <property name="topMargin"> - <number>0</number> + <number>8</number> </property> <property name="rightMargin"> - <number>0</number> + <number>8</number> </property> <property name="bottomMargin"> - <number>0</number> + <number>4</number> </property> - <property name="spacing"> - <number>3</number> - </property> - <item row="0" column="0" colspan="2"> - <widget class="GradientPreview" name="Preview"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>200</width> - <height>70</height> - </size> - </property> - <property name="maximumSize"> - <size> - <width>3000</width> - <height>70</height> - </size> - </property> - <property name="frameShape"> - <enum>QFrame::Panel</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Sunken</enum> - </property> - <property name="lineWidth"> - <number>2</number> - </property> - </widget> + <item> + <widget class="GradientPreview" name="Preview" native="true"/> </item> - <item row="1" column="0"> - <widget class="QLabel" name="stopPosLabel"> - <property name="text"> - <string>Position:</string> + <item> + <layout class="QGridLayout" name="gridLayout_2"> + <property name="leftMargin"> + <number>0</number> </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="ScrSpinBox" name="stopPos"> - <property name="suffix"> - <string> %</string> + <property name="rightMargin"> + <number>0</number> </property> - <property name="maximum"> - <number>100</number> + <property name="spacing"> + <number>4</number> </property> - </widget> + <item row="0" column="3"> + <widget class="FormWidget" name="stopOpacityLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Opacity</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="stopOpacity"> + <property name="suffix"> + <string> %</string> + </property> + <property name="decimals"> + <number>0</number> + </property> + <property name="maximum"> + <double>100.000000000000000</double> + </property> + <property name="singleStep"> + <double>10.000000000000000</double> + </property> + <property name="value"> + <double>100.000000000000000</double> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="0" column="0"> + <widget class="FormWidget" name="stopPosLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Position</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="stopPos"> + <property name="suffix"> + <string> %</string> + </property> + <property name="decimals"> + <number>0</number> + </property> + <property name="maximum"> + <double>100.000000000000000</double> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="0" column="5"> + <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> + <item row="0" column="1"> + <widget class="FormWidget" name="stopColorLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Color</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ColorButton" name="buttonColor"> + <property name="text"> + <string/> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="0" column="2"> + <widget class="FormWidget" name="stopShadeLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Shade</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="stopShade"> + <property name="suffix"> + <string> %</string> + </property> + <property name="decimals"> + <number>0</number> + </property> + <property name="maximum"> + <double>100.000000000000000</double> + </property> + <property name="singleStep"> + <double>10.000000000000000</double> + </property> + <property name="value"> + <double>100.000000000000000</double> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="0" column="4"> + <widget class="FormWidget" name="extendLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Extend</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_5"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QComboBox" name="comboExtend"/> + </item> + </layout> + </widget> + </item> + </layout> </item> - <item row="2" column="0"> - <widget class="QLabel" name="stopColorLabel"> - <property name="text"> - <string>Color:</string> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="ColorCombo" name="stopColor"/> - </item> - <item row="3" column="0"> - <widget class="QLabel" name="stopOpacityLabel"> - <property name="text"> - <string>Opacity:</string> - </property> - </widget> - </item> - <item row="3" column="1"> - <widget class="ScrSpinBox" name="stopOpacity"> - <property name="suffix"> - <string> %</string> - </property> - <property name="maximum"> - <number>100</number> - </property> - <property name="singleStep"> - <number>10</number> - </property> - <property name="value"> - <number>100</number> - </property> - </widget> - </item> - <item row="4" column="0"> - <widget class="QLabel" name="stopShadeLabel"> - <property name="text"> - <string>Shade:</string> - </property> - </widget> - </item> - <item row="4" column="1"> - <widget class="ScrSpinBox" name="stopShade"> - <property name="suffix"> - <string> %</string> - </property> - <property name="maximum"> - <number>100</number> - </property> - <property name="singleStep"> - <number>10</number> - </property> - <property name="value"> - <number>100</number> - </property> - </widget> - </item> </layout> </widget> <customwidgets> <customwidget> - <class>ColorCombo</class> - <extends>QComboBox</extends> - <header>ui/colorcombo.h</header> + <class>FormWidget</class> + <extends>QWidget</extends> + <header>ui/widgets/form_widget.h</header> + <container>1</container> </customwidget> <customwidget> - <class>GradientPreview</class> - <extends>QFrame</extends> - <header>ui/gradientpreview.h</header> - <container>1</container> + <class>ColorButton</class> + <extends>QToolButton</extends> + <header>ui/widgets/color_button.h</header> </customwidget> <customwidget> <class>ScrSpinBox</class> @@ -155,7 +301,20 @@ <extends>QDoubleSpinBox</extends> <header location="global">ui/scrspinbox.h</header> </customwidget> + <customwidget> + <class>GradientPreview</class> + <extends>QWidget</extends> + <header>ui/gradientpreview.h</header> + <container>1</container> + </customwidget> </customwidgets> + <tabstops> + <tabstop>stopPos</tabstop> + <tabstop>buttonColor</tabstop> + <tabstop>stopShade</tabstop> + <tabstop>stopOpacity</tabstop> + <tabstop>comboExtend</tabstop> + </tabstops> <resources/> <connections/> </ui> Index: scribus/ui/gradientpreview.cpp =================================================================== --- scribus/ui/gradientpreview.cpp (Revision 26070) +++ scribus/ui/gradientpreview.cpp (Arbeitskopie) @@ -21,8 +21,551 @@ * * ***************************************************************************/ -#include <algorithm> +#include "gradientpreview.h" +#include <QPainter> +#include <QPaintEvent> #include <QApplication> +#include "util_gui.h" +#include "iconmanager.h" + +const int RADIUS = 6; +const int GRADIENT_HEIGHT = 20; + +/* ********************************************************************************* * + * + * Constructor + Setup + * + * ********************************************************************************* */ + +GradientPreview::GradientPreview(QWidget *parent) + : QWidget{parent} +{ + + int h = scaleRect().height() + canvasRect().height() + RADIUS * 3; + + setMinimumSize(QSize(200, h)); + setMouseTracking(true); + setFocusPolicy(Qt::ClickFocus); + + setup(); + +} + +void GradientPreview::setup() +{ + m_activeStop = 0; + m_tmpStop = 0; + m_isEditable = true; + m_mousePos = QPointF(); + + QColor color; + fill_gradient.clearStops(); + + color = QColor(255,255,255); + fill_gradient.addStop( color, 0.0, 0.5, 1.0 ); + + color = QColor(0,0,0); + fill_gradient.addStop( color, 1.0, 0.5, 1.0 ); + +} + + +/* ********************************************************************************* * + * + * Private Methods + * + * ********************************************************************************* */ + +int GradientPreview::stopAtPosition(QPoint position) +{ + QList<VColorStop*> cstops = fill_gradient.colorStops(); + for (int i = 0; i < cstops.count(); ++i) + { + int stopPos = percentToPosition(cstops.at(i)->rampPoint); + if (stopRect(stopPos).contains(position) ) + return i; + } + + return -1; +} + +double GradientPreview::percentFromPosition(QPointF position) +{ + double t = static_cast<double>((position.x() - RADIUS)) / static_cast<double>(saveAreaRect().width()); + return qBound(0., t, 1.); +} + +int GradientPreview::percentToPosition(double t) +{ + return qRound(t * saveAreaRect().width() + RADIUS ); +} + + +int GradientPreview::mapPositionToGrid(qreal pos) +{ + return static_cast<int>(pos * 100 * ratio() + .5); +} + + +void GradientPreview::addStop(QPoint mousePosition) +{ + QColor colorL = activeStop()->color; + QString nameL = activeStop()->name; + double opacityL = activeStop()->opacity; + double shadeL = activeStop()->shade; + + QColor colorR = activeStop()->color; + QString nameR = activeStop()->name; + double opacityR = activeStop()->opacity; + double shadeR = activeStop()->shade; + + double t = percentFromPosition(mousePosition); + double mid = 0.5; + + // Add tmp stop + fill_gradient.addStop(colorL, t, mid, opacityL, nameL, shadeL); + sortStops(); + + // Update values + m_activeStop = stopAtPosition(mousePosition); + m_tmpStop = m_activeStop; + + + // The following code calculate the blend color between two neighbor stops of the new one. + // Currently commented out because Scribus don't support calculated colors without ID (color name) yet. +/* + VColorStop *stopL; + VColorStop *stopR; + + // Get left stop + if (m_activeStop - 1 >= 0) + stopL = activeStop(-1); + else + stopL = activeStop(1); + + colorL = stopL->color; + shadeL = stopL->shade; + opacityL = stopL->opacity; + nameL = stopL->name; + + // Get right stop + if (m_activeStop + 1 < fill_gradient.colorStops().count()) + stopR = activeStop(1); + else + stopR = activeStop(-1); + + colorR = stopR->color; + shadeR = stopR->shade; + opacityR = stopR->opacity; + nameR = stopR->name; + + + VColorStop stop = computeInBetweenStop(stopL, stopR, t); + fill_gradient.setStop(stop.color, t, mid, stop.opacity, stop.name, stop.shade); +*/ + + // add color from active stop + fill_gradient.setStop(colorL, t, mid, opacityL, nameL, shadeL); + + // Update UI + repaint(); + + if(m_activeStop > -1) + { + emitStop(); + } + + +} + +void GradientPreview::removeStop() +{ + QList<VColorStop*> cstops = fill_gradient.colorStops(); + + // Remove stop if it is not first or last one + if ( m_activeStop != -1 && cstops.count() > 2) + { + fill_gradient.removeStop(m_activeStop); + m_activeStop = qMax(m_activeStop - 1, 0); + m_tmpStop = m_activeStop; + + repaint(); + emitStop(); + } +} + +void GradientPreview::emitStopPosition() +{ + if (!fill_gradient.colorStops().isEmpty()) + emit selectedPosition(activeStop()->rampPoint); +} + +void GradientPreview::emitStop() +{ + if (!fill_gradient.colorStops().isEmpty()) + emit selectedStop(activeStop()); +} + +void GradientPreview::updateTmpStop(double t) +{ + // update stop position + if(m_activeStop != -1) + { + QList<VColorStop*> cstops = fill_gradient.colorStops(); + cstops.at(m_activeStop)->rampPoint = t; + + std::stable_sort(cstops.begin(), cstops.end(), compareStops); + for(int i = 0; i < cstops.count(); i++) + { + VColorStop *stop = cstops.at(i); + if(stop->rampPoint == t) + m_tmpStop = i; + } + + repaint(); + + } +} + +void GradientPreview::sortStops() +{ + QList<VColorStop*> cstops = fill_gradient.colorStops(); + std::stable_sort(cstops.begin(), cstops.end(), compareStops); + + VGradient grad(fill_gradient); + grad.clearStops(); + + foreach(VColorStop *stop, cstops) + grad.addStop(*stop); + + fill_gradient = grad; + +} + +/* ********************************************************************************* * + * + * Events + * + * ********************************************************************************* */ + +void GradientPreview::paintEvent(QPaintEvent *e) +{ + + QList<VColorStop*> cstops = fill_gradient.colorStops(); + std::stable_sort(cstops.begin(), cstops.end(), compareStops); + + QImage pixm(canvasRect().width(), canvasRect().height(), QImage::Format_ARGB32_Premultiplied); + + // Draw Background + QPainter pb(&pixm); + renderCheckerPattern(&pb, pixm.rect()); + pb.end(); + + // Draw Gradient + ScPainter *p = new ScPainter(&pixm, pixm.width(), pixm.height()); + p->setPen(Qt::black, 1, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); + p->setFillMode(ScPainter::Gradient); + p->fill_gradient = fill_gradient; + p->setGradient(VGradient::linear, FPoint(0, 0), FPoint(pixm.width(), 0), FPoint(0, 0), 1.0, 0.0); + p->drawRect(0, 0, pixm.width(), pixm.height()); + p->end(); + delete p; + + // Draw UI + QPainter pw(this); + pw.drawImage(canvasRect().left(), canvasRect().top(), pixm); + pw.setPen(palette().color(QPalette::Midlight)); + pw.setBrush(Qt::NoBrush); + pw.drawRect(QRectF(canvasRect()).adjusted(.5, .5, -.5, -.5)); + + if (isEditable()) + { + pw.setRenderHint(QPainter::Antialiasing, true); + + // Draw Stops + for (int i = 0; i < fill_gradient.stops(); ++i) + { + qreal sPos = cstops.at(i)->rampPoint; + qreal xPos = mapPositionToGrid(sPos) + saveAreaRect().left() + .5; + qreal yPos = handleRect(sPos).top() + 0.5; + + // Draw Marker + if (m_tmpStop == i) + { + QPainterPath marker; + marker.moveTo( QPointF(xPos - 5, canvasRect().top() - 5.5) ); + marker.lineTo( QPointF(xPos + 5, canvasRect().top() - 5.5) ); + marker.lineTo( QPointF(xPos, canvasRect().top()) ); + marker.closeSubpath(); + + pw.setPen(QPen(palette().color(QPalette::Window), 1)); + pw.setBrush(palette().color(QPalette::Highlight)); + pw.drawPath(marker); + } + + bool isEmpty = cstops.at(i)->name == CommonStrings::tr_NoneColor; + drawPointerHandle(&pw, QPointF(xPos, yPos), RADIUS * 2 - 2, cstops.at(i)->color, isEmpty); + + } + } + + pw.end(); + + QWidget::paintEvent(e); + +} + +void GradientPreview::keyPressEvent(QKeyEvent *e) +{ + if (isEditable()) + if(e->key() == Qt::Key_Delete || e->key() == Qt::Key_Backspace) + removeStop(); +} + +void GradientPreview::mousePressEvent(QMouseEvent *m) +{ + QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); + + if (isEditable()){ + + if (m->button() == Qt::LeftButton) + { + m_activeStop = stopAtPosition(m->pos()); + m_tmpStop = m_activeStop; + + if (m_activeStop == -1) + addStop(m->pos()); + else + { + repaint(); + emitStop(); + } + + } + } + else + m_activeStop = m_tmpStop = -1; + +} + +void GradientPreview::mouseReleaseEvent(QMouseEvent *m) +{ + + QApplication::restoreOverrideCursor(); + + if (isEditable()) + { + if (m->button() == Qt::LeftButton) + { + if (isMouseOutside(m->pos())) + removeStop(); + else + { + sortStops(); + m_activeStop = m_tmpStop; + repaint(); + emitStop(); + } + + } + } +} + +void GradientPreview::mouseMoveEvent(QMouseEvent *m) +{ + QApplication::changeOverrideCursor(QCursor(Qt::ArrowCursor)); + + if (isEditable()) + { + + m_mousePos = m->position(); + + // Set Hover Cursor + if (saveAreaRect().contains(m_mousePos.toPoint()) ) + { + if (stopAtPosition(m_mousePos.toPoint()) > -1) + setCursor(QCursor(Qt::SizeHorCursor)); + else + setCursor(IconManager::instance().loadCursor("AddPoint.png", 1, 1)); + } + + // Press Left Mouse + if (m->buttons() & Qt::LeftButton) + { + double newPos = percentFromPosition(m_mousePos); + updateTmpStop(newPos); + emitStopPosition(); + + QList<VColorStop*> cstops = fill_gradient.colorStops(); + // Set "remove" cursor if gradient has more than 2 stops + if (isMouseOutside(m->pos()) && cstops.count() > 2) + QApplication::changeOverrideCursor(IconManager::instance().loadCursor("DelPoint.png", 1, 1)); + + } + } + + +} + + +/* ********************************************************************************* * + * + * Public Members + * + * ********************************************************************************* */ + +void GradientPreview::setActiveStopColor(const QColor &c, const QString &n, int s, double a) +{ + if (m_activeStop == -1) + return; + + activeStop()->color = c; + activeStop()->name = n; + activeStop()->opacity = a; + activeStop()->shade = s; + repaint(); +} + +QColor GradientPreview::activeStopColor() +{ + if (m_activeStop == -1) + return QColor(); + + return activeStop()->color; + +} + +void GradientPreview::setActiveStopPosition(double t) +{ + if (m_activeStop == -1) + return; + + updateTmpStop(t); + repaint(); +} + + +void GradientPreview::setIsEditable(bool isEditable) +{ + m_isEditable = isEditable; + repaint(); +} + +bool GradientPreview::isEditable() +{ + return m_isEditable; +} + +void GradientPreview::setGradient(const VGradient &gradient) +{ + if ((gradient.colorStops().count() == fill_gradient.colorStops().count()) && (m_activeStop >= 0)) + { + int diffStops = 0; + for (int i = 0; i < fill_gradient.colorStops().count(); ++i) + { + VColorStop* stop1 = gradient.colorStops().at(i); + VColorStop* stop2 = fill_gradient.colorStops().at(i); + if ((stop1->color != stop2->color) || (stop1->midPoint != stop2->midPoint) || + (stop1->name != stop2->name) || (stop1->opacity != stop2->opacity) || + (stop1->rampPoint != stop2->rampPoint) || (stop1->shade != stop2->shade)) + { + ++diffStops; + } + } + if (diffStops > 1) + m_activeStop = 0; + } + + if ((m_activeStop < 0) && (gradient.colorStops().count() > 0)) + m_activeStop = 0; + + if (m_activeStop >= gradient.colorStops().count()) + m_activeStop = 0; + + fill_gradient = gradient; + + repaint(); +} + +const VGradient &GradientPreview::gradient() +{ + + // QList<VColorStop*> cstops = fill_gradient.colorStops(); + // std::stable_sort(cstops.begin(), cstops.end(), compareStops); + + // VGradient &grad(fill_gradient); + // grad.clearStops(); + + // foreach(VColorStop *stop, cstops){ + // grad.addStop(*stop); + // } + + return fill_gradient; +} + +void GradientPreview::updateDisplay() +{ + repaint(); + + if (!fill_gradient.colorStops().isEmpty()) + emit selectedStop(activeStop()); +} + +/* ********************************************************************************* * + * + * Private Members + * + * ********************************************************************************* */ + +QRect GradientPreview::saveAreaRect() +{ + return QRect(RADIUS, 0, width() - RADIUS * 2 - 2, height() - 4); +} + +QRect GradientPreview::canvasRect() +{ + return QRect(RADIUS, scaleRect().bottom(), width() - RADIUS * 2 - 2, GRADIENT_HEIGHT); +} + +QRect GradientPreview::scaleRect() +{ + return QRect(RADIUS, 0, width() - RADIUS * 2 - 2, 6); +} + +QRect GradientPreview::handleRect(int center) +{ + return QRect(center - RADIUS, canvasRect().bottom(), RADIUS * 2, saveAreaRect().bottom()); +} + +QRect GradientPreview::stopRect(int center) +{ + return QRect(center - RADIUS, saveAreaRect().top(), RADIUS * 2, saveAreaRect().bottom()); +} + +qreal GradientPreview::ratio() +{ + return saveAreaRect().width() / 100.0; +} + +bool GradientPreview::isMouseOutside(QPoint mouse) +{ + return (mouse.y() <= rect().top() || mouse.y() >= rect().bottom()); +} + + +VColorStop *GradientPreview::activeStop(int offset) const +{ + if(m_activeStop + offset < 0) + return fill_gradient.colorStops().first(); + + if(m_activeStop + offset >= fill_gradient.colorStops().count()) + return fill_gradient.colorStops().last(); + + return fill_gradient.colorStops().at(m_activeStop + offset); +} + +/*#include <algorithm> +#include <QApplication> #include <QCursor> #include <QEvent> #include <QMenu> @@ -409,3 +952,4 @@ isEditable = val; repaint(); } +*/ Index: scribus/ui/gradientpreview.h =================================================================== --- scribus/ui/gradientpreview.h (Revision 26070) +++ scribus/ui/gradientpreview.h (Arbeitskopie) @@ -34,11 +34,13 @@ #include <QHBoxLayout> class QEvent; +class ScColor; #include "scribusapi.h" #include "vgradient.h" -class SCRIBUS_API GradientPreview : public QFrame + +/*class SCRIBUS_API GradientPreview : public QFrame { Q_OBJECT @@ -87,4 +89,64 @@ void currStep(double); void gradientChanged(); }; +*/ + +class SCRIBUS_API GradientPreview : public QWidget +{ + Q_OBJECT +public: + explicit GradientPreview(QWidget *parent = nullptr); + ~GradientPreview() {}; + void paintEvent(QPaintEvent *e); + void keyPressEvent(QKeyEvent *e); + void mousePressEvent(QMouseEvent *m); + void mouseReleaseEvent(QMouseEvent *m); + void mouseMoveEvent(QMouseEvent *m); + + void setActiveStopColor(const QColor& c, const QString& n, int s, double a); + QColor activeStopColor(); + + void setActiveStopPosition(double t); + + void setIsEditable(bool isEditable); + bool isEditable(); + + void setGradient(const VGradient& gradient); + const VGradient& gradient(); + + void updateDisplay(); + +private: + VGradient fill_gradient; + QPointF m_mousePos; + bool m_isEditable; + int m_activeStop; + int m_tmpStop; + + QRect saveAreaRect(); + QRect canvasRect(); + QRect scaleRect(); + QRect handleRect(int center); + QRect stopRect(int center); + qreal ratio(); + bool isMouseOutside(QPoint mouse); + int mapPositionToGrid(qreal pos); + int stopAtPosition(QPoint position); + VColorStop *activeStop(int offset = 0) const; + double percentFromPosition(QPointF position); + int percentToPosition(double t); + + void setup(); + void addStop(QPoint mousePosition); + void removeStop(); + void emitStopPosition(); + void emitStop(); + void updateTmpStop(double t); + void sortStops(); + +signals: + void selectedStop(VColorStop*); + void selectedPosition(double); + +}; #endif Index: scribus/ui/gradientvectorbase.ui =================================================================== --- scribus/ui/gradientvectorbase.ui (Revision 26070) +++ scribus/ui/gradientvectorbase.ui (nicht existent) @@ -1,1078 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>GradientVectorBase</class> - <widget class="ScrPaletteBase" name="GradientVectorBase"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>267</width> - <height>178</height> - </rect> - </property> - <property name="minimumSize"> - <size> - <width>0</width> - <height>0</height> - </size> - </property> - <property name="windowTitle"> - <string>Gradient Vector</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <property name="leftMargin"> - <number>9</number> - </property> - <property name="topMargin"> - <number>9</number> - </property> - <property name="rightMargin"> - <number>9</number> - </property> - <property name="bottomMargin"> - <number>9</number> - </property> - <item> - <widget class="QStackedWidget" name="stackedWidget"> - <property name="currentIndex"> - <number>0</number> - </property> - <widget class="QWidget" name="pageLinear"> - <layout class="QGridLayout" name="gridLayout_3"> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item row="0" column="3"> - <widget class="ScrSpinBox" name="gY1"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="ScrSpinBox" name="gX1"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="label_5"> - <property name="text"> - <string>Skew:</string> - </property> - </widget> - </item> - <item row="1" column="3"> - <widget class="ScrSpinBox" name="gY2"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="0" column="2"> - <widget class="QLabel" name="label_2"> - <property name="text"> - <string>/</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="ScrSpinBox" name="gX2"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="0" column="0"> - <widget class="QLabel" name="label"> - <property name="text"> - <string>Start:</string> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="ScrSpinBox" name="gSk"> - <property name="minimum"> - <double>-89.000000000000000</double> - </property> - <property name="maximum"> - <double>89.000000000000000</double> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_3"> - <property name="text"> - <string>End:</string> - </property> - </widget> - </item> - <item row="1" column="2"> - <widget class="QLabel" name="label_4"> - <property name="text"> - <string>/</string> - </property> - </widget> - </item> - <item row="3" column="1"> - <spacer name="verticalSpacer_3"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - <widget class="QWidget" name="pageRadial"> - <layout class="QGridLayout" name="gridLayout"> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item row="4" column="1"> - <widget class="ScrSpinBox" name="gSc"> - <property name="minimum"> - <double>0.010000000000000</double> - </property> - <property name="maximum"> - <double>100.000000000000000</double> - </property> - <property name="value"> - <double>100.000000000000000</double> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="ScrSpinBox" name="gX2_2"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="ScrSpinBox" name="gX1_2"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="0" column="2"> - <widget class="QLabel" name="label_6"> - <property name="text"> - <string>/</string> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="label_11"> - <property name="text"> - <string>Focal:</string> - </property> - </widget> - </item> - <item row="1" column="2"> - <widget class="QLabel" name="label_10"> - <property name="text"> - <string>/</string> - </property> - </widget> - </item> - <item row="2" column="2"> - <widget class="QLabel" name="label_12"> - <property name="text"> - <string>/</string> - </property> - </widget> - </item> - <item row="1" column="3"> - <widget class="ScrSpinBox" name="gY2_2"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="0" column="3"> - <widget class="ScrSpinBox" name="gY1_2"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="ScrSpinBox" name="gFX"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="3" column="1"> - <widget class="ScrSpinBox" name="gSk_2"> - <property name="minimum"> - <double>-89.000000000000000</double> - </property> - <property name="maximum"> - <double>89.000000000000000</double> - </property> - </widget> - </item> - <item row="4" column="0"> - <widget class="QLabel" name="label_13"> - <property name="text"> - <string>Scale:</string> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_9"> - <property name="text"> - <string>End:</string> - </property> - </widget> - </item> - <item row="3" column="0"> - <widget class="QLabel" name="label_7"> - <property name="text"> - <string>Skew:</string> - </property> - </widget> - </item> - <item row="2" column="3"> - <widget class="ScrSpinBox" name="gFY"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="0" column="0"> - <widget class="QLabel" name="label_8"> - <property name="text"> - <string>Start:</string> - </property> - </widget> - </item> - <item row="5" column="1"> - <spacer name="verticalSpacer_5"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - <widget class="QWidget" name="pageFourColor"> - <layout class="QGridLayout" name="gridLayout_4"> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item row="1" column="2"> - <widget class="QLabel" name="label_17"> - <property name="text"> - <string>/</string> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="label_15"> - <property name="text"> - <string>3. Point:</string> - </property> - </widget> - </item> - <item row="1" column="3"> - <widget class="ScrSpinBox" name="gC2Y"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="3" column="0"> - <widget class="QLabel" name="label_21"> - <property name="text"> - <string>4. Point:</string> - </property> - </widget> - </item> - <item row="0" column="2"> - <widget class="QLabel" name="label_18"> - <property name="text"> - <string>/</string> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="ScrSpinBox" name="gC3X"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="2" column="2"> - <widget class="QLabel" name="label_14"> - <property name="text"> - <string>/</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="ScrSpinBox" name="gC2X"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="0" column="0"> - <widget class="QLabel" name="label_19"> - <property name="text"> - <string>1. Point:</string> - </property> - </widget> - </item> - <item row="2" column="3"> - <widget class="ScrSpinBox" name="gC3Y"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="3" column="1"> - <widget class="ScrSpinBox" name="gC4X"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="3" column="3"> - <widget class="ScrSpinBox" name="gC4Y"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="ScrSpinBox" name="gC1X"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="3" column="2"> - <widget class="QLabel" name="label_20"> - <property name="text"> - <string>/</string> - </property> - </widget> - </item> - <item row="0" column="3"> - <widget class="ScrSpinBox" name="gC1Y"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_16"> - <property name="text"> - <string>2. Point:</string> - </property> - </widget> - </item> - <item row="4" column="1"> - <spacer name="verticalSpacer_4"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - <widget class="QWidget" name="pageDiamond"> - <layout class="QGridLayout" name="gridLayout_2"> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item row="0" column="0"> - <widget class="QLabel" name="label_23"> - <property name="text"> - <string>1. Point:</string> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="ScrSpinBox" name="gC1XD"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="0" column="2"> - <widget class="QLabel" name="label_26"> - <property name="text"> - <string>/</string> - </property> - </widget> - </item> - <item row="0" column="3"> - <widget class="ScrSpinBox" name="gC1YD"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_25"> - <property name="text"> - <string>2. Point:</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="ScrSpinBox" name="gC2XD"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="1" column="2"> - <widget class="QLabel" name="label_24"> - <property name="text"> - <string>/</string> - </property> - </widget> - </item> - <item row="1" column="3"> - <widget class="ScrSpinBox" name="gC2YD"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="label_27"> - <property name="text"> - <string>3. Point:</string> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="ScrSpinBox" name="gC3XD"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="2" column="2"> - <widget class="QLabel" name="label_29"> - <property name="text"> - <string>/</string> - </property> - </widget> - </item> - <item row="2" column="3"> - <widget class="ScrSpinBox" name="gC3YD"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="3" column="0"> - <widget class="QLabel" name="label_28"> - <property name="text"> - <string>4. Point:</string> - </property> - </widget> - </item> - <item row="3" column="1"> - <widget class="ScrSpinBox" name="gC4XD"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="3" column="2"> - <widget class="QLabel" name="label_22"> - <property name="text"> - <string>/</string> - </property> - </widget> - </item> - <item row="3" column="3"> - <widget class="ScrSpinBox" name="gC4YD"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="4" column="0"> - <widget class="QLabel" name="label_30"> - <property name="text"> - <string>5. Point:</string> - </property> - </widget> - </item> - <item row="4" column="1"> - <widget class="ScrSpinBox" name="gC5XD"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - <item row="4" column="2"> - <widget class="QLabel" name="label_31"> - <property name="text"> - <string>/</string> - </property> - </widget> - </item> - <item row="4" column="3"> - <widget class="ScrSpinBox" name="gC5YD"> - <property name="minimum"> - <double>-3000.000000000000000</double> - </property> - <property name="maximum"> - <double>3000.000000000000000</double> - </property> - </widget> - </item> - </layout> - </widget> - <widget class="QWidget" name="pageMesh"> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <layout class="QGridLayout" name="gridLayout_5"> - <item row="0" column="0"> - <widget class="QToolButton" name="editPoints"> - <property name="minimumSize"> - <size> - <width>22</width> - <height>22</height> - </size> - </property> - <property name="toolTip"> - <string>Edit Grid Points</string> - </property> - <property name="text"> - <string/> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - <property name="autoExclusive"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QToolButton" name="editControlPoints"> - <property name="minimumSize"> - <size> - <width>22</width> - <height>22</height> - </size> - </property> - <property name="toolTip"> - <string>Edit Control Points</string> - </property> - <property name="text"> - <string/> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - <property name="autoExclusive"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QToolButton" name="resetControlPoint"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="minimumSize"> - <size> - <width>22</width> - <height>22</height> - </size> - </property> - <property name="toolTip"> - <string>Reset selected Control Point</string> - </property> - <property name="text"> - <string/> - </property> - <property name="checkable"> - <bool>false</bool> - </property> - <property name="autoExclusive"> - <bool>false</bool> - </property> - </widget> - </item> - <item row="1" column="2"> - <widget class="QToolButton" name="resetAllControlPoints"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="minimumSize"> - <size> - <width>22</width> - <height>22</height> - </size> - </property> - <property name="toolTip"> - <string>Reset all Control Points</string> - </property> - <property name="text"> - <string/> - </property> - <property name="checkable"> - <bool>false</bool> - </property> - <property name="autoExclusive"> - <bool>false</bool> - </property> - </widget> - </item> - </layout> - </item> - <item> - <spacer name="horizontalSpacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_2"> - <item> - <layout class="QGridLayout" name="gridLayout_6"> - <item row="0" column="0"> - <widget class="QPushButton" name="buttonNewGrid"> - <property name="text"> - <string>New Mesh...</string> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QPushButton" name="buttonResetGrid"> - <property name="text"> - <string>Reset Mesh</string> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QPushButton" name="buttonPoLIne"> - <property name="text"> - <string>Mesh -> Shape</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <spacer name="horizontalSpacer_2"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>18</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </item> - <item> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - <widget class="QWidget" name="pagePatch"> - <layout class="QVBoxLayout" name="verticalLayout_3"> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_3"> - <item> - <layout class="QGridLayout" name="gridLayout_7"> - <item row="0" column="0"> - <widget class="QToolButton" name="editPPoint"> - <property name="minimumSize"> - <size> - <width>22</width> - <height>22</height> - </size> - </property> - <property name="toolTip"> - <string>Edit Grid Points</string> - </property> - <property name="text"> - <string/> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - <property name="autoExclusive"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QToolButton" name="editPControlPoints"> - <property name="minimumSize"> - <size> - <width>22</width> - <height>22</height> - </size> - </property> - <property name="toolTip"> - <string>Edit Control Points</string> - </property> - <property name="text"> - <string/> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - <property name="autoExclusive"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QToolButton" name="resetPControlPoint"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="minimumSize"> - <size> - <width>22</width> - <height>22</height> - </size> - </property> - <property name="toolTip"> - <string>Reset selected Control Point</string> - </property> - <property name="text"> - <string/> - </property> - <property name="checkable"> - <bool>false</bool> - </property> - <property name="autoExclusive"> - <bool>false</bool> - </property> - </widget> - </item> - <item row="1" column="2"> - <widget class="QToolButton" name="resetAllPControlPoints"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="minimumSize"> - <size> - <width>22</width> - <height>22</height> - </size> - </property> - <property name="toolTip"> - <string>Reset all Control Points</string> - </property> - <property name="text"> - <string/> - </property> - <property name="checkable"> - <bool>false</bool> - </property> - <property name="autoExclusive"> - <bool>false</bool> - </property> - </widget> - </item> - </layout> - </item> - <item> - <spacer name="horizontalSpacer_3"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </item> - <item> - <widget class="QCheckBox" name="snapToGrid"> - <property name="text"> - <string>Snap to other Mesh Points</string> - </property> - </widget> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_4"> - <item> - <widget class="QPushButton" name="buttonAddPatch"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="text"> - <string>Add Patch</string> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="buttonRemovePatch"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="text"> - <string>Remove Patch</string> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer_4"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>13</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </item> - <item> - <spacer name="verticalSpacer_2"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - </widget> - </item> - </layout> - </widget> - <layoutdefault spacing="6" margin="11"/> - <customwidgets> - <customwidget> - <class>ScrSpinBox</class> - <extends>QDoubleSpinBox</extends> - <header>ui/scrspinbox.h</header> - </customwidget> - <customwidget> - <class>ScrPaletteBase</class> - <extends>QWidget</extends> - <header>ui/scrpalettebase.h</header> - <container>1</container> - </customwidget> - </customwidgets> - <includes> - <include location="local">ui/scrpalettebase.h</include> - <include location="local">ui/scrpalettebase.h</include> - <include location="local">ui/scrspinbox.h</include> - </includes> - <resources/> - <connections/> -</ui> Index: scribus/ui/gradientvectordialog.cpp =================================================================== --- scribus/ui/gradientvectordialog.cpp (Revision 26070) +++ scribus/ui/gradientvectordialog.cpp (nicht existent) @@ -1,453 +0,0 @@ -/* -For general Scribus (>=1.3.2) copyright and licensing information please refer -to the COPYING file provided with the program. Following this notice may exist -a copyright and/or license notice that predates the release of Scribus 1.3.2 -for which a new license (GPL+exception) is in place. -*/ -/*************************************************************************** - gradientvectordialog.cpp - description - ------------------- - begin : Tue Nov 17 2009 - copyright : (C) 2009 by Franz Schmid - email : Franz.Schmid@altmuehlnet.de - ***************************************************************************/ - -/*************************************************************************** - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ - -#include "gradientvectordialog.h" -#include "units.h" -#include "iconmanager.h" - -GradientVectorDialog::GradientVectorDialog(QWidget* parent) : ScrPaletteBase(parent, "GradientVectorPalette", false, Qt::WindowFlags()) -{ - m_unitRatio = 1.0; - - setupUi(this); - gSk->setNewUnit(6); - gSk->setValues(-89, 89, 2, 0); - gSk_2->setNewUnit(6); - gSk->setValues(-89, 89, 2, 0); - gSc->setSuffix(" %"); - gSc->setValue( 100 ); - connect(gX1, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialL())); - connect(gX2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialL())); - connect(gY1, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialL())); - connect(gY2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialL())); - connect(gSk, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialL())); - connect(gX1_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - connect(gX2_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - connect(gY1_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - connect(gY2_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - connect(gFX, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - connect(gFY, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - connect(gSk_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - connect(gSc, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - connect(gC1X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - connect(gC1Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - connect(gC2X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - connect(gC2Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - connect(gC3X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - connect(gC3Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - connect(gC4X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - connect(gC4Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - connect(gC1XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC1YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC2XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC2YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC3XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC3YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC4XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC4YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC5XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC5YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(editPoints, SIGNAL(clicked()), this, SLOT(handleEditButton())); - connect(editControlPoints, SIGNAL(clicked()), this, SLOT(handleEditControlButton())); - connect(buttonNewGrid, SIGNAL(clicked()), this, SIGNAL(createNewMesh())); - connect(buttonResetGrid, SIGNAL(clicked()), this, SIGNAL(resetMesh())); - connect(buttonPoLIne, SIGNAL(clicked()), this, SIGNAL(meshToShape())); - connect(resetControlPoint, SIGNAL(clicked()), this, SIGNAL(reset1Control())); - connect(resetAllControlPoints, SIGNAL(clicked()), this, SIGNAL(resetAllControl())); - connect(editPPoint, SIGNAL(clicked()), this, SLOT(handlePEditButton())); - connect(editPControlPoints, SIGNAL(clicked()), this, SLOT(handlePEditControlButton())); - connect(buttonAddPatch, SIGNAL(clicked()), this, SLOT(handlePAddButton())); - connect(buttonRemovePatch, SIGNAL(clicked()), this, SIGNAL(removePatch())); - connect(resetPControlPoint, SIGNAL(clicked()), this, SIGNAL(reset1Control())); - connect(resetAllPControlPoints, SIGNAL(clicked()), this, SIGNAL(resetAllControl())); - connect(snapToGrid, SIGNAL(clicked()), this, SLOT(handleSnapToGridBox())); - QSize iconSize = QSize(22, 22); - IconManager& im = IconManager::instance(); - editPoints->setIcon(im.loadIcon("MoveNode.png")); - editPoints->setIconSize(iconSize); - editControlPoints->setIcon(im.loadIcon("MoveKontrol.png")); - editControlPoints->setIconSize(iconSize); - resetControlPoint->setIcon(im.loadIcon("Reset1Node.png")); - resetControlPoint->setIconSize(iconSize); - resetAllControlPoints->setIcon(im.loadIcon("ResetNode.png")); - resetAllControlPoints->setIconSize(iconSize); - editPPoint->setIcon(im.loadIcon("MoveNode.png")); - editPPoint->setIconSize(iconSize); - editPControlPoints->setIcon(im.loadIcon("MoveKontrol.png")); - editPControlPoints->setIconSize(iconSize); - resetPControlPoint->setIcon(im.loadIcon("Reset1Node.png")); - resetPControlPoint->setIconSize(iconSize); - resetAllPControlPoints->setIcon(im.loadIcon("ResetNode.png")); - resetAllPControlPoints->setIconSize(iconSize); - languageChange(); - selectLinear(); -} - -void GradientVectorDialog::changeEvent(QEvent *e) -{ - if (e->type() == QEvent::LanguageChange) - { - languageChange(); - } - else - QWidget::changeEvent(e); -} - -void GradientVectorDialog::selectLinear() -{ - stackedWidget->setCurrentIndex(0); - resize(minimumSizeHint()); -} - -void GradientVectorDialog::selectRadial() -{ - stackedWidget->setCurrentIndex(1); - label_7->show(); - gSk_2->show(); - resize(minimumSizeHint()); -} - -void GradientVectorDialog::selectConical() -{ - stackedWidget->setCurrentIndex(1); - label_7->hide(); - gSk_2->hide(); - resize(minimumSizeHint()); -} - -void GradientVectorDialog::selectFourColor() -{ - stackedWidget->setCurrentIndex(2); - resize(minimumSizeHint()); -} - -void GradientVectorDialog::selectDiamond() -{ - stackedWidget->setCurrentIndex(3); - resize(minimumSizeHint()); -} - -void GradientVectorDialog::selectMesh() -{ - stackedWidget->setCurrentIndex(4); - editPoints->setChecked(true); - resize(minimumSizeHint()); -} - -void GradientVectorDialog::selectPatchMesh() -{ - stackedWidget->setCurrentIndex(5); - editPPoint->setChecked(true); - snapToGrid->setChecked(false); - snapToGrid->setEnabled(true); - resize(minimumSizeHint()); -} - -void GradientVectorDialog::languageChange() -{ - retranslateUi(this); - resize(minimumSizeHint()); -} - -void GradientVectorDialog::handleEditButton() -{ - if (editPoints->isChecked()) - { - resetAllControlPoints->setEnabled(false); - resetControlPoint->setEnabled(false); - emit editGradient(5); - } -} - -void GradientVectorDialog::handleEditControlButton() -{ - if (editControlPoints->isChecked()) - { - resetAllControlPoints->setEnabled(true); - resetControlPoint->setEnabled(true); - emit editGradient(7); - } -} - -void GradientVectorDialog::handlePEditButton() -{ - if (editPPoint->isChecked()) - { - snapToGrid->setEnabled(true); - resetAllPControlPoints->setEnabled(false); - resetPControlPoint->setEnabled(false); - emit editGradient(9); - } -} - -void GradientVectorDialog::handlePEditControlButton() -{ - if (editPControlPoints->isChecked()) - { - snapToGrid->setEnabled(false); - resetAllPControlPoints->setEnabled(true); - resetPControlPoint->setEnabled(true); - emit editGradient(10); - } -} - -void GradientVectorDialog::handleSnapToGridBox() -{ - emit snapToMGrid(snapToGrid->isChecked()); -} - -void GradientVectorDialog::handlePAddButton() -{ - editPPoint->setChecked(true); - editPPoint->setEnabled(false); - editPControlPoints->setEnabled(false); - resetAllPControlPoints->setEnabled(false); - resetPControlPoint->setEnabled(false); - buttonAddPatch->setEnabled(false); - emit editGradient(11); -} - -void GradientVectorDialog::endPAddButton() -{ - editPPoint->setChecked(true); - editPPoint->setEnabled(true); - editPControlPoints->setEnabled(true); - resetAllPControlPoints->setEnabled(false); - resetPControlPoint->setEnabled(false); - buttonAddPatch->setChecked(false); - buttonAddPatch->setEnabled(true); -} - -void GradientVectorDialog::changebuttonRemovePatch(bool val) -{ - buttonRemovePatch->setEnabled(val); -} - -void GradientVectorDialog::setValues(double x1, double y1, double x2, double y2, double fx, double fy, double sg, double sk, double cx, double cy) -{ - disconnect(gX1, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialL())); - disconnect(gX2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialL())); - disconnect(gY1, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialL())); - disconnect(gY2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialL())); - disconnect(gSk, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialL())); - disconnect(gX1_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - disconnect(gX2_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - disconnect(gY1_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - disconnect(gY2_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - disconnect(gFX, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - disconnect(gFY, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - disconnect(gSk_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - disconnect(gSc, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - disconnect(gC1X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - disconnect(gC1Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - disconnect(gC2X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - disconnect(gC2Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - disconnect(gC3X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - disconnect(gC3Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - disconnect(gC4X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - disconnect(gC4Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - disconnect(gC1XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - disconnect(gC1YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - disconnect(gC2XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - disconnect(gC2YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - disconnect(gC3XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - disconnect(gC3YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - disconnect(gC4XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - disconnect(gC4YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - disconnect(gC5XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - disconnect(gC5YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - - gX1->setValue(x1 * m_unitRatio); - gX2->setValue(x2 * m_unitRatio); - gY1->setValue(y1 * m_unitRatio); - gY2->setValue(y2 * m_unitRatio); - gFX->setValue(fx * m_unitRatio); - gFY->setValue(fy * m_unitRatio); - gSk->setValue(sk); - gSc->setValue(sg * 100.0); - gX1_2->setValue(x1 * m_unitRatio); - gX2_2->setValue(x2 * m_unitRatio); - gY1_2->setValue(y1 * m_unitRatio); - gY2_2->setValue(y2 * m_unitRatio); - gSk_2->setValue(sk); - gC1X->setValue(x1 * m_unitRatio); - gC1Y->setValue(y1 * m_unitRatio); - gC2X->setValue(x2 * m_unitRatio); - gC2Y->setValue(y2 * m_unitRatio); - gC3X->setValue(fx * m_unitRatio); - gC3Y->setValue(fy * m_unitRatio); - gC4X->setValue(sg * m_unitRatio); - gC4Y->setValue(sk * m_unitRatio); - gC1XD->setValue(x1 * m_unitRatio); - gC1YD->setValue(y1 * m_unitRatio); - gC2XD->setValue(x2 * m_unitRatio); - gC2YD->setValue(y2 * m_unitRatio); - gC3XD->setValue(fx * m_unitRatio); - gC3YD->setValue(fy * m_unitRatio); - gC4XD->setValue(sg * m_unitRatio); - gC4YD->setValue(sk * m_unitRatio); - gC5XD->setValue(cx * m_unitRatio); - gC5YD->setValue(cy * m_unitRatio); - - connect(gX1, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialL())); - connect(gX2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialL())); - connect(gY1, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialL())); - connect(gY2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialL())); - connect(gSk, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialL())); - connect(gX1_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - connect(gX2_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - connect(gY1_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - connect(gY2_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - connect(gFX, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - connect(gFY, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - connect(gSk_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - connect(gSc, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - connect(gC1X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - connect(gC1Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - connect(gC2X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - connect(gC2Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - connect(gC3X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - connect(gC3Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - connect(gC4X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - connect(gC4Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - connect(gC1XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC1YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC2XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC2YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC3XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC3YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC4XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC4YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC5XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC5YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); -} - -void GradientVectorDialog::changeSpecialL() -{ - emit NewSpecial(gX1->value(), gY1->value(), gX2->value(), gY2->value(), gFX->value(), gFY->value(), 1, gSk->value(), 0, 0); -} - -void GradientVectorDialog::changeSpecialR() -{ - emit NewSpecial(gX1_2->value(), gY1_2->value(), gX2_2->value(), gY2_2->value(), gFX->value(), gFY->value(), gSc->value() / 100.0, gSk_2->value(), 0, 0); -} - -void GradientVectorDialog::changeSpecialF() -{ - emit NewSpecial(gC1X->value(), gC1Y->value(), gC2X->value(), gC2Y->value(), gC3X->value(), gC3Y->value(), gC4X->value(), gC4Y->value(), 0, 0); -} - -void GradientVectorDialog::changeSpecialD() -{ - emit NewSpecial(gC1XD->value(), gC1YD->value(), gC2XD->value(), gC2YD->value(), gC3XD->value(), gC3YD->value(), gC4XD->value(), gC4YD->value(), gC5XD->value(), gC5YD->value()); -} - -void GradientVectorDialog::unitChange(int unitIndex) -{ - m_unitRatio = unitGetRatioFromIndex(unitIndex); - - disconnect(gX1, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialL())); - disconnect(gX2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialL())); - disconnect(gY1, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialL())); - disconnect(gY2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialL())); - disconnect(gX1_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - disconnect(gX2_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - disconnect(gY1_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - disconnect(gY2_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - disconnect(gFX, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - disconnect(gFY, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - disconnect(gC1X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - disconnect(gC1Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - disconnect(gC2X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - disconnect(gC2Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - disconnect(gC3X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - disconnect(gC3Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - disconnect(gC4X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - disconnect(gC4Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - disconnect(gC1XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - disconnect(gC1YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - disconnect(gC2XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - disconnect(gC2YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - disconnect(gC3XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - disconnect(gC3YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - disconnect(gC4XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - disconnect(gC4YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - disconnect(gC5XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - disconnect(gC5YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - gX1->setNewUnit(unitIndex); - gY1->setNewUnit(unitIndex); - gX2->setNewUnit(unitIndex); - gY2->setNewUnit(unitIndex); - gFX->setNewUnit(unitIndex); - gFY->setNewUnit(unitIndex); - gX1_2->setNewUnit(unitIndex); - gY1_2->setNewUnit(unitIndex); - gX2_2->setNewUnit(unitIndex); - gY2_2->setNewUnit(unitIndex); - gC1X->setNewUnit(unitIndex); - gC1Y->setNewUnit(unitIndex); - gC2X->setNewUnit(unitIndex); - gC2Y->setNewUnit(unitIndex); - gC3X->setNewUnit(unitIndex); - gC3Y->setNewUnit(unitIndex); - gC4X->setNewUnit(unitIndex); - gC4Y->setNewUnit(unitIndex); - gC1XD->setNewUnit(unitIndex); - gC1YD->setNewUnit(unitIndex); - gC2XD->setNewUnit(unitIndex); - gC2YD->setNewUnit(unitIndex); - gC3XD->setNewUnit(unitIndex); - gC3YD->setNewUnit(unitIndex); - gC4XD->setNewUnit(unitIndex); - gC4YD->setNewUnit(unitIndex); - gC5XD->setNewUnit(unitIndex); - gC5YD->setNewUnit(unitIndex); - connect(gX1, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialL())); - connect(gX2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialL())); - connect(gY1, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialL())); - connect(gY2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialL())); - connect(gX1_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - connect(gX2_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - connect(gY1_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - connect(gY2_2, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - connect(gFX, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - connect(gFY, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialR())); - connect(gC1X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - connect(gC1Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - connect(gC2X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - connect(gC2Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - connect(gC3X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - connect(gC3Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - connect(gC4X, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - connect(gC4Y, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialF())); - connect(gC1XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC1YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC2XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC2YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC3XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC3YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC4XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC4YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC5XD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); - connect(gC5YD, SIGNAL(valueChanged(double)), this, SLOT(changeSpecialD())); -} Index: scribus/ui/gradientvectordialog.h =================================================================== --- scribus/ui/gradientvectordialog.h (Revision 26070) +++ scribus/ui/gradientvectordialog.h (nicht existent) @@ -1,90 +0,0 @@ -/* -For general Scribus (>=1.3.2) copyright and licensing information please refer -to the COPYING file provided with the program. Following this notice may exist -a copyright and/or license notice that predates the release of Scribus 1.3.2 -for which a new license (GPL+exception) is in place. -*/ -/*************************************************************************** - gradientvectordialog.h - description - ------------------- - begin : Tue Nov 17 2009 - copyright : (C) 2009 by Franz Schmid - email : Franz.Schmid@altmuehlnet.de - ***************************************************************************/ - -/*************************************************************************** - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ - -#ifndef GRADVECTOR_H -#define GRADVECTOR_H - -#include "ui_gradientvectorbase.h" - -#include <QWidget> -#include <QLayout> -#include <QLabel> -#include <QEvent> -#include "scribusapi.h" -#include "ui/scrpalettebase.h" - -/** - *@author Franz Schmid - */ - -class SCRIBUS_API GradientVectorDialog : public ScrPaletteBase, Ui::GradientVectorBase -{ - Q_OBJECT - -public: - GradientVectorDialog( QWidget* parent); - ~GradientVectorDialog() {}; - - void selectLinear(); - void selectRadial(); - void selectConical(); - void selectFourColor(); - void selectDiamond(); - void selectMesh(); - void selectPatchMesh(); - -public slots: - void languageChange(); - void handleEditButton(); - void handleEditControlButton(); - void handlePEditButton(); - void handlePEditControlButton(); - void handlePAddButton(); - void handleSnapToGridBox(); - void endPAddButton(); - void changebuttonRemovePatch(bool val); - void setValues(double x1, double y1, double x2, double y2, double fx, double fy, double sg, double sk, double cx, double cy); - void changeSpecialL(); - void changeSpecialR(); - void changeSpecialF(); - void changeSpecialD(); - void unitChange(int unitIndex); - -protected: - double m_unitRatio; - - void changeEvent(QEvent *e) override; - -signals: - void NewSpecial(double, double, double, double, double, double, double, double, double, double); - void editGradient(int); - void createNewMesh(); - void resetMesh(); - void meshToShape(); - void reset1Control(); - void resetAllControl(); - void removePatch(); - void snapToMGrid(bool); - -}; -#endif Index: scribus/ui/linemarkerselector.cpp =================================================================== --- scribus/ui/linemarkerselector.cpp (Revision 26070) +++ scribus/ui/linemarkerselector.cpp (Arbeitskopie) @@ -15,7 +15,7 @@ listMarker->setIconSize(QSize(60,48)); listMarker->setGridSize(QSize(76,64)); listMarker->setSpacing(4); - listMarker->setItemDelegate(new ScListItemDelegate(QSize(60,48))); + listMarker->setItemDelegate(new ScListItemDelegate(QListWidget::IconMode, QSize(60,48))); connect(listMarker, &QListWidget::itemSelectionChanged, this, [this]() { emit markerChanged(marker()); Index: scribus/ui/linestyleselector.cpp =================================================================== --- scribus/ui/linestyleselector.cpp (nicht existent) +++ scribus/ui/linestyleselector.cpp (Arbeitskopie) @@ -0,0 +1,151 @@ +#include "linestyleselector.h" +#include "scribus.h" +#include "sccolorengine.h" +#include "ui/delegates/sclistitemdelegate.h" +#include "util.h" +#include "ui/propertiespalette_utils.h" +#include "ui/stylemanager.h" +#include "util_gui.h" + +/* ********************************************************************************* * + * + * Constructor + Setup + * + * ********************************************************************************* */ + +LineStyleSelector::LineStyleSelector(QWidget *parent) : + QWidget(parent) +{ + setupUi(this); + + //lineStyles->setItemDelegate(new LineStyleItemDelegate()); +// tnailGrid->setIconSize(QSize(ICONSIZE, ICONSIZE)); +// tnailGrid->setGridSize(QSize(220, 80)); +// tnailGrid->setResizeMode(QListView::Adjust); +// tnailGrid->setItemDelegate(new ScListItemDelegate(QSize(ICONSIZE,ICONSIZE), ScListItemDelegate::Right)); + + lineStyles->setViewMode(QListWidget::ListMode); + lineStyles->setIconSize(m_size); +// lineStyles->setGridSize(QSize(76,64)); +// lineStyles->setSpacing(4); + lineStyles->setItemDelegate(new ScListItemDelegate(QListWidget::ListMode, m_size, ScListItemDelegate::Right, ScListItemDelegate::Simple)); +// lineStyles->addItem( "No Style" ); +// lineStyles->setCurrentItem(lineStyles->item(0)); + + languageChange(); + + connect(lineStyles, SIGNAL(itemClicked(QListWidgetItem*)), this, SIGNAL(itemClicked(QListWidgetItem*))); + connect(buttonNewLine, &QToolButton::clicked, this, &LineStyleSelector::newLine); +} + +LineStyleSelector::~LineStyleSelector() +{ + delete lineStyles->itemDelegate(); +} + +/* ********************************************************************************* * + * + * Members + * + * ********************************************************************************* */ + +void LineStyleSelector::setDoc(ScribusDoc *doc) +{ + m_doc = doc; +} + +QSize LineStyleSelector::iconSize() +{ + return m_size; +} + +/* ********************************************************************************* * + * + * Methods + * + * ********************************************************************************* */ + +void LineStyleSelector::updateLineStyles() +{ + lineStyles->blockSignals(true); + lineStyles->clear(); + if (m_doc != nullptr) + { + QHash<QString,MultiLine>::Iterator it; + for (it = m_doc->docLineStyles.begin(); it != m_doc->docLineStyles.end(); ++it) + { + LineStyleItem *lsi = new LineStyleItem(m_doc, it.value(), it.key()); +// lsi->setSizeHint(QSize(lsi->sizeHint().width(), 48)); + QIcon ico; + ico.addPixmap(renderPixmap(lsi->data(Qt::UserRole).value<LineStyleValue>())); + lsi->setIcon(ico); + lineStyles->addItem( lsi ); + } + + lineStyles->sortItems(); + lineStyles->insertItem( 0, tr("No Style")); + lineStyles->item(0)->setIcon(QIcon(renderEmptyPattern(m_size))); + + if (lineStyles->currentItem()) + lineStyles->currentItem()->setSelected(false); + } + lineStyles->blockSignals(false); +} + +QPixmap LineStyleSelector::renderPixmap(LineStyleValue item) +{ + QPixmap pixmap(m_size); + pixmap.fill(Qt::white); + + //const LineStyleValue& item(lsi->data(Qt::UserRole).value<LineStyleValue>()); + + QPainter p(&pixmap); + for (int i = item.m_Line.size() - 1; i > -1; i--) + { + const SingleLine& sLine = item.m_Line.at(i); + const ScColor& col = item.m_doc->PageColors[sLine.Color]; + QColor tmpf = ScColorEngine::getDisplayColor(col, item.m_doc, sLine.Shade); + QPen pen; + QVector<double> m_array; + if (sLine.Dash == 1) + pen.setStyle(Qt::SolidLine); + else + { + getDashArray(sLine.Dash, 1, m_array); + pen.setDashPattern(m_array); + } + pen.setColor(tmpf); + pen.setWidth(qMax(static_cast<int>(sLine.Width), 1)); + pen.setCapStyle(static_cast<Qt::PenCapStyle>(sLine.LineEnd)); + pen.setJoinStyle(static_cast<Qt::PenJoinStyle>(sLine.LineJoin)); + p.setPen(pen); + p.drawLine(0, m_size.height() / 2, m_size.width(), m_size.height() / 2); + } + p.end(); + + return pixmap; + +} + +/* ********************************************************************************* * + * + * Slots + * + * ********************************************************************************* */ + +void LineStyleSelector::languageChange() +{ + if(lineStyles->count() > 0) + lineStyles->item(0)->setText( tr("No Style") ); + + lineStyles->setToolTip( tr("Line style of current object")); +} + +void LineStyleSelector::newLine() +{ + if(!m_doc) + return; + + m_doc->scMW()->styleMgr()->setPaletteShown(true); +} + Index: scribus/ui/linestyleselector.h =================================================================== --- scribus/ui/linestyleselector.h (nicht existent) +++ scribus/ui/linestyleselector.h (Arbeitskopie) @@ -0,0 +1,43 @@ +#ifndef LINESTYLESELECTOR_H +#define LINESTYLESELECTOR_H + +#include <QWidget> +#include "scribusapi.h" +#include "scribusdoc.h" +#include "ui_linestyleselector.h" + + + +class LineStyleValue; + +class SCRIBUS_API LineStyleSelector : public QWidget, private Ui::LineStyleSelector +{ + Q_OBJECT + +public: + explicit LineStyleSelector(QWidget *parent = nullptr); + ~LineStyleSelector(); + + void setDoc(ScribusDoc *doc); + void updateLineStyles(); + + QListWidget *list() {return lineStyles;}; + QSize iconSize(); + +private: + ScribusDoc *m_doc { nullptr }; + QPixmap renderPixmap(LineStyleValue item); + QSize m_size { QSize(128, 16) }; + +public slots: + void languageChange(); + +private slots: + void newLine(); + +signals: + void itemClicked(QListWidgetItem*); + +}; + +#endif // LINESTYLESELECTOR_H Index: scribus/ui/linestyleselector.ui =================================================================== --- scribus/ui/linestyleselector.ui (nicht existent) +++ scribus/ui/linestyleselector.ui (Arbeitskopie) @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>LineStyleSelector</class> + <widget class="QWidget" name="LineStyleSelector"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>309</width> + <height>238</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>8</number> + </property> + <property name="topMargin"> + <number>8</number> + </property> + <property name="rightMargin"> + <number>8</number> + </property> + <property name="bottomMargin"> + <number>8</number> + </property> + <item> + <widget class="QListWidget" name="lineStyles"> + <property name="viewMode"> + <enum>QListView::IconMode</enum> + </property> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QToolButton" name="buttonNewLine"> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> Index: scribus/ui/linkbutton.cpp =================================================================== --- scribus/ui/linkbutton.cpp (Revision 26070) +++ scribus/ui/linkbutton.cpp (Arbeitskopie) @@ -27,11 +27,11 @@ #include "linkbutton.h" #include "iconmanager.h" #include "scribusapp.h" -#include "scribuscore.h" LinkButton::LinkButton(QWidget *pa) : QToolButton(pa) { setBackgroundRole(QPalette::Window); + setCheckable(true); iconSetChange(); connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(iconSetChange())); Index: scribus/ui/newdocdialog.cpp =================================================================== --- scribus/ui/newdocdialog.cpp (Revision 26070) +++ scribus/ui/newdocdialog.cpp (Arbeitskopie) @@ -64,7 +64,7 @@ clear(); setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); setGridSize(QSize(96, 96)); - setItemDelegate(new ScListItemDelegate(QSize(32,32))); + setItemDelegate(new ScListItemDelegate(QListWidget::IconMode, QSize(32,32))); } void PageLayoutsWidget::arrangeIcons() Index: scribus/ui/nftwidget.cpp =================================================================== --- scribus/ui/nftwidget.cpp (Revision 26070) +++ scribus/ui/nftwidget.cpp (Arbeitskopie) @@ -42,7 +42,7 @@ tnailGrid->setIconSize(QSize(ICONSIZE, ICONSIZE)); tnailGrid->setGridSize(QSize(220, 80)); tnailGrid->setResizeMode(QListView::Adjust); - tnailGrid->setItemDelegate(new ScListItemDelegate(QSize(ICONSIZE,ICONSIZE), ScListItemDelegate::Right)); + tnailGrid->setItemDelegate(new ScListItemDelegate(QListWidget::IconMode, QSize(ICONSIZE,ICONSIZE), ScListItemDelegate::Right)); // Signals and Slots Connections connect(categoryList, SIGNAL(itemSelectionChanged()), this, SLOT(setThumbnails())); connect(tnailGrid, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SIGNAL(leaveOK())); Index: scribus/ui/prefs_userinterface.cpp =================================================================== --- scribus/ui/prefs_userinterface.cpp (Revision 26070) +++ scribus/ui/prefs_userinterface.cpp (Arbeitskopie) @@ -72,7 +72,8 @@ //showSplashCheckBox->setToolTip( "<qt>" + tr( "" ) + "</qt>"); //showStartupDialogCheckBox->setToolTip( "<qt>" + tr( "" ) + "</qt>"); storyEditorUseSmartSelectionCheckBox->setToolTip( "<qt>" + tr( "The default behavior when double-clicking on a word is to select the word and the first following space. Smart selection will select only the word, without the following space." ) + "</qt>"); - hideLabels->setToolTip("<qt>" + tr( "Hides additional labels intended for beginners." ) + "</qt>"); + hideLabels->setToolTip("<qt>" + tr( "Hides informational labels on palettes." ) + "</qt>"); + hideLabelsOfInactiveTabs->setToolTip("<qt>" + tr( "Hides labels of inactive palette tabs." ) + "</qt>"); } void Prefs_UserInterface::restoreDefaults(struct ApplicationPrefs *prefsData) @@ -104,7 +105,8 @@ useTabsForDocumentsCheckBox->setChecked(prefsData->uiPrefs.useTabs); showSplashCheckBox->setChecked(prefsData->uiPrefs.showSplashOnStartup); useSmallWidgetsCheckBox->setChecked(prefsData->uiPrefs.useSmallWidgets); - hideLabels->setChecked(prefsData->uiPrefs.hideLabels); + hideLabels->setChecked(prefsData->uiPrefs.hideLabels); + hideLabelsOfInactiveTabs->setChecked(prefsData->uiPrefs.hideLabelsOfInactiveTabs); storyEditorUseSmartSelectionCheckBox->setChecked(prefsData->storyEditorPrefs.smartTextSelection); seFont.fromString(prefsData->storyEditorPrefs.guiFont); @@ -126,7 +128,8 @@ prefsData->uiPrefs.useTabs = useTabsForDocumentsCheckBox->isChecked(); prefsData->uiPrefs.showSplashOnStartup = showSplashCheckBox->isChecked(); prefsData->uiPrefs.useSmallWidgets = useSmallWidgetsCheckBox->isChecked(); - prefsData->uiPrefs.hideLabels = hideLabels->isChecked(); + prefsData->uiPrefs.hideLabels = hideLabels->isChecked(); + prefsData->uiPrefs.hideLabelsOfInactiveTabs = hideLabelsOfInactiveTabs->isChecked(); prefsData->storyEditorPrefs.guiFont = seFont.toString(); prefsData->storyEditorPrefs.smartTextSelection = storyEditorUseSmartSelectionCheckBox->isChecked(); Index: scribus/ui/prefs_userinterfacebase.ui =================================================================== --- scribus/ui/prefs_userinterfacebase.ui (Revision 26070) +++ scribus/ui/prefs_userinterfacebase.ui (Arbeitskopie) @@ -107,7 +107,7 @@ </property> </widget> </item> - <item row="4" column="1"> + <item row="5" column="1"> <widget class="QCheckBox" name="useTabsForDocumentsCheckBox"> <property name="text"> <string>Use Tabs for Documents</string> @@ -114,7 +114,7 @@ </property> </widget> </item> - <item row="5" column="0"> + <item row="6" column="0"> <widget class="QLabel" name="recentDocumentsLabel"> <property name="text"> <string>&Recent Documents:</string> @@ -124,7 +124,7 @@ </property> </widget> </item> - <item row="5" column="1"> + <item row="6" column="1"> <widget class="QSpinBox" name="recentDocumentsSpinBox"/> </item> <item row="3" column="1"> @@ -134,6 +134,13 @@ </property> </widget> </item> + <item row="4" column="1"> + <widget class="QCheckBox" name="hideLabelsOfInactiveTabs"> + <property name="text"> + <string>Hide Labels of Inactive Palette Tabs</string> + </property> + </widget> + </item> </layout> </item> <item> Index: scribus/ui/propertiespalette.cpp =================================================================== --- scribus/ui/propertiespalette.cpp (Revision 26070) +++ scribus/ui/propertiespalette.cpp (Arbeitskopie) @@ -32,21 +32,20 @@ #include "appmodehelper.h" #include "appmodes.h" -#include "colorpalette.h" -#include "iconmanager.h" +#include "colorpicker/colorpicker.h" +#include "insertTable.h" #include "pageitem_table.h" +#include "propertiespalette_attributes.h" #include "propertiespalette_line.h" +#include "propertiespalette_fill.h" #include "propertiespalette_shadow.h" #include "propertiespalette_shape.h" #include "propertiespalette_xyz.h" -#include "transparencypalette.h" #include "scribus.h" #include "scribusview.h" #include "selection.h" #include "undomanager.h" -#include "util_math.h" - PropertiesPalette::PropertiesPalette(QWidget *parent) : DockPanelBase("PropertiesPalette", "panel-frame-properties", parent) { undoManager = UndoManager::instance(); @@ -54,10 +53,6 @@ setObjectName(QString::fromLocal8Bit("PropertiesPalette")); setSizePolicy( QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum)); - QFont f(font()); - f.setPointSize(f.pointSize()-1); - setFont(f); - // XZY xyzPal = new PropertiesPalette_XYZ( this ); scXYZ = new SectionContainer("X, Y, &Z"); @@ -75,6 +70,12 @@ scShape->setWidget(shapePal); scShape->setIsCollapsed(true); + // Fill + fillPal = new PropertiesPalette_Fill(this); + scFill = new SectionContainer("&Fill"); + scFill->setWidget(fillPal); + scFill->setIsCollapsed(true); + // Line linePal = new PropertiesPalette_Line(this); scLine = new SectionContainer("&Line"); @@ -81,28 +82,22 @@ scLine->setWidget(linePal); scLine->setIsCollapsed(true); - // Color - colorPalette = new ColorPalette(this); - scColor = new SectionContainer("&Colors"); - scColor->setWidget(colorPalette); - scColor->setIsCollapsed(true); + // Attributes + attributesPal = new PropertiesPalette_Attributes(this); + scAttributes = new SectionContainer("&Attributes"); + scAttributes->setWidget(attributesPal); + scAttributes->setIsCollapsed(true); - // Transparency - transparencyPalette = new TransparencyPalette(this); - scTransparency = new SectionContainer("&Transparency"); - scTransparency->setWidget(transparencyPalette); - scTransparency->setIsCollapsed(true); - // Layout stack QVBoxLayout * lyt = new QVBoxLayout(); lyt->setContentsMargins(0, 0, 0, 0); lyt->setSpacing(0); lyt->addWidget(scXYZ); - lyt->addWidget(scShadow); lyt->addWidget(scShape); + lyt->addWidget(scFill); lyt->addWidget(scLine); - lyt->addWidget(scColor); - lyt->addWidget(scTransparency); + lyt->addWidget(scShadow); + lyt->addWidget(scAttributes); lyt->addStretch(1); QWidget * wdg = new QWidget(); @@ -112,10 +107,16 @@ languageChange(); enablePalettes(false); - connect(colorPalette, SIGNAL(NewSpecial(double,double,double,double,double,double,double,double,double,double)), this, SLOT(newSpGradient(double,double,double,double,double,double,double,double,double,double))); - connect(colorPalette, SIGNAL(editGradient(int)), this, SLOT(toggleGradientEdit(int))); - connect(transparencyPalette, SIGNAL(NewSpecial(double,double,double,double,double,double,double,double,double,double)), this, SLOT(newSpGradientM(double,double,double,double,double,double,double,double))); - connect(transparencyPalette, SIGNAL(editGradient()), this, SLOT(toggleGradientEditM())); + ColorPicker *colorPicker = WidgetManager::instance().colorPicker(); + if(colorPicker){ + connect(colorPicker, SIGNAL(meshToShape()), this, SLOT(meshGradientToShape())); + connect(colorPicker, SIGNAL(createNewMesh()), this, SLOT(createNewMeshGradient())); + connect(colorPicker, SIGNAL(resetMesh()), this, SLOT(resetMeshGradient())); + connect(colorPicker, SIGNAL(reset1Control()), this, SLOT(resetOneControlPoint())); + connect(colorPicker, SIGNAL(resetAllControl()), this, SLOT(resetAllControlPoints())); + connect(colorPicker, SIGNAL(snapToMGrid(bool)), this, SLOT(snapToPatchGrid(bool))); + connect(colorPicker, SIGNAL(removePatch()), this, SLOT(handleRemovePatch())); + } m_haveItem = false; @@ -125,7 +126,7 @@ { if (m_ScMW && !m_ScMW->scriptIsRunning()) { - if (m_haveDoc && m_haveItem && colorPalette->gradEditButton->isChecked()) + if (m_haveDoc && m_haveItem /*&& colorPalette->gradEditButton->isChecked()*/) { m_ScMW->view->requestMode(modeNormal); m_ScMW->view->RefreshGradient(m_item); @@ -151,10 +152,9 @@ this->shadowPal->setMainWindow(mw); this->shapePal->setMainWindow(mw); this->linePal->setMainWindow(mw); + this->fillPal->setMainWindow(mw); + this->attributesPal->setMainWindow(mw); - //connect(this->Cpal, SIGNAL(gradientChanged()), m_ScMW, SLOT(updtGradFill())); - //connect(this->Cpal, SIGNAL(strokeGradientChanged()), m_ScMW, SLOT(updtGradStroke())); - connect(this->transparencyPalette, SIGNAL(gradientChanged()), this, SLOT(handleGradientChanged())); connect(m_ScMW->appModeHelper, SIGNAL(AppModeChanged(int,int)), this, SLOT(AppModeChanged())); } @@ -172,10 +172,6 @@ m_doc = d; m_item = nullptr; setEnabled(!m_doc->drawAsPreview); - colorPalette->setDocument(m_doc); - colorPalette->setCurrentItem(nullptr); - transparencyPalette->setDocument(m_doc); - transparencyPalette->setCurrentItem(nullptr); m_unitRatio = m_doc->unitRatio(); m_unitIndex = m_doc->unitIndex(); @@ -186,9 +182,9 @@ shadowPal->setDoc(m_doc); shapePal->setDoc(m_doc); linePal->setDoc(m_doc); + fillPal->setDoc(m_doc); + attributesPal->setDoc(m_doc); - updateColorList(); - connect(m_doc->m_Selection, SIGNAL(selectionChanged()), this, SLOT(handleSelectionChanged())); connect(m_doc, SIGNAL(docChanged()), this, SLOT(handleSelectionChanged())); @@ -217,12 +213,11 @@ shapePal->unsetDoc(); linePal->unsetItem(); linePal->unsetDoc(); + fillPal->unsetItem(); + fillPal->unsetDoc(); + attributesPal->unsetItem(); + attributesPal->unsetDoc(); - colorPalette->setCurrentItem(nullptr); - colorPalette->setDocument(nullptr); - transparencyPalette->setCurrentItem(nullptr); - transparencyPalette->setDocument(nullptr); - m_haveItem = false; enablePalettes(false); } @@ -231,10 +226,9 @@ { m_haveItem = false; m_item = nullptr; - colorPalette->setCurrentItem(nullptr); - transparencyPalette->setCurrentItem(nullptr); shapePal->unsetItem(); linePal->unsetItem(); + fillPal->unsetItem(); handleSelectionChanged(); } @@ -256,10 +250,10 @@ { scXYZ->setEnabled(enable); scShape->setEnabled(enable); + scFill->setEnabled(enable); scLine->setEnabled(enable); - scColor->setEnabled(enable); - scTransparency->setEnabled(enable); scShadow->setEnabled(enable); + scAttributes->setEnabled(enable); } void PropertiesPalette::AppModeChanged() @@ -302,8 +296,6 @@ m_haveItem = false; m_item = item; - transparencyPalette->setCurrentItem(m_item); - setTextFlowMode(m_item->textFlowMode()); //CB replaces old emits from PageItem::emitAllToGUI() @@ -314,10 +306,9 @@ scXYZ->setEnabled(true); scShadow->setEnabled(true); scShape->setEnabled(true); - scLine->setEnabled(false); - scColor->setEnabled(false); - scTransparency->setEnabled(true); - + scLine->setEnabled(true); + scFill->setEnabled(true); + scAttributes->setEnabled(true); } m_haveItem = true; @@ -328,9 +319,9 @@ shadowPal->handleSelectionChanged(); shapePal->handleSelectionChanged(); linePal->handleSelectionChanged(); - colorPalette->handleSelectionChanged(); + fillPal->handleSelectionChanged(); + attributesPal->handleSelectionChanged(); } - if (m_item->isOSGFrame()) { scXYZ->setEnabled(true); @@ -337,8 +328,8 @@ scShadow->setEnabled(true); scShape->setEnabled(true); scLine->setEnabled(false); - scColor->setEnabled(true); - scTransparency->setEnabled(false); + scFill->setEnabled(true); + scAttributes->setEnabled(true); } if (m_item->asSymbol()) { @@ -346,8 +337,8 @@ scShadow->setEnabled(true); scShape->setEnabled(false); scLine->setEnabled(false); - scColor->setEnabled(false); - scTransparency->setEnabled(false); + scFill->setEnabled(false); + scAttributes->setEnabled(true); } } @@ -356,16 +347,15 @@ if (!m_haveDoc || !m_ScMW || m_ScMW->scriptIsRunning()) return; - enablePalettes(false); - PageItem* currItem = currentItemFromSelection(); if (m_doc->m_Selection->count() > 1) { scXYZ->setEnabled(true); + scShape->setEnabled(false); scShadow->setEnabled(true); scLine->setEnabled(true); - scColor->setEnabled(true); - scTransparency->setEnabled(true); + scFill->setEnabled(true); + scAttributes->setEnabled(true); } else { @@ -376,29 +366,37 @@ { case -1: m_haveItem = false; - colorPalette->showGradient(0); + scXYZ->setEnabled(false); + scShape->setEnabled(false); + scLine->setEnabled(false); + scFill->setEnabled(false); + scShadow->setEnabled(false); + scAttributes->setEnabled(false); break; case PageItem::ImageFrame: case PageItem::LatexFrame: + scXYZ->setEnabled(true); + scShadow->setEnabled(true); + scShape->setEnabled(true); + scLine->setEnabled(true); + scFill->setEnabled(true); + scAttributes->setEnabled(true); + break; case PageItem::OSGFrame: - if (currItem->isOSGFrame()) - { - scXYZ->setEnabled(true); - scShadow->setEnabled(true); - scShape->setEnabled(true); - scColor->setEnabled(true); - } - else - { - enablePalettes(true); - } + scXYZ->setEnabled(true); + scShadow->setEnabled(true); + scShape->setEnabled(true); + scLine->setEnabled(false); + scFill->setEnabled(true); + scAttributes->setEnabled(true); break; case PageItem::Line: scXYZ->setEnabled(true); scShadow->setEnabled(true); + scShape->setEnabled(false); scLine->setEnabled(true); - scColor->setEnabled(true); - scTransparency->setEnabled(true); + scFill->setEnabled(false); + scAttributes->setEnabled(true); break; case PageItem::Group: case PageItem::Symbol: @@ -412,7 +410,12 @@ case PageItem::PolyLine: case PageItem::Spiral: case PageItem::PathText: - enablePalettes(true); + scXYZ->setEnabled(true); + scShadow->setEnabled(true); + scShape->setEnabled(true); + scLine->setEnabled(true); + scFill->setEnabled(true); + scAttributes->setEnabled(true); break; } } @@ -424,6 +427,7 @@ { setCurrentItem(currItem); } + } void PropertiesPalette::unitChange() @@ -440,9 +444,8 @@ shadowPal->unitChange(); shapePal->unitChange(); linePal->unitChange(); + fillPal->unitChange(); - colorPalette->unitChange(oldRatio, m_unitRatio, m_doc->unitIndex()); - transparencyPalette->unitChange(oldRatio, m_unitRatio, m_doc->unitIndex()); m_haveItem = tmp; } @@ -458,211 +461,11 @@ } } -void PropertiesPalette::newSpGradient(double x1, double y1, double x2, double y2, double fx, double fy, double sg, double sk, double cx, double cy) -{ - if (!m_ScMW || m_ScMW->scriptIsRunning()) - return; - if ((m_haveDoc) && (m_haveItem)) - { - QRectF upRect; - UndoTransaction trans; - if (UndoManager::undoEnabled()) - trans = undoManager->beginTransaction(Um::Selection, Um::ILine, Um::GradPos + "p", "", Um::ILine); - if (m_ScMW->view->editStrokeGradient == 1) - { - m_item->setGradientStrokeStart(x1 / m_unitRatio, y1 / m_unitRatio); - m_item->setGradientStrokeEnd(x2 / m_unitRatio, y2 / m_unitRatio); - m_item->setGradientStrokeFocal(fx / m_unitRatio, fy / m_unitRatio); - m_item->setGradientStrokeScale(sg); - m_item->setGradientStrokeSkew(sk); - if (m_item->strokeGradientType() == 6) - { - m_item->setGradientStrokeFocal(m_item->gradientStrokeStartX(), m_item->gradientStrokeStartY()); - } - m_item->update(); - upRect = QRectF(m_item->gradientStrokeStart(), m_item->gradientStrokeEnd()); - double radEnd = distance(m_item->gradientStrokeEndX() - m_item->gradientStrokeStartX(), m_item->gradientStrokeEndY() - m_item->gradientStrokeStartY()); - double rotEnd = xy2Deg(m_item->gradientStrokeEndX() - m_item->gradientStrokeStartX(), m_item->gradientStrokeEndY() - m_item->gradientStrokeStartY()); - QTransform m; - m.translate(m_item->gradientStrokeStartX(), m_item->gradientStrokeStartY()); - m.rotate(rotEnd); - m.rotate(-90); - m.rotate(m_item->gradientStrokeSkew()); - m.translate(radEnd * m_item->gradientStrokeScale(), 0); - QPointF shP = m.map(QPointF(0,0)); - upRect = upRect.united(QRectF(shP, m_item->gradientStrokeEnd()).normalized()); - upRect = upRect.united(QRectF(shP, m_item->gradientStrokeStart()).normalized()); - upRect |= QRectF(shP, QPointF(0, 0)).normalized(); - upRect |= QRectF(shP, QPointF(m_item->width(), m_item->height())).normalized(); - } - else if (m_ScMW->view->editStrokeGradient == 3) - { - m_item->setGradientControl1(FPoint(x1 / m_unitRatio, y1 / m_unitRatio)); - m_item->setGradientControl2(FPoint(x2 / m_unitRatio, y2 / m_unitRatio)); - m_item->setGradientControl3(FPoint(fx / m_unitRatio, fy / m_unitRatio)); - m_item->setGradientControl4(FPoint(sg / m_unitRatio, sk / m_unitRatio)); - m_item->update(); - upRect = QRectF(QPointF(-m_item->width(), -m_item->height()), QPointF(m_item->width() * 2, m_item->height() * 2)).normalized(); - } - else if (m_ScMW->view->editStrokeGradient == 4) - { - m_item->setGradientControl1(FPoint(x1 / m_unitRatio, y1 / m_unitRatio)); - m_item->setGradientControl2(FPoint(x2 / m_unitRatio, y2 / m_unitRatio)); - m_item->setGradientControl3(FPoint(fx / m_unitRatio, fy / m_unitRatio)); - m_item->setGradientControl4(FPoint(sg / m_unitRatio, sk / m_unitRatio)); - m_item->setGradientControl5(FPoint(cx / m_unitRatio, cy / m_unitRatio)); - m_item->update(); - upRect = QRectF(QPointF(-m_item->width(), -m_item->height()), QPointF(m_item->width() * 2, m_item->height() * 2)).normalized(); - } - else - { - if (m_item->gradientType() == 13 && UndoManager::undoEnabled()) - { - SimpleState *ss= new SimpleState("Refresh"); - ss->set("UNDO_UPDATE_CONICAL"); - undoManager->action(m_item,ss); - } - m_item->setGradientStart(x1 / m_unitRatio, y1 / m_unitRatio); - m_item->setGradientEnd(x2 / m_unitRatio, y2 / m_unitRatio); - m_item->setGradientFocal(fx / m_unitRatio, fy / m_unitRatio); - m_item->setGradientScale(sg); - m_item->setGradientSkew(sk); - if (m_item->strokeGradientType() == 6) - { - m_item->setGradientFocal(m_item->gradientStartX(), m_item->gradientStartY()); - } - if (m_item->gradientType() == 13 && UndoManager::undoEnabled()) - { - m_item->createConicalMesh(); - SimpleState *ss= new SimpleState("Refresh"); - ss->set("REDO_UPDATE_CONICAL"); - undoManager->action(m_item,ss); - } - m_item->update(); - upRect = QRectF(m_item->gradientStart(), m_item->gradientEnd()); - double radEnd = distance(m_item->gradientEndX() - m_item->gradientStartX(), m_item->gradientEndY() - m_item->gradientStartY()); - double rotEnd = xy2Deg(m_item->gradientEndX() - m_item->gradientStartX(), m_item->gradientEndY() - m_item->gradientStartY()); - QTransform m; - m.translate(m_item->gradientStartX(), m_item->gradientStartY()); - m.rotate(rotEnd); - m.rotate(-90); - m.rotate(m_item->gradientSkew()); - m.translate(radEnd * m_item->gradientScale(), 0); - QPointF shP = m.map(QPointF(0,0)); - upRect |= QRectF(shP, m_item->gradientEnd()).normalized(); - upRect |= QRectF(shP, m_item->gradientStart()).normalized(); - upRect |= QRectF(shP, QPointF(0, 0)).normalized(); - upRect |= QRectF(shP, QPointF(m_item->width(), m_item->height())).normalized(); - } - if (trans) - trans.commit(); - upRect.translate(m_item->xPos(), m_item->yPos()); - m_doc->regionsChanged()->update(upRect.adjusted(-10.0, -10.0, 10.0, 10.0)); - m_doc->changed(); - m_doc->changedPagePreview(); - } -} - -void PropertiesPalette::toggleGradientEdit(int stroke) -{ - if (!m_ScMW || m_ScMW->scriptIsRunning()) - return; - if ((m_haveDoc) && (m_haveItem)) - { - m_ScMW->view->editStrokeGradient = stroke; - if (stroke == 1) - { - if (colorPalette->gradEditButtonStroke->isChecked()) - m_ScMW->view->requestMode(modeEditGradientVectors); - else - m_ScMW->view->requestMode(modeNormal); - } - else - { - if ((colorPalette->gradEditButton->isChecked()) || (colorPalette->editMeshColors->isChecked())) - { - if ((stroke == 5) || (stroke == 6) || (stroke == 7)) - m_ScMW->view->requestMode(modeEditMeshGradient); - else if ((stroke == 8) || (stroke == 9) || (stroke == 10) || (stroke == 11)) - m_ScMW->view->requestMode(modeEditMeshPatch); - else - m_ScMW->view->requestMode(modeEditGradientVectors); - } - else - m_ScMW->view->requestMode(modeNormal); - } - m_ScMW->view->RefreshGradient(m_item); - } -} - -void PropertiesPalette::newSpGradientM(double x1, double y1, double x2, double y2, double fx, double fy, double sg, double sk) -{ - if (!m_ScMW || m_ScMW->scriptIsRunning()) - return; - if ((m_haveDoc) && (m_haveItem)) - { - QRectF upRect; - UndoTransaction trans; - if (UndoManager::undoEnabled()) - trans = undoManager->beginTransaction(Um::Selection, Um::ILine, Um::GradPos + "o", "", Um::ILine); - m_item->setGradientMaskStart(x1 / m_unitRatio, y1 / m_unitRatio); - m_item->setGradientMaskEnd(x2 / m_unitRatio, y2 / m_unitRatio); - m_item->setGradientMaskFocal(fx / m_unitRatio, fy / m_unitRatio); - m_item->setGradientMaskScale(sg); - m_item->setGradientMaskSkew(sk); - if ((m_item->GrMask == GradMask_Linear) || (m_item->GrMask == GradMask_LinearLumAlpha)) - { - m_item->setGradientMaskFocal(m_item->GrMaskStartX, m_item->GrMaskStartY); - } - m_item->update(); - if (trans) - { - trans.commit(); - } - upRect = QRectF(m_item->gradientMaskStart(), m_item->gradientMaskEnd()); - double radEnd = distance(m_item->GrMaskEndX - m_item->GrMaskStartX, m_item->GrMaskEndY - m_item->GrMaskStartY); - double rotEnd = xy2Deg(m_item->GrMaskEndX - m_item->GrMaskStartX, m_item->GrMaskEndY - m_item->GrMaskStartY); - QTransform m; - m.translate(m_item->GrMaskStartX, m_item->GrMaskStartY); - m.rotate(rotEnd); - m.rotate(-90); - m.rotate(m_item->GrMaskSkew); - m.translate(radEnd * m_item->GrMaskScale, 0); - QPointF shP = m.map(QPointF(0,0)); - upRect |= QRectF(shP, m_item->gradientMaskEnd()).normalized(); - upRect |= QRectF(shP, m_item->gradientMaskStart()).normalized(); - upRect |= QRectF(shP, QPointF(0, 0)).normalized(); - upRect |= QRectF(shP, QPointF(m_item->width(), m_item->height())).normalized(); - upRect.translate(m_item->xPos(), m_item->yPos()); - m_doc->regionsChanged()->update(upRect.adjusted(-10.0, -10.0, 10.0, 10.0)); - m_doc->changed(); - m_doc->changedPagePreview(); - } -} - -void PropertiesPalette::toggleGradientEditM() -{ - if (!m_ScMW || m_ScMW->scriptIsRunning()) - return; - if ((m_haveDoc) && (m_haveItem)) - { - m_ScMW->view->editStrokeGradient = 2; - if (transparencyPalette->gradEditButton->isChecked()) - m_ScMW->view->requestMode(modeEditGradientVectors); - else - m_ScMW->view->requestMode(modeNormal); - } -} - void PropertiesPalette::updateColorList() { if (!m_haveDoc || !m_ScMW || m_ScMW->scriptIsRunning()) return; - colorPalette->updateColorList(); - transparencyPalette->updateColorList(); - shadowPal->updateColorList(); - assert (m_doc->PageColors.document()); } @@ -686,78 +489,306 @@ setWindowTitle( tr("Properties")); scXYZ->setText(tr("X, Y, &Z")); - scShadow->setText(tr("Drop Shadow")); + scShadow->setText(tr("&Drop Shadow")); scShape->setText(tr("&Shape")); scLine->setText(tr("&Line")); - scColor->setText(tr("&Colors")); - scTransparency->setText(tr("&Transparency")); + scFill->setText(tr("&Fill")); + scAttributes->setText(tr("&Attributes")); xyzPal->languageChange(); shadowPal->languageChange(); shapePal->languageChange(); - colorPalette->languageChange(); linePal->languageChange(); + fillPal->languageChange(); + attributesPal->languageChange(); } void PropertiesPalette::setGradientEditMode(bool on) { - colorPalette->gradEditButton->setChecked(on); + WidgetManager::instance().colorPicker()->setGradientEditPropertiesEnabled(on); } +void PropertiesPalette::setLocked(bool isLocked) +{ + shapePal->setLocked(isLocked); +} + +void PropertiesPalette::handleShapeEdit() +{ + if (!m_ScMW || m_ScMW->scriptIsRunning()) + return; + if ((m_haveDoc) && (m_haveItem)) + shapePal->setRoundRectEnabled(false); +} + +/* ********************************************************************************* * + * + * Mesh Gradient Methods + * + * ********************************************************************************* */ + void PropertiesPalette::endPatchAdd() { - colorPalette->endPatchAdd(); + WidgetManager::instance().colorPicker()->endPatchAdd(); } -void PropertiesPalette::updateColorSpecialGradient() +void PropertiesPalette::meshGradientToShape() { - if (!m_haveDoc) + + if (!m_doc || !m_item) return; - if(m_doc->m_Selection->isEmpty()) + + m_item->meshToShape(); + m_item->update(); + m_doc->regionsChanged()->update(QRect()); + +} + +void PropertiesPalette::createNewMeshGradient() +{ + if (!m_doc || !m_item) return; - PageItem* currItem = m_doc->m_Selection->itemAt(0); - if (currItem) + InsertTable* dia = new InsertTable(this, 255, 255); + dia->setWindowTitle( tr( "Create Mesh" ) ); + if (dia->exec()) { - if (m_ScMW->view->editStrokeGradient == 0) - colorPalette->setSpecialGradient(currItem->GrStartX, currItem->GrStartY, currItem->GrEndX, currItem->GrEndY, currItem->GrFocalX, currItem->GrFocalY, currItem->GrScale, currItem->GrSkew, 0, 0); - else if (m_ScMW->view->editStrokeGradient == 1) - colorPalette->setSpecialGradient(currItem->GrStrokeStartX, currItem->GrStrokeStartY, currItem->GrStrokeEndX, currItem->GrStrokeEndY, currItem->GrStrokeFocalX, currItem->GrStrokeFocalY, currItem->GrStrokeScale, currItem->GrStrokeSkew, 0, 0); - else if (m_ScMW->view->editStrokeGradient == 3) - colorPalette->setSpecialGradient(currItem->GrControl1.x(), currItem->GrControl1.y(), currItem->GrControl2.x(), currItem->GrControl2.y(), currItem->GrControl3.x(), currItem->GrControl3.y(), currItem->GrControl4.x(), currItem->GrControl4.y(), 0, 0); - else if (m_ScMW->view->editStrokeGradient == 4) - colorPalette->setSpecialGradient(currItem->GrControl1.x(), currItem->GrControl1.y(), currItem->GrControl2.x(), currItem->GrControl2.y(), currItem->GrControl3.x(), currItem->GrControl3.y(), currItem->GrControl4.x(), currItem->GrControl4.y(), currItem->GrControl5.x(), currItem->GrControl5.y()); - else if ((m_ScMW->view->editStrokeGradient == 5) || (m_ScMW->view->editStrokeGradient == 6)) - colorPalette->setMeshPoint(); - else if (m_ScMW->view->editStrokeGradient == 8) - colorPalette->setMeshPatchPoint(); - else if (m_ScMW->view->editStrokeGradient == 9) - colorPalette->setMeshPatch(); - else if (currItem->isGroup()) - transparencyPalette->setSpecialGradient(currItem->GrMaskStartX, currItem->GrMaskStartY, currItem->GrMaskEndX, currItem->GrMaskEndY, currItem->GrMaskFocalX, currItem->GrMaskFocalY, currItem->GrMaskScale, currItem->GrMaskSkew); + m_item->createGradientMesh(dia->Rows->value(), dia->Cols->value()); + m_item->update(); + m_doc->regionsChanged()->update(QRect()); } + delete dia; } -void PropertiesPalette::setLocked(bool isLocked) +void PropertiesPalette::resetMeshGradient() { - shapePal->setLocked(isLocked); + if (!m_doc || !m_item) + return; + + m_item->resetGradientMesh(); + m_item->update(); + m_doc->regionsChanged()->update(QRect()); } -void PropertiesPalette::handleShapeEdit() +void PropertiesPalette::resetOneControlPoint() { - if (!m_ScMW || m_ScMW->scriptIsRunning()) + if (!m_doc || !m_item) return; - if ((m_haveDoc) && (m_haveItem)) - shapePal->setRoundRectEnabled(false); + + int grow = m_item->selectedMeshPointX; + int gcol = m_item->selectedMeshPointY; + int cont = m_item->selectedMeshControlPoint; + MeshPoint tmp; + if (m_item->gradientType() == Gradient_PatchMesh) + { + if ((grow == -1) || (gcol == 0)) + return; + ScOldNewState<MeshPoint> *ss = nullptr; + if (UndoManager::undoEnabled()) + { + ss = new ScOldNewState<MeshPoint>(Um::GradPos); + ss->set("MOVE_MESH_PATCH"); + ss->set("ARRAY", false); + ss->set("X", grow); + ss->set("Y", gcol); + } + switch (gcol) + { + case 1: + tmp = m_item->meshGradientPatches[grow].TL; + if (cont == 2) + tmp.controlBottom = tmp.gridPoint; + if (cont == 4) + tmp.controlRight = tmp.gridPoint; + if (UndoManager::undoEnabled()) + ss->setStates(m_item->meshGradientPatches[grow].TL, tmp); + m_item->meshGradientPatches[grow].TL = tmp; + break; + case 2: + tmp = m_item->meshGradientPatches[grow].TR; + if (cont == 2) + tmp.controlBottom = tmp.gridPoint; + if (cont == 3) + tmp.controlLeft = tmp.gridPoint; + if (UndoManager::undoEnabled()) + ss->setStates(m_item->meshGradientPatches[grow].TR, tmp); + m_item->meshGradientPatches[grow].TR = tmp; + break; + case 3: + tmp = m_item->meshGradientPatches[grow].BR; + if (cont == 1) + tmp.controlTop = tmp.gridPoint; + if (cont == 3) + tmp.controlLeft = tmp.gridPoint; + if (UndoManager::undoEnabled()) + ss->setStates(m_item->meshGradientPatches[grow].BR, tmp); + m_item->meshGradientPatches[grow].BR = tmp; + break; + case 4: + tmp = m_item->meshGradientPatches[grow].BL; + if (cont == 1) + tmp.controlTop = tmp.gridPoint; + if (cont == 4) + tmp.controlRight = tmp.gridPoint; + if (UndoManager::undoEnabled()) + ss->setStates(m_item->meshGradientPatches[grow].BL, tmp); + m_item->meshGradientPatches[grow].BL = tmp; + break; + } + if (UndoManager::undoEnabled()) + undoManager->action(m_item,ss); + } + else // if (m_item->gradientType() == Gradient_Mesh) + { + if ((grow == -1) || (gcol == -1)) + return; + + tmp = m_item->meshGradientArray[grow][gcol]; + if (cont == 1) + tmp.controlTop = tmp.gridPoint; + else if (cont == 2) + tmp.controlBottom = tmp.gridPoint; + else if (cont == 3) + tmp.controlLeft = tmp.gridPoint; + else if (cont == 4) + tmp.controlRight = tmp.gridPoint; + + if (UndoManager::undoEnabled()) + { + auto *ss = new ScOldNewState<MeshPoint>(Um::GradPos); + ss->set("MOVE_MESH_PATCH"); + ss->set("ARRAY", true); + ss->set("X", grow); + ss->set("Y", gcol); + ss->setStates(m_item->meshGradientArray[grow][gcol], tmp); + undoManager->action(m_item,ss); + } + m_item->meshGradientArray[grow][gcol] = tmp; + } + m_item->update(); + m_doc->regionsChanged()->update(QRect()); } -void PropertiesPalette::handleGradientChanged() +void PropertiesPalette::resetAllControlPoints() { - if (!m_ScMW || m_ScMW->scriptIsRunning()) + if (!m_doc || !m_item) return; - if ((m_haveDoc) && (m_haveItem)) + + int grow = m_item->selectedMeshPointX; + int gcol = m_item->selectedMeshPointY; + MeshPoint tmp; + if (m_item->gradientType() == Gradient_PatchMesh) { - VGradient vg(transparencyPalette->gradEdit->gradient()); - m_doc->itemSelection_SetMaskGradient(vg); + if ((grow == -1) || (gcol == 0)) + return; + ScOldNewState<MeshPoint> *ss = nullptr; + if (UndoManager::undoEnabled()) + { + ss = new ScOldNewState<MeshPoint>(Um::GradPos); + ss->set("MOVE_MESH_PATCH"); + ss->set("ARRAY", false); + ss->set("X", grow); + ss->set("Y", gcol); + } + switch (gcol) + { + case 1: + tmp = m_item->meshGradientPatches[grow].TL; + tmp.controlTop = tmp.gridPoint; + tmp.controlLeft = tmp.gridPoint; + tmp.controlRight = tmp.gridPoint; + tmp.controlBottom = tmp.gridPoint; + if (UndoManager::undoEnabled()) + ss->setStates(m_item->meshGradientPatches[grow].TL, tmp); + m_item->meshGradientPatches[grow].TL = tmp; + break; + case 2: + tmp = m_item->meshGradientPatches[grow].TR; + tmp.controlTop = tmp.gridPoint; + tmp.controlLeft = tmp.gridPoint; + tmp.controlRight = tmp.gridPoint; + tmp.controlBottom = tmp.gridPoint; + if (UndoManager::undoEnabled()) + ss->setStates(m_item->meshGradientPatches[grow].TR, tmp); + m_item->meshGradientPatches[grow].TR = tmp; + break; + case 3: + tmp = m_item->meshGradientPatches[grow].BR; + tmp.controlTop = tmp.gridPoint; + tmp.controlLeft = tmp.gridPoint; + tmp.controlRight = tmp.gridPoint; + tmp.controlBottom = tmp.gridPoint; + if (UndoManager::undoEnabled()) + ss->setStates(m_item->meshGradientPatches[grow].BR, tmp); + m_item->meshGradientPatches[grow].BR = tmp; + break; + case 4: + tmp = m_item->meshGradientPatches[grow].BL; + tmp.controlTop = tmp.gridPoint; + tmp.controlLeft = tmp.gridPoint; + tmp.controlRight = tmp.gridPoint; + tmp.controlBottom = tmp.gridPoint; + if (UndoManager::undoEnabled()) + ss->setStates(m_item->meshGradientPatches[grow].BL, tmp); + m_item->meshGradientPatches[grow].BL = tmp; + break; + } + if (UndoManager::undoEnabled()) + undoManager->action(m_item,ss); } + else //if (m_item->gradientType() == Gradient_Mesh) + { + if ((grow == -1) || (gcol == -1)) + return; + tmp = m_item->meshGradientArray[grow][gcol]; + tmp.controlTop = tmp.gridPoint; + tmp.controlLeft = tmp.gridPoint; + tmp.controlRight = tmp.gridPoint; + tmp.controlBottom = tmp.gridPoint; + if (UndoManager::undoEnabled()) + { + auto *ss = new ScOldNewState<MeshPoint>(Um::GradPos); + ss->set("MOVE_MESH_PATCH"); + ss->set("ARRAY", true); + ss->set("X", grow); + ss->set("Y", gcol); + ss->setStates(m_item->meshGradientArray[grow][gcol], tmp); + undoManager->action(m_item,ss); + } + m_item->meshGradientArray[grow][gcol] = tmp; + } + m_item->update(); + m_doc->regionsChanged()->update(QRect()); } + +void PropertiesPalette::snapToPatchGrid(bool val) +{ + if (!m_item) + return; + + m_item->setSnapToPatchGrid(val); +} + +void PropertiesPalette::handleRemovePatch() +{ + if (!m_doc || !m_item) + return; + + if ((m_item->selectedMeshPointX > -1) && (m_item->meshGradientPatches.count() > 1)) + { + if (UndoManager::undoEnabled()) + { + ScItemState<meshGradientPatch> *ss = new ScItemState<meshGradientPatch>(Um::RemoveMeshPatch,"",Um::ILine); + ss->set("REMOVE_MESH_PATCH"); + ss->setItem(m_item->meshGradientPatches.takeAt(m_item->selectedMeshPointX)); + ss->set("POS", m_item->selectedMeshPointX); + undoManager->action(m_item,ss); + } + m_item->selectedMeshPointX = -1; + + WidgetManager::instance().colorPicker()->enableButtonRemovePatch( (m_item->selectedMeshPointX > -1) && (m_item->meshGradientPatches.count() > 1) ); + + m_item->update(); + m_doc->regionsChanged()->update(QRect()); + } +} Index: scribus/ui/propertiespalette.h =================================================================== --- scribus/ui/propertiespalette.h (Revision 26070) +++ scribus/ui/propertiespalette.h (Arbeitskopie) @@ -36,7 +36,9 @@ class ColorCombo; class ColorPalette; class NameWidget; +class PropertiesPalette_Attributes; class PropertiesPalette_Group; +class PropertiesPalette_Fill; class PropertiesPalette_Line; class PropertiesPalette_Shadow; class PropertiesPalette_Shape; @@ -57,7 +59,7 @@ ~PropertiesPalette() {} void endPatchAdd(); - void updateColorSpecialGradient(); +// void updateColorSpecialGradient(); void updateColorList(); void setGradientEditMode(bool); void setTextFlowMode(PageItem::TextFlowMode mode); @@ -69,11 +71,11 @@ // committed PropertiesPalette_Line* linePal {nullptr}; + PropertiesPalette_Fill* fillPal {nullptr}; PropertiesPalette_Shadow* shadowPal {nullptr}; PropertiesPalette_Shape* shapePal {nullptr}; PropertiesPalette_XYZ* xyzPal {nullptr}; - ColorPalette *colorPalette {nullptr}; - TransparencyPalette *transparencyPalette {nullptr}; + PropertiesPalette_Attributes* attributesPal {nullptr}; protected: void changeEvent(QEvent *e) override; @@ -101,22 +103,26 @@ private slots: - void handleGradientChanged(); void handleNewShape(int frameType); - void newSpGradient(double x1, double y1, double x2, double y2, double fx, double fy, double sg, double sk, double cx, double cy); - void toggleGradientEdit(int); - void newSpGradientM(double x1, double y1, double x2, double y2, double fx, double fy, double sg, double sk); - void toggleGradientEditM(); void handleShapeEdit(); + // Gradient Properties + void meshGradientToShape(); + void createNewMeshGradient(); + void resetMeshGradient(); + void resetOneControlPoint(); + void resetAllControlPoints(); + void snapToPatchGrid(bool val); + void handleRemovePatch(); + protected: SectionContainer * scXYZ {nullptr}; SectionContainer * scShape {nullptr}; SectionContainer * scLine {nullptr}; - SectionContainer * scColor {nullptr}; - SectionContainer * scTransparency {nullptr}; + SectionContainer * scFill {nullptr}; SectionContainer * scShadow {nullptr}; + SectionContainer * scAttributes {nullptr}; bool m_haveDoc {false}; bool m_haveItem {false}; Index: scribus/ui/propertiespalette_attributes.cpp =================================================================== --- scribus/ui/propertiespalette_attributes.cpp (nicht existent) +++ scribus/ui/propertiespalette_attributes.cpp (Arbeitskopie) @@ -0,0 +1,243 @@ +#include "propertiespalette_attributes.h" +#include "ui_propertiespalette_attributes.h" + +#include "commonstrings.h" +#include "iconmanager.h" +#include "pageitem.h" +#include "scraction.h" +#include "scribus.h" +#include "scribusapp.h" +#include "scribusdoc.h" +#include "selection.h" + +PropertiesPalette_Attributes::PropertiesPalette_Attributes(QWidget *parent) : + QWidget(parent) +{ + setupUi(this); + setSizePolicy( QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum)); + + nameEdit->setFocusPolicy(Qt::ClickFocus); + + iconSetChange(); + languageChange(); + + connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(iconSetChange())); + connect(ScQApp, SIGNAL(labelVisibilityChanged(bool)), this, SLOT(toggleLabelVisibility(bool))); + + + connect(nameEdit , SIGNAL(Leaved()) , this, SLOT(handleNewName())); + connect(noPrint , SIGNAL(clicked()), this, SLOT(handlePrint())); + +} + +void PropertiesPalette_Attributes::setMainWindow(ScribusMainWindow* mw) +{ + m_ScMW = mw; +} + +void PropertiesPalette_Attributes::setDoc(ScribusDoc *d) +{ + if((d == (ScribusDoc*) m_doc) || (m_ScMW && m_ScMW->scriptIsRunning())) + return; + + if (m_doc) + { + disconnect(m_doc->m_Selection, SIGNAL(selectionChanged()), this, SLOT(handleSelectionChanged())); + disconnect(m_doc , SIGNAL(docChanged()) , this, SLOT(handleSelectionChanged())); + } + + m_doc = d; + m_item = nullptr; + + m_haveDoc = true; + m_haveItem = false; + + connect(m_doc->m_Selection, SIGNAL(selectionChanged()), this, SLOT(handleSelectionChanged())); + connect(m_doc , SIGNAL(docChanged()) , this, SLOT(handleSelectionChanged())); +} + +void PropertiesPalette_Attributes::unsetDoc() +{ + if (m_doc) + { + disconnect(m_doc->m_Selection, SIGNAL(selectionChanged()), this, SLOT(handleSelectionChanged())); + disconnect(m_doc , SIGNAL(docChanged()) , this, SLOT(handleSelectionChanged())); + } + + m_haveDoc = false; + m_haveItem = false; + m_doc = nullptr; + m_item = nullptr; + nameEdit->clear(); + + setEnabled(false); +} + +void PropertiesPalette_Attributes::unsetItem() +{ + m_haveItem = false; + m_item = nullptr; + handleSelectionChanged(); +} + + +PageItem* PropertiesPalette_Attributes::currentItemFromSelection() +{ + PageItem *currentItem = nullptr; + + if (m_doc) + { + if (m_doc->m_Selection->count() > 0) + currentItem = m_doc->m_Selection->itemAt(0); + } + + return currentItem; +} + +void PropertiesPalette_Attributes::setCurrentItem(PageItem *item) +{ + if (!m_ScMW || m_ScMW->scriptIsRunning()) + return; + + if (!m_doc) + setDoc(item->doc()); + + disconnect(nameEdit, SIGNAL(Leaved()), this, SLOT(handleNewName())); + disconnect(noPrint, SIGNAL(clicked()), this, SLOT(handlePrint())); + + m_haveItem = false; + m_item = item; + + nameEdit->setText(m_item->itemName()); + noPrint->setChecked(!item->printEnabled()); + + connect(nameEdit, SIGNAL(Leaved()), this, SLOT(handleNewName())); + connect(noPrint , SIGNAL(clicked()), this, SLOT(handlePrint()), Qt::UniqueConnection); + + m_haveItem = true; + +} + +void PropertiesPalette_Attributes::handleSelectionChanged() +{ + if (!m_haveDoc || !m_ScMW || m_ScMW->scriptIsRunning()) + return; + +// nameEdit->setEnabled(m_doc->m_Selection->count() == 1); + + PageItem* currItem = currentItemFromSelection(); + if (m_doc->m_Selection->count() > 1) + { + nameEdit->setEnabled(false); + + setEnabled(true); + } + else + { + int itemType = currItem ? (int) currItem->itemType() : -1; + + m_haveItem = (itemType!=-1); + + nameEdit->setEnabled(true); + + setEnabled(true); + + } + if (currItem) + { + setCurrentItem(currItem); + } + updateGeometry(); +} + +void PropertiesPalette_Attributes::toggleLabelVisibility(bool visibility) +{ + formWidget->setLabelVisibility(visibility); + labelExport->setLabelVisibility(visibility); +} + +void PropertiesPalette_Attributes::showPrintingEnabled(bool isPrintingEnabled) +{ + noPrint->setChecked(!isPrintingEnabled); +} + + +void PropertiesPalette_Attributes::handlePrint() +{ + if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning()) + return; + m_ScMW->scrActions["itemPrintingEnabled"]->toggle(); +} + +void PropertiesPalette_Attributes::handleNewName() +{ + if (m_ScMW->scriptIsRunning() || !m_haveDoc || !m_haveItem) + return; + QString NameOld = m_item->itemName(); + QString NameNew = nameEdit->text(); + if (NameNew.isEmpty()) + { + nameEdit->setText(NameOld); + return; + } + bool found = false; + QList<PageItem*> allItems; + for (int a = 0; a < m_doc->Items->count(); ++a) + { + PageItem *currItem = m_doc->Items->at(a); + if (currItem->isGroup()) + allItems = currItem->getAllChildren(); + else + allItems.append(currItem); + for (int ii = 0; ii < allItems.count(); ii++) + { + PageItem* item = allItems.at(ii); + if ((NameNew == item->itemName()) && (item != m_item)) + { + found = true; + break; + } + } + allItems.clear(); + } + if (found) + { + ScMessageBox::warning(this, CommonStrings::trWarning, "<qt>"+ tr("Name \"%1\" isn't unique.<br/>Please choose another.").arg(NameNew)+"</qt>"); + nameEdit->setText(NameOld); + nameEdit->setFocus(); + } + else + { + if (m_item->itemName() != nameEdit->text()) + { + m_item->setItemName(nameEdit->text()); + m_doc->changed(); + } + } +} + +void PropertiesPalette_Attributes::changeEvent(QEvent *e) +{ + if (e->type() == QEvent::LanguageChange) + { + languageChange(); + } + else + QWidget::changeEvent(e); +} + +void PropertiesPalette_Attributes::iconSetChange() +{ + IconManager& im = IconManager::instance(); + + QIcon a2; + a2.addPixmap(im.loadPixmap("NoPrint.png"), QIcon::Normal, QIcon::On); + a2.addPixmap(im.loadPixmap("16/document-print.png"), QIcon::Normal, QIcon::Off); + noPrint->setIcon(a2); + +} + +void PropertiesPalette_Attributes::languageChange() +{ + retranslateUi(this); +} Index: scribus/ui/propertiespalette_attributes.h =================================================================== --- scribus/ui/propertiespalette_attributes.h (nicht existent) +++ scribus/ui/propertiespalette_attributes.h (Arbeitskopie) @@ -0,0 +1,57 @@ +#ifndef PROPERTIESPALETTE_ATTRIBUTES_H +#define PROPERTIESPALETTE_ATTRIBUTES_H + +#include <QWidget> +#include "ui_propertiespalette_attributes.h" +#include "scribusapi.h" +#include "scguardedptr.h" + +class BasePointWidget; +class NameWidget; +class PageItem; +class ScribusDoc; +class Selection; +class ScribusMainWindow; + +class SCRIBUS_API PropertiesPalette_Attributes : public QWidget, Ui::PropertiesPalette_Attributes +{ + Q_OBJECT + +public: + explicit PropertiesPalette_Attributes(QWidget *parent = nullptr); + ~PropertiesPalette_Attributes() {}; + +private: + PageItem* currentItemFromSelection(); + +public slots: + void setMainWindow(ScribusMainWindow *mw); + + void setDoc(ScribusDoc *d); + void setCurrentItem(PageItem *item); + void unsetDoc(); + void unsetItem(); + + void iconSetChange(); + void languageChange(); + void toggleLabelVisibility(bool visibility); + + void showPrintingEnabled(bool isPrintingEnabled); + + void handleSelectionChanged(); + +private slots: + void handlePrint(); + void handleNewName(); + +protected: + bool m_haveDoc {false}; + bool m_haveItem {false}; + PageItem *m_item {nullptr}; + ScribusMainWindow* m_ScMW {nullptr}; + ScGuardedPtr<ScribusDoc> m_doc; + + void changeEvent(QEvent *e) override; +}; + +#endif // PROPERTIESPALETTE_ATTRIBUTES_H Index: scribus/ui/propertiespalette_attributes.ui =================================================================== --- scribus/ui/propertiespalette_attributes.ui (nicht existent) +++ scribus/ui/propertiespalette_attributes.ui (Arbeitskopie) @@ -0,0 +1,166 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>PropertiesPalette_Attributes</class> + <widget class="QWidget" name="PropertiesPalette_Attributes"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>288</width> + <height>65</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>8</number> + </property> + <property name="topMargin"> + <number>8</number> + </property> + <property name="rightMargin"> + <number>8</number> + </property> + <property name="bottomMargin"> + <number>8</number> + </property> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_16"> + <property name="spacing"> + <number>16</number> + </property> + <item> + <widget class="FormWidget" name="formWidget"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string/> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <property name="preserveLabelSpace"> + <bool>true</bool> + </property> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QLabel" name="labelName"> + <property name="text"> + <string>Name:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + </item> + <item> + <widget class="NameWidget" name="nameEdit"> + <property name="focusPolicy"> + <enum>Qt::ClickFocus</enum> + </property> + <property name="toolTip"> + <string>Name of selected object</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="FormWidget" name="labelExport"> + <property name="label" stdset="0"> + <string>Export</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <property name="space"> + <number>2</number> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_15"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QToolButton" name="noPrint"> + <property name="toolTip"> + <string>Enable or disable exporting of the object</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <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> + </layout> + </widget> + <customwidgets> + <customwidget> + <class>FormWidget</class> + <extends>QWidget</extends> + <header>ui/widgets/form_widget.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>NameWidget</class> + <extends>QLineEdit</extends> + <header>ui/propertiespalette_utils.h</header> + </customwidget> + </customwidgets> + <resources/> + <connections/> +</ui> Index: scribus/ui/propertiespalette_fill.cpp =================================================================== --- scribus/ui/propertiespalette_fill.cpp (nicht existent) +++ scribus/ui/propertiespalette_fill.cpp (Arbeitskopie) @@ -0,0 +1,760 @@ +#include "propertiespalette_fill.h" + +#include "iconmanager.h" +#include "scribus.h" +#include "scribusapp.h" +#include "scribusdoc.h" +#include "scribusview.h" +#include "selection.h" +#include "undomanager.h" +#include "ui/colorpicker/colorpicker.h" + +PropertiesPalette_Fill::PropertiesPalette_Fill(QWidget *parent) : + QWidget(parent) +{ + setupUi(this); + + setSizePolicy( QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum)); + + buttonFillColor->setContext(Context::Fill); + buttonFillColor->setMenuContextType(ColorButton::Floating); + buttonFillMask->setContext(Context::FillMask); + buttonFillMask->setMenuContextType(ColorButton::Floating); + + undoManager = UndoManager::instance(); + + iconSetChange(); + languageChange(); + + connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(iconSetChange())); + connect(ScQApp, SIGNAL(labelVisibilityChanged(bool)), this, SLOT(toggleLabelVisibility(bool))); + + connect(evenOdd, SIGNAL(clicked()), this, SLOT(handleFillRule())); + connect(nonZero, SIGNAL(clicked()), this, SLOT(handleFillRule())); + connect(buttonFillColor, SIGNAL(changed()), this, SLOT(handleFillColor())); + connect(buttonFillColor, SIGNAL(gradientVectorChanged()), this, SLOT(handleFillColorVector())); + connect(buttonFillColor, SIGNAL(gradientMeshChanged()), this, SLOT(handleFillColorMesh())); + connect(buttonFillMask, SIGNAL(changed()), this, SLOT(handleFillMask())); + connect(buttonFillMask, SIGNAL(gradientVectorChanged()), this, SLOT(handleFillMaskVector())); + connect(comboBlendmode, SIGNAL(currentIndexChanged(int)), this, SLOT(handleFillBlendmode(int))); + +} + +void PropertiesPalette_Fill::updateColorList() +{ + if (!m_haveDoc || !m_ScMW || m_ScMW->scriptIsRunning()) + return; +} + +void PropertiesPalette_Fill::setMainWindow(ScribusMainWindow* mw) +{ + m_ScMW = mw; + + connect(m_ScMW, SIGNAL(UpdateRequest(int)), this , SLOT(handleUpdateRequest(int))); +} + +void PropertiesPalette_Fill::setDoc(ScribusDoc *d) +{ + if((d == (ScribusDoc*) m_doc) || (m_ScMW && m_ScMW->scriptIsRunning())) + return; + + if (m_doc) + { + disconnect(m_doc->m_Selection, SIGNAL(selectionChanged()), this, SLOT(handleSelectionChanged())); + disconnect(m_doc , SIGNAL(docChanged()) , this, SLOT(handleSelectionChanged())); + } + + m_doc = d; + m_item = nullptr; + + m_haveDoc = true; + m_haveItem = false; + m_unitRatio = m_doc->unitRatio(); + + buttonFillColor->setDoc(m_doc); + buttonFillMask->setDoc(m_doc); + + connect(m_doc->m_Selection, SIGNAL(selectionChanged()), this, SLOT(handleSelectionChanged())); + connect(m_doc , SIGNAL(docChanged()) , this, SLOT(handleSelectionChanged())); +} + +void PropertiesPalette_Fill::unsetDoc() +{ + if (m_doc) + { + disconnect(m_doc->m_Selection, SIGNAL(selectionChanged()), this, SLOT(handleSelectionChanged())); + disconnect(m_doc , SIGNAL(docChanged()) , this, SLOT(handleSelectionChanged())); + } + + m_haveDoc = false; + m_haveItem = false; + m_doc = nullptr; + m_item = nullptr; + + buttonFillColor->unsetDoc(); + buttonFillMask->unsetDoc(); + + setEnabled(false); +} + +void PropertiesPalette_Fill::unsetItem() +{ + m_haveItem = false; + m_item = nullptr; + handleSelectionChanged(); +} + +PageItem* PropertiesPalette_Fill::currentItemFromSelection() +{ + PageItem *currentItem = nullptr; + + if (m_doc && m_doc->m_Selection->count() > 0) + currentItem = m_doc->m_Selection->itemAt(0); + + return currentItem; +} + +void PropertiesPalette_Fill::setCurrentItem_Fill(PageItem *item) +{ + buttonFillColor->setType(item->gradientType()); + + // Gradient + buttonFillColor->setGradient( + item->gradient(), + item->fill_gradient, + item->getGradientExtend(), + item->gradientCol1(), + item->gradientCol2(), + item->gradientCol3(), + item->gradientCol4(), + item->gradientShade1(), + item->gradientShade2(), + item->gradientShade3(), + item->gradientShade4(), + item->gradientTransp1(), + item->gradientTransp2(), + item->gradientTransp3(), + item->gradientTransp4() + ); + + // Gradient Vector + buttonFillColor->setGradientVector( + item->gradientStartX(), + item->gradientStartY(), + item->gradientEndX(), + item->gradientEndY(), + item->gradientFocalX(), + item->gradientFocalY(), + item->gradientScale(), + item->gradientSkew(), + item->gradientControl1().x(), + item->gradientControl1().y(), + item->gradientControl2().x(), + item->gradientControl2().y(), + item->gradientControl3().x(), + item->gradientControl3().y(), + item->gradientControl4().x(), + item->gradientControl4().y(), + item->gradientControl5().x(), + item->gradientControl5().y() + ); + + // Gradient Mesh + if (m_ScMW->view->editStrokeGradient == GradientEdit::Mesh_Point/* || (m_ScMW->view->editStrokeGradient == GradientEdit::Mesh_Color)*/) + { + if ((item->selectedMeshPointX > -1) && (item->selectedMeshPointY > -1)) + { + MeshPoint mp = item->meshGradientArray[item->selectedMeshPointX][item->selectedMeshPointY]; + + buttonFillColor->setGradientMesh( + mp.colorName, mp.shade, mp.transparency + ); + } + + WidgetManager::instance().colorPicker()->enableMeshColor((item->selectedMeshPointX > -1) && (item->selectedMeshPointY > -1)); + } + else if (m_ScMW->view->editStrokeGradient == GradientEdit::PatchMesh_Point) + { + if ((item->selectedMeshPointX > -1) && (item->selectedMeshPointY > 0)) + { + int index = qBound(0, item->selectedMeshPointX, item->meshGradientPatches.count()-1); + + meshGradientPatch patch = item->meshGradientPatches[index]; + MeshPoint mp; + switch (item->selectedMeshPointY) + { + case 1: + mp = patch.TL; + break; + case 2: + mp = patch.TR; + break; + case 3: + mp = patch.BR; + break; + case 4: + mp = patch.BL; + break; + } + + buttonFillColor->setGradientMesh( + mp.colorName, mp.shade, mp.transparency + ); + } + + WidgetManager::instance().colorPicker()->enableButtonRemovePatch((item->selectedMeshPointX > -1) && (item->meshGradientPatches.count() > 1)); + WidgetManager::instance().colorPicker()->enableMeshColor((item->selectedMeshPointX > -1) && (item->selectedMeshPointY > 0)); + + } + + // Hatch + buttonFillColor->setHatch( + item->hatchType, + item->hatchDistance, + item->hatchAngle, + item->hatchUseBackground, + item->hatchBackground, + item->hatchForeground + ); + // Pattern + bool mirrorX, mirrorY; + item->patternFlip(mirrorX, mirrorY); + buttonFillColor->setPattern(item->pattern(), + item->patternTransform().offsetX, + item->patternTransform().offsetY, + item->patternTransform().scaleX, + item->patternTransform().scaleY, + item->patternTransform().skewX, + item->patternTransform().skewY, + item->patternTransform().rotation, + 0.0, mirrorX, mirrorY, false + ); + // Color + buttonFillColor->setColor(item->fillColor(), item->fillShade()); + // General + buttonFillColor->setGeneral(item->overprint()); + + buttonFillColor->updateFloatingContext(); + buttonFillColor->updatePreview(); + +} + +void PropertiesPalette_Fill::setCurrentItem_FillMask(PageItem *item) +{ + buttonFillMask->setType(item->maskType()); + // Gradient + buttonFillMask->setGradient( + item->gradientMask(), + item->mask_gradient + ); + + // Gradient Vector + buttonFillMask->setGradientVector( + item->gradientMaskStartX(), + item->gradientMaskStartY(), + item->gradientMaskEndX(), + item->gradientMaskEndY(), + item->gradientMaskFocalX(), + item->gradientMaskFocalY(), + item->gradientMaskScale(), + item->gradientMaskSkew() + ); + + // Pattern + bool mirrorX, mirrorY; + item->maskFlip(mirrorX, mirrorY); + buttonFillMask->setPattern(item->patternMask(), + item->maskTransform().offsetX, + item->maskTransform().offsetY, + item->maskTransform().scaleX, + item->maskTransform().scaleY, + item->maskTransform().skewX, + item->maskTransform().skewY, + item->maskTransform().rotation, + 0.0, mirrorX, mirrorY, false + ); + // Color + buttonFillMask->setColor( + "", + 100, + item->fillTransparency() + ); + + buttonFillMask->updateFloatingContext(); + buttonFillMask->updatePreview(); + +} + +void PropertiesPalette_Fill::setCurrentItem(PageItem *item) +{ + if (!m_ScMW || m_ScMW->scriptIsRunning()) + return; + //CB We shouldn't really need to process this if our item is the same one + //maybe we do if the item has been changed by scripter.. but that should probably + //set some status if so. + //FIXME: This won't work until when a canvas deselect happens, m_item must be nullptr. + //if (m_item == i) + // return; + + if (item && !m_doc) + setDoc(item->doc()); + + m_haveItem = false; + m_item = item; + + if (!m_item) + return; + + int itemType = m_item ? (int) m_item->itemType() : -1; + + switch (itemType) + { + case -1: + + break; + case PageItem::LatexFrame: + case PageItem::OSGFrame: + case PageItem::Group: + case PageItem::Symbol: + case PageItem::Table: + case PageItem::ItemType1: + case PageItem::ItemType3: + case PageItem::Polygon: + case PageItem::RegularPolygon: + case PageItem::Arc: + case PageItem::PolyLine: + case PageItem::Spiral: + nonZero->setEnabled(true); + evenOdd->setEnabled(true); + nonZero->setChecked(!m_item->fillRule); + evenOdd->setChecked(m_item->fillRule); + + if (m_item->isGroup()) + labelFillColor->setEnabled(false); + else + labelFillColor->setEnabled(true); + + break; + case PageItem::ImageFrame: + case PageItem::TextFrame: + case PageItem::PathText: + nonZero->setChecked(false); + nonZero->setEnabled(false); + evenOdd->setChecked(false); + evenOdd->setEnabled(false); + labelFillColor->setEnabled(true); + break; + } + + setCurrentItem_Fill(m_item); + setCurrentItem_FillMask(m_item); + + QSignalBlocker sigFillBlendMode(comboBlendmode); + comboBlendmode->setCurrentIndex(m_item->fillBlendmode()); + + m_haveItem = true; +} + +void PropertiesPalette_Fill::handleFillRule() +{ + if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning()) + return; + m_item->fillRule = evenOdd->isChecked(); + m_item->update(); +} + +void PropertiesPalette_Fill::handleFillColor() +{ + if (!m_doc ||!m_item || !m_ScMW || m_ScMW->scriptIsRunning()) + return; + + blockUpdates(true); + + switch(buttonFillColor->mode()) + { + default: + case Mode::Solid: + m_doc->itemSelection_SetItemBrush(buttonFillColor->colorData().Name); + m_doc->itemSelection_SetItemBrushShade(static_cast<int>(buttonFillColor->colorData().Shade)); + break; + case Mode::Gradient: + { + if(buttonFillColor->gradientData().Name.isEmpty()) + { + m_item->setGradient(""); + m_doc->itemSelection_SetFillGradient(buttonFillColor->gradientData().Gradient); + } + else + { + m_item->setGradient(buttonFillColor->gradientData().Name); + } + + UndoTransaction trans; + if (UndoManager::undoEnabled()) + trans = undoManager->beginTransaction(Um::Selection, Um::IFill, Um::GradVal, QString(), Um::IFill); + m_item->set4ColorShade( + static_cast<int>(buttonFillColor->gradientData().Color1Shade), + static_cast<int>(buttonFillColor->gradientData().Color2Shade), + static_cast<int>(buttonFillColor->gradientData().Color3Shade), + static_cast<int>(buttonFillColor->gradientData().Color4Shade) + ); + m_item->set4ColorTransparency( + buttonFillColor->gradientData().Color1Alpha, + buttonFillColor->gradientData().Color2Alpha, + buttonFillColor->gradientData().Color3Alpha, + buttonFillColor->gradientData().Color4Alpha + ); + m_item->set4ColorColors( + buttonFillColor->gradientData().Color1Name, + buttonFillColor->gradientData().Color2Name, + buttonFillColor->gradientData().Color3Name, + buttonFillColor->gradientData().Color4Name + ); + if (trans) + trans.commit(); + + m_item->setGradientExtend(buttonFillColor->gradientData().repeatMethod); + m_item->update(); + m_doc->regionsChanged()->update(QRect()); + } + break; + case Mode::Hatch: + m_doc->itemSelection_SetItemHatchFill( + buttonFillColor->hatchData().Type, + buttonFillColor->hatchData().Distance, + buttonFillColor->hatchData().Angle, + buttonFillColor->hatchData().HasBackgroundColor, + buttonFillColor->hatchData().ColorBackground, + buttonFillColor->hatchData().ColorForeground + ); + break; + case Mode::Pattern: + m_doc->itemSelection_SetItemPatternFill(buttonFillColor->patternData().Name); + m_doc->itemSelection_SetItemPatternProps( + buttonFillColor->patternData().ScaleX, + buttonFillColor->patternData().ScaleY, + buttonFillColor->patternData().OffsetX, + buttonFillColor->patternData().OffsetY, + buttonFillColor->patternData().Angle, + buttonFillColor->patternData().SkewX, + buttonFillColor->patternData().SkewY, + buttonFillColor->patternData().MirrorX, + buttonFillColor->patternData().MirrorY + ); + break; + } + + m_doc->itemSelection_SetItemGradFill(buttonFillColor->type()); + m_doc->itemSelection_SetOverprint(buttonFillColor->generalData().overprint); + + blockUpdates(false); + +} + +void PropertiesPalette_Fill::handleFillColorVector() +{ + if (!m_doc ||!m_item || !m_ScMW || m_ScMW->scriptIsRunning() || buttonFillColor->mode() != Mode::Gradient) + return; + + CPGradientVectorData gvd = buttonFillColor->gradientVectorData(); + + QRectF upRect; + UndoTransaction trans; + if (UndoManager::undoEnabled()) + trans = undoManager->beginTransaction(Um::Selection, Um::ILine, Um::GradPos + "p", "", Um::ILine); + + switch (buttonFillColor->type()) + { + case Gradient_4Colors: + m_item->setGradientControl1(FPoint(gvd.C1X, gvd.C1Y)); + m_item->setGradientControl2(FPoint(gvd.C2X, gvd.C2Y)); + m_item->setGradientControl3(FPoint(gvd.C3X, gvd.C3Y)); + m_item->setGradientControl4(FPoint(gvd.C4X, gvd.C4Y)); + m_item->update(); + upRect = QRectF(QPointF(-m_item->width(), -m_item->height()), QPointF(m_item->width() * 2, m_item->height() * 2)).normalized(); + break; + case Gradient_Diamond: + m_item->setGradientControl1(FPoint(gvd.C1X, gvd.C1Y)); + m_item->setGradientControl2(FPoint(gvd.C2X, gvd.C2Y)); + m_item->setGradientControl3(FPoint(gvd.C3X, gvd.C3Y)); + m_item->setGradientControl4(FPoint(gvd.C4X, gvd.C4Y)); + m_item->setGradientControl5(FPoint(gvd.C5X, gvd.C5Y)); + m_item->update(); + upRect = QRectF(QPointF(-m_item->width(), -m_item->height()), QPointF(m_item->width() * 2, m_item->height() * 2)).normalized(); + break; + default: + if (m_item->gradientType() == Gradient_Conical && UndoManager::undoEnabled()) + { + SimpleState *ss= new SimpleState("Refresh"); + ss->set("UNDO_UPDATE_CONICAL"); + undoManager->action(m_item,ss); + } + + m_item->setGradientStart(gvd.StartX, gvd.StartY); + m_item->setGradientEnd(gvd.EndX, gvd.EndY); + m_item->setGradientFocal(gvd.FocalX, gvd.FocalY); + m_item->setGradientScale(gvd.Scale); + m_item->setGradientSkew(gvd.Skew); + + if (m_item->gradientType() == Gradient_Conical && UndoManager::undoEnabled()) + { + m_item->createConicalMesh(); + SimpleState *ss= new SimpleState("Refresh"); + ss->set("REDO_UPDATE_CONICAL"); + undoManager->action(m_item,ss); + } + + m_item->update(); + upRect = QRectF(m_item->gradientStart(), m_item->gradientEnd()); + double radEnd = distance(m_item->gradientEndX() - m_item->gradientStartX(), m_item->gradientEndY() - m_item->gradientStartY()); + double rotEnd = xy2Deg(m_item->gradientEndX() - m_item->gradientStartX(), m_item->gradientEndY() - m_item->gradientStartY()); + QTransform m; + m.translate(m_item->gradientStartX(), m_item->gradientStartY()); + m.rotate(rotEnd); + m.rotate(-90); + m.rotate(m_item->gradientSkew()); + m.translate(radEnd * m_item->gradientScale(), 0); + QPointF shP = m.map(QPointF(0,0)); + upRect |= QRectF(shP, m_item->gradientEnd()).normalized(); + upRect |= QRectF(shP, m_item->gradientStart()).normalized(); + upRect |= QRectF(shP, QPointF(0, 0)).normalized(); + upRect |= QRectF(shP, QPointF(m_item->width(), m_item->height())).normalized(); + break; + } + + if (trans) + trans.commit(); + + upRect.translate(m_item->xPos(), m_item->yPos()); + m_doc->regionsChanged()->update(upRect.adjusted(-10.0, -10.0, 10.0, 10.0)); + m_doc->changed(); + m_doc->changedPagePreview(); + +} + +void PropertiesPalette_Fill::handleFillColorMesh() +{ + if (!m_doc ||!m_item || !m_ScMW || m_ScMW->scriptIsRunning()) + return; + + CPColorData mcd = buttonFillColor->gradientMeshData(); + + // Mesh Color + if (m_ScMW->view->editStrokeGradient == GradientEdit::Mesh_Point) + { + if ((m_item->selectedMeshPointX > -1) && (m_item->selectedMeshPointY > -1)) + m_item->setMeshPointColor(m_item->selectedMeshPointX, m_item->selectedMeshPointY, + mcd.Name, + mcd.Shade, + mcd.Opacity + ); + } + + // Mesh Patch Color + if (m_ScMW->view->editStrokeGradient == GradientEdit::PatchMesh_Point) + { + if ((m_item->selectedMeshPointX > -1) && (m_item->selectedMeshPointY > -1)) + m_item->setMeshPointColor(m_item->selectedMeshPointX, m_item->selectedMeshPointY, + mcd.Name, + mcd.Shade, + mcd.Opacity, + true + ); + } + + m_item->update(); + m_doc->regionsChanged()->update(QRect()); + +} + +void PropertiesPalette_Fill::handleFillMask() +{ + if (!m_doc || !m_item || !m_ScMW || m_ScMW->scriptIsRunning()) + return; + + blockUpdates(true); + m_doc->itemSelection_SetItemGradMask(buttonFillMask->type()); + + switch(buttonFillMask->mode()) + { + default: + case Mode::Solid: + m_doc->itemSelection_SetItemFillTransparency(buttonFillMask->colorData().Opacity); + break; + case Mode::Gradient: + + if(buttonFillMask->gradientData().Name.isEmpty()) + { + m_item->setGradientMask(""); + m_doc->itemSelection_SetMaskGradient(buttonFillMask->gradient()); + } + else + { + m_item->setGradientMask(buttonFillMask->gradientName()); + } + + break; + case Mode::Hatch: + // Do nothing + break; + case Mode::Pattern: + m_doc->itemSelection_SetItemPatternMask(buttonFillMask->patternData().Name); + m_doc->itemSelection_SetItemPatternMaskProps( + buttonFillMask->patternData().ScaleX, + buttonFillMask->patternData().ScaleY, + buttonFillMask->patternData().OffsetX, + buttonFillMask->patternData().OffsetY, + buttonFillMask->patternData().Angle, + buttonFillMask->patternData().SkewX, + buttonFillMask->patternData().SkewY, + buttonFillMask->patternData().MirrorX, + buttonFillMask->patternData().MirrorY + ); + break; + } + blockUpdates(false); +} + +void PropertiesPalette_Fill::handleFillMaskVector() +{ + if (!m_doc ||!m_item || !m_ScMW || m_ScMW->scriptIsRunning() || buttonFillMask->mode() != Mode::Gradient) + return; + + CPGradientVectorData gvd = buttonFillMask->gradientVectorData(); + + QRectF upRect; + UndoTransaction trans; + if (UndoManager::undoEnabled()) + trans = undoManager->beginTransaction(Um::Selection, Um::ILine, Um::GradPos + "o", "", Um::ILine); + + m_item->setGradientMaskStart(gvd.StartX, gvd.StartY); + m_item->setGradientMaskEnd(gvd.EndX, gvd.EndY); + m_item->setGradientMaskFocal(gvd.FocalX, gvd.FocalY); + m_item->setGradientMaskScale(gvd.Scale); + m_item->setGradientMaskSkew(gvd.Skew); + +// if ((m_item->GrMask == GradMask_Linear) || (m_item->GrMask == GradMask_LinearLumAlpha)) +// { +// m_item->setGradientMaskFocal(m_item->GrMaskStartX, m_item->GrMaskStartY); +// } + m_item->update(); + if (trans) + { + trans.commit(); + } + upRect = QRectF(m_item->gradientMaskStart(), m_item->gradientMaskEnd()); + double radEnd = distance(m_item->GrMaskEndX - m_item->GrMaskStartX, m_item->GrMaskEndY - m_item->GrMaskStartY); + double rotEnd = xy2Deg(m_item->GrMaskEndX - m_item->GrMaskStartX, m_item->GrMaskEndY - m_item->GrMaskStartY); + QTransform m; + m.translate(m_item->GrMaskStartX, m_item->GrMaskStartY); + m.rotate(rotEnd); + m.rotate(-90); + m.rotate(m_item->GrMaskSkew); + m.translate(radEnd * m_item->GrMaskScale, 0); + QPointF shP = m.map(QPointF(0,0)); + upRect |= QRectF(shP, m_item->gradientMaskEnd()).normalized(); + upRect |= QRectF(shP, m_item->gradientMaskStart()).normalized(); + upRect |= QRectF(shP, QPointF(0, 0)).normalized(); + upRect |= QRectF(shP, QPointF(m_item->width(), m_item->height())).normalized(); + upRect.translate(m_item->xPos(), m_item->yPos()); + m_doc->regionsChanged()->update(upRect.adjusted(-10.0, -10.0, 10.0, 10.0)); + m_doc->changed(); + m_doc->changedPagePreview(); +} + +void PropertiesPalette_Fill::handleFillBlendmode(int mode) +{ + if (!m_doc || !m_ScMW || m_ScMW->scriptIsRunning()) + return; + + m_doc->itemSelection_SetItemFillBlend(comboBlendmode->currentIndex()); +} + +void PropertiesPalette_Fill::handleSelectionChanged() +{ + if (!m_haveDoc || !m_ScMW || m_ScMW->scriptIsRunning()) + return; + + if (updatesBlocked()) + return; + + PageItem* currItem = currentItemFromSelection(); + if (m_doc->m_Selection->count() > 1) + { + setEnabled(true); + } + else + { + int itemType = currItem ? (int) currItem->itemType() : -1; + + m_haveItem = (itemType != -1); + switch (itemType) + { + case -1: + case PageItem::OSGFrame: + case PageItem::Line: + case PageItem::Symbol: + setEnabled(false); + break; + case PageItem::Arc: + case PageItem::ItemType1: + case PageItem::ItemType3: + case PageItem::Polygon: + case PageItem::RegularPolygon: + case PageItem::PolyLine: + case PageItem::Spiral: + case PageItem::PathText: + case PageItem::Table: + case PageItem::TextFrame: + case PageItem::ImageFrame: + case PageItem::LatexFrame: + setEnabled(true); + break; + } + } + setCurrentItem(currItem); + updateGeometry(); +} + +void PropertiesPalette_Fill::handleUpdateRequest(int updateFlags) +{ + if (updateFlags & reqColorsUpdate) + updateColorList(); +} + +void PropertiesPalette_Fill::iconSetChange() +{ + IconManager& im = IconManager::instance(); + + evenOdd->setIcon(im.loadIcon("fill-rule-even-odd.png")); + nonZero->setIcon(im.loadIcon("fill-rule-nonzero.png")); + + if(labelFillMask->labelVisibility()) + buttonFillMask->setIcon(QIcon()); + else + buttonFillMask->setIcon(im.loadIcon("mask", 8)); +} + +void PropertiesPalette_Fill::languageChange() +{ + retranslateUi(this); + + comboBlendmode->setToolTip( tr("Blendmode of fill")); +} + +void PropertiesPalette_Fill::unitChange() +{ + m_unitRatio = m_doc->unitRatio(); +} + +void PropertiesPalette_Fill::toggleLabelVisibility(bool v) +{ + labelFillColor->setLabelVisibility(v); + labelFillMask->setLabelVisibility(v); + labelFillRule->setLabelVisibility(v); + labelBlendmode->setLabelVisibility(v); + + iconSetChange(); +} + + Index: scribus/ui/propertiespalette_fill.h =================================================================== --- scribus/ui/propertiespalette_fill.h (nicht existent) +++ scribus/ui/propertiespalette_fill.h (Arbeitskopie) @@ -0,0 +1,73 @@ +#ifndef PROPERTIESPALETTE_FILL_H +#define PROPERTIESPALETTE_FILL_H + +#include "ui_propertiespalette_fill.h" +#include <QWidget> +#include "scribusapi.h" +#include "scguardedptr.h" + +class ScribusDoc; +class ScribusMainWindow; +class PageItem; +class ColorPicker; +class UndoManager; + +class SCRIBUS_API PropertiesPalette_Fill : public QWidget, Ui::PropertiesPalette_Fill +{ + Q_OBJECT + +public: + explicit PropertiesPalette_Fill(QWidget *parent = nullptr); + ~PropertiesPalette_Fill() {}; + + void updateColorList(); + +public slots: + void setMainWindow(ScribusMainWindow *mw); + + void setDoc(ScribusDoc *d); + void setCurrentItem(PageItem *item); + void unsetDoc(); + void unsetItem(); + + void handleSelectionChanged(); + void handleUpdateRequest(int); + + void iconSetChange(); + void languageChange(); + void unitChange(); + void toggleLabelVisibility(bool v); + +private: + PageItem* currentItemFromSelection(); + void setCurrentItem_Fill(PageItem *item); + void setCurrentItem_FillMask(PageItem *item); + + int m_blockUpdates {0}; + void blockUpdates(bool block) { if (block) ++m_blockUpdates; else --m_blockUpdates; } + bool updatesBlocked() { return (m_blockUpdates > 0); } + +protected: + bool m_haveDoc {false}; + bool m_haveItem {false}; + double m_unitRatio {1.0}; + PageItem *m_item {nullptr}; + ScribusMainWindow* m_ScMW {nullptr}; + ScGuardedPtr<ScribusDoc> m_doc; + UndoManager* undoManager {nullptr}; + QButtonGroup *buttonsCaps; + QButtonGroup *buttonsJoins; + +private slots: + void handleFillRule(); + void handleFillColor(); + void handleFillColorVector(); + void handleFillColorMesh(); + void handleFillMask(); + void handleFillMaskVector(); + void handleFillBlendmode(int mode); + + +}; + +#endif // PROPERTIESPALETTE_FILL_H Index: scribus/ui/propertiespalette_fill.ui =================================================================== --- scribus/ui/propertiespalette_fill.ui (nicht existent) +++ scribus/ui/propertiespalette_fill.ui (Arbeitskopie) @@ -0,0 +1,258 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>PropertiesPalette_Fill</class> + <widget class="QWidget" name="PropertiesPalette_Fill"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>335</width> + <height>66</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>8</number> + </property> + <property name="topMargin"> + <number>8</number> + </property> + <property name="rightMargin"> + <number>8</number> + </property> + <property name="bottomMargin"> + <number>8</number> + </property> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="spacing"> + <number>16</number> + </property> + <item> + <widget class="FormWidget" name="labelFillColor"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Color</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ColorButton" name="buttonFillColor"> + <property name="text"> + <string/> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_6"> + <property name="spacing"> + <number>4</number> + </property> + <item> + <widget class="FormWidget" name="labelFillMask"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Mask</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ColorButton" name="buttonFillMask"> + <property name="text"> + <string/> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="FormWidget" name="labelBlendmode"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Blendmode</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_5"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ComboBlendMode" name="comboBlendmode"/> + </item> + </layout> + </widget> + </item> + </layout> + </item> + <item> + <widget class="FormWidget" name="labelFillRule"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Fill Rule</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QToolButton" name="evenOdd"> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="autoExclusive"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="nonZero"> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="autoExclusive"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <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> + </layout> + </widget> + <customwidgets> + <customwidget> + <class>FormWidget</class> + <extends>QWidget</extends> + <header>ui/widgets/form_widget.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>ColorButton</class> + <extends>QToolButton</extends> + <header>ui/widgets/color_button.h</header> + </customwidget> + <customwidget> + <class>ComboBlendMode</class> + <extends>QComboBox</extends> + <header>ui/widgets/combo_blendmode.h</header> + </customwidget> + </customwidgets> + <resources/> + <connections/> +</ui> Index: scribus/ui/propertiespalette_group.h =================================================================== --- scribus/ui/propertiespalette_group.h (Revision 26070) +++ scribus/ui/propertiespalette_group.h (Arbeitskopie) @@ -30,7 +30,7 @@ void showTextFlowMode(PageItem::TextFlowMode mode); void updateColorList(); - void updateColorSpecialGradient(); +// void updateColorSpecialGradient(); protected: bool m_haveDoc {false}; Index: scribus/ui/propertiespalette_line.cpp =================================================================== --- scribus/ui/propertiespalette_line.cpp (Revision 26070) +++ scribus/ui/propertiespalette_line.cpp (Arbeitskopie) @@ -23,7 +23,7 @@ #include "scribusapp.h" #include "scribusdoc.h" #include "selection.h" -#include "ui/propertiespalette_utils.h" +#include "ui/colorpicker/colorpicker_enum.h" #include "ui/widgets/popup_menu.h" #include "units.h" #include "util.h" @@ -48,8 +48,6 @@ buttonsJoins->addButton(buttonJoinBevel, 1); buttonsJoins->addButton(buttonJoinRound, 2); - numberOpacity->setDecimals(0); - lineType->addItem( tr("Custom")); lineMarkerSelectorStart = new LineMarkerSelector(); @@ -62,8 +60,10 @@ PopupMenu *menuLineMarkerEnd = new PopupMenu(lineMarkerSelectorEnd); buttonMarkerEnd->setMenu(menuLineMarkerEnd); - lineStyles->setItemDelegate(new LineStyleItemDelegate()); - lineStyles->addItem( "No Style" ); + buttonLineColor->setContext(Context::Line); + buttonLineColor->setMenuContextType(ColorButton::Floating); + buttonLineMask->setContext(Context::LineMask); + buttonLineMask->setMenuContextType(ColorButton::Floating); languageChange(); iconSetChange(); @@ -73,7 +73,7 @@ connect(ScQApp, SIGNAL(labelVisibilityChanged(bool)), this, SLOT(toggleLabelVisibility(bool))); connect(lineWidth, SIGNAL(valueChanged(double)), this, SLOT(handleLineWidth())); - connect(lineType, SIGNAL(activated(int)), this, SLOT(handleLineStyle())); + connect(lineType, SIGNAL(activated(int)), this, SLOT(handleLineType())); connect(buttonsJoins, SIGNAL(idClicked(int)), this, SLOT(handleLineJoin())); connect(buttonsCaps, SIGNAL(idClicked(int)), this, SLOT(handleLineEnd())); connect(dashEditor, SIGNAL(dashChanged()), this, SLOT(handleDashChange())); @@ -81,10 +81,12 @@ connect(lineMarkerSelectorStart, SIGNAL(scaleChanged(double)), this, SLOT(handleStartArrowScale(double))); connect(lineMarkerSelectorEnd, SIGNAL(markerChanged(int)), this, SLOT(handleEndArrow(int))); connect(lineMarkerSelectorEnd, SIGNAL(scaleChanged(double)), this, SLOT(handleEndArrowScale(double))); - connect(lineStyles, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(handleLineStyle(QListWidgetItem*))); connect(buttonSwapMarker, SIGNAL(clicked(bool)), this, SLOT(swapLineMarker())); connect(comboBlendmode, SIGNAL(currentIndexChanged(int)), this, SLOT(handleLineBlendmode(int))); - connect(numberOpacity, SIGNAL(valueChanged(double)), this, SLOT(handleLineOpacity(double))); + connect(comboLineStyle, SIGNAL(currentIndexChanged(int)), this, SLOT(handleLineStyle(int))); + connect(buttonLineColor, SIGNAL(changed()), this, SLOT(handleLineColor())); + connect(buttonLineColor, SIGNAL(gradientVectorChanged()), this, SLOT(handleLineColorVector())); + connect(buttonLineMask, SIGNAL(changed()), this, SLOT(handleLineOpacity())); } @@ -104,7 +106,7 @@ if (m_doc) if (m_doc->m_Selection->count() >= 1) - currentItem = m_doc->m_Selection->itemAt(0); + currentItem = m_doc->m_Selection->itemAt(0); return currentItem; } @@ -138,6 +140,7 @@ lineWidth->setMaximum( 300 ); lineWidth->setMinimum( 0 ); + comboLineStyle->setDoc(m_doc); updateLineStyles(m_doc); lineMarkerSelectorStart->rebuildList(&m_doc->arrowStyles()); @@ -146,6 +149,9 @@ lineMarkerSelectorEnd->rebuildList(&m_doc->arrowStyles()); buttonMarkerEnd->setIcon(lineMarkerSelectorEnd->currentIcon()); + buttonLineColor->setDoc(m_doc); + buttonLineMask->setDoc(m_doc); + connect(m_doc->m_Selection, SIGNAL(selectionChanged()), this, SLOT(handleSelectionChanged())); connect(m_doc, SIGNAL(docChanged()), this, SLOT(handleSelectionChanged())); } @@ -163,6 +169,9 @@ m_doc = nullptr; m_item = nullptr; + comboLineStyle->setDoc(m_doc); + buttonLineColor->unsetDoc(); + buttonLineMask->unsetDoc(); updateLineStyles(nullptr); setEnabled(false); @@ -181,6 +190,9 @@ if (!m_haveDoc || !m_ScMW || m_ScMW->scriptIsRunning()) return; + if (updatesBlocked()) + return; + PageItem* currItem = currentItemFromSelection(); if (m_doc->m_Selection->count() > 1) { @@ -214,6 +226,8 @@ case PageItem::PathText: case PageItem::RegularPolygon: case PageItem::TextFrame: + case PageItem::Spiral: + case PageItem::Table: setEnabled(true); break; case PageItem::Symbol: @@ -253,9 +267,11 @@ m_haveItem = false; m_item = item; - lineStyles->blockSignals(true); - lineMarkerSelectorStart->blockSignals(true); - lineMarkerSelectorEnd->blockSignals(true); + QSignalBlocker sigLineStyle(comboLineStyle); + QSignalBlocker sigMarkerSelectorStart(lineMarkerSelectorStart); + QSignalBlocker sigMarkerSelectorEnd(lineMarkerSelectorEnd); + QSignalBlocker sigLineBlendMode(comboBlendmode); + if ((m_item->asLine()) || (m_item->asPolyLine()) || (m_item->asSpiral())) { lineMarkerSelectorStart->setMarker(m_item->startArrowIndex()); @@ -267,36 +283,34 @@ lineMarkerLabel->setVisible(true); } else - { lineMarkerLabel->setVisible(false); - } - if (lineStyles->currentItem()) - lineStyles->currentItem()->setSelected(false); + if ((m_item->isGroup()) && (!m_item->isSingleSel)) + setEnabled(false); + if (m_item->isOSGFrame()) + setEnabled(false); + if (m_item->isSymbol()) + setEnabled(false); - bool setter = false; + bool hasStyle = false; if (m_item->NamedLStyle.isEmpty()) { - setter = true; - QListWidgetItem *itemStl = nullptr; - itemStl = lineStyles->item(0); - if (itemStl != nullptr) - itemStl->setSelected(true); + hasStyle = false; + comboLineStyle->setCurrentIndex(0); } else { - QList<QListWidgetItem*> results (lineStyles->findItems(m_item->NamedLStyle, Qt::MatchFixedString|Qt::MatchCaseSensitive)); - if (results.count() > 0) - results[0]->setSelected(true); - setter = false; + hasStyle = true; + comboLineStyle->setCurrentText(m_item->NamedLStyle); } - lineType->setEnabled(setter); - lineWidth->setEnabled(setter); - lineJoinLabel->setEnabled(setter); - lineEndLabel->setEnabled(setter); + lineTypeLabel->setVisible(!hasStyle); + lineWidthLabel->setVisible(!hasStyle); + lineJoinLabel->setVisible(!hasStyle); + lineEndLabel->setVisible(!hasStyle); + lineColorLabel->setVisible(!hasStyle); - if (m_item->dashes().count() == 0) + if (m_item->dashes().count() == 0 || hasStyle) dashEditor->hide(); else { @@ -305,22 +319,16 @@ dashEditor->show(); } - lineStyles->blockSignals(false); - lineMarkerSelectorStart->blockSignals(false); - lineMarkerSelectorEnd->blockSignals(false); + comboBlendmode->setCurrentIndex(m_item->lineBlendmode()); - if ((m_item->isGroup()) && (!m_item->isSingleSel)) - setEnabled(false); - m_haveItem = true; + setCurrentItem_Line(m_item); + setCurrentItem_LineMask(m_item); + showLineWidth(m_item->lineWidth()); showLineValues(m_item->lineStyle(), m_item->lineEnd(), m_item->lineJoin()); - if (m_item->isOSGFrame()) - setEnabled(false); - if (m_item->isSymbol()) - setEnabled(false); } void PropertiesPalette_Line::updateArrowStyles() @@ -345,24 +353,78 @@ void PropertiesPalette_Line::updateLineStyles(ScribusDoc *doc) { - if (!m_ScMW || m_ScMW->scriptIsRunning()) + if (!m_ScMW || m_ScMW->scriptIsRunning() || !doc) return; - - lineStyles->blockSignals(true); - lineStyles->clear(); - if (doc != nullptr) - { - QHash<QString, MultiLine>::Iterator it; - for (it = doc->docLineStyles.begin(); it != doc->docLineStyles.end(); ++it) - lineStyles->addItem( new LineStyleItem(doc, it.value(), it.key()) ); - lineStyles->sortItems(); - lineStyles->insertItem( 0, tr("No Style")); - if (lineStyles->currentItem()) - lineStyles->currentItem()->setSelected(false); - } - lineStyles->blockSignals(false); + + comboLineStyle->updateLineStyles(); } +void PropertiesPalette_Line::setCurrentItem_Line(PageItem *item) +{ + buttonLineColor->setType(item->strokeGradientType()); + // Gradient + buttonLineColor->setGradient( + item->strokeGradient(), + item->stroke_gradient, + item->getStrokeGradientExtend() + ); + + // Gradient Vector + buttonLineColor->setGradientVector( + item->gradientStrokeStartX(), + item->gradientStrokeStartY(), + item->gradientStrokeEndX(), + item->gradientStrokeEndY(), + item->gradientStrokeFocalX(), + item->gradientStrokeFocalY(), + item->gradientStrokeScale(), + item->gradientStrokeSkew() + ); + + // Pattern + bool mirrorX, mirrorY; + item->strokePatternFlip(mirrorX, mirrorY); + buttonLineColor->setPattern( + item->strokePattern(), + item->strokePatternTransform().offsetX, + item->strokePatternTransform().offsetY, + item->strokePatternTransform().scaleX, + item->strokePatternTransform().scaleY, + item->strokePatternTransform().skewX, + item->strokePatternTransform().skewY, + item->strokePatternTransform().rotation, + item->strokePatternTransform().space, + mirrorX, mirrorY, + item->isStrokePatternToPath() + ); + // Color + buttonLineColor->setColor( + item->lineColor(), + item->lineShade() + ); + // General + buttonLineColor->setGeneral(item->overprint()); + + buttonLineColor->updatePreview(); + buttonLineColor->updateFloatingContext(); + +} + +void PropertiesPalette_Line::setCurrentItem_LineMask(PageItem *item) +{ + buttonLineMask->setType(Gradient_None); + // Color + buttonLineMask->setColor( + "", + 100, + item->lineTransparency() + ); + + buttonLineMask->updatePreview(); + buttonLineMask->updateFloatingContext(); + +} + void PropertiesPalette_Line::showLineWidth(double s) { if (!m_ScMW || m_ScMW->scriptIsRunning()) @@ -472,7 +534,7 @@ } } -void PropertiesPalette_Line::handleLineStyle() +void PropertiesPalette_Line::handleLineType() { if (!m_ScMW || m_ScMW->scriptIsRunning()) return; @@ -601,25 +663,35 @@ } } -void PropertiesPalette_Line::handleLineStyle(QListWidgetItem *widgetItem) +void PropertiesPalette_Line::handleLineStyle(int c) { - if (!m_doc || !m_ScMW || m_ScMW->scriptIsRunning() || !widgetItem) + if (!m_doc || !m_ScMW || m_ScMW->scriptIsRunning()) return; - bool setter = (widgetItem->listWidget()->currentRow() == 0); - m_doc->itemSelection_SetNamedLineStyle(setter ? QString("") : widgetItem->text()); - lineType->setEnabled(setter); - lineWidth->setEnabled(setter); - lineJoinLabel->setEnabled(setter); - lineEndLabel->setEnabled(setter); + bool setter = (c == 0); + m_doc->itemSelection_SetNamedLineStyle(setter ? QString("") : comboLineStyle->currentText()); } -void PropertiesPalette_Line::handleLineOpacity(double opacity) +void PropertiesPalette_Line::handleLineOpacity(/*double opacity*/) { if (!m_doc || !m_ScMW || m_ScMW->scriptIsRunning()) return; - m_doc->itemSelection_SetItemLineTransparency((100 - numberOpacity->value()) / 100.0); + blockUpdates(true); + + switch(buttonLineMask->mode()) + { + default: + case Mode::Solid: + m_doc->itemSelection_SetItemLineTransparency(buttonLineMask->colorData().Opacity); + break; + case Mode::Gradient: + case Mode::Hatch: + case Mode::Pattern: + // Do nothing + break; + } + blockUpdates(false); } void PropertiesPalette_Line::handleLineBlendmode(int mode) @@ -630,6 +702,117 @@ m_doc->itemSelection_SetItemLineBlend(comboBlendmode->currentIndex()); } +void PropertiesPalette_Line::handleLineColor() +{ + if (!m_doc || !m_ScMW || m_ScMW->scriptIsRunning()) + return; + + blockUpdates(true); + m_doc->itemSelection_SetItemGradStroke(buttonLineColor->type()); + + switch(buttonLineColor->mode()) + { + default: + case Mode::Solid: + m_doc->itemSelection_SetItemStrokePattern(""); // reset pattern + m_doc->itemSelection_SetItemPen(buttonLineColor->colorName()); + m_doc->itemSelection_SetItemPenShade(static_cast<int>(buttonLineColor->colorData().Shade)); + break; + case Mode::Gradient: + + m_doc->itemSelection_SetItemStrokePattern(""); // reset pattern + + if(buttonLineColor->gradientData().Name.isEmpty()) + { + m_item->setStrokeGradient(""); + m_doc->itemSelection_SetLineGradient(buttonLineColor->gradientData().Gradient); + } + else + { + m_item->setStrokeGradient(buttonLineColor->gradientData().Name); + } + + m_item->setStrokeGradientExtend(buttonLineColor->gradientData().repeatMethod); + m_item->update(); + m_doc->regionsChanged()->update(QRect()); + + break; + case Mode::Hatch: + // Do nothing + break; + case Mode::Pattern: + m_doc->itemSelection_SetItemStrokePattern(buttonLineColor->patternData().Name); + m_doc->itemSelection_SetItemStrokePatternType(buttonLineColor->patternData().OnPath); + m_doc->itemSelection_SetItemStrokePatternProps( + buttonLineColor->patternData().ScaleX, + buttonLineColor->patternData().ScaleY, + buttonLineColor->patternData().OffsetX, + buttonLineColor->patternData().OffsetY, + buttonLineColor->patternData().Angle, + buttonLineColor->patternData().SkewX, + buttonLineColor->patternData().SkewY, + buttonLineColor->patternData().Spacing, + buttonLineColor->patternData().MirrorX, + buttonLineColor->patternData().MirrorY + ); + break; + } + + m_doc->itemSelection_SetOverprint(buttonLineColor->generalData().overprint); + + // m_item->update(); + // m_doc->regionsChanged()->update(QRect()); + blockUpdates(false); + +} + +void PropertiesPalette_Line::handleLineColorVector() +{ + if (!m_doc ||!m_item || !m_ScMW || m_ScMW->scriptIsRunning() || buttonLineColor->mode() != Mode::Gradient) + return; + + CPGradientVectorData gvd = buttonLineColor->gradientVectorData(); + + QRectF upRect; + + switch (buttonLineColor->type()) + { + case Gradient_Linear: + case Gradient_Radial: + m_item->setGradientStrokeStart(gvd.StartX, gvd.StartY); + m_item->setGradientStrokeEnd(gvd.EndX, gvd.EndY); + m_item->setGradientStrokeFocal(gvd.FocalX, gvd.FocalY); + m_item->setGradientStrokeScale(gvd.Scale); + m_item->setGradientStrokeSkew(gvd.Skew); + if (m_item->strokeGradientType() == Gradient_Linear) + { + m_item->setGradientStrokeFocal(m_item->gradientStrokeStartX(), m_item->gradientStrokeStartY()); + } + m_item->update(); + upRect = QRectF(m_item->gradientStrokeStart(), m_item->gradientStrokeEnd()); + double radEnd = distance(m_item->gradientStrokeEndX() - m_item->gradientStrokeStartX(), m_item->gradientStrokeEndY() - m_item->gradientStrokeStartY()); + double rotEnd = xy2Deg(m_item->gradientStrokeEndX() - m_item->gradientStrokeStartX(), m_item->gradientStrokeEndY() - m_item->gradientStrokeStartY()); + QTransform m; + m.translate(m_item->gradientStrokeStartX(), m_item->gradientStrokeStartY()); + m.rotate(rotEnd); + m.rotate(-90); + m.rotate(m_item->gradientStrokeSkew()); + m.translate(radEnd * m_item->gradientStrokeScale(), 0); + QPointF shP = m.map(QPointF(0,0)); + upRect = upRect.united(QRectF(shP, m_item->gradientStrokeEnd()).normalized()); + upRect = upRect.united(QRectF(shP, m_item->gradientStrokeStart()).normalized()); + upRect |= QRectF(shP, QPointF(0, 0)).normalized(); + upRect |= QRectF(shP, QPointF(m_item->width(), m_item->height())).normalized(); + break; + } + + upRect.translate(m_item->xPos(), m_item->yPos()); + m_doc->regionsChanged()->update(upRect.adjusted(-10.0, -10.0, 10.0, 10.0)); + m_doc->changed(); + m_doc->changedPagePreview(); +} + + void PropertiesPalette_Line::swapLineMarker() { int startID = lineMarkerSelectorStart->marker(); @@ -658,6 +841,12 @@ buttonCapSquare->setIcon(im.loadIcon("16/stroke-cap-square.png")); buttonSwapMarker->setIcon(im.loadIcon("swap")); + + if(lineMaskLabel->labelVisibility()) + buttonLineMask->setIcon(QIcon()); + else + buttonLineMask->setIcon(im.loadIcon("mask", 8)); + } void PropertiesPalette_Line::languageChange() @@ -688,6 +877,7 @@ lineMarkerSelectorStart->languageChange(); lineMarkerSelectorEnd->languageChange(); + comboLineStyle->languageChange(); QString ptSuffix = tr(" pt"); QString suffix = (m_doc) ? unitGetSuffixFromIndex(m_doc->unitIndex()) : ptSuffix; @@ -695,12 +885,8 @@ lineWidth->setSuffix(suffix); lineWidth->setSpecialValueText( tr("Hairline")); - if(lineStyles->count() > 0) - lineStyles->item(0)->setText( tr("No Style") ); - lineType->setToolTip( tr("Pattern of line")); lineWidth->setToolTip( tr("Thickness of line")); - lineStyles->setToolTip( tr("Line style of current object")); buttonCapFlat->setToolTip( tr("Line end is flat")); buttonCapSquare->setToolTip( tr("Line end is squared")); buttonCapRound->setToolTip( tr("Line end is rounded")); @@ -707,8 +893,10 @@ buttonJoinMiter->setToolTip( tr("Line join is mitered")); buttonJoinRound->setToolTip( tr("Line join is rounded")); buttonJoinBevel->setToolTip( tr("Line join is beveled")); - buttonMarkerStart->setToolTip( tr("Arrow head style for start of line")); - buttonMarkerEnd->setToolTip( tr("Arrow head style for end of line")); + buttonMarkerStart->setToolTip( tr("Marker style for start of line")); + buttonMarkerEnd->setToolTip( tr("Marker style for end of line")); + buttonSwapMarker->setToolTip( tr("Swap start and end markers")); + comboBlendmode->setToolTip( tr("Blendmode of line")); } void PropertiesPalette_Line::unitChange() @@ -732,11 +920,14 @@ void PropertiesPalette_Line::toggleLabelVisibility(bool v) { + lineColorLabel->setLabelVisibility(v); lineWidthLabel->setLabelVisibility(v); lineJoinLabel->setLabelVisibility(v); lineTypeLabel->setLabelVisibility(v); lineEndLabel->setLabelVisibility(v); lineMarkerLabel->setLabelVisibility(v); - lineOpacityLabel->setLabelVisibility(v); + lineMaskLabel->setLabelVisibility(v); lineBlendmodeLabel->setLabelVisibility(v); + + iconSetChange(); } Index: scribus/ui/propertiespalette_line.h =================================================================== --- scribus/ui/propertiespalette_line.h (Revision 26070) +++ scribus/ui/propertiespalette_line.h (Arbeitskopie) @@ -1,93 +1,103 @@ -/* -For general Scribus (>=1.3.2) copyright and licensing information please refer -to the COPYING file provided with the program. Following this notice may exist -a copyright and/or license notice that predates the release of Scribus 1.3.2 -for which a new license (GPL+exception) is in place. -*/ -#ifndef PROPERTIESPALETTE_LINE_H -#define PROPERTIESPALETTE_LINE_H - -#include "ui_propertiespalette_linebase.h" - -#include "scribusapi.h" -#include "scguardedptr.h" -#include "units.h" - -class ArrowChooser; -class DashEditor; -class PageItem; -class ScribusDoc; -class ScribusMainWindow; +/* +For general Scribus (>=1.3.2) copyright and licensing information please refer +to the COPYING file provided with the program. Following this notice may exist +a copyright and/or license notice that predates the release of Scribus 1.3.2 +for which a new license (GPL+exception) is in place. +*/ +#ifndef PROPERTIESPALETTE_LINE_H +#define PROPERTIESPALETTE_LINE_H + +#include "ui_propertiespalette_linebase.h" + +#include <QListWidgetItem> +#include "scribusapi.h" +#include "scguardedptr.h" +#include "units.h" + +class ArrowChooser; +class DashEditor; +class PageItem; +class ScribusDoc; +class ScribusMainWindow; class QButtonGroup; class LineMarkerSelector; - -class SCRIBUS_API PropertiesPalette_Line : public QWidget, Ui::PropertiesPalette_LineBase -{ - Q_OBJECT - -public: - PropertiesPalette_Line(QWidget* parent); - ~PropertiesPalette_Line() {delete lineStyles->itemDelegate();}; - - void updateLineStyles(); - void updateArrowStyles(); - -protected: +class ColorPicker; - bool m_haveDoc {false}; - bool m_haveItem {false}; - double m_unitRatio {1.0}; - int m_unitIndex {SC_PT}; - PageItem *m_item {nullptr}; - ScribusMainWindow* m_ScMW {nullptr}; - ScGuardedPtr<ScribusDoc> m_doc; +class SCRIBUS_API PropertiesPalette_Line : public QWidget, Ui::PropertiesPalette_LineBase +{ + Q_OBJECT + +public: + PropertiesPalette_Line(QWidget* parent); + ~PropertiesPalette_Line() {}; + + void updateLineStyles(); + void updateArrowStyles(); + +protected: + + bool m_haveDoc {false}; + bool m_haveItem {false}; + double m_unitRatio {1.0}; + int m_unitIndex {SC_PT}; + PageItem *m_item {nullptr}; + ScribusMainWindow* m_ScMW {nullptr}; + ScGuardedPtr<ScribusDoc> m_doc; QButtonGroup *buttonsCaps; QButtonGroup *buttonsJoins; LineMarkerSelector *lineMarkerSelectorStart; LineMarkerSelector *lineMarkerSelectorEnd; - - void changeEvent(QEvent *e) override; - -private: - PageItem* currentItemFromSelection(); - void updateArrowStyles(ScribusDoc *doc); - void updateLineStyles(ScribusDoc *doc); - -public slots: - void setMainWindow(ScribusMainWindow *mw); - - void setDoc(ScribusDoc *d); - void setCurrentItem(PageItem *item); - void unsetDoc(); - void unsetItem(); - - void handleSelectionChanged(); - void handleUpdateRequest(int); - - void showLineWidth(double s); - void showLineValues(Qt::PenStyle p, Qt::PenCapStyle pc, Qt::PenJoinStyle pj); - - void iconSetChange(); - void languageChange(); - void unitChange(); - void localeChange(); + + void changeEvent(QEvent *e) override; + +private: + PageItem* currentItemFromSelection(); + void updateArrowStyles(ScribusDoc *doc); + void updateLineStyles(ScribusDoc *doc); + void setCurrentItem_Line(PageItem *item); + void setCurrentItem_LineMask(PageItem *item); + + int m_blockUpdates {0}; + void blockUpdates(bool block) { if (block) ++m_blockUpdates; else --m_blockUpdates; } + bool updatesBlocked() { return (m_blockUpdates > 0); } + +public slots: + void setMainWindow(ScribusMainWindow *mw); + + void setDoc(ScribusDoc *d); + void setCurrentItem(PageItem *item); + void unsetDoc(); + void unsetItem(); + + void handleSelectionChanged(); + void handleUpdateRequest(int); + + void showLineWidth(double s); + void showLineValues(Qt::PenStyle p, Qt::PenCapStyle pc, Qt::PenJoinStyle pj); + + void iconSetChange(); + void languageChange(); + void unitChange(); + void localeChange(); void toggleLabelVisibility(bool v); - -private slots: - void handleLineWidth(); - void handleLineStyle(); - void handleLineJoin(); - void handleLineEnd(); - void handleDashChange(); - void handleStartArrow(int id); - void handleEndArrow(int id); - void handleStartArrowScale(double sc); - void handleEndArrowScale(double sc); - void handleLineStyle(QListWidgetItem *c); - void handleLineOpacity(double opacity); + +private slots: + void handleLineWidth(); + void handleLineType(); + void handleLineStyle(int c); + void handleLineJoin(); + void handleLineEnd(); + void handleDashChange(); + void handleStartArrow(int id); + void handleEndArrow(int id); + void handleStartArrowScale(double sc); + void handleEndArrowScale(double sc); + void handleLineOpacity(); void handleLineBlendmode(int mode); + void handleLineColor(); + void handleLineColorVector(); void swapLineMarker(); - -}; - -#endif + +}; + +#endif Index: scribus/ui/propertiespalette_linebase.ui =================================================================== --- scribus/ui/propertiespalette_linebase.ui (Revision 26070) +++ scribus/ui/propertiespalette_linebase.ui (Arbeitskopie) @@ -6,488 +6,557 @@ <rect> <x>0</x> <y>0</y> - <width>314</width> - <height>344</height> + <width>314</width> + <height>233</height> </rect> </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <property name="spacing"> - <number>8</number> - </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>8</number> + </property> <property name="leftMargin"> - <number>8</number> + <number>8</number> </property> <property name="topMargin"> - <number>8</number> + <number>8</number> </property> <property name="rightMargin"> - <number>8</number> + <number>8</number> </property> <property name="bottomMargin"> - <number>8</number> + <number>8</number> </property> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_11"> + <item> + <widget class="ComboLineStyle" name="comboLineStyle"> + <property name="sizeAdjustPolicy"> + <enum>QComboBox::AdjustToContents</enum> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_4"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_3"> <property name="spacing"> - <number>4</number> + <number>16</number> </property> <item> - <widget class="FormWidget" name="lineWidthLabel"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> + <widget class="FormWidget" name="lineColorLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> </property> - <property name="label" stdset="0"> - <string>Width</string> - </property> - <property name="font"> - <font> - <pointsize>8</pointsize> - </font> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_4"> - <property name="spacing"> - <number>4</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="ScrSpinBox" name="lineWidth"> - <property name="maximumSize"> - <size> - <width>100</width> - <height>16777215</height> - </size> - </property> - <property name="specialValueText"> - <string>Hairline</string> - </property> - <property name="maximum"> - <double>300.000000000000000</double> - </property> - </widget> - </item> - </layout> + <property name="label" stdset="0"> + <string>Color</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_12"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ColorButton" name="buttonLineColor"> + <property name="text"> + <string/> + </property> + <property name="popupMode"> + <enum>QToolButton::InstantPopup</enum> + </property> + </widget> + </item> + </layout> </widget> </item> <item> - <widget class="FormWidget" name="lineTypeLabel"> + <layout class="QHBoxLayout" name="horizontalLayout_8"> + <property name="spacing"> + <number>4</number> + </property> + <item> + <widget class="FormWidget" name="lineMaskLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Mask</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_13"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ColorButton" name="buttonLineMask"> + <property name="text"> + <string/> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="FormWidget" name="lineBlendmodeLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Blendmode</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_7"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ComboBlendMode" name="comboBlendmode"/> + </item> + </layout> + </widget> + </item> + </layout> + </item> + <item> + <widget class="FormWidget" name="lineMarkerLabel"> <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> - <property name="label" stdset="0"> - <string>Type</string> + <property name="label" stdset="0"> + <string>Marker</string> </property> - <property name="font"> - <font> - <pointsize>8</pointsize> - </font> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> </property> - <layout class="QHBoxLayout" name="horizontalLayout_5"> - <property name="spacing"> - <number>4</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="LineCombo" name="lineType"/> - </item> - </layout> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QToolButton" name="buttonMarkerStart"> + <property name="text"> + <string/> + </property> + <property name="iconSize"> + <size> + <width>20</width> + <height>16</height> + </size> + </property> + <property name="popupMode"> + <enum>QToolButton::InstantPopup</enum> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="buttonSwapMarker"> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="buttonMarkerEnd"> + <property name="text"> + <string/> + </property> + <property name="iconSize"> + <size> + <width>20</width> + <height>16</height> + </size> + </property> + <property name="popupMode"> + <enum>QToolButton::InstantPopup</enum> + </property> + </widget> + </item> + </layout> </widget> </item> - <item> - <spacer name="horizontalSpacer_2"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>0</width> - <height>0</height> - </size> - </property> - </spacer> - </item> + <item> + <spacer name="horizontalSpacer_2"> + <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> - <widget class="DashEditor" name="dashEditor"> - <property name="frameShape"> - <enum>QFrame::StyledPanel</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> - </property> - </widget> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_10"> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_6"> <property name="spacing"> - <number>16</number> + <number>16</number> </property> <item> - <widget class="FormWidget" name="lineEndLabel"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> + <widget class="FormWidget" name="lineWidthLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> </property> - <property name="label" stdset="0"> - <string>Caps</string> - </property> - <property name="font"> - <font> - <pointsize>8</pointsize> - </font> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_2"> - <property name="spacing"> - <number>4</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="QToolButton" name="buttonCapFlat"> - <property name="text"> - <string/> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - <property name="checked"> - <bool>false</bool> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="buttonCapSquare"> - <property name="text"> - <string/> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="buttonCapRound"> - <property name="text"> - <string/> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - </widget> - </item> - </layout> + <property name="label" stdset="0"> + <string>Width</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="lineWidth"> + <property name="maximumSize"> + <size> + <width>100</width> + <height>16777215</height> + </size> + </property> + <property name="specialValueText"> + <string>Hairline</string> + </property> + <property name="maximum"> + <double>300.000000000000000</double> + </property> + </widget> + </item> + </layout> </widget> </item> <item> - <widget class="FormWidget" name="lineJoinLabel"> + <widget class="FormWidget" name="lineTypeLabel"> <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> - <property name="label" stdset="0"> - <string>Joins</string> + <property name="label" stdset="0"> + <string>Type</string> </property> - <property name="font"> - <font> - <pointsize>8</pointsize> - </font> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> </property> - <layout class="QHBoxLayout" name="horizontalLayout_9"> - <property name="spacing"> - <number>4</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="QToolButton" name="buttonJoinMiter"> - <property name="text"> - <string/> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="buttonJoinRound"> - <property name="text"> - <string/> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="buttonJoinBevel"> - <property name="text"> - <string/> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - </widget> - </item> - </layout> + <layout class="QHBoxLayout" name="horizontalLayout_5"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="LineCombo" name="lineType"/> + </item> + </layout> </widget> </item> - <item> - <widget class="FormWidget" name="lineMarkerLabel"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="label" stdset="0"> - <string>Marker</string> - </property> - <property name="font"> - <font> - <pointsize>8</pointsize> - </font> - </property> - <layout class="QHBoxLayout" name="horizontalLayout"> - <property name="spacing"> - <number>4</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="QToolButton" name="buttonMarkerStart"> - <property name="text"> - <string/> - </property> - <property name="iconSize"> - <size> - <width>20</width> - <height>16</height> - </size> - </property> - <property name="popupMode"> - <enum>QToolButton::InstantPopup</enum> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="buttonSwapMarker"> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="buttonMarkerEnd"> - <property name="text"> - <string/> - </property> - <property name="iconSize"> - <size> - <width>20</width> - <height>16</height> - </size> - </property> - <property name="popupMode"> - <enum>QToolButton::InstantPopup</enum> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <spacer name="horizontalSpacer_3"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>0</width> - <height>0</height> - </size> - </property> - </spacer> - </item> + <item> + <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> - <layout class="QHBoxLayout" name="horizontalLayout_6"> - <item> - <widget class="FormWidget" name="lineOpacityLabel"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="label" stdset="0"> - <string>Opacity</string> - </property> - <property name="font"> - <font> - <pointsize>8</pointsize> - </font> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_8"> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="ScrSpinBox" name="numberOpacity"> - <property name="suffix"> - <string> %</string> - </property> - <property name="decimals"> - <number>0</number> - </property> - <property name="maximum"> - <double>100.000000000000000</double> - </property> - <property name="value"> - <double>100.000000000000000</double> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="FormWidget" name="lineBlendmodeLabel"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="label" stdset="0"> - <string>Blendmode</string> - </property> - <property name="font"> - <font> - <pointsize>8</pointsize> - </font> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_7"> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="ComboBlendMode" name="comboBlendmode"/> - </item> - </layout> - </widget> - </item> - <item> - <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> + <widget class="DashEditor" name="dashEditor"> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + </widget> </item> - <item> - <widget class="QListWidget" name="lineStyles"/> - </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_10"> + <property name="spacing"> + <number>16</number> + </property> + <item> + <widget class="FormWidget" name="lineEndLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Caps</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QToolButton" name="buttonCapFlat"> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="checked"> + <bool>false</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="buttonCapSquare"> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="buttonCapRound"> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="FormWidget" name="lineJoinLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Joins</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_9"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QToolButton" name="buttonJoinMiter"> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="buttonJoinRound"> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="buttonJoinBevel"> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_3"> + <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> </layout> </widget> <customwidgets> <customwidget> - <class>FormWidget</class> - <extends>QWidget</extends> - <header>ui/widgets/form_widget.h</header> - <container>1</container> - </customwidget> - <customwidget> + <class>FormWidget</class> + <extends>QWidget</extends> + <header>ui/widgets/form_widget.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>ColorButton</class> + <extends>QToolButton</extends> + <header>ui/widgets/color_button.h</header> + </customwidget> + <customwidget> <class>ScrSpinBox</class> <extends>QDoubleSpinBox</extends> - <header>ui/scrspinbox.h</header> + <header location="global">ui/scrspinbox.h</header> </customwidget> <customwidget> <class>LineCombo</class> @@ -500,28 +569,34 @@ <header>ui/dasheditor.h</header> <container>1</container> </customwidget> - <customwidget> - <class>ComboBlendMode</class> - <extends>QComboBox</extends> - <header>ui/widgets/combo_blendmode.h</header> - </customwidget> + <customwidget> + <class>ComboBlendMode</class> + <extends>QComboBox</extends> + <header>ui/widgets/combo_blendmode.h</header> + </customwidget> + <customwidget> + <class>ComboLineStyle</class> + <extends>QComboBox</extends> + <header>ui/widgets/combo_linestyle.h</header> + </customwidget> </customwidgets> - <tabstops> - <tabstop>lineWidth</tabstop> - <tabstop>lineType</tabstop> - <tabstop>buttonCapFlat</tabstop> - <tabstop>buttonCapSquare</tabstop> - <tabstop>buttonCapRound</tabstop> - <tabstop>buttonJoinMiter</tabstop> - <tabstop>buttonJoinRound</tabstop> - <tabstop>buttonJoinBevel</tabstop> - <tabstop>buttonMarkerStart</tabstop> - <tabstop>buttonSwapMarker</tabstop> - <tabstop>buttonMarkerEnd</tabstop> - <tabstop>numberOpacity</tabstop> - <tabstop>comboBlendmode</tabstop> - <tabstop>lineStyles</tabstop> - </tabstops> + <tabstops> + <tabstop>comboLineStyle</tabstop> + <tabstop>buttonLineColor</tabstop> + <tabstop>buttonLineMask</tabstop> + <tabstop>comboBlendmode</tabstop> + <tabstop>buttonMarkerStart</tabstop> + <tabstop>buttonSwapMarker</tabstop> + <tabstop>buttonMarkerEnd</tabstop> + <tabstop>lineWidth</tabstop> + <tabstop>lineType</tabstop> + <tabstop>buttonCapFlat</tabstop> + <tabstop>buttonCapSquare</tabstop> + <tabstop>buttonCapRound</tabstop> + <tabstop>buttonJoinMiter</tabstop> + <tabstop>buttonJoinRound</tabstop> + <tabstop>buttonJoinBevel</tabstop> + </tabstops> <resources/> <connections/> </ui> Index: scribus/ui/propertiespalette_shadow.cpp =================================================================== --- scribus/ui/propertiespalette_shadow.cpp (Revision 26070) +++ scribus/ui/propertiespalette_shadow.cpp (Arbeitskopie) @@ -19,67 +19,62 @@ #include "scribusdoc.h" #include "selection.h" #include "units.h" -#include "iconmanager.h" +#include "iconmanager.h" -PropertiesPalette_Shadow::PropertiesPalette_Shadow( QWidget* parent) - : QWidget(parent) +PropertiesPalette_Shadow::PropertiesPalette_Shadow( QWidget* parent) + : QWidget(parent) { - setupUi(this); + setupUi(this); - switchHasShadow->setChecked(false); + switchHasShadow->setChecked(false); - numberXOffset->setNewUnit(0); - numberXOffset->setDecimals(2); - numberXOffset->setMinimum(-200.00); - numberXOffset->setMaximum(200.00); - numberXOffset->setValue(5.0); + numberXOffset->setNewUnit(0); + numberXOffset->setDecimals(2); + numberXOffset->setMinimum(-200.00); + numberXOffset->setMaximum(200.00); + numberXOffset->setValue(5.0); - numberYOffset->setNewUnit(0); - numberYOffset->setDecimals(2); - numberYOffset->setMinimum(-200.00); - numberYOffset->setMaximum(200.00); - numberYOffset->setValue(5.0); + numberYOffset->setNewUnit(0); + numberYOffset->setDecimals(2); + numberYOffset->setMinimum(-200.00); + numberYOffset->setMaximum(200.00); + numberYOffset->setValue(5.0); - numberBlurRadius->setNewUnit(0); - numberBlurRadius->setDecimals(2); - numberBlurRadius->setMinimum(-200.00); - numberBlurRadius->setMaximum(200.00); - numberBlurRadius->setValue(2.0); + numberBlurRadius->setNewUnit(0); + numberBlurRadius->setDecimals(2); + numberBlurRadius->setMinimum(-200.00); + numberBlurRadius->setMaximum(200.00); + numberBlurRadius->setValue(2.0); - buttonColor->setCurrentColor(tr( "Black")); + buttonColor->setContext(Context::DropShadow); + buttonColor->setMenuContextType(ColorButton::Floating); - numberBlurRadius->setNewUnit(7); - numberShade->setDecimals(0); - numberShade->setMinimum(0); - numberShade->setMaximum(100); - numberShade->setValue(100); + numberBlurRadius->setNewUnit(7); + numberOpacity->setDecimals(1); + numberOpacity->setMinimum(0.0); + numberOpacity->setMaximum(100.0); + numberOpacity->setValue(100.0); - numberBlurRadius->setNewUnit(7); - numberOpacity->setDecimals(1); - numberOpacity->setMinimum(0.0); - numberOpacity->setMaximum(100.0); - numberOpacity->setValue(100.0); - QStringList modes; - modes << tr( "Normal"); - comboboxBlendMode->addItems(modes); + modes << tr( "Normal"); + comboboxBlendMode->addItems(modes); - buttonEraseShadow->setCheckable(true); - buttonInheritOpacity->setCheckable(true); + buttonEraseShadow->setCheckable(true); + buttonInheritOpacity->setCheckable(true); - languageChange(); - iconSetChange(); + languageChange(); + iconSetChange(); - connectSlots(); - connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(iconSetChange())); + connectSlots(); + connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(iconSetChange())); connect(ScQApp, SIGNAL(localeChanged()), this, SLOT(localeChange())); - connect(ScQApp, SIGNAL(labelVisibilityChanged(bool)), this, SLOT(toggleLabelVisibility(bool))); + connect(ScQApp, SIGNAL(labelVisibilityChanged(bool)), this, SLOT(toggleLabelVisibility(bool))); } void PropertiesPalette_Shadow::setMainWindow(ScribusMainWindow* mw) { m_ScMW = mw; - connect(m_ScMW, SIGNAL(UpdateRequest(int)), this, SLOT(handleUpdateRequest(int))); +// connect(m_ScMW, SIGNAL(UpdateRequest(int)), this, SLOT(handleUpdateRequest(int))); } void PropertiesPalette_Shadow::setDoc(ScribusDoc *d) @@ -104,80 +99,74 @@ m_haveDoc = true; m_haveItem = false; - disconnectSlots(); + disconnectSlots(); - numberXOffset->setNewUnit(m_unitIndex); - numberXOffset->setDecimals(precision); - numberXOffset->setMinimum(minXYVal); - numberXOffset->setMaximum(maxXYWHVal); - numberXOffset->setValue(minXYVal); + numberXOffset->setNewUnit(m_unitIndex); + numberXOffset->setDecimals(precision); + numberXOffset->setMinimum(minXYVal); + numberXOffset->setMaximum(maxXYWHVal); + numberXOffset->setValue(minXYVal); - numberYOffset->setNewUnit(m_unitIndex); - numberYOffset->setDecimals(precision); - numberYOffset->setMinimum(minXYVal); - numberYOffset->setMaximum(maxXYWHVal); - numberYOffset->setValue(minXYVal); + numberYOffset->setNewUnit(m_unitIndex); + numberYOffset->setDecimals(precision); + numberYOffset->setMinimum(minXYVal); + numberYOffset->setMaximum(maxXYWHVal); + numberYOffset->setValue(minXYVal); - numberBlurRadius->setNewUnit(m_unitIndex); - numberBlurRadius->setDecimals(precision); - numberBlurRadius->setMinimum(0.0); - numberBlurRadius->setMaximum(200.00); - numberBlurRadius->setValue(5); - - numberShade->setDecimals(0); - numberShade->setMinimum(0); - numberShade->setMaximum(100); - numberShade->setValue(100); - - numberOpacity->setDecimals(0); - numberOpacity->setMinimum(0); - numberOpacity->setMaximum(100); - numberOpacity->setValue(100); - - buttonColor->setDoc(m_doc); - - updateColorList(); - connectSlots(); + numberBlurRadius->setNewUnit(m_unitIndex); + numberBlurRadius->setDecimals(precision); + numberBlurRadius->setMinimum(0.0); + numberBlurRadius->setMaximum(200.00); + numberBlurRadius->setValue(5); + numberOpacity->setDecimals(0); + numberOpacity->setMinimum(0); + numberOpacity->setMaximum(100); + numberOpacity->setValue(100); + + buttonColor->setDoc(m_doc); + +// updateColorList(); + connectSlots(); + setEnabled(true); + connect(m_doc->m_Selection, SIGNAL(selectionChanged()), this, SLOT(handleSelectionChanged())); connect(m_doc , SIGNAL(docChanged()) , this, SLOT(handleSelectionChanged())); - + } -void PropertiesPalette_Shadow::connectSlots() -{ - connect(numberXOffset, &ScrSpinBox::valueChanged, this, &PropertiesPalette_Shadow::handleNewValues); - connect(numberYOffset, &ScrSpinBox::valueChanged, this, &PropertiesPalette_Shadow::handleNewValues); - connect(numberBlurRadius, &ScrSpinBox::valueChanged, this, &PropertiesPalette_Shadow::handleNewValues); - connect(numberShade, &ScrSpinBox::valueChanged, this, &PropertiesPalette_Shadow::handleNewValues); - connect(numberOpacity, &ScrSpinBox::valueChanged, this, &PropertiesPalette_Shadow::handleNewValues); - - connect(switchHasShadow, &Switch::toggled, this, &PropertiesPalette_Shadow::handleNewValues); - - connect(comboboxBlendMode, &QComboBox::currentIndexChanged, this, &PropertiesPalette_Shadow::handleNewValues); - - connect(buttonColor, &ColorButton::colorChanged, this, &PropertiesPalette_Shadow::handleNewValues); - connect(buttonEraseShadow, &QToolButton::toggled, this, &PropertiesPalette_Shadow::handleNewValues); - connect(buttonInheritOpacity, &QToolButton::toggled, this, &PropertiesPalette_Shadow::handleInheritOpacity); -} - -void PropertiesPalette_Shadow::disconnectSlots() -{ - disconnect(numberXOffset, &ScrSpinBox::valueChanged, this, &PropertiesPalette_Shadow::handleNewValues); - disconnect(numberYOffset, &ScrSpinBox::valueChanged, this, &PropertiesPalette_Shadow::handleNewValues); - disconnect(numberBlurRadius, &ScrSpinBox::valueChanged, this, &PropertiesPalette_Shadow::handleNewValues); - disconnect(numberShade, &ScrSpinBox::valueChanged, this, &PropertiesPalette_Shadow::handleNewValues); - disconnect(numberOpacity, &ScrSpinBox::valueChanged, this, &PropertiesPalette_Shadow::handleNewValues); - - disconnect(switchHasShadow, &Switch::toggled, this, &PropertiesPalette_Shadow::handleNewValues); - - disconnect(comboboxBlendMode, &QComboBox::currentIndexChanged, this, &PropertiesPalette_Shadow::handleNewValues); - - disconnect(buttonColor, &ColorButton::colorChanged, this, &PropertiesPalette_Shadow::handleNewValues); - disconnect(buttonEraseShadow, &QToolButton::toggled, this, &PropertiesPalette_Shadow::handleNewValues); - disconnect(buttonInheritOpacity, &QToolButton::toggled, this, &PropertiesPalette_Shadow::handleInheritOpacity); -} - +void PropertiesPalette_Shadow::connectSlots() +{ + connect(numberXOffset, &ScrSpinBox::valueChanged, this, &PropertiesPalette_Shadow::handleNewValues); + connect(numberYOffset, &ScrSpinBox::valueChanged, this, &PropertiesPalette_Shadow::handleNewValues); + connect(numberBlurRadius, &ScrSpinBox::valueChanged, this, &PropertiesPalette_Shadow::handleNewValues); + connect(numberOpacity, &ScrSpinBox::valueChanged, this, &PropertiesPalette_Shadow::handleNewValues); + + connect(switchHasShadow, &Switch::toggled, this, &PropertiesPalette_Shadow::handleNewValues); + + connect(comboboxBlendMode, &QComboBox::currentIndexChanged, this, &PropertiesPalette_Shadow::handleNewValues); + + connect(buttonColor, &ColorButton::colorChanged, this, &PropertiesPalette_Shadow::handleNewValues); + connect(buttonEraseShadow, &QToolButton::toggled, this, &PropertiesPalette_Shadow::handleNewValues); + connect(buttonInheritOpacity, &QToolButton::toggled, this, &PropertiesPalette_Shadow::handleInheritOpacity); +} + +void PropertiesPalette_Shadow::disconnectSlots() +{ + disconnect(numberXOffset, &ScrSpinBox::valueChanged, this, &PropertiesPalette_Shadow::handleNewValues); + disconnect(numberYOffset, &ScrSpinBox::valueChanged, this, &PropertiesPalette_Shadow::handleNewValues); + disconnect(numberBlurRadius, &ScrSpinBox::valueChanged, this, &PropertiesPalette_Shadow::handleNewValues); + disconnect(numberOpacity, &ScrSpinBox::valueChanged, this, &PropertiesPalette_Shadow::handleNewValues); + + disconnect(switchHasShadow, &Switch::toggled, this, &PropertiesPalette_Shadow::handleNewValues); + + disconnect(comboboxBlendMode, &QComboBox::currentIndexChanged, this, &PropertiesPalette_Shadow::handleNewValues); + + disconnect(buttonColor, &ColorButton::colorChanged, this, &PropertiesPalette_Shadow::handleNewValues); + disconnect(buttonEraseShadow, &QToolButton::toggled, this, &PropertiesPalette_Shadow::handleNewValues); + disconnect(buttonInheritOpacity, &QToolButton::toggled, this, &PropertiesPalette_Shadow::handleInheritOpacity); +} + void PropertiesPalette_Shadow::unsetDoc() { if (m_doc) @@ -189,6 +178,7 @@ m_haveItem = false; m_doc = nullptr; m_item = nullptr; + buttonColor->unsetDoc(); setEnabled(false); } @@ -199,11 +189,11 @@ handleSelectionChanged(); } -void PropertiesPalette_Shadow::handleUpdateRequest(int updateFlags) -{ - if (updateFlags & reqColorsUpdate) - updateColorList(); -} +//void PropertiesPalette_Shadow::handleUpdateRequest(int updateFlags) +//{ +// if (updateFlags & reqColorsUpdate) +// updateColorList(); +//} PageItem* PropertiesPalette_Shadow::currentItemFromSelection() { @@ -226,27 +216,28 @@ setDoc(item->doc()); m_haveItem = false; m_item = item; - - disconnectSlots(); - - switchHasShadow->setChecked(item->hasSoftShadow()); - numberXOffset->setValue(item->softShadowXOffset() * m_unitRatio); - numberYOffset->setValue(item->softShadowYOffset() * m_unitRatio); - numberBlurRadius->setValue(item->softShadowBlurRadius() * m_unitRatio); - buttonColor->setCurrentColor(item->softShadowColor()); - numberShade->setValue(item->softShadowShade()); - numberOpacity->setValue(qRound(100 - (item->softShadowOpacity() * 100))); - comboboxBlendMode->setCurrentIndex(item->softShadowBlendMode()); - buttonEraseShadow->setChecked(item->softShadowErasedByObject()); - buttonInheritOpacity->setChecked(item->softShadowHasObjectTransparency()); - - labelErase->setVisible(item->itemType() != PageItem::Line); - - + + disconnectSlots(); + switchHasShadow->setChecked(item->hasSoftShadow()); + numberXOffset->setValue(item->softShadowXOffset() * m_unitRatio); + numberYOffset->setValue(item->softShadowYOffset() * m_unitRatio); + numberBlurRadius->setValue(item->softShadowBlurRadius() * m_unitRatio); + numberOpacity->setValue(qRound(100 - (item->softShadowOpacity() * 100))); + comboboxBlendMode->setCurrentIndex(item->softShadowBlendMode()); + buttonEraseShadow->setChecked(item->softShadowErasedByObject()); + buttonInheritOpacity->setChecked(item->softShadowHasObjectTransparency()); + + double opacity = item->softShadowHasObjectTransparency() ? item->fillTransparency() : item->softShadowOpacity(); + buttonColor->setColor(item->softShadowColor(), item->softShadowShade(), opacity); + buttonColor->updatePreview(); + buttonColor->updateFloatingContext(); + + labelErase->setVisible(item->itemType() != PageItem::Line); + m_haveItem = true; - updateSpinBoxConstants(); - - connectSlots(); +// updateSpinBoxConstants(); + + connectSlots(); } void PropertiesPalette_Shadow::handleSelectionChanged() @@ -267,67 +258,70 @@ m_unitRatio = m_doc->unitRatio(); m_unitIndex = m_doc->unitIndex(); - disconnectSlots(); + disconnectSlots(); - numberXOffset->setNewUnit(m_unitIndex); - numberYOffset->setNewUnit(m_unitIndex); - numberBlurRadius->setNewUnit(m_unitIndex); + numberXOffset->setNewUnit(m_unitIndex); + numberYOffset->setNewUnit(m_unitIndex); + numberBlurRadius->setNewUnit(m_unitIndex); - connectSlots(); + connectSlots(); } void PropertiesPalette_Shadow::localeChange() { -// numberXOffset->localeChange(); -// numberYOffset->localeChange(); - // numberBlurRadius->localeChange(); +// numberXOffset->localeChange(); +// numberYOffset->localeChange(); + // numberBlurRadius->localeChange(); } -void PropertiesPalette_Shadow::toggleLabelVisibility(bool v) -{ - labelColor->setLabelVisibility(v); - labelBlendmode->setLabelVisibility(v); - labelHasShadow->setLabelVisibility(v); - labelShade->setLabelVisibility(v); - labelErase->setLabelVisibility(v); -} - -void PropertiesPalette_Shadow::updateColorList() +void PropertiesPalette_Shadow::toggleLabelVisibility(bool v) { - if (!m_haveDoc || !m_ScMW || m_ScMW->scriptIsRunning()) - return; - disconnectSlots(); - - QString color = buttonColor->currentColor(); - buttonColor->setColors(m_doc->PageColors); - buttonColor->setCurrentColor(color); - - connectSlots(); + labelColor->setLabelVisibility(v); + labelBlendmode->setLabelVisibility(v); + labelHasShadow->setLabelVisibility(v); + labelErase->setLabelVisibility(v); } +//void PropertiesPalette_Shadow::updateColorList() +//{ +// if (!m_haveDoc || !m_ScMW || m_ScMW->scriptIsRunning()) +// return; +// disconnectSlots(); + +//// colorPicker->loadLists(); + +//// QString color = colorPicker->colorName(); +//// colorPicker->setColors(m_doc->PageColors); +//// colorPicker->setColor(color); + +// connectSlots(); +//} + void PropertiesPalette_Shadow::handleNewValues() { if (!m_haveItem || !m_haveDoc) return; - double x = numberXOffset->value() / m_unitRatio; - double y = numberYOffset->value() / m_unitRatio; - double r = numberBlurRadius->value() / m_unitRatio; - QString color = buttonColor->currentColor(); + double x = numberXOffset->value() / m_unitRatio; + double y = numberYOffset->value() / m_unitRatio; + double r = numberBlurRadius->value() / m_unitRatio; + QString color = buttonColor->colorData().Name; if (color == CommonStrings::tr_NoneColor) color = CommonStrings::None; - int b = comboboxBlendMode->currentIndex(); - double o = (100 - numberOpacity->value()) / 100.0; - int s = numberShade->value(); + int b = comboboxBlendMode->currentIndex(); + double o = (100 - numberOpacity->value()) / 100.0; + int s = buttonColor->colorData().Shade; - m_doc->itemSelection_SetSoftShadow(switchHasShadow->isChecked(), color, x, y, r, s, o, b, buttonEraseShadow->isChecked(), buttonInheritOpacity->isChecked()); + m_doc->itemSelection_SetSoftShadow(switchHasShadow->isChecked(), color, x, y, r, s, o, b, buttonEraseShadow->isChecked(), buttonInheritOpacity->isChecked()); + + buttonColor->updatePreview(); } -void PropertiesPalette_Shadow::handleInheritOpacity() -{ - numberOpacity->setEnabled(!buttonInheritOpacity->isChecked()); - handleNewValues(); -} - +void PropertiesPalette_Shadow::handleInheritOpacity() +{ + numberOpacity->setEnabled(!buttonInheritOpacity->isChecked()); + handleNewValues(); +} + void PropertiesPalette_Shadow::changeEvent(QEvent *e) { if (e->type() == QEvent::LanguageChange) @@ -340,34 +334,33 @@ void PropertiesPalette_Shadow::languageChange() { - labelXOffset->setText(tr( "X:")); - labelYOffset->setText(tr( "Y:")); - labelBlurRadius->setText(tr( "Radius:")); - labelColor->setText(tr( "Color")); - labelShade->setText(tr( "Shade")); - labelOpacity->setText(tr( "Opacity:")); - comboboxBlendMode->languageChange(); - labelBlendmode->setText(tr( "Blendmode")); - labelErase->setText(tr( "Erase Fill")); + labelXOffset->setText(tr( "X:")); + labelYOffset->setText(tr( "Y:")); + labelBlurRadius->setText(tr( "Radius:")); + labelColor->setText(tr( "Color")); + labelOpacity->setText(tr( "Opacity:")); + comboboxBlendMode->languageChange(); + labelBlendmode->setText(tr( "Blendmode")); + labelErase->setText(tr( "Erase Fill")); - buttonEraseShadow->setToolTip(tr( "Content covers Drop Shadow")); - buttonInheritOpacity->setToolTip(tr( "Inherit Object Transparency")); -} + buttonEraseShadow->setToolTip(tr( "Content covers Drop Shadow")); + buttonInheritOpacity->setToolTip(tr( "Inherit Object Transparency")); +} -void PropertiesPalette_Shadow::iconSetChange() -{ - IconManager &im = IconManager::instance(); - - QIcon iconErase; - iconErase.addPixmap(im.loadPixmap("erase-shadow-on"), QIcon::Normal, QIcon::On); - iconErase.addPixmap(im.loadPixmap("erase-shadow-off"), QIcon::Normal, QIcon::Off); - buttonEraseShadow->setIcon(iconErase); - - QIcon iconTransparency; - iconTransparency.addPixmap(im.loadPixmap("inherit-opacity-on"), QIcon::Normal, QIcon::On); - iconTransparency.addPixmap(im.loadPixmap("inherit-opacity-off"), QIcon::Normal, QIcon::Off); - buttonInheritOpacity->setIcon(iconTransparency); - +void PropertiesPalette_Shadow::iconSetChange() +{ + IconManager &im = IconManager::instance(); + + QIcon iconErase; + iconErase.addPixmap(im.loadPixmap("erase-shadow-on"), QIcon::Normal, QIcon::On); + iconErase.addPixmap(im.loadPixmap("erase-shadow-off"), QIcon::Normal, QIcon::Off); + buttonEraseShadow->setIcon(iconErase); + + QIcon iconTransparency; + iconTransparency.addPixmap(im.loadPixmap("inherit-opacity-on"), QIcon::Normal, QIcon::On); + iconTransparency.addPixmap(im.loadPixmap("inherit-opacity-off"), QIcon::Normal, QIcon::Off); + buttonInheritOpacity->setIcon(iconTransparency); + } void PropertiesPalette_Shadow::updateSpinBoxConstants() Index: scribus/ui/propertiespalette_shadow.h =================================================================== --- scribus/ui/propertiespalette_shadow.h (Revision 26070) +++ scribus/ui/propertiespalette_shadow.h (Arbeitskopie) @@ -7,11 +7,10 @@ #ifndef PROPERTIESPALETTE_SHADOW_H #define PROPERTIESPALETTE_SHADOW_H -#include "ui_propertiespalette_shadowbase.h" - +#include "ui_propertiespalette_shadowbase.h" + #include "scribusapi.h" #include "scguardedptr.h" - #include "units.h" class PageItem; @@ -18,8 +17,9 @@ class ScribusDoc; class Selection; class ScribusMainWindow; +//class ColorPicker; -class SCRIBUS_API PropertiesPalette_Shadow : public QWidget, Ui::PropertiesPalette_ShadowBase +class SCRIBUS_API PropertiesPalette_Shadow : public QWidget, Ui::PropertiesPalette_ShadowBase { Q_OBJECT @@ -27,14 +27,14 @@ PropertiesPalette_Shadow(QWidget* parent); ~PropertiesPalette_Shadow() {}; - void updateColorList(); +// void updateColorList(); private: PageItem* currentItemFromSelection(); - void connectSlots(); - void disconnectSlots(); - + void connectSlots(); + void disconnectSlots(); + public slots: void setMainWindow(ScribusMainWindow *mw); @@ -44,17 +44,17 @@ void unsetItem(); void languageChange(); - void iconSetChange(); + void iconSetChange(); void unitChange(); void localeChange(); - void toggleLabelVisibility(bool v); + void toggleLabelVisibility(bool v); void handleSelectionChanged(); - void handleUpdateRequest(int); +// void handleUpdateRequest(int); private slots: void handleNewValues(); - void handleInheritOpacity(); + void handleInheritOpacity(); protected slots: void updateSpinBoxConstants(); Index: scribus/ui/propertiespalette_shadowbase.ui =================================================================== --- scribus/ui/propertiespalette_shadowbase.ui (Revision 26070) +++ scribus/ui/propertiespalette_shadowbase.ui (Arbeitskopie) @@ -6,559 +6,505 @@ <rect> <x>0</x> <y>0</y> - <width>341</width> - <height>150</height> + <width>324</width> + <height>150</height> </rect> </property> - <layout class="QGridLayout" name="gridLayout_2"> + <layout class="QGridLayout" name="gridLayout_2"> <property name="leftMargin"> - <number>8</number> + <number>8</number> </property> <property name="topMargin"> - <number>8</number> + <number>8</number> </property> <property name="rightMargin"> - <number>8</number> + <number>8</number> </property> <property name="bottomMargin"> - <number>8</number> + <number>8</number> </property> - <property name="horizontalSpacing"> - <number>4</number> - </property> - <property name="verticalSpacing"> - <number>8</number> - </property> - <item row="3" column="0"> - <spacer name="horizontalSpacer_4"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeType"> - <enum>QSizePolicy::Fixed</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>24</width> - <height>0</height> - </size> - </property> - </spacer> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="labelXOffset"> + <property name="horizontalSpacing"> + <number>4</number> + </property> + <property name="verticalSpacing"> + <number>8</number> + </property> + <item row="3" column="0"> + <spacer name="horizontalSpacer_4"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>24</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="labelXOffset"> <property name="text"> - <string>X:</string> + <string>X:</string> </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> </widget> </item> - <item row="2" column="4"> - <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item row="2" column="4"> + <layout class="QHBoxLayout" name="horizontalLayout_2"> <property name="spacing"> - <number>4</number> + <number>4</number> </property> - <item> - <widget class="ScrSpinBox" name="numberOpacity"> - <property name="suffix"> - <string> %</string> + <item> + <widget class="ScrSpinBox" name="numberOpacity"> + <property name="suffix"> + <string> %</string> </property> - <property name="decimals"> - <number>0</number> + <property name="decimals"> + <number>0</number> </property> - <property name="maximum"> - <double>100.000000000000000</double> + <property name="maximum"> + <double>100.000000000000000</double> </property> - <property name="value"> - <double>100.000000000000000</double> + <property name="value"> + <double>100.000000000000000</double> </property> </widget> </item> - <item> - <widget class="QToolButton" name="buttonInheritOpacity"> + <item> + <widget class="QToolButton" name="buttonInheritOpacity"> <property name="text"> - <string/> + <string/> </property> </widget> </item> - </layout> - </item> - <item row="0" column="5"> - <spacer name="horizontalSpacer_3"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeType"> - <enum>QSizePolicy::Expanding</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>0</width> - <height>0</height> - </size> - </property> - </spacer> - </item> - <item row="1" column="4"> - <widget class="ScrSpinBox" name="numberBlurRadius"> - <property name="maximumSize"> - <size> - <width>90</width> - <height>16777215</height> - </size> - </property> - <property name="suffix"> - <string>mm</string> - </property> - <property name="decimals"> - <number>3</number> - </property> - <property name="maximum"> - <double>20.000000000000000</double> - </property> - <property name="value"> - <double>5.000000000000000</double> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="labelYOffset"> - <property name="text"> - <string>Y:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - </widget> - </item> - <item row="0" column="1" colspan="4"> - <layout class="QHBoxLayout" name="horizontalLayout"> - <property name="spacing"> - <number>4</number> - </property> - <item> - <widget class="FormWidget" name="labelColor"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> + </layout> + </item> + <item row="0" column="5"> + <spacer name="horizontalSpacer_3"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Expanding</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="4"> + <widget class="ScrSpinBox" name="numberBlurRadius"> + <property name="suffix"> + <string>mm</string> + </property> + <property name="decimals"> + <number>3</number> + </property> + <property name="maximum"> + <double>20.000000000000000</double> + </property> + <property name="value"> + <double>5.000000000000000</double> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="labelYOffset"> + <property name="text"> + <string>Y:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + </item> + <item row="0" column="1" colspan="4"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="spacing"> + <number>4</number> + </property> + <item> + <widget class="FormWidget" name="labelColor"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> </property> - <property name="label" stdset="0"> - <string>Color</string> + <property name="label" stdset="0"> + <string>Color</string> </property> - <property name="font"> - <font> - <pointsize>8</pointsize> - </font> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> </property> - <layout class="QHBoxLayout" name="horizontalLayout_7"> - <property name="spacing"> - <number>4</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="ColorButton" name="buttonColor"> - <property name="text"> - <string/> - </property> - </widget> - </item> - </layout> + <layout class="QHBoxLayout" name="horizontalLayout_7"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ColorButton" name="buttonColor"> + <property name="text"> + <string/> + </property> + </widget> + </item> + </layout> </widget> </item> - <item> - <widget class="FormWidget" name="labelShade"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> + <item> + <widget class="FormWidget" name="labelBlendmode"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> </property> - <property name="label" stdset="0"> - <string>Shade</string> + <property name="label" stdset="0"> + <string>Blendmode</string> </property> - <property name="font"> - <font> - <pointsize>8</pointsize> - </font> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> </property> - <layout class="QHBoxLayout" name="horizontalLayout_5"> - <property name="spacing"> - <number>4</number> + <layout class="QHBoxLayout" name="horizontalLayout_9"> + <property name="spacing"> + <number>4</number> </property> - <property name="leftMargin"> - <number>0</number> + <property name="leftMargin"> + <number>0</number> </property> - <property name="topMargin"> - <number>0</number> + <property name="topMargin"> + <number>0</number> </property> - <property name="rightMargin"> - <number>0</number> + <property name="rightMargin"> + <number>0</number> </property> - <property name="bottomMargin"> - <number>0</number> + <property name="bottomMargin"> + <number>0</number> </property> - <item> - <widget class="ScrSpinBox" name="numberShade"> - <property name="suffix"> - <string> %</string> - </property> - <property name="decimals"> - <number>0</number> - </property> - <property name="maximum"> - <double>100.000000000000000</double> - </property> - <property name="value"> - <double>100.000000000000000</double> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="FormWidget" name="labelBlendmode"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="label" stdset="0"> - <string>Blendmode</string> - </property> - <property name="font"> - <font> - <pointsize>8</pointsize> - </font> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_9"> - <property name="spacing"> - <number>4</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="ComboBlendMode" name="comboboxBlendMode"> - <item> - <property name="text"> - <string>Normal</string> - </property> - </item> - <item> - <property name="text"> - <string>Darken</string> - </property> - </item> - <item> - <property name="text"> - <string>Lighten</string> - </property> - </item> - <item> - <property name="text"> - <string>Multiply</string> - </property> - </item> - <item> - <property name="text"> - <string>Screen</string> - </property> - </item> - <item> - <property name="text"> - <string>Overlay</string> - </property> - </item> - <item> - <property name="text"> - <string>Hard Light</string> - </property> - </item> - <item> - <property name="text"> - <string>Soft Light</string> - </property> - </item> - <item> - <property name="text"> - <string>Difference</string> - </property> - </item> - <item> - <property name="text"> - <string>Exclusion</string> - </property> - </item> - <item> - <property name="text"> - <string>Color Dodge</string> - </property> - </item> - <item> - <property name="text"> - <string>Color Burn</string> - </property> - </item> - <item> - <property name="text"> - <string>Hue</string> - </property> - </item> - <item> - <property name="text"> - <string>Saturation</string> - </property> - </item> - <item> - <property name="text"> - <string>Color</string> - </property> - </item> - <item> - <property name="text"> - <string>Luminosity</string> - </property> - </item> - </widget> - </item> - </layout> + <item> + <widget class="ComboBlendMode" name="comboboxBlendMode"> + <item> + <property name="text"> + <string>Normal</string> + </property> + </item> + <item> + <property name="text"> + <string>Darken</string> + </property> + </item> + <item> + <property name="text"> + <string>Lighten</string> + </property> + </item> + <item> + <property name="text"> + <string>Multiply</string> + </property> + </item> + <item> + <property name="text"> + <string>Screen</string> + </property> + </item> + <item> + <property name="text"> + <string>Overlay</string> + </property> + </item> + <item> + <property name="text"> + <string>Hard Light</string> + </property> + </item> + <item> + <property name="text"> + <string>Soft Light</string> + </property> + </item> + <item> + <property name="text"> + <string>Difference</string> + </property> + </item> + <item> + <property name="text"> + <string>Exclusion</string> + </property> + </item> + <item> + <property name="text"> + <string>Color Dodge</string> + </property> + </item> + <item> + <property name="text"> + <string>Color Burn</string> + </property> + </item> + <item> + <property name="text"> + <string>Hue</string> + </property> + </item> + <item> + <property name="text"> + <string>Saturation</string> + </property> + </item> + <item> + <property name="text"> + <string>Color</string> + </property> + </item> + <item> + <property name="text"> + <string>Luminosity</string> + </property> + </item> + </widget> + </item> + </layout> </widget> </item> - <item> - <widget class="FormWidget" name="labelErase"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> + <item> + <spacer name="horizontalSpacer_5"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> </property> - <property name="label" stdset="0"> - <string>Erase Fill</string> + <property name="sizeType"> + <enum>QSizePolicy::Fixed</enum> </property> - <property name="font"> - <font> - <pointsize>8</pointsize> - </font> + <property name="sizeHint" stdset="0"> + <size> + <width>8</width> + <height>0</height> + </size> </property> - <layout class="QHBoxLayout" name="horizontalLayout_11"> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="QToolButton" name="buttonEraseShadow"> - <property name="text"> - <string/> - </property> - </widget> - </item> - </layout> + </spacer> + </item> + <item> + <widget class="FormWidget" name="labelErase"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Erase Fill</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_11"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QToolButton" name="buttonEraseShadow"> + <property name="text"> + <string/> + </property> + </widget> + </item> + </layout> </widget> </item> - <item> - <spacer name="horizontalSpacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> + <item> + <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 name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>0</height> + </size> </property> - </spacer> + </spacer> </item> </layout> </item> - <item row="2" column="1"> - <widget class="ScrSpinBox" name="numberYOffset"> - <property name="maximumSize"> - <size> - <width>100</width> - <height>16777215</height> - </size> - </property> - <property name="suffix"> - <string>mm</string> - </property> - <property name="decimals"> - <number>3</number> - </property> - </widget> - </item> - <item row="1" column="3"> - <widget class="QLabel" name="labelBlurRadius"> - <property name="text"> - <string>Radius:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="ScrSpinBox" name="numberXOffset"> - <property name="maximumSize"> - <size> - <width>100</width> - <height>16777215</height> - </size> - </property> - <property name="suffix"> - <string>mm</string> - </property> - <property name="decimals"> - <number>3</number> - </property> - </widget> - </item> - <item row="2" column="3"> - <widget class="QLabel" name="labelOpacity"> - <property name="text"> - <string>Opacity:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - </widget> - </item> - <item row="0" column="0"> - <widget class="FormWidget" name="labelHasShadow"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="label" stdset="0"> - <string/> - </property> - <property name="font"> - <font> - <pointsize>8</pointsize> - </font> - </property> - <property name="preserveLabelSpace"> - <bool>true</bool> - </property> - <property name="labelVisibility"> - <bool>true</bool> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_12"> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="Switch" name="switchHasShadow"> - <property name="text"> - <string/> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item row="2" column="2"> - <spacer name="horizontalSpacer_2"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeType"> - <enum>QSizePolicy::Maximum</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>8</width> - <height>0</height> - </size> - </property> - </spacer> - </item> + <item row="2" column="1"> + <widget class="ScrSpinBox" name="numberYOffset"> + <property name="suffix"> + <string>mm</string> + </property> + <property name="decimals"> + <number>3</number> + </property> + </widget> + </item> + <item row="1" column="3"> + <widget class="QLabel" name="labelBlurRadius"> + <property name="text"> + <string>Radius:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="ScrSpinBox" name="numberXOffset"> + <property name="suffix"> + <string>mm</string> + </property> + <property name="decimals"> + <number>3</number> + </property> + </widget> + </item> + <item row="2" column="3"> + <widget class="QLabel" name="labelOpacity"> + <property name="text"> + <string>Opacity:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="FormWidget" name="labelHasShadow"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string/> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <property name="preserveLabelSpace"> + <bool>true</bool> + </property> + <property name="labelVisibility"> + <bool>true</bool> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_12"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="Switch" name="switchHasShadow"> + <property name="text"> + <string/> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="2" column="2"> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Maximum</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>8</width> + <height>0</height> + </size> + </property> + </spacer> + </item> </layout> </widget> <customwidgets> <customwidget> - <class>FormWidget</class> - <extends>QWidget</extends> - <header>ui/widgets/form_widget.h</header> - <container>1</container> - </customwidget> - <customwidget> + <class>FormWidget</class> + <extends>QWidget</extends> + <header>ui/widgets/form_widget.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>ColorButton</class> + <extends>QToolButton</extends> + <header>ui/widgets/color_button.h</header> + </customwidget> + <customwidget> <class>ScrSpinBox</class> <extends>QDoubleSpinBox</extends> - <header>ui/scrspinbox.h</header> + <header location="global">ui/scrspinbox.h</header> </customwidget> <customwidget> - <class>ComboBlendMode</class> + <class>ComboBlendMode</class> <extends>QComboBox</extends> - <header>ui/widgets/combo_blendmode.h</header> + <header>ui/widgets/combo_blendmode.h</header> </customwidget> - <customwidget> - <class>ColorButton</class> - <extends>QToolButton</extends> - <header>ui/widgets/color_button.h</header> - </customwidget> - <customwidget> - <class>Switch</class> - <extends>QToolButton</extends> - <header>ui/widgets/switch.h</header> - </customwidget> + <customwidget> + <class>Switch</class> + <extends>QToolButton</extends> + <header>ui/widgets/switch.h</header> + </customwidget> </customwidgets> - <tabstops> - <tabstop>switchHasShadow</tabstop> - <tabstop>buttonColor</tabstop> - <tabstop>numberShade</tabstop> - <tabstop>comboboxBlendMode</tabstop> - <tabstop>buttonEraseShadow</tabstop> - <tabstop>numberXOffset</tabstop> - <tabstop>numberYOffset</tabstop> - <tabstop>numberBlurRadius</tabstop> - <tabstop>numberOpacity</tabstop> - <tabstop>buttonInheritOpacity</tabstop> - </tabstops> + <tabstops> + <tabstop>switchHasShadow</tabstop> + <tabstop>buttonColor</tabstop> + <tabstop>comboboxBlendMode</tabstop> + <tabstop>buttonEraseShadow</tabstop> + <tabstop>numberXOffset</tabstop> + <tabstop>numberYOffset</tabstop> + <tabstop>numberBlurRadius</tabstop> + <tabstop>numberOpacity</tabstop> + <tabstop>buttonInheritOpacity</tabstop> + </tabstops> <resources/> <connections/> </ui> Index: scribus/ui/propertiespalette_shape.cpp =================================================================== --- scribus/ui/propertiespalette_shape.cpp (Revision 26070) +++ scribus/ui/propertiespalette_shape.cpp (Arbeitskopie) @@ -40,13 +40,11 @@ connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(iconSetChange())); connect(ScQApp, SIGNAL(localeChanged()), this, SLOT(localeChange())); - connect(ScQApp, SIGNAL(labelVisibilityChanged(bool)), this, SLOT(toggleLabelVisibility(bool))); + connect(ScQApp, SIGNAL(labelVisibilityChanged(bool)), this, SLOT(toggleLabelVisibility(bool))); connect(textFlowBtnGroup, SIGNAL(idClicked(int)), this, SLOT(handleTextFlow())); connect(editShape, SIGNAL(clicked()) , this, SLOT(handleShapeEdit())); connect(roundRect, SIGNAL(valueChanged(double)) , this, SLOT(handleCornerRadius())); - connect(evenOdd, SIGNAL(clicked()), this, SLOT(handleFillRule())); - connect(nonZero, SIGNAL(clicked()), this, SLOT(handleFillRule())); connect(customShape, SIGNAL(FormSel(int,int,qreal*)), this, SLOT(handleNewShape(int,int,qreal*))); roundRect->showValue(0); @@ -330,21 +328,6 @@ roundRect->setValue(m_item->cornerRadius()*m_unitRatio); showTextFlowMode(m_item->textFlowMode()); - - if (m_item->isPathText() || m_item->isTextFrame() || m_item->isImageFrame()) - { - nonZero->setChecked(false); - nonZero->setEnabled(false); - evenOdd->setChecked(false); - evenOdd->setEnabled(false); - } - else - { - nonZero->setEnabled(true); - evenOdd->setEnabled(true); - nonZero->setChecked(!m_item->fillRule); - evenOdd->setChecked(m_item->fillRule); - } setLocked(m_item->locked()); setSizeLocked(m_item->sizeLocked()); @@ -397,7 +380,7 @@ mode = PageItem::TextFlowUsesImageClipping; m_item->setTextFlowMode(mode); m_doc->changed(); - m_doc->changedPagePreview(); + m_doc->changedPagePreview(); m_doc->invalidateAll(); m_doc->regionsChanged()->update(QRect()); } @@ -432,7 +415,7 @@ connect(m_ScMW->nodePalette, SIGNAL(paletteClosed()), this, SLOT(handleShapeEditEnded())); } m_doc->changed(); - m_doc->changedPagePreview(); + m_doc->changedPagePreview(); } } @@ -457,20 +440,12 @@ m_item->setCornerRadius(roundRect->value() / m_unitRatio); m_doc->setFrameRounded(); m_doc->changed(); - m_doc->changedPagePreview(); + m_doc->changedPagePreview(); //called from setFrameRounded already! m_doc->regionsChanged()->update(QRect()); m_item->update(); } -void PropertiesPalette_Shape::handleFillRule() -{ - if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning()) - return; - m_item->fillRule = evenOdd->isChecked(); - m_item->update(); -} - void PropertiesPalette_Shape::handleNewShape(int f, int c, qreal *vals) { if (!m_ScMW || m_ScMW->scriptIsRunning()) @@ -524,9 +499,6 @@ textFlowUsesBoundingBox->setIcon(iconManager.loadIcon("flow-bounding.png")); textFlowUsesContourLine->setIcon(iconManager.loadIcon("flow-contour.png")); textFlowUsesImageClipping->setIcon(iconManager.loadIcon("flow-contour.png")); - - evenOdd->setIcon(iconManager.loadIcon("fill-rule-even-odd.png")); - nonZero->setIcon(iconManager.loadIcon("fill-rule-nonzero.png")); } void PropertiesPalette_Shape::languageChange() @@ -556,9 +528,8 @@ const QLocale& l(LocaleManager::instance().userPreferredLocale()); roundRect->setLocale(l); } - -void PropertiesPalette_Shape::toggleLabelVisibility(bool v) -{ - labelTextFlow->setLabelVisibility(v); - labelFillRule->setLabelVisibility(v); -} + +void PropertiesPalette_Shape::toggleLabelVisibility(bool v) +{ + labelTextFlow->setLabelVisibility(v); +} Index: scribus/ui/propertiespalette_shape.h =================================================================== --- scribus/ui/propertiespalette_shape.h (Revision 26070) +++ scribus/ui/propertiespalette_shape.h (Arbeitskopie) @@ -73,7 +73,7 @@ void languageChange(); void unitChange(); void localeChange(); - void toggleLabelVisibility(bool v); + void toggleLabelVisibility(bool v); private slots: @@ -81,7 +81,6 @@ void handleShapeEdit(); void handleShapeEditEnded(); void handleCornerRadius(); - void handleFillRule(); void handleNewShape(int, int, qreal *); }; Index: scribus/ui/propertiespalette_shapebase.ui =================================================================== --- scribus/ui/propertiespalette_shapebase.ui (Revision 26070) +++ scribus/ui/propertiespalette_shapebase.ui (Arbeitskopie) @@ -6,323 +6,256 @@ <rect> <x>0</x> <y>0</y> - <width>238</width> - <height>107</height> + <width>238</width> + <height>107</height> </rect> </property> <layout class="QVBoxLayout" name="verticalLayout"> <property name="spacing"> - <number>8</number> + <number>8</number> </property> <property name="leftMargin"> - <number>8</number> + <number>8</number> </property> <property name="topMargin"> - <number>8</number> + <number>8</number> </property> <property name="rightMargin"> - <number>8</number> + <number>8</number> </property> <property name="bottomMargin"> - <number>8</number> + <number>8</number> </property> <item> - <layout class="QHBoxLayout" name="horizontalLayout_6"> + <layout class="QHBoxLayout" name="horizontalLayout_6"> <property name="spacing"> - <number>4</number> + <number>4</number> </property> - <item> - <widget class="Autoforms" name="customShape"> - <property name="toolTip"> - <string>Choose the shape of frame...</string> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="editShape"> - <property name="maximumSize"> - <size> - <width>16777215</width> - <height>23</height> - </size> - </property> + <item> + <widget class="Autoforms" name="customShape"> + <property name="toolTip"> + <string>Choose the shape of frame...</string> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="editShape"> + <property name="maximumSize"> + <size> + <width>16777215</width> + <height>23</height> + </size> + </property> <property name="text"> - <string>&Edit...</string> + <string>&Edit...</string> </property> </widget> </item> - <item> - <spacer name="horizontalSpacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> </property> - <property name="sizeType"> - <enum>QSizePolicy::Fixed</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>16</width> - <height>0</height> - </size> - </property> - </spacer> + <property name="sizeType"> + <enum>QSizePolicy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>16</width> + <height>0</height> + </size> + </property> + </spacer> </item> - <item> - <widget class="QLabel" name="roundRectIcon"> - <property name="minimumSize"> - <size> - <width>16</width> - <height>16</height> - </size> + <item> + <widget class="QLabel" name="roundRectIcon"> + <property name="minimumSize"> + <size> + <width>16</width> + <height>16</height> + </size> </property> - <property name="toolTip"> - <string notr="true"/> - </property> + <property name="toolTip"> + <string notr="true"/> + </property> <property name="text"> - <string/> + <string/> </property> </widget> </item> - <item> - <widget class="ScrSpinBox" name="roundRect"> - <property name="toolTip"> - <string>Set radius of corner rounding</string> + <item> + <widget class="ScrSpinBox" name="roundRect"> + <property name="toolTip"> + <string>Set radius of corner rounding</string> </property> </widget> </item> - <item> - <spacer name="horizontalSpacer_2"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> </property> - <property name="sizeHint" stdset="0"> - <size> - <width>0</width> - <height>0</height> - </size> - </property> - </spacer> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </spacer> </item> </layout> </item> <item> - <layout class="QHBoxLayout" name="horizontalLayout_5"> - <property name="spacing"> - <number>16</number> - </property> - <item> - <widget class="FormWidget" name="labelTextFlow"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="label" stdset="0"> - <string>Text Flow</string> - </property> - <property name="font"> - <font> - <pointsize>8</pointsize> - </font> - </property> - <layout class="QHBoxLayout" name="horizontalLayout"> - <property name="spacing"> - <number>4</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="QToolButton" name="textFlowDisabled"> - <property name="toolTip"> - <string>Text flow around frame disabled</string> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - <property name="autoExclusive"> - <bool>true</bool> - </property> - <property name="toolButtonStyle"> - <enum>Qt::ToolButtonIconOnly</enum> - </property> - <attribute name="buttonGroup"> - <string notr="true">textFlowBtnGroup</string> - </attribute> - </widget> - </item> - <item> - <widget class="QToolButton" name="textFlowUsesFrameShape"> - <property name="toolTip"> - <string>Text flow around frame shape</string> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - <property name="autoExclusive"> - <bool>true</bool> - </property> - <property name="toolButtonStyle"> - <enum>Qt::ToolButtonIconOnly</enum> - </property> - <attribute name="buttonGroup"> - <string notr="true">textFlowBtnGroup</string> - </attribute> - </widget> - </item> - <item> - <widget class="QToolButton" name="textFlowUsesBoundingBox"> - <property name="toolTip"> - <string>Text flow around bounding box</string> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - <property name="autoExclusive"> - <bool>true</bool> - </property> - <property name="toolButtonStyle"> - <enum>Qt::ToolButtonIconOnly</enum> - </property> - <attribute name="buttonGroup"> - <string notr="true">textFlowBtnGroup</string> - </attribute> - </widget> - </item> - <item> - <widget class="QToolButton" name="textFlowUsesContourLine"> - <property name="toolTip"> - <string>Text flow around contour line</string> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - <property name="autoExclusive"> - <bool>true</bool> - </property> - <property name="toolButtonStyle"> - <enum>Qt::ToolButtonIconOnly</enum> - </property> - <attribute name="buttonGroup"> - <string notr="true">textFlowBtnGroup</string> - </attribute> - </widget> - </item> - <item> - <widget class="QToolButton" name="textFlowUsesImageClipping"> - <property name="toolTip"> - <string>Text flow around image clip path</string> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - <property name="autoExclusive"> - <bool>true</bool> - </property> - <property name="toolButtonStyle"> - <enum>Qt::ToolButtonIconOnly</enum> - </property> - <attribute name="buttonGroup"> - <string notr="true">textFlowBtnGroup</string> - </attribute> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="FormWidget" name="labelFillRule"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="label" stdset="0"> - <string>Fill Rule</string> - </property> - <property name="font"> - <font> - <pointsize>8</pointsize> - </font> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_4"> - <property name="spacing"> - <number>4</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="QToolButton" name="evenOdd"> - <property name="toolTip"> - <string>Any path self-intersections or subpaths create holes in the fill (fill-rule: evenodd)</string> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - <property name="autoExclusive"> - <bool>true</bool> - </property> - <attribute name="buttonGroup"> - <string notr="true">fillRuleBtnGroup</string> - </attribute> - </widget> - </item> - <item> - <widget class="QToolButton" name="nonZero"> - <property name="toolTip"> - <string>Fill is solid unless a subpath is counterdirectional (fill-rule: nonzero)</string> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - <property name="autoExclusive"> - <bool>true</bool> - </property> - <attribute name="buttonGroup"> - <string notr="true">fillRuleBtnGroup</string> - </attribute> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <spacer name="horizontalSpacer_4"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </item> - <item> + <layout class="QHBoxLayout" name="horizontalLayout_5"> + <property name="spacing"> + <number>16</number> + </property> + <item> + <widget class="FormWidget" name="labelTextFlow"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Text Flow</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QToolButton" name="textFlowDisabled"> + <property name="toolTip"> + <string>Text flow around frame disabled</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="autoExclusive"> + <bool>true</bool> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonIconOnly</enum> + </property> + <attribute name="buttonGroup"> + <string notr="true">textFlowBtnGroup</string> + </attribute> + </widget> + </item> + <item> + <widget class="QToolButton" name="textFlowUsesFrameShape"> + <property name="toolTip"> + <string>Text flow around frame shape</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="autoExclusive"> + <bool>true</bool> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonIconOnly</enum> + </property> + <attribute name="buttonGroup"> + <string notr="true">textFlowBtnGroup</string> + </attribute> + </widget> + </item> + <item> + <widget class="QToolButton" name="textFlowUsesBoundingBox"> + <property name="toolTip"> + <string>Text flow around bounding box</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="autoExclusive"> + <bool>true</bool> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonIconOnly</enum> + </property> + <attribute name="buttonGroup"> + <string notr="true">textFlowBtnGroup</string> + </attribute> + </widget> + </item> + <item> + <widget class="QToolButton" name="textFlowUsesContourLine"> + <property name="toolTip"> + <string>Text flow around contour line</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="autoExclusive"> + <bool>true</bool> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonIconOnly</enum> + </property> + <attribute name="buttonGroup"> + <string notr="true">textFlowBtnGroup</string> + </attribute> + </widget> + </item> + <item> + <widget class="QToolButton" name="textFlowUsesImageClipping"> + <property name="toolTip"> + <string>Text flow around image clip path</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="autoExclusive"> + <bool>true</bool> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonIconOnly</enum> + </property> + <attribute name="buttonGroup"> + <string notr="true">textFlowBtnGroup</string> + </attribute> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_4"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item> <spacer name="verticalSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum> @@ -339,12 +272,12 @@ </widget> <customwidgets> <customwidget> - <class>FormWidget</class> - <extends>QWidget</extends> - <header>ui/widgets/form_widget.h</header> - <container>1</container> - </customwidget> - <customwidget> + <class>FormWidget</class> + <extends>QWidget</extends> + <header>ui/widgets/form_widget.h</header> + <container>1</container> + </customwidget> + <customwidget> <class>ScrSpinBox</class> <extends>QDoubleSpinBox</extends> <header>ui/scrspinbox.h</header> Index: scribus/ui/propertiespalette_xyz.cpp =================================================================== --- scribus/ui/propertiespalette_xyz.cpp (Revision 26070) +++ scribus/ui/propertiespalette_xyz.cpp (Arbeitskopie) @@ -17,7 +17,6 @@ #include "appmodehelper.h" #include "appmodes.h" #include "basepointwidget.h" -#include "commonstrings.h" #include "iconmanager.h" #include "localemgr.h" #include "pageitem.h" @@ -45,8 +44,6 @@ connect(userActionSniffer, SIGNAL(actionStart()), this, SLOT(spinboxStartUserAction())); connect(userActionSniffer, SIGNAL(actionEnd()), this, SLOT(spinboxFinishUserAction())); - nameEdit->setFocusPolicy(Qt::ClickFocus); - installSniffer(xposSpin); installSniffer(yposSpin); installSniffer(widthSpin); @@ -66,7 +63,6 @@ flipV->setCheckable(true); doLock->setCheckable(true); - noPrint->setCheckable(true); noResize->setCheckable(true); buttonLineBasePoint->setVisible(false); @@ -94,9 +90,7 @@ connect(basePointWidget, SIGNAL(buttonClicked(AnchorPoint)), this, SLOT(handleBasePoint(AnchorPoint))); connect(buttonLineBasePoint, SIGNAL(toggled(bool)), this, SLOT(handleLineMode())); - connect(nameEdit , SIGNAL(Leaved()) , this, SLOT(handleNewName())); connect(doLock , SIGNAL(clicked()), this, SLOT(handleLock())); - connect(noPrint , SIGNAL(clicked()), this, SLOT(handlePrint())); connect(noResize , SIGNAL(clicked()), this, SLOT(handleLockSize())); connect(doGroup , SIGNAL(clicked()), this, SLOT(handleGrouping()) ); connect(doUnGroup, SIGNAL(clicked()), this, SLOT(handleUngrouping()) ); @@ -169,7 +163,6 @@ m_haveItem = false; m_doc = nullptr; m_item = nullptr; - nameEdit->clear(); xposSpin->setConstants(nullptr); yposSpin->setConstants(nullptr); widthSpin->setConstants(nullptr); @@ -261,16 +254,11 @@ if (!m_doc) setDoc(item->doc()); - disconnect(nameEdit, SIGNAL(Leaved()), this, SLOT(handleNewName())); - m_haveItem = false; m_item = item; - nameEdit->setText(m_item->itemName()); levelLabel->setText( QString::number(m_item->level()) ); - connect(nameEdit, SIGNAL(Leaved()), this, SLOT(handleNewName())); - //CB replaces old emits from PageItem::emitAllToGUI() disconnect(xposSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewX())); disconnect(yposSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewY())); @@ -277,7 +265,6 @@ disconnect(widthSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewW())); disconnect(heightSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewH())); disconnect(doLock, SIGNAL(clicked()), this, SLOT(handleLock())); - disconnect(noPrint, SIGNAL(clicked()), this, SLOT(handlePrint())); disconnect(noResize, SIGNAL(clicked()), this, SLOT(handleLockSize())); disconnect(flipH, SIGNAL(clicked()), this, SLOT(handleFlipH())); disconnect(flipV, SIGNAL(clicked()), this, SLOT(handleFlipV())); @@ -296,7 +283,6 @@ flipH->setCheckable(checkableFlip); flipV->setCheckable(checkableFlip); - noPrint->setChecked(!item->printEnabled()); showFlippedH(item->imageFlippedH()); showFlippedV(item->imageFlippedV()); @@ -316,7 +302,6 @@ connect(widthSpin , SIGNAL(valueChanged(double)), this, SLOT(handleNewW()), Qt::UniqueConnection); connect(heightSpin , SIGNAL(valueChanged(double)), this, SLOT(handleNewH()), Qt::UniqueConnection); connect(doLock , SIGNAL(clicked()), this, SLOT(handleLock()), Qt::UniqueConnection); - connect(noPrint , SIGNAL(clicked()), this, SLOT(handlePrint()), Qt::UniqueConnection); connect(noResize, SIGNAL(clicked()), this, SLOT(handleLockSize()), Qt::UniqueConnection); connect(flipH , SIGNAL(clicked()), this, SLOT(handleFlipH()), Qt::UniqueConnection); connect(flipV , SIGNAL(clicked()), this, SLOT(handleFlipV()), Qt::UniqueConnection); @@ -407,8 +392,6 @@ if (!m_haveDoc || !m_ScMW || m_ScMW->scriptIsRunning()) return; -// nameEdit->setEnabled(m_doc->m_Selection->count() == 1); - PageItem* currItem = currentItemFromSelection(); if (m_doc->m_Selection->count() > 1) { @@ -465,7 +448,6 @@ heightSpin->setEnabled(true); rotationSpin->setEnabled(true); - nameEdit->setEnabled(false); flipH->setCheckable( false ); flipV->setCheckable( false ); flipH->setChecked(false); @@ -489,7 +471,6 @@ doGroup->setEnabled(false); doUnGroup->setEnabled(false); } - nameEdit->setEnabled(true); basePointWidget->setEnabled(true); basePointWidget->setMode(BasePointWidget::Full); keepFrameWHRatioButton->setVisible(true); @@ -596,9 +577,7 @@ labelLock->setLabelVisibility(visibility); labelGroup->setLabelVisibility(visibility); labelLevel->setLabelVisibility(visibility); - labelName->setLabelVisibility(visibility); - labelExport->setLabelVisibility(visibility); - formWidget->setLabelVisibility(visibility); + formWidget->setLabelVisibility(visibility); } void PropertiesPalette_XYZ::showXY(double x, double y) @@ -1384,13 +1363,6 @@ m_ScMW->scrActions["itemLockSize"]->toggle(); } -void PropertiesPalette_XYZ::handlePrint() -{ - if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning()) - return; - m_ScMW->scrActions["itemPrintingEnabled"]->toggle(); -} - void PropertiesPalette_XYZ::handleFlipH() { if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning()) @@ -1405,53 +1377,6 @@ m_ScMW->scrActions["itemFlipV"]->toggle(); } -void PropertiesPalette_XYZ::handleNewName() -{ - if (m_ScMW->scriptIsRunning() || !m_haveDoc || !m_haveItem) - return; - QString NameOld = m_item->itemName(); - QString NameNew = nameEdit->text(); - if (NameNew.isEmpty()) - { - nameEdit->setText(NameOld); - return; - } - bool found = false; - QList<PageItem*> allItems; - for (int a = 0; a < m_doc->Items->count(); ++a) - { - PageItem *currItem = m_doc->Items->at(a); - if (currItem->isGroup()) - allItems = currItem->getAllChildren(); - else - allItems.append(currItem); - for (int ii = 0; ii < allItems.count(); ii++) - { - PageItem* item = allItems.at(ii); - if ((NameNew == item->itemName()) && (item != m_item)) - { - found = true; - break; - } - } - allItems.clear(); - } - if (found) - { - ScMessageBox::warning(this, CommonStrings::trWarning, "<qt>"+ tr("Name \"%1\" isn't unique.<br/>Please choose another.").arg(NameNew)+"</qt>"); - nameEdit->setText(NameOld); - nameEdit->setFocus(); - } - else - { - if (m_item->itemName() != nameEdit->text()) - { - m_item->setItemName(nameEdit->text()); - m_doc->changed(); - } - } -} - void PropertiesPalette_XYZ::installSniffer(ScrSpinBox *spinBox) { const QList<QObject*>& list = spinBox->children(); @@ -1523,11 +1448,6 @@ a.addPixmap(im.loadPixmap("16/lock-unlocked.png"), QIcon::Normal, QIcon::Off); doLock->setIcon(a); - QIcon a2; - a2.addPixmap(im.loadPixmap("NoPrint.png"), QIcon::Normal, QIcon::On); - a2.addPixmap(im.loadPixmap("16/document-print.png"), QIcon::Normal, QIcon::Off); - noPrint->setIcon(a2); - QIcon a3; a3.addPixmap(im.loadPixmap("framenoresize.png"), QIcon::Normal, QIcon::On); a3.addPixmap(im.loadPixmap("frameresize.png"), QIcon::Normal, QIcon::Off); @@ -1536,7 +1456,6 @@ void PropertiesPalette_XYZ::languageChange() { - setWindowTitle( tr("Properties")); retranslateUi(this); QString suffix = m_haveDoc ? unitGetSuffixFromIndex(m_doc->unitIndex()) : tr(" pt"); @@ -1599,11 +1518,6 @@ noResize->setChecked(isSizeLocked); } -void PropertiesPalette_XYZ::showPrintingEnabled(bool isPrintingEnabled) -{ - noPrint->setChecked(!isPrintingEnabled); -} - void PropertiesPalette_XYZ::showFlippedH(bool isFlippedH) { flipH->setChecked(isFlippedH); Index: scribus/ui/propertiespalette_xyz.h =================================================================== --- scribus/ui/propertiespalette_xyz.h (Revision 26070) +++ scribus/ui/propertiespalette_xyz.h (Arbeitskopie) @@ -11,13 +11,10 @@ #include "scribusapi.h" #include "scrspinbox.h" -#include "linkbutton.h" -#include "sclistboxpixmap.h" #include "scguardedptr.h" #include "units.h" class BasePointWidget; -class NameWidget; class PageItem; class ScribusDoc; class Selection; @@ -55,7 +52,7 @@ void languageChange(); void unitChange(); void localeChange(); - void toggleLabelVisibility(bool visibility); + void toggleLabelVisibility(bool visibility); void showXY(double x, double y); void showWH(double x, double y); @@ -62,7 +59,6 @@ void showRotation(double r); void showLocked(bool); void showSizeLocked(bool); - void showPrintingEnabled(bool); void showFlippedH(bool); void showFlippedV(bool); @@ -83,14 +79,12 @@ void handleRaise(); void handleFront(); void handleBack(); - void handleBasePoint(AnchorPoint m); + void handleBasePoint(AnchorPoint m); void handleLock(); void handleLockSize(); - void handlePrint(); - void handleNewName(); void handleGrouping(); void handleUngrouping(); - void handleLineMode(); + void handleLineMode(); protected slots: //virtual void reject(); Index: scribus/ui/propertiespalette_xyzbase.ui =================================================================== --- scribus/ui/propertiespalette_xyzbase.ui (Revision 26070) +++ scribus/ui/propertiespalette_xyzbase.ui (Arbeitskopie) @@ -6,298 +6,245 @@ <rect> <x>0</x> <y>0</y> - <width>318</width> - <height>262</height> + <width>358</width> + <height>207</height> </rect> </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <layout class="QGridLayout" name="gridLayout"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <layout class="QGridLayout" name="gridLayout"> <property name="leftMargin"> - <number>8</number> + <number>8</number> </property> <property name="topMargin"> - <number>8</number> + <number>8</number> </property> <property name="rightMargin"> - <number>8</number> + <number>8</number> </property> <property name="bottomMargin"> - <number>8</number> + <number>8</number> </property> - <property name="horizontalSpacing"> - <number>4</number> - </property> - <property name="verticalSpacing"> - <number>8</number> - </property> - <item row="2" column="6"> - <spacer name="horizontalSpacer_2"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> + <property name="horizontalSpacing"> + <number>4</number> + </property> + <property name="verticalSpacing"> + <number>8</number> + </property> + <item row="4" column="0"> + <widget class="FormWidget" name="formWidget"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> </property> - <property name="sizeHint" stdset="0"> - <size> - <width>0</width> - <height>0</height> - </size> + <property name="label" stdset="0"> + <string/> </property> - </spacer> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <property name="preserveLabelSpace"> + <bool>true</bool> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QLabel" name="labelZ"> + <property name="text"> + <string>Z:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + </item> + </layout> + </widget> </item> - <item row="2" column="1"> - <widget class="ScrSpinBox" name="xposSpin"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> + <item row="2" column="2"> + <spacer name="horizontalSpacer_4"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> </property> - <property name="minimumSize"> - <size> - <width>100</width> - <height>0</height> - </size> - </property> - <property name="maximumSize"> - <size> - <width>100</width> - <height>16777215</height> - </size> - </property> - <property name="toolTip"> - <string>Horizontal position of current basepoint</string> - </property> - </widget> - </item> - <item row="2" column="5" rowspan="2"> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <property name="spacing"> - <number>4</number> - </property> - <item> - <widget class="LinkButton" name="keepFrameWHRatioButton"> - <property name="toolTip"> - <string>Keep the aspect ratio</string> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="buttonLineBasePoint"> - <property name="text"> - <string/> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - </widget> - </item> - </layout> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="xposLabel"> - <property name="text"> - <string>&X:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - <property name="buddy"> - <cstring>xposSpin</cstring> - </property> - </widget> - </item> - <item row="3" column="1"> - <widget class="ScrSpinBox" name="yposSpin"> - <property name="minimumSize"> - <size> - <width>100</width> - <height>0</height> - </size> - </property> - <property name="maximumSize"> - <size> - <width>100</width> - <height>16777215</height> - </size> - </property> - <property name="toolTip"> - <string>Vertical position of current basepoint</string> - </property> - </widget> - </item> - <item row="3" column="0"> - <widget class="QLabel" name="yposLabel"> - <property name="text"> - <string>&Y:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - <property name="buddy"> - <cstring>yposSpin</cstring> - </property> - </widget> - </item> - <item row="2" column="2"> - <spacer name="horizontalSpacer_4"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeType"> - <enum>QSizePolicy::Fixed</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>8</width> - <height>0</height> - </size> - </property> - </spacer> - </item> - <item row="3" column="3"> - <widget class="QLabel" name="heightLabel"> - <property name="text"> - <string>&H:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - <property name="buddy"> - <cstring>heightSpin</cstring> - </property> - </widget> - </item> - <item row="7" column="3"> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>0</height> - </size> - </property> - </spacer> - </item> - <item row="3" column="4"> - <widget class="ScrSpinBox" name="heightSpin"> - <property name="minimumSize"> - <size> - <width>100</width> - <height>0</height> - </size> - </property> - <property name="maximumSize"> - <size> - <width>100</width> - <height>16777215</height> - </size> - </property> - <property name="toolTip"> - <string>Height of current selection</string> - </property> - </widget> - </item> - <item row="2" column="4"> - <widget class="ScrSpinBox" name="widthSpin"> - <property name="minimumSize"> - <size> - <width>100</width> - <height>0</height> - </size> - </property> - <property name="maximumSize"> - <size> - <width>100</width> - <height>16777215</height> - </size> - </property> - <property name="toolTip"> - <string>Width of current selection</string> - </property> - </widget> - </item> - <item row="2" column="3"> - <widget class="QLabel" name="widthLabel"> - <property name="text"> - <string>&W:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - <property name="buddy"> - <cstring>widthSpin</cstring> - </property> - </widget> - </item> - <item row="7" column="0"> - <spacer name="horizontalSpacer_5"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeType"> - <enum>QSizePolicy::Fixed</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>24</width> - <height>0</height> - </size> - </property> - </spacer> - </item> - <item row="5" column="0" colspan="6"> - <layout class="QHBoxLayout" name="horizontalLayout_2"> - <property name="spacing"> - <number>16</number> - </property> - <item> - <widget class="BasePointWidget" name="basePointWidget" native="true"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>51</width> - <height>51</height> - </size> - </property> - <property name="maximumSize"> - <size> - <width>51</width> - <height>51</height> - </size> - </property> - </widget> - </item> - <item> - <widget class="FormWidget" name="labelFlip"> - <property name="label" stdset="0"> - <string>Flip</string> - </property> - <property name="font"> - <font> - <pointsize>8</pointsize> - </font> - </property> - <property name="space"> - <number>2</number> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_11"> - <property name="spacing"> - <number>4</number> - </property> + <property name="sizeType"> + <enum>QSizePolicy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>8</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + <item row="3" column="3"> + <widget class="QLabel" name="heightLabel"> + <property name="text"> + <string>&H:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + <property name="buddy"> + <cstring>heightSpin</cstring> + </property> + </widget> + </item> + <item row="2" column="5" rowspan="2"> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <property name="spacing"> + <number>4</number> + </property> + <item> + <widget class="LinkButton" name="keepFrameWHRatioButton"> + <property name="toolTip"> + <string>Keep the aspect ratio</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="buttonLineBasePoint"> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </item> + <item row="3" column="0"> + <widget class="QLabel" name="yposLabel"> + <property name="text"> + <string>&Y:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + <property name="buddy"> + <cstring>yposSpin</cstring> + </property> + </widget> + </item> + <item row="2" column="3"> + <widget class="QLabel" name="widthLabel"> + <property name="text"> + <string>&W:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + <property name="buddy"> + <cstring>widthSpin</cstring> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="xposLabel"> + <property name="text"> + <string>&X:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + <property name="buddy"> + <cstring>xposSpin</cstring> + </property> + </widget> + </item> + <item row="3" column="1"> + <widget class="ScrSpinBox" name="yposSpin"> + <property name="minimumSize"> + <size> + <width>120</width> + <height>0</height> + </size> + </property> + <property name="toolTip"> + <string>Vertical position of current basepoint</string> + </property> + </widget> + </item> + <item row="2" column="4"> + <widget class="ScrSpinBox" name="widthSpin"> + <property name="minimumSize"> + <size> + <width>120</width> + <height>0</height> + </size> + </property> + <property name="toolTip"> + <string>Width of current selection</string> + </property> + </widget> + </item> + <item row="5" column="0" colspan="6"> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <property name="spacing"> + <number>16</number> + </property> + <item> + <widget class="BasePointWidget" name="basePointWidget" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>51</width> + <height>51</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>51</width> + <height>51</height> + </size> + </property> + </widget> + </item> + <item> + <widget class="FormWidget" name="labelFlip"> + <property name="label" stdset="0"> + <string>Flip</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <property name="space"> + <number>2</number> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_11"> + <property name="spacing"> + <number>4</number> + </property> <property name="leftMargin"> <number>0</number> </property> @@ -310,361 +257,331 @@ <property name="bottomMargin"> <number>0</number> </property> - <item> - <widget class="QToolButton" name="flipH"> + <item> + <widget class="QToolButton" name="flipH"> <property name="toolTip"> - <string>Flip horizontally</string> + <string>Flip horizontally</string> </property> </widget> </item> - <item> - <widget class="QToolButton" name="flipV"> + <item> + <widget class="QToolButton" name="flipV"> <property name="toolTip"> - <string>Flip vertically</string> + <string>Flip vertically</string> </property> </widget> </item> - </layout> - </widget> - </item> - <item> - <widget class="FormWidget" name="labelLock"> - <property name="label" stdset="0"> - <string>Lock</string> - </property> - <property name="font"> - <font> - <pointsize>8</pointsize> - </font> - </property> - <property name="space"> - <number>2</number> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_12"> - <property name="spacing"> - <number>4</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="QToolButton" name="doLock"> - <property name="toolTip"> - <string>Lock or unlock the object</string> + </layout> + </widget> + </item> + <item> + <widget class="FormWidget" name="labelLock"> + <property name="label" stdset="0"> + <string>Lock</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <property name="space"> + <number>2</number> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_12"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QToolButton" name="doLock"> + <property name="toolTip"> + <string>Lock or unlock the object</string> </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="noResize"> - <property name="toolTip"> - <string>Lock or unlock the size of the object</string> - </property> - <property name="checkable"> - <bool>true</bool> - </property> </widget> </item> - </layout> - </widget> - </item> - <item> - <widget class="FormWidget" name="labelGroup"> - <property name="label" stdset="0"> - <string>Group</string> - </property> - <property name="font"> - <font> - <pointsize>8</pointsize> - </font> - </property> - <property name="space"> - <number>2</number> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_17"> - <property name="spacing"> - <number>4</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="QToolButton" name="doGroup"> + <item> + <widget class="QToolButton" name="noResize"> <property name="toolTip"> - <string>Group the selected objects</string> + <string>Lock or unlock the size of the object</string> </property> + <property name="checkable"> + <bool>true</bool> + </property> </widget> </item> - <item> - <widget class="QToolButton" name="doUnGroup"> + </layout> + </widget> + </item> + <item> + <widget class="FormWidget" name="labelGroup"> + <property name="label" stdset="0"> + <string>Group</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <property name="space"> + <number>2</number> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_17"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QToolButton" name="doGroup"> <property name="toolTip"> - <string>Ungroup the selected group</string> + <string>Group the selected objects</string> </property> </widget> </item> - </layout> - </widget> - </item> - <item> - <spacer name="horizontalSpacer_3"> - <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 row="6" column="0" colspan="6"> - <layout class="QHBoxLayout" name="horizontalLayout_16"> - <property name="spacing"> - <number>16</number> - </property> - <item> - <widget class="FormWidget" name="labelName"> - <property name="label" stdset="0"> - <string>Name</string> - </property> - <property name="font"> - <font> - <pointsize>8</pointsize> - </font> - </property> - <property name="space"> - <number>2</number> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_18"> - <property name="spacing"> - <number>4</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="NameWidget" name="nameEdit"> - <property name="focusPolicy"> - <enum>Qt::ClickFocus</enum> + <item> + <widget class="QToolButton" name="doUnGroup"> + <property name="toolTip"> + <string>Ungroup the selected group</string> </property> - <property name="toolTip"> - <string>Name of selected object</string> - </property> </widget> </item> - </layout> - </widget> - </item> - <item> - <widget class="FormWidget" name="labelExport"> - <property name="label" stdset="0"> - <string>Export</string> - </property> - <property name="font"> - <font> - <pointsize>8</pointsize> - </font> - </property> - <property name="space"> - <number>2</number> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_15"> - <property name="spacing"> - <number>4</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="QToolButton" name="noPrint"> - <property name="toolTip"> - <string>Enable or disable exporting of the object</string> + </layout> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_3"> + <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 row="2" column="1"> + <widget class="ScrSpinBox" name="xposSpin"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>120</width> + <height>0</height> + </size> + </property> + <property name="toolTip"> + <string>Horizontal position of current basepoint</string> + </property> + </widget> + </item> + <item row="2" column="6"> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + <item row="3" column="4"> + <widget class="ScrSpinBox" name="heightSpin"> + <property name="minimumSize"> + <size> + <width>120</width> + <height>0</height> + </size> + </property> + <property name="toolTip"> + <string>Height of current selection</string> + </property> + </widget> + </item> + <item row="6" column="3"> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + <item row="4" column="1" colspan="5"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="spacing"> + <number>16</number> + </property> + <item> + <widget class="FormWidget" name="labelRotation"> + <property name="label" stdset="0"> + <string>&Rotation</string> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <property name="space"> + <number>2</number> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_6"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="ScrSpinBox" name="rotationSpin"> + <property name="toolTip"> + <string>Rotation of object at current basepoint</string> </property> - </widget> - </item> - </layout> - </widget> - </item> - </layout> - </item> - <item row="4" column="1" colspan="5"> - <layout class="QHBoxLayout" name="horizontalLayout"> - <property name="spacing"> - <number>16</number> - </property> - <item> - <widget class="FormWidget" name="labelRotation"> - <property name="label" stdset="0"> - <string>&Rotation</string> - </property> - <property name="font"> - <font> - <pointsize>8</pointsize> - </font> - </property> - <property name="space"> - <number>2</number> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_6"> - <property name="spacing"> - <number>4</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="ScrSpinBox" name="rotationSpin"> - <property name="toolTip"> - <string>Rotation of object at current basepoint</string> + <property name="wrapping"> + <bool>true</bool> </property> - <property name="wrapping"> - <bool>true</bool> - </property> </widget> </item> - <item> - <widget class="QToolButton" name="rotateCCW"> + <item> + <widget class="QToolButton" name="rotateCCW"> <property name="toolTip"> - <string>Rotate the selection anti-clockwise by 90º</string> + <string>Rotate the selection anti-clockwise by 90º</string> </property> - <property name="text"> - <string/> - </property> + <property name="text"> + <string/> + </property> </widget> </item> - <item> - <widget class="QToolButton" name="rotateCW"> + <item> + <widget class="QToolButton" name="rotateCW"> <property name="toolTip"> - <string>Rotate the selection clockwise by 90º</string> + <string>Rotate the selection clockwise by 90º</string> </property> - <property name="text"> - <string/> + <property name="text"> + <string/> </property> </widget> </item> </layout> - </widget> - </item> + </widget> + </item> <item> - <widget class="FormWidget" name="labelLevel"> - <property name="label" stdset="0"> - <string>Level</string> + <widget class="FormWidget" name="labelLevel"> + <property name="label" stdset="0"> + <string>Level</string> </property> - <property name="font"> - <font> - <pointsize>8</pointsize> - </font> - </property> - <property name="space"> - <number>2</number> - </property> - <property name="labelVisibility"> - <bool>true</bool> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_5"> - <property name="spacing"> - <number>4</number> - </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <property name="space"> + <number>2</number> + </property> + <property name="labelVisibility"> + <bool>true</bool> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_5"> + <property name="spacing"> + <number>4</number> + </property> <property name="leftMargin"> - <number>0</number> + <number>0</number> </property> <property name="topMargin"> - <number>0</number> + <number>0</number> </property> <property name="rightMargin"> - <number>0</number> + <number>0</number> </property> <property name="bottomMargin"> - <number>0</number> + <number>0</number> </property> - <item> - <widget class="QToolButton" name="levelTop"> + <item> + <widget class="QToolButton" name="levelTop"> <property name="toolTip"> - <string>Move to front</string> + <string>Move to front</string> </property> </widget> </item> - <item> - <widget class="QToolButton" name="levelUp"> + <item> + <widget class="QToolButton" name="levelUp"> <property name="toolTip"> - <string>Move one level up</string> + <string>Move one level up</string> </property> </widget> </item> - <item> - <widget class="QToolButton" name="levelDown"> + <item> + <widget class="QToolButton" name="levelDown"> <property name="toolTip"> - <string>Move one level down</string> + <string>Move one level down</string> </property> </widget> </item> - <item> - <widget class="QToolButton" name="levelBottom"> + <item> + <widget class="QToolButton" name="levelBottom"> <property name="toolTip"> - <string>Move to back</string> + <string>Move to back</string> </property> </widget> </item> - <item> - <widget class="QLabel" name="levelLabel"> - <property name="minimumSize"> - <size> - <width>24</width> - <height>0</height> - </size> - </property> + <item> + <widget class="QLabel" name="levelLabel"> + <property name="minimumSize"> + <size> + <width>24</width> + <height>0</height> + </size> + </property> <property name="toolTip"> - <string>Indicates the level the object is on, 1 means the object is at the bottom</string> + <string>Indicates the level the object is on, 1 means the object is at the bottom</string> </property> - <property name="text"> - <string>0</string> + <property name="text"> + <string>0</string> </property> </widget> </item> @@ -672,14 +589,14 @@ </widget> </item> <item> - <spacer name="horizontalSpacer_6"> + <spacer name="horizontalSpacer_6"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> - <width>0</width> - <height>0</height> + <width>0</width> + <height>0</height> </size> </property> </spacer> @@ -686,59 +603,30 @@ </item> </layout> </item> - <item row="4" column="0"> - <widget class="FormWidget" name="formWidget"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> + <item row="6" column="0"> + <spacer name="horizontalSpacer_5"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> </property> - <property name="label" stdset="0"> - <string/> + <property name="sizeType"> + <enum>QSizePolicy::Fixed</enum> </property> - <property name="font"> - <font> - <pointsize>8</pointsize> - </font> - </property> - <property name="preserveLabelSpace"> - <bool>true</bool> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_3"> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="QLabel" name="labelZ"> - <property name="text"> - <string>Z:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - </widget> - </item> - </layout> - </widget> + <property name="sizeHint" stdset="0"> + <size> + <width>24</width> + <height>0</height> + </size> + </property> + </spacer> </item> </layout> </widget> <customwidgets> <customwidget> - <class>FormWidget</class> - <extends>QWidget</extends> - <header>ui/widgets/form_widget.h</header> - <container>1</container> + <class>FormWidget</class> + <extends>QWidget</extends> + <header>ui/widgets/form_widget.h</header> + <container>1</container> </customwidget> <customwidget> <class>ScrSpinBox</class> @@ -746,44 +634,38 @@ <header>ui/scrspinbox.h</header> </customwidget> <customwidget> + <class>LinkButton</class> + <extends>QToolButton</extends> + <header>ui/linkbutton.h</header> + </customwidget> + <customwidget> <class>BasePointWidget</class> <extends>QWidget</extends> <header>ui/basepointwidget.h</header> <container>1</container> </customwidget> - <customwidget> - <class>NameWidget</class> - <extends>QLineEdit</extends> - <header>ui/propertiespalette_utils.h</header> - </customwidget> - <customwidget> - <class>LinkButton</class> - <extends>QToolButton</extends> - <header>ui/linkbutton.h</header> - </customwidget> </customwidgets> - <tabstops> - <tabstop>xposSpin</tabstop> - <tabstop>yposSpin</tabstop> - <tabstop>widthSpin</tabstop> - <tabstop>heightSpin</tabstop> - <tabstop>keepFrameWHRatioButton</tabstop> - <tabstop>buttonLineBasePoint</tabstop> - <tabstop>rotationSpin</tabstop> - <tabstop>rotateCCW</tabstop> - <tabstop>rotateCW</tabstop> - <tabstop>levelTop</tabstop> - <tabstop>levelUp</tabstop> - <tabstop>levelDown</tabstop> - <tabstop>levelBottom</tabstop> - <tabstop>flipH</tabstop> - <tabstop>flipV</tabstop> - <tabstop>doLock</tabstop> - <tabstop>noResize</tabstop> - <tabstop>doGroup</tabstop> - <tabstop>doUnGroup</tabstop> - <tabstop>noPrint</tabstop> - </tabstops> + <tabstops> + <tabstop>xposSpin</tabstop> + <tabstop>yposSpin</tabstop> + <tabstop>widthSpin</tabstop> + <tabstop>heightSpin</tabstop> + <tabstop>keepFrameWHRatioButton</tabstop> + <tabstop>buttonLineBasePoint</tabstop> + <tabstop>rotationSpin</tabstop> + <tabstop>rotateCCW</tabstop> + <tabstop>rotateCW</tabstop> + <tabstop>levelTop</tabstop> + <tabstop>levelUp</tabstop> + <tabstop>levelDown</tabstop> + <tabstop>levelBottom</tabstop> + <tabstop>flipH</tabstop> + <tabstop>flipV</tabstop> + <tabstop>doLock</tabstop> + <tabstop>noResize</tabstop> + <tabstop>doGroup</tabstop> + <tabstop>doUnGroup</tabstop> + </tabstops> <resources/> <connections/> </ui> Index: scribus/ui/scrspinbox.cpp =================================================================== --- scribus/ui/scrspinbox.cpp (Revision 26070) +++ scribus/ui/scrspinbox.cpp (Arbeitskopie) @@ -28,11 +28,11 @@ ScrSpinBox::ScrSpinBox(QWidget *parent, int unitIndex) : QDoubleSpinBox(parent) { init(unitIndex); + setFocusPolicy(Qt::StrongFocus); } -ScrSpinBox::ScrSpinBox(double minValue, double maxValue, QWidget *pa, int unitIndex) : QDoubleSpinBox(pa) +ScrSpinBox::ScrSpinBox(double minValue, double maxValue, QWidget *pa, int unitIndex) : ScrSpinBox(pa, unitIndex) { - init(unitIndex); setMinimum(minValue); setMaximum(maxValue); } @@ -90,9 +90,11 @@ else angle = std::clamp(angle, minimum(), maximum()); setValue(angle); +// lineEdit()->deselect(); return; } QDoubleSpinBox::stepBy(steps); +// lineEdit()->deselect(); } void ScrSpinBox::setParameters( int s ) @@ -335,9 +337,9 @@ if (event->type() == QEvent::Wheel) { - //If read only don't spin - if (isReadOnly()) - return false; + // If read only don't spin OR avoid value changes if widget has no focus + if (isReadOnly() || !hasFocus()) + return true; auto* wheelEvent = dynamic_cast<QWheelEvent*>(event); bool shiftB = wheelEvent->modifiers() & Qt::ShiftModifier; bool altB = wheelEvent->modifiers() & Qt::AltModifier; Index: scribus/ui/transparencypalette.cpp =================================================================== --- scribus/ui/transparencypalette.cpp (Revision 26070) +++ scribus/ui/transparencypalette.cpp (nicht existent) @@ -1,535 +0,0 @@ -/* -For general Scribus (>=1.3.2) copyright and licensing information please refer -to the COPYING file provided with the program. Following this notice may exist -a copyright and/or license notice that predates the release of Scribus 1.3.2 -for which a new license (GPL+exception) is in place. -*/ -/*************************************************************************** - transparencypalette.cpp - description - ------------------- - begin : Tue Nov 17 2009 - copyright : (C) 2009 by Franz Schmid - email : Franz.Schmid@altmuehlnet.de - ***************************************************************************/ - -/*************************************************************************** - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ - -#include "transparencypalette.h" -#include "sccolorengine.h" -#include "scpainter.h" -#include "scpattern.h" -#include "scribus.h" -#include "iconmanager.h" -#include "util.h" - - -TransparencyPalette::TransparencyPalette(QWidget* parent) : QWidget(parent) -{ - TGradDia = new GradientVectorDialog(this->parentWidget()); - TGradDia->hide(); - setupUi(this); - fillOpacity->setDecimals(0); - - connect(fillOpacity, SIGNAL(valueChanged(double)), this, SLOT(slotTransF(double))); - connect(blendModeFill, SIGNAL(activated(int)), this, SIGNAL(NewBlend(int))); - connect(namedGradient, SIGNAL(textActivated(QString)), this, SLOT(setNamedGradient(QString))); - connect(gradEdit, SIGNAL(gradientChanged()), this, SIGNAL(gradientChanged())); - connect(gradEditButton, SIGNAL(clicked()), this, SLOT(editGradientVector())); - connect(TGradDia, SIGNAL(NewSpecial(double,double,double,double,double,double,double,double,double,double)), this, SIGNAL(NewSpecial(double,double,double,double,double,double,double,double,double,double))); - connect(TGradDia, SIGNAL(paletteShown(bool)), this, SLOT(setActiveGradDia(bool))); - connect(gradientType, SIGNAL(activated(int)), this, SLOT(slotGradType(int))); - connect(tabWidget, SIGNAL(currentChanged(int)), this, SLOT(slotGrad(int))); - connect(patternBox, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(selectPattern(QListWidgetItem*))); - connect(editPatternProps, SIGNAL(clicked()), this, SLOT(changePatternProps())); - connect(transpCalcGradient, SIGNAL(clicked()), this, SLOT(switchGradientMode())); - connect(transpCalcPattern, SIGNAL(clicked()), this, SLOT(switchPatternMode())); - connect(usePatternInverted, SIGNAL(clicked()), this, SLOT(switchPatternMode())); -} - -void TransparencyPalette::connectSignals() -{ - connect(gradEdit, SIGNAL(gradientChanged()), this, SIGNAL(gradientChanged())); - connect(namedGradient, SIGNAL(textActivated(QString)), this, SLOT(setNamedGradient(QString))); - connect(tabWidget, SIGNAL(currentChanged(int)), this, SLOT(slotGrad(int))); - connect(gradientType, SIGNAL(activated(int)), this, SLOT(slotGradType(int))); - connect(transpCalcGradient, SIGNAL(clicked()), this, SLOT(switchGradientMode())); - connect(transpCalcPattern, SIGNAL(clicked()), this, SLOT(switchPatternMode())); - connect(usePatternInverted, SIGNAL(clicked()), this, SLOT(switchPatternMode())); -} - -void TransparencyPalette::disconnectSignals() -{ - disconnect(gradEdit, SIGNAL(gradientChanged()), this, SIGNAL(gradientChanged())); - disconnect(namedGradient, SIGNAL(textActivated(QString)), this, SLOT(setNamedGradient(QString))); - disconnect(tabWidget, SIGNAL(currentChanged(int)), this, SLOT(slotGrad(int))); - disconnect(gradientType, SIGNAL(activated(int)), this, SLOT(slotGradType(int))); - disconnect(transpCalcGradient, SIGNAL(clicked()), this, SLOT(switchGradientMode())); - disconnect(transpCalcPattern, SIGNAL(clicked()), this, SLOT(switchPatternMode())); - disconnect(usePatternInverted, SIGNAL(clicked()), this, SLOT(switchPatternMode())); -} - -void TransparencyPalette::setCurrentItem(PageItem* item) -{ - currentItem = item; - disconnectSignals(); - - if (!currentItem || !currentDoc) - return; - - setActTrans(currentItem->fillTransparency()); - setActBlend(currentItem->fillBlendmode()); - gradEdit->setGradient(currentItem->mask_gradient); - if (!currentItem->gradientMask().isEmpty()) - { - setCurrentComboItem(namedGradient, currentItem->gradientMask()); - gradEdit->setGradientEditable(false); - } - else - { - namedGradient->setCurrentIndex(0); - gradEdit->setGradientEditable(true); - } - if (currentItem->maskType() == 0) - tabWidget->setCurrentIndex(0); - else if ((currentItem->maskType() == 1) || (currentItem->maskType() == 2) || (currentItem->maskType() == 4) || (currentItem->maskType() == 5)) - tabWidget->setCurrentIndex(1); - else - tabWidget->setCurrentIndex(2); - if (patternList->isEmpty()) - tabWidget->setTabEnabled(2, false); - else - tabWidget->setTabEnabled(2, true); - transpCalcGradient->setChecked(false); - transpCalcPattern->setChecked(false); - usePatternInverted->setChecked(false); - if ((currentItem->maskType() == 4) || (currentItem->maskType() == 5)) - transpCalcGradient->setChecked(true); - if ((currentItem->maskType() == 6) || (currentItem->maskType() == 7)) - transpCalcPattern->setChecked(true); - if ((currentItem->maskType() == 7) || (currentItem->maskType() == 8)) - usePatternInverted->setChecked(true); - if ((currentItem->maskType() == 1) || (currentItem->maskType() == 4)) - gradientType->setCurrentIndex(0); - else if ((currentItem->maskType() == 2) || (currentItem->maskType() == 5)) - gradientType->setCurrentIndex(1); - if(TGradDia && gradEditButton->isChecked()) - TGradDia->setValues(currentItem->GrMaskStartX, currentItem->GrMaskStartY, currentItem->GrMaskEndX, currentItem->GrMaskEndY, currentItem->GrMaskFocalX, currentItem->GrMaskFocalY, currentItem->GrMaskScale, currentItem->GrMaskSkew, 0, 0); - - bool mirrorX, mirrorY; - const ScMaskTransform& maskTrans = currentItem->maskTransform(); - currentItem->maskFlip(mirrorX, mirrorY); - setCurrentMaskPattern(currentItem->patternMask(), maskTrans, mirrorX, mirrorY); - - connectSignals(); -} - -void TransparencyPalette::setDocument(ScribusDoc* doc) -{ - this->disconnect(SIGNAL(NewTrans(double))); - this->disconnect(SIGNAL(NewGradient(int))); - this->disconnect(SIGNAL(NewBlend(int))); - this->disconnect(SIGNAL(NewPattern(QString))); - this->disconnect(SIGNAL(NewPatternProps(double,double,double,double,double,double,double,bool,bool))); - - if (currentDoc) - { - disconnect(currentDoc->scMW(), SIGNAL(UpdateRequest(int)), this, nullptr); - } - - currentDoc = doc; - - if (doc != nullptr) - { - gradEdit->setColors(doc->PageColors); - currentUnit = doc->unitIndex(); - - updateColorList(); - - connect(this, SIGNAL(NewTrans(double)), doc, SLOT(itemSelection_SetItemFillTransparency(double))); - connect(this, SIGNAL(NewBlend(int)), doc, SLOT(itemSelection_SetItemFillBlend(int))); - connect(this, SIGNAL(NewGradient(int)), doc, SLOT(itemSelection_SetItemGradMask(int))); - connect(this, SIGNAL(NewPattern(QString)), doc, SLOT(itemSelection_SetItemPatternMask(QString))); - connect(this, SIGNAL(NewPatternProps(double,double,double,double,double,double,double,bool,bool)), doc, SLOT(itemSelection_SetItemPatternMaskProps(double,double,double,double,double,double,double,bool,bool))); - connect(doc->scMW(), SIGNAL(UpdateRequest(int)), this, SLOT(handleUpdateRequest(int))); - } -} - -void TransparencyPalette::handleUpdateRequest(int updateFlags) -{ - if (updateFlags & reqColorsUpdate) - updateColorList(); -} - -void TransparencyPalette::updateColorList() -{ - if (!currentDoc) - return; - - if (currentItem) - disconnectSignals(); - - this->setColors(currentDoc->PageColors); - this->setPatterns(¤tDoc->docPatterns); - this->setGradients(¤tDoc->docGradients); - - if (currentItem) - setCurrentItem(currentItem); -} - -void TransparencyPalette::updateCList() -{ - gradEdit->setColors(colorList); -} - -void TransparencyPalette::updateGradientList() -{ - disconnect(namedGradient, SIGNAL(textActivated(QString)), this, SLOT(setNamedGradient(QString))); - namedGradient->clear(); - namedGradient->setIconSize(QSize(48, 12)); - namedGradient->addItem( tr("Custom")); - QStringList patK = gradientList->keys(); - patK.sort(); - for (int i = 0; i < patK.count(); i++) - { - VGradient gr = gradientList->value(patK[i]); - QImage pixm(48, 12, QImage::Format_ARGB32_Premultiplied); - QPainter pb; - QBrush b(QColor(205,205,205), IconManager::instance().loadPixmap("testfill.png")); - pb.begin(&pixm); - pb.fillRect(0, 0, 48, 12, b); - pb.end(); - ScPainter *p = new ScPainter(&pixm, 48, 12); - p->setPen(Qt::black, 1, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); - p->setFillMode(ScPainter::Gradient); - p->fill_gradient = gr; - p->setGradient(VGradient::linear, FPoint(0,6), FPoint(48, 6), FPoint(0,0), 1, 0); - p->drawRect(0, 0, 48, 12); - p->end(); - delete p; - QPixmap pm; - pm = QPixmap::fromImage(pixm); - namedGradient->addItem(pm, patK[i]); - } - connect(namedGradient, SIGNAL(textActivated(QString)), this, SLOT(setNamedGradient(QString))); -} - -void TransparencyPalette::setGradients(QHash<QString, VGradient> *docGradients) -{ - gradientList = docGradients; - updateGradientList(); -} - -void TransparencyPalette::setColors(const ColorList& newColorList) -{ - colorList.clear(); - colorList = newColorList; - updateCList(); -} - -void TransparencyPalette::slotGrad(int number) -{ - if (number == 1) - { - disconnect(namedGradient, SIGNAL(textActivated(QString)), this, SLOT(setNamedGradient(QString))); - if (!currentItem->gradientMask().isEmpty()) - { - setCurrentComboItem(namedGradient, currentItem->gradientMask()); - gradEdit->setGradient(gradientList->value(currentItem->gradientMask())); - gradEdit->setGradientEditable(false); - } - else - { - namedGradient->setCurrentIndex(0); - gradEdit->setGradient(currentItem->mask_gradient); - gradEdit->setGradientEditable(true); - } - if (gradientType->currentIndex() == 0) - { - if (transpCalcGradient->isChecked()) - emit NewGradient(GradMask_LinearLumAlpha); - else - emit NewGradient(GradMask_Linear); - } - else - { - if (transpCalcGradient->isChecked()) - emit NewGradient(GradMask_RadialLumAlpha); - else - emit NewGradient(GradMask_Radial); - } - connect(namedGradient, SIGNAL(textActivated(QString)), this, SLOT(setNamedGradient(QString))); - } - else if (number == 2) - { - if (transpCalcPattern->isChecked()) - { - if (usePatternInverted->isChecked()) - emit NewGradient(GradMask_PatternLumAlphaInverted); - else - emit NewGradient(GradMask_PatternLumAlpha); - } - else - { - if (usePatternInverted->isChecked()) - emit NewGradient(GradMask_PatternInverted); - else - emit NewGradient(GradMask_Pattern); - } - } - else - emit NewGradient(GradMask_None); -} - -void TransparencyPalette::slotGradType(int type) -{ - if (type == 0) - { - if (transpCalcGradient->isChecked()) - emit NewGradient(GradMask_LinearLumAlpha); - else - emit NewGradient(GradMask_Linear); - } - else - { - if (transpCalcGradient->isChecked()) - emit NewGradient(GradMask_RadialLumAlpha); - else - emit NewGradient(GradMask_Radial); - } -} - -void TransparencyPalette::setNamedGradient(const QString &name) -{ - if (namedGradient->currentIndex() == 0) - { - gradEdit->setGradient(currentItem->mask_gradient); - currentItem->setGradientMask(""); - gradEdit->setGradientEditable(true); - } - else - { - gradEdit->setGradient(gradientList->value(name)); - gradEdit->setGradientEditable(false); - currentItem->setGradientMask(name); - } - if (gradientType->currentIndex() == 0) - { - if (transpCalcGradient->isChecked()) - emit NewGradient(GradMask_LinearLumAlpha); - else - emit NewGradient(GradMask_Linear); - } - else - { - if (transpCalcGradient->isChecked()) - emit NewGradient(GradMask_RadialLumAlpha); - else - emit NewGradient(GradMask_Radial); - } -} - -void TransparencyPalette::switchGradientMode() -{ - if (gradientType->currentIndex() == 0) - { - if (transpCalcGradient->isChecked()) - emit NewGradient(GradMask_LinearLumAlpha); - else - emit NewGradient(GradMask_Linear); - } - else - { - if (transpCalcGradient->isChecked()) - emit NewGradient(GradMask_RadialLumAlpha); - else - emit NewGradient(GradMask_Radial); - } -} - -void TransparencyPalette::switchPatternMode() -{ - if (transpCalcPattern->isChecked()) - { - if (usePatternInverted->isChecked()) - emit NewGradient(GradMask_PatternLumAlphaInverted); - else - emit NewGradient(GradMask_PatternLumAlpha); - } - else - { - if (usePatternInverted->isChecked()) - emit NewGradient(GradMask_PatternInverted); - else - emit NewGradient(GradMask_Pattern); - } -} - -void TransparencyPalette::editGradientVector() -{ - if (gradEditButton->isChecked()) - { - TGradDia->unitChange(currentDoc->unitIndex()); - TGradDia->setValues(currentItem->GrMaskStartX, currentItem->GrMaskStartY, currentItem->GrMaskEndX, currentItem->GrMaskEndY, currentItem->GrMaskFocalX, currentItem->GrMaskFocalY, currentItem->GrMaskScale, currentItem->GrMaskSkew, 0, 0); - if ((currentItem->GrMask == GradMask_Linear) || (currentItem->GrMask == GradMask_LinearLumAlpha)) - TGradDia->selectLinear(); - else - TGradDia->selectRadial(); - TGradDia->show(); - } - else - { - TGradDia->hide(); - } - emit editGradient(); -} - -void TransparencyPalette::setActiveGradDia(bool active) -{ - if (!active) - { - gradEditButton->setChecked(false); - emit editGradient(); - } -} - -void TransparencyPalette::setSpecialGradient(double x1, double y1, double x2, double y2, double fx, double fy, double sg, double sk) -{ - if (TGradDia) - TGradDia->setValues(x1, y1, x2, y2, fx, fy, sg, sk, 0, 0); -} - -void TransparencyPalette::hideEditedPatterns(QStringList names) -{ - for (int a = 0; a < names.count(); a++) - { - QList<QListWidgetItem*> items = patternBox->findItems(names[a], Qt::MatchExactly); - if (items.count() > 0) - items[0]->setHidden(true); - } -} - -void TransparencyPalette::updatePatternList() -{ - disconnect(patternBox, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(selectPattern(QListWidgetItem*))); - patternBox->clear(); - patternBox->setIconSize(QSize(48, 48)); - QStringList patK = patternList->keys(); - patK.sort(); - for (int a = 0; a < patK.count(); a++) - { - ScPattern sp = patternList->value(patK[a]); - QPixmap pm; - if (sp.getPattern()->width() >= sp.getPattern()->height()) - pm = QPixmap::fromImage(sp.getPattern()->scaledToWidth(48, Qt::SmoothTransformation)); - else - pm = QPixmap::fromImage(sp.getPattern()->scaledToHeight(48, Qt::SmoothTransformation)); - QPixmap pm2(48, 48); - pm2.fill(palette().color(QPalette::Base)); - QPainter p; - p.begin(&pm2); - p.drawPixmap(24 - pm.width() / 2, 24 - pm.height() / 2, pm); - p.end(); - QListWidgetItem *item = new QListWidgetItem(pm2, patK[a], patternBox); - item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); - } - patternBox->clearSelection(); - connect(patternBox, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(selectPattern(QListWidgetItem*))); -} - -void TransparencyPalette::setPatterns(QHash<QString, ScPattern> *docPatterns) -{ - patternList = docPatterns; - updatePatternList(); -} - -void TransparencyPalette::selectPattern(QListWidgetItem *c) -{ - if (c == nullptr) - return; - emit NewPattern(c->text()); -} - -void TransparencyPalette::setCurrentMaskPattern(const QString& pattern, const ScMaskTransform& maskTrans, bool mirrorX, bool mirrorY) -{ - disconnect(patternBox, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(selectPattern(QListWidgetItem*))); - QList<QListWidgetItem*> itl = patternBox->findItems(pattern, Qt::MatchExactly); - if (itl.count() != 0) - { - QListWidgetItem *it = itl[0]; - patternBox->setCurrentItem(it); - } - else - patternBox->clearSelection(); - m_maskTransform = maskTrans; - m_Pattern_mirrorX = mirrorX; - m_Pattern_mirrorY = mirrorY; - connect(patternBox, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(selectPattern(QListWidgetItem*))); -} - -void TransparencyPalette::changePatternProps() -{ - PatternPropsDialog *dia = new PatternPropsDialog(this, currentUnit, false); - dia->spinXscaling->setValue(m_maskTransform.scaleX * 100.0); - dia->spinYscaling->setValue(m_maskTransform.scaleY * 100.0); - if (m_maskTransform.scaleX == m_maskTransform.scaleY) - dia->keepScaleRatio->setChecked(true); - dia->spinXoffset->setValue(m_maskTransform.offsetX); - dia->spinYoffset->setValue(m_maskTransform.offsetY); - dia->spinAngle->setValue(m_maskTransform.rotation); - double asina = atan(m_maskTransform.skewX); - dia->spinXSkew->setValue(asina / (M_PI / 180.0)); - double asinb = atan(m_maskTransform.skewY); - dia->spinYSkew->setValue(asinb / (M_PI / 180.0)); - dia->FlipH->setChecked(m_Pattern_mirrorX); - dia->FlipV->setChecked(m_Pattern_mirrorY); - connect(dia, SIGNAL(NewPatternProps(double,double,double,double,double,double,double,bool,bool)), this, SIGNAL(NewPatternProps(double,double,double,double,double,double,double,bool,bool))); - dia->exec(); - m_maskTransform.scaleX = dia->spinXscaling->value() / 100.0; - m_maskTransform.scaleY = dia->spinYscaling->value() / 100.0; - m_maskTransform.offsetX = dia->spinXoffset->value(); - m_maskTransform.offsetY = dia->spinYoffset->value(); - m_maskTransform.rotation = dia->spinAngle->value(); - double a = M_PI / 180.0 * dia->spinXSkew->value(); - double b = M_PI / 180.0 * dia->spinYSkew->value(); - double sina = tan(a); - double sinb = tan(b); - m_maskTransform.skewX = sina; - m_maskTransform.skewY = sinb; - m_Pattern_mirrorX = dia->FlipH->isChecked(); - m_Pattern_mirrorY = dia->FlipV->isChecked(); - delete dia; -} - -void TransparencyPalette::setActTrans(double val) -{ - disconnect(fillOpacity, SIGNAL(valueChanged(double)), this, SLOT(slotTransF(double))); - fillOpacity->setValue(qRound(100 - (val * 100))); - connect(fillOpacity, SIGNAL(valueChanged(double)), this, SLOT(slotTransF(double))); -} - -void TransparencyPalette::setActBlend(int val) -{ - disconnect(blendModeFill, SIGNAL(activated(int)), this, SIGNAL(NewBlend(int))); - blendModeFill->setCurrentIndex(val); - connect(blendModeFill, SIGNAL(activated(int)), this, SIGNAL(NewBlend(int))); -} - -void TransparencyPalette::slotTransF(double val) -{ - emit NewTrans((100 - val) / 100.0); -} - -void TransparencyPalette::unitChange(double, double, int unitIndex) -{ - if (TGradDia) - TGradDia->unitChange(unitIndex); - currentUnit = unitIndex; -} - Index: scribus/ui/transparencypalette.h =================================================================== --- scribus/ui/transparencypalette.h (Revision 26070) +++ scribus/ui/transparencypalette.h (nicht existent) @@ -1,120 +0,0 @@ -/* -For general Scribus (>=1.3.2) copyright and licensing information please refer -to the COPYING file provided with the program. Following this notice may exist -a copyright and/or license notice that predates the release of Scribus 1.3.2 -for which a new license (GPL+exception) is in place. -*/ -/*************************************************************************** - transparencypalette.h - description - ------------------- - begin : Tue Nov 17 2009 - copyright : (C) 2009 by Franz Schmid - email : Franz.Schmid@altmuehlnet.de - ***************************************************************************/ - -/*************************************************************************** - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ - -#ifndef TRANSPARENCYPALETTE_H -#define TRANSPARENCYPALETTE_H - -#include <QPointer> -#include <QGroupBox> -#include <QPushButton> -#include <QToolButton> -#include <QWidget> - -#include "scribusapi.h" -#include "gradienteditor.h" -#include "scribusdoc.h" -#include "ui/scrpalettebase.h" -#include "ui_transparencypalette.h" -#include "ui/gradientvectordialog.h" -#include "ui/patternpropsdialog.h" - -class ColorListBox; -class LinkButton; -class PageItem; -class ScrSpinBox; -class ScPattern; - -/** - *@author Franz Schmid - */ - -class SCRIBUS_API TransparencyPalette : public QWidget, Ui::transparencyPalette -{ - Q_OBJECT - - friend class PropertiesPalette; - friend class PropertiesPalette_Group; - -public: - TransparencyPalette(QWidget* parent); - ~TransparencyPalette() = default; - - void setDocument(ScribusDoc* doc); - void setCurrentItem(PageItem* item); - - void updateColorList(); - - void setColors(const ColorList& newColorList); - void setGradients(QHash<QString, VGradient> *docGradients); - void setPatterns(QHash<QString, ScPattern> *docPatterns); - - void setCurrentMaskPattern(const QString& pattern, const ScMaskTransform& maskTrans, bool mirrorX, bool mirrorY); - void setSpecialGradient(double x1, double y1, double x2, double y2, double fx, double fy, double sg, double sk); - -public slots: - void handleUpdateRequest(int); - - void slotGrad(int number); - void slotGradType(int type); - void setNamedGradient(const QString &name); - void switchGradientMode(); - void switchPatternMode(); - void editGradientVector(); - void setActiveGradDia(bool active); - void hideEditedPatterns(QStringList names); - void selectPattern(QListWidgetItem *c); - void changePatternProps(); - void setActTrans(double); - void setActBlend(int); - void slotTransF(double val); - void unitChange(double, double, int unitIndex); - -signals: - void NewTrans(double); - void NewBlend(int); - void gradientChanged(); - void editGradient(); - void NewGradient(int); - void NewSpecial(double, double, double, double, double, double, double, double, double, double); - void NewPattern(QString); - void NewPatternProps(double, double, double, double, double, double, double, bool, bool); - -protected: - GradientVectorDialog* TGradDia {nullptr}; - QPointer<ScribusDoc> currentDoc; - PageItem* currentItem {nullptr}; - ColorList colorList; - int currentUnit {0}; - QHash<QString, ScPattern> *patternList {nullptr}; - QHash<QString, VGradient> *gradientList {nullptr}; - ScMaskTransform m_maskTransform; - bool m_Pattern_mirrorX {false}; - bool m_Pattern_mirrorY {false}; - - void connectSignals(); - void disconnectSignals(); - void updateCList(); - void updateGradientList(); - void updatePatternList(); -}; -#endif Index: scribus/ui/transparencypalette.ui =================================================================== --- scribus/ui/transparencypalette.ui (Revision 26070) +++ scribus/ui/transparencypalette.ui (nicht existent) @@ -1,418 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>transparencyPalette</class> - <widget class="QWidget" name="transparencyPalette"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>236</width> - <height>379</height> - </rect> - </property> - <layout class="QVBoxLayout" name="verticalLayout_6"> - <property name="spacing"> - <number>3</number> - </property> - <property name="leftMargin"> - <number>3</number> - </property> - <property name="topMargin"> - <number>3</number> - </property> - <property name="rightMargin"> - <number>3</number> - </property> - <property name="bottomMargin"> - <number>3</number> - </property> - <item> - <widget class="QStackedWidget" name="stackedWidget"> - <property name="currentIndex"> - <number>0</number> - </property> - <widget class="QWidget" name="page_2"> - <layout class="QVBoxLayout" name="verticalLayout_3"> - <property name="spacing"> - <number>3</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="QTabWidget" name="tabWidget"> - <property name="currentIndex"> - <number>0</number> - </property> - <widget class="QWidget" name="tabSolid"> - <attribute name="title"> - <string>Solid</string> - </attribute> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <property name="spacing"> - <number>3</number> - </property> - <property name="leftMargin"> - <number>3</number> - </property> - <property name="topMargin"> - <number>3</number> - </property> - <property name="rightMargin"> - <number>3</number> - </property> - <property name="bottomMargin"> - <number>3</number> - </property> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_4"> - <property name="spacing"> - <number>3</number> - </property> - <item> - <widget class="QLabel" name="label_4"> - <property name="text"> - <string>Opacity:</string> - </property> - </widget> - </item> - <item> - <widget class="ScrSpinBox" name="fillOpacity"> - <property name="toolTip"> - <string>Set the transparency for the color selected</string> - </property> - <property name="suffix"> - <string> %</string> - </property> - <property name="maximum"> - <double>100.000000000000000</double> - </property> - <property name="singleStep"> - <double>10.000000000000000</double> - </property> - <property name="value"> - <double>100.000000000000000</double> - </property> - </widget> - </item> - </layout> - </item> - <item> - <spacer name="verticalSpacer_2"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>195</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - <widget class="QWidget" name="tabGradient"> - <attribute name="title"> - <string>Gradient</string> - </attribute> - <layout class="QVBoxLayout" name="verticalLayout_4"> - <property name="spacing"> - <number>3</number> - </property> - <property name="leftMargin"> - <number>3</number> - </property> - <property name="topMargin"> - <number>3</number> - </property> - <property name="rightMargin"> - <number>3</number> - </property> - <property name="bottomMargin"> - <number>3</number> - </property> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_3"> - <property name="spacing"> - <number>3</number> - </property> - <item> - <widget class="QComboBox" name="gradientType"> - <item> - <property name="text"> - <string>Linear</string> - </property> - </item> - <item> - <property name="text"> - <string>Radial</string> - </property> - </item> - </widget> - </item> - <item> - <widget class="QToolButton" name="gradEditButton"> - <property name="toolTip"> - <string>Move the start of the gradient vector with the left mouse button pressed and move the end of the gradient vector with the right mouse button pressed</string> - </property> - <property name="text"> - <string>Move Vector</string> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - </widget> - </item> - </layout> - </item> - <item> - <widget class="GradientEditor" name="gradEdit"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>200</width> - <height>173</height> - </size> - </property> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="namedGradient"/> - </item> - <item> - <widget class="QCheckBox" name="transpCalcGradient"> - <property name="text"> - <string>Use Luminosity as Alpha</string> - </property> - </widget> - </item> - </layout> - </widget> - <widget class="QWidget" name="tabPattern"> - <attribute name="title"> - <string>Pattern</string> - </attribute> - <layout class="QVBoxLayout" name="verticalLayout"> - <property name="spacing"> - <number>3</number> - </property> - <property name="leftMargin"> - <number>3</number> - </property> - <property name="topMargin"> - <number>3</number> - </property> - <property name="rightMargin"> - <number>3</number> - </property> - <property name="bottomMargin"> - <number>3</number> - </property> - <item> - <widget class="QListWidget" name="patternBox"> - <property name="movement"> - <enum>QListView::Snap</enum> - </property> - <property name="flow"> - <enum>QListView::LeftToRight</enum> - </property> - <property name="isWrapping" stdset="0"> - <bool>true</bool> - </property> - <property name="resizeMode"> - <enum>QListView::Adjust</enum> - </property> - <property name="viewMode"> - <enum>QListView::IconMode</enum> - </property> - <property name="wordWrap"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_2"> - <property name="spacing"> - <number>3</number> - </property> - <item> - <widget class="QToolButton" name="editPatternProps"> - <property name="text"> - <string>Properties...</string> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer_3"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </item> - <item> - <widget class="QCheckBox" name="transpCalcPattern"> - <property name="text"> - <string>Use Luminosity as Alpha</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="usePatternInverted"> - <property name="text"> - <string>Use inverted Pattern</string> - </property> - </widget> - </item> - </layout> - </widget> - </widget> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_5"> - <property name="spacing"> - <number>3</number> - </property> - <item> - <widget class="QLabel" name="label_5"> - <property name="text"> - <string>Blend Mode:</string> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="blendModeFill"> - <item> - <property name="text"> - <string>Normal</string> - </property> - </item> - <item> - <property name="text"> - <string>Darken</string> - </property> - </item> - <item> - <property name="text"> - <string>Lighten</string> - </property> - </item> - <item> - <property name="text"> - <string>Multiply</string> - </property> - </item> - <item> - <property name="text"> - <string>Screen</string> - </property> - </item> - <item> - <property name="text"> - <string>Overlay</string> - </property> - </item> - <item> - <property name="text"> - <string>Hard Light</string> - </property> - </item> - <item> - <property name="text"> - <string>Soft Light</string> - </property> - </item> - <item> - <property name="text"> - <string>Difference</string> - </property> - </item> - <item> - <property name="text"> |