FilmGrainTool::FilmGrainTool(QObject* const parent) : EditorToolThreaded(parent), d(new Private) { setObjectName("filmgrain"); setToolName(i18n("Film Grain")); setToolIcon(SmallIcon("filmgrain")); setInitPreview(true); d->previewWidget = new ImageRegionWidget; setToolView(d->previewWidget); setPreviewModeMask(PreviewToolBar::AllPreviewModes); // ------------------------------------------------------------- d->gboxSettings = new EditorToolSettings; d->gboxSettings->setButtons(EditorToolSettings::Default| EditorToolSettings::Ok| EditorToolSettings::Cancel| EditorToolSettings::Try); d->settingsView = new FilmGrainSettings(d->gboxSettings->plainPage()); setToolSettings(d->gboxSettings); // ------------------------------------------------------------- connect(d->settingsView, SIGNAL(signalSettingsChanged()), this, SLOT(slotTimer())); }
CharcoalTool::CharcoalTool(QObject* const parent) : EditorToolThreaded(parent), d(new Private) { setObjectName(QLatin1String("charcoal")); setToolName(i18n("Charcoal")); setToolIcon(QIcon::fromTheme(QLatin1String("charcoaltool"))); // ------------------------------------------------------------- d->gboxSettings = new EditorToolSettings; d->gboxSettings->setButtons(EditorToolSettings::Default| EditorToolSettings::Ok| EditorToolSettings::Cancel| EditorToolSettings::Try); d->previewWidget = new ImageRegionWidget; // ------------------------------------------------------------- QLabel* label1 = new QLabel(i18n("Pencil size:")); d->pencilInput = new DIntNumInput; d->pencilInput->setRange(1, 100, 1); d->pencilInput->setDefaultValue(5); d->pencilInput->setWhatsThis( i18n("Set here the charcoal pencil size used to simulate the drawing.")); // ------------------------------------------------------------- QLabel* label2 = new QLabel(i18nc("smoothing value of the pencil", "Smooth:")); d->smoothInput = new DIntNumInput; d->smoothInput->setRange(1, 100, 1); d->smoothInput->setDefaultValue(10); d->smoothInput->setWhatsThis( i18n("This value controls the smoothing effect of the pencil " "under the canvas.")); // ------------------------------------------------------------- const int spacing = d->gboxSettings->spacingHint(); QGridLayout* mainLayout = new QGridLayout; mainLayout->addWidget(label1, 0, 0, 1, 2); mainLayout->addWidget(d->pencilInput, 1, 0, 1, 2); mainLayout->addWidget(label2, 2, 0, 1, 2); mainLayout->addWidget(d->smoothInput, 3, 0, 1, 2); mainLayout->setRowStretch(4, 10); mainLayout->setContentsMargins(spacing, spacing, spacing, spacing); mainLayout->setSpacing(spacing); d->gboxSettings->plainPage()->setLayout(mainLayout); // ------------------------------------------------------------- setPreviewModeMask(PreviewToolBar::AllPreviewModes); setToolSettings(d->gboxSettings); setToolView(d->previewWidget); }
WhiteBalanceTool::WhiteBalanceTool(QObject* const parent) : EditorToolThreaded(parent), d(new Private) { setObjectName("whitebalance"); setToolName(i18n("White Balance")); setToolIcon(SmallIcon("whitebalance")); setInitPreview(true); // ------------------------------------------------------------- d->previewWidget = new ImageRegionWidget; setToolView(d->previewWidget); setPreviewModeMask(PreviewToolBar::AllPreviewModes); // ------------------------------------------------------------- d->gboxSettings = new EditorToolSettings; d->gboxSettings->setTools(EditorToolSettings::Histogram); d->gboxSettings->setHistogramType(LRGBC); d->gboxSettings->setButtons(EditorToolSettings::Default| EditorToolSettings::Load| EditorToolSettings::SaveAs| EditorToolSettings::Ok| EditorToolSettings::Cancel); // ------------------------------------------------------------- d->settingsView = new WBSettings(d->gboxSettings->plainPage()); setToolSettings(d->gboxSettings); // ------------------------------------------------------------- connect(d->settingsView, SIGNAL(signalSettingsChanged()), this, SLOT(slotTimer())); connect(d->settingsView, SIGNAL(signalAutoAdjustExposure()), this, SLOT(slotAutoAdjustExposure())); connect(d->settingsView, SIGNAL(signalPickerColorButtonActived()), this, SLOT(slotPickerColorButtonActived())); connect(d->previewWidget, SIGNAL(signalCapturedPointFromOriginal(Digikam::DColor,QPoint)), this, SLOT(slotColorSelectedFromOriginal(Digikam::DColor))); /* connect(d->previewWidget, SIGNAL(spotPositionChangedFromTarget(Digikam::DColor,QPoint)), this, SLOT(slotColorSelectedFromTarget(Digikam::DColor))); */ }
EmbossTool::EmbossTool(QObject* const parent) : EditorToolThreaded(parent), d(new Private) { setObjectName(QLatin1String("emboss")); setInitPreview(true); // ------------------------------------------------------------- d->gboxSettings = new EditorToolSettings(nullptr); d->previewWidget = new ImageRegionWidget; // ------------------------------------------------------------- QLabel* label1 = new QLabel(i18n("Depth:")); d->depthInput = new DIntNumInput; d->depthInput->setRange(10, 300, 1); d->depthInput->setDefaultValue(30); d->depthInput->setWhatsThis( i18n("Set here the depth of the embossing image effect.") ); // ------------------------------------------------------------- const int spacing = d->gboxSettings->spacingHint(); QGridLayout* mainLayout = new QGridLayout; mainLayout->addWidget(label1, 0, 0, 1, 2); mainLayout->addWidget(d->depthInput, 1, 0, 1, 2); mainLayout->setRowStretch(2, 10); mainLayout->setContentsMargins(spacing, spacing, spacing, spacing); mainLayout->setSpacing(spacing); d->gboxSettings->plainPage()->setLayout(mainLayout); // ------------------------------------------------------------- setToolSettings(d->gboxSettings); setToolView(d->previewWidget); setPreviewModeMask(PreviewToolBar::AllPreviewModes); // ------------------------------------------------------------- connect(d->depthInput, SIGNAL(valueChanged(int)), this, SLOT(slotTimer())); }
BCGTool::BCGTool(QObject* const parent) : EditorToolThreaded(parent), d(new Private) { setObjectName("bcgadjust"); setToolName(i18n("Brightness / Contrast / Gamma")); setToolVersion(1); setToolIcon(SmallIcon("contrast")); setToolHelp("bcgadjusttool.anchor"); setToolCategory(FilterAction::ReproducibleFilter); setInitPreview(true); d->previewWidget = new ImageRegionWidget; setToolView(d->previewWidget); setPreviewModeMask(PreviewToolBar::AllPreviewModes); // ------------------------------------------------------------- d->gboxSettings = new EditorToolSettings; d->gboxSettings->setTools(EditorToolSettings::Histogram); d->gboxSettings->setHistogramType(LRGBC); d->gboxSettings->setButtons(EditorToolSettings::Default| EditorToolSettings::Ok| EditorToolSettings::Cancel); // EditorToolSettings::Try); // ------------------------------------------------------------- d->settingsView = new BCGSettings(d->gboxSettings->plainPage()); setToolSettings(d->gboxSettings); // ------------------------------------------------------------- connect(d->settingsView, SIGNAL(signalSettingsChanged()), this, SLOT(slotTimer())); }
InsertTextTool::InsertTextTool(QObject* const parent) : EditorTool(parent), d(new Private) { setObjectName(QLatin1String("inserttext")); // ------------------------------------------------------------- QFrame* const frame = new QFrame(nullptr); frame->setFrameStyle(QFrame::Panel|QFrame::Sunken); QVBoxLayout* const l = new QVBoxLayout(frame); d->previewWidget = new InsertTextWidget(480, 320, frame); l->addWidget(d->previewWidget); d->previewWidget->setWhatsThis(i18n("This previews the text inserted in the image. " "You can use the mouse to move the text to the right location.")); setToolView(frame); // ------------------------------------------------------------- d->gboxSettings = new EditorToolSettings(nullptr); d->textEdit = new QTextEdit(); d->textEdit->setWordWrapMode(QTextOption::NoWrap); d->textEdit->setWhatsThis( i18n("Here, enter the text you want to insert in your image.")); // ------------------------------------------------------------- d->fontChooserWidget = new DFontProperties(nullptr, DFontProperties::NoDisplayFlags); d->fontChooserWidget->setSampleBoxVisible(false); d->fontChooserWidget->setWhatsThis(i18n("Here you can choose the font to be used.")); // ------------------------------------------------------------- QWidget* const alignBox = new QWidget(); QHBoxLayout* const hlay = new QHBoxLayout(alignBox); d->alignButtonGroup = new QButtonGroup(alignBox); d->alignButtonGroup->setExclusive(true); QToolButton* const alignLeft = new QToolButton(alignBox); d->alignButtonGroup->addButton(alignLeft, InsertTextWidget::ALIGN_LEFT); alignLeft->setIcon(QIcon::fromTheme(QLatin1String("format-justify-left"))); alignLeft->setCheckable(true); alignLeft->setToolTip(i18n("Align text to the left")); QToolButton* const alignRight = new QToolButton(alignBox); d->alignButtonGroup->addButton(alignRight, InsertTextWidget::ALIGN_RIGHT); alignRight->setIcon(QIcon::fromTheme(QLatin1String("format-justify-right"))); alignRight->setCheckable(true); alignRight->setToolTip(i18n("Align text to the right")); QToolButton* const alignCenter = new QToolButton(alignBox); d->alignButtonGroup->addButton(alignCenter, InsertTextWidget::ALIGN_CENTER); alignCenter->setIcon(QIcon::fromTheme(QLatin1String("format-justify-center"))); alignCenter->setCheckable(true); alignCenter->setToolTip(i18n("Align text to center")); QToolButton* alignBlock = new QToolButton(alignBox); d->alignButtonGroup->addButton(alignBlock, InsertTextWidget::ALIGN_BLOCK); alignBlock->setIcon(QIcon::fromTheme(QLatin1String("format-justify-fill"))); alignBlock->setCheckable(true); alignBlock->setToolTip(i18n("Align text to a block")); hlay->setContentsMargins(QMargins()); hlay->setSpacing(0); hlay->addStretch(); hlay->addWidget(alignLeft); hlay->addWidget(alignRight); hlay->addWidget(alignCenter); hlay->addWidget(alignBlock); hlay->addStretch(); // ------------------------------------------------------------- QLabel* const label1 = new QLabel(i18n("Rotation:")); d->textRotation = new QComboBox(); d->textRotation->addItem(i18nc("no rotation", "None")); d->textRotation->addItem(i18n("90 Degrees")); d->textRotation->addItem(i18n("180 Degrees")); d->textRotation->addItem(i18n("270 Degrees")); d->textRotation->setWhatsThis(i18n("Select the text rotation to use here.")); // ------------------------------------------------------------- QLabel* const label2 = new QLabel(i18nc("font color", "Color:")); d->fontColorButton = new DColorSelector(); d->fontColorButton->setColor(Qt::black); d->fontColorButton->setWhatsThis(i18n("Set here the font color to use.")); // ------------------------------------------------------------- QLabel* const label3 = new QLabel(i18nc("text opacity", "Opacity:")); d->textOpacity = new DIntNumInput(); d->textOpacity->setRange(0, 100, 1); d->textOpacity->setDefaultValue(100); d->textOpacity->setSuffix(QLatin1String("%")); d->textOpacity->setWhatsThis(i18n("Select the text opacity to use here.")); // ------------------------------------------------------------- d->borderText = new QCheckBox(i18n("Add border")); d->borderText->setToolTip(i18n("Add a solid border around text using current text color")); d->transparentText = new QCheckBox(i18n("Semi-transparent")); d->transparentText->setToolTip(i18n("Use semi-transparent text background under image")); // ------------------------------------------------------------- const int spacing = d->gboxSettings->spacingHint(); QGridLayout* const mainLayout = new QGridLayout(); mainLayout->addWidget(d->textEdit, 0, 0, 3, -1); mainLayout->addWidget(d->fontChooserWidget, 3, 0, 1, -1); mainLayout->addWidget(alignBox, 4, 0, 1, -1); mainLayout->addWidget(label1, 5, 0, 1, 1); mainLayout->addWidget(d->textRotation, 5, 1, 1, 1); mainLayout->addWidget(label2, 6, 0, 1, 1); mainLayout->addWidget(d->fontColorButton, 6, 1, 1, 1); mainLayout->addWidget(label3, 7, 0, 1, 1); mainLayout->addWidget(d->textOpacity, 7, 1, 1, 1); mainLayout->addWidget(d->borderText, 8, 0, 1, -1); mainLayout->addWidget(d->transparentText, 9, 0, 1, -1); mainLayout->setRowStretch(10, 10); mainLayout->setColumnStretch(1, 5); mainLayout->setColumnStretch(2, 10); mainLayout->setContentsMargins(spacing, spacing, spacing, spacing); mainLayout->setSpacing(spacing); d->gboxSettings->plainPage()->setLayout(mainLayout); // ------------------------------------------------------------- setToolSettings(d->gboxSettings); // ------------------------------------------------------------- connect(d->fontChooserWidget, SIGNAL(fontSelected(QFont)), this, SLOT(slotFontPropertiesChanged(QFont))); connect(d->fontColorButton, SIGNAL(signalColorSelected(QColor)), this, SLOT(slotUpdatePreview())); connect(d->textOpacity, SIGNAL(valueChanged(int)), this, SLOT(slotUpdatePreview())); connect(d->textEdit, SIGNAL(textChanged()), this, SLOT(slotUpdatePreview())); connect(d->alignButtonGroup, SIGNAL(buttonReleased(int)), this, SLOT(slotAlignModeChanged(int))); connect(d->borderText, SIGNAL(toggled(bool)), this, SLOT(slotUpdatePreview())); connect(d->transparentText, SIGNAL(toggled(bool)), this, SLOT(slotUpdatePreview())); connect(d->textRotation, SIGNAL(activated(int)), this, SLOT(slotUpdatePreview())); connect(this, SIGNAL(signalUpdatePreview()), this, SLOT(slotUpdatePreview())); // ------------------------------------------------------------- slotUpdatePreview(); }
BlurFXTool::BlurFXTool(QObject* const parent) : EditorToolThreaded(parent), d(new Private) { setObjectName(QLatin1String("blurfx")); // ------------------------------------------------------------- d->gboxSettings = new EditorToolSettings(nullptr); d->gboxSettings->setButtons(EditorToolSettings::Default| EditorToolSettings::Ok| EditorToolSettings::Cancel| EditorToolSettings::Try); d->previewWidget = new ImageRegionWidget; d->previewWidget->setWhatsThis(i18n("This is the preview of the blur effect " "applied to the photograph.")); // ------------------------------------------------------------- d->effectTypeLabel = new QLabel(i18n("Type:")); d->effectType = new DComboBox; d->effectType->addItem(i18n("Zoom Blur")); d->effectType->addItem(i18n("Radial Blur")); d->effectType->addItem(i18n("Far Blur")); d->effectType->addItem(i18n("Motion Blur")); d->effectType->addItem(i18n("Softener Blur")); d->effectType->addItem(i18n("Shake Blur")); d->effectType->addItem(i18n("Focus Blur")); d->effectType->addItem(i18n("Smart Blur")); d->effectType->addItem(i18n("Frost Glass")); d->effectType->addItem(i18n("Mosaic")); d->effectType->setDefaultIndex(BlurFXFilter::ZoomBlur); d->effectType->setWhatsThis(i18n("<p>Select the blurring effect to apply to image.</p>" "<p><b>Zoom Blur</b>: blurs the image along radial lines starting from " "a specified center point. This simulates the blur of a zooming camera.</p>" "<p><b>Radial Blur</b>: blurs the image by rotating the pixels around " "the specified center point. This simulates the blur of a rotating camera.</p>" "<p><b>Far Blur</b>: blurs the image by using far pixels. This simulates the blur " "of an unfocalized camera lens.</p>" "<p><b>Motion Blur</b>: blurs the image by moving the pixels horizontally. " "This simulates the blur of a linear moving camera.</p>" "<p><b>Softener Blur</b>: blurs the image softly in dark tones and hardly in light " "tones. This gives images a dreamy and glossy soft focus effect. It is ideal " "for creating romantic portraits, glamour photographs, or giving images a warm " "and subtle glow.</p>" "<p><b>Shake Blur</b>: blurs the image by shaking randomly the pixels. " "This simulates the blur of a random moving camera.</p>" "<p><b>Focus Blur</b>: blurs the image corners to reproduce the astigmatism distortion " "of a lens.</p>" "<p><b>Smart Blur</b>: finds the edges of color in your image and blurs them without " "muddying the rest of the image.</p>" "<p><b>Frost Glass</b>: blurs the image by randomly disperse light coming through " "a frosted glass.</p>" "<p><b>Mosaic</b>: divides the photograph into rectangular cells and then " "recreates it by filling those cells with average pixel value.</p>")); d->distanceLabel = new QLabel(i18n("Distance:")); d->distanceInput = new DIntNumInput; d->distanceInput->setRange(0, 100, 1); d->distanceInput->setDefaultValue(3); d->distanceInput->setWhatsThis( i18n("Set here the blur distance in pixels.")); d->levelLabel = new QLabel(i18nc("level to use for the effect", "Level:")); d->levelInput = new DIntNumInput; d->levelInput->setRange(0, 360, 1); d->levelInput->setDefaultValue(128); d->levelInput->setWhatsThis( i18n("This value controls the level to use with the current effect.")); connect(d->effectType, SIGNAL(currentIndexChanged(int)), this, SLOT(slotEffectTypeChanged(int))); // ------------------------------------------------------------- const int spacing = d->gboxSettings->spacingHint(); QGridLayout* const mainLayout = new QGridLayout; mainLayout->addWidget(d->effectTypeLabel, 0, 0, 1, 2); mainLayout->addWidget(d->effectType, 1, 0, 1, 2); mainLayout->addWidget(d->distanceLabel, 2, 0, 1, 2); mainLayout->addWidget(d->distanceInput, 3, 0, 1, 2); mainLayout->addWidget(d->levelLabel, 4, 0, 1, 2); mainLayout->addWidget(d->levelInput, 5, 0, 1, 2); mainLayout->setRowStretch(6, 10); mainLayout->setContentsMargins(spacing, spacing, spacing, spacing); mainLayout->setSpacing(spacing); d->gboxSettings->plainPage()->setLayout(mainLayout); // ------------------------------------------------------------- setPreviewModeMask(PreviewToolBar::AllPreviewModes); setToolSettings(d->gboxSettings); setToolView(d->previewWidget); slotEffectTypeChanged(d->effectType->defaultIndex()); }
RainDropTool::RainDropTool(QObject* parent) : EditorToolThreaded(parent), d(new RainDropToolPriv) { setObjectName("raindrops"); setToolName(i18n("Raindrops")); setToolIcon(SmallIcon("raindrop")); d->previewWidget = new ImageGuideWidget(0, false, ImageGuideWidget::HVGuideMode); d->previewWidget->setWhatsThis(i18n("This is the preview of the Raindrop effect." "<p>Note: if you have previously selected an area in the editor, " "this will be unaffected by the filter. You can use this method to " "disable the Raindrops effect on a human face, for example.</p>")); setToolView(d->previewWidget); setPreviewModeMask(PreviewToolBar::AllPreviewModes); // ------------------------------------------------------------- d->gboxSettings = new EditorToolSettings; d->gboxSettings->setButtons(EditorToolSettings::Default| EditorToolSettings::Ok| EditorToolSettings::Try| EditorToolSettings::Cancel); // ------------------------------------------------------------- QLabel* label1 = new QLabel(i18n("Drop size:")); d->dropInput = new RIntNumInput; d->dropInput->setRange(0, 200, 1); d->dropInput->setSliderEnabled(true); d->dropInput->setDefaultValue(80); d->dropInput->setWhatsThis( i18n("Set here the raindrops' size.")); // ------------------------------------------------------------- QLabel* label2 = new QLabel(i18n("Number:")); d->amountInput = new RIntNumInput; d->amountInput->setRange(1, 500, 1); d->amountInput->setSliderEnabled(true); d->amountInput->setDefaultValue(150); d->amountInput->setWhatsThis( i18n("This value controls the maximum number of raindrops.")); // ------------------------------------------------------------- QLabel* label3 = new QLabel(i18n("Fish eyes:")); d->coeffInput = new RIntNumInput; d->coeffInput->setRange(1, 100, 1); d->coeffInput->setSliderEnabled(true); d->coeffInput->setDefaultValue(30); d->coeffInput->setWhatsThis( i18n("This value is the fish-eye-effect optical " "distortion coefficient.")); // ------------------------------------------------------------- QGridLayout* mainLayout = new QGridLayout; mainLayout->addWidget(label1, 0, 0, 1, 3); mainLayout->addWidget(d->dropInput, 1, 0, 1, 3); mainLayout->addWidget(label2, 2, 0, 1, 3); mainLayout->addWidget(d->amountInput, 3, 0, 1, 3); mainLayout->addWidget(label3, 4, 0, 1, 3); mainLayout->addWidget(d->coeffInput, 5, 0, 1, 3); mainLayout->setRowStretch(6, 10); mainLayout->setMargin(d->gboxSettings->spacingHint()); mainLayout->setSpacing(d->gboxSettings->spacingHint()); d->gboxSettings->plainPage()->setLayout(mainLayout); // ------------------------------------------------------------- setToolSettings(d->gboxSettings); init(); }