|
SVN commit 1196102 by aclemens:
Make the SketchWidget a little bit more user-friendly: - Use the CTRL+mouse wheel to increase / decrease the pen size - Use the SHIFT+CTRL+mouse wheel to increase / decrease the pen size (single step) - Use the CTRL key and left mouse click to sample the underlying color We could do the same thing for the liquid rescale plugin?? CCMAIL: [hidden email] M +13 -1 fuzzysearchview.cpp M +1 -0 fuzzysearchview.h M +102 -17 sketchwidget.cpp M +6 -0 sketchwidget.h --- trunk/extragear/graphics/digikam/utilities/fuzzysearch/fuzzysearchview.cpp #1196101:1196102 @@ -379,7 +379,7 @@ QLabel* brushLabel = new QLabel(i18n("Pen:")); d->penSize = new QSpinBox(); - d->penSize->setRange(1, 40); + d->penSize->setRange(1, 64); d->penSize->setSingleStep(1); d->penSize->setValue(10); d->penSize->setWhatsThis(i18n("Set here the brush size in pixels used to draw sketch.")); @@ -471,6 +471,12 @@ connect(d->resetButton, SIGNAL(clicked()), this, SLOT(slotClearSketch())); + connect(d->sketchWidget, SIGNAL(signalPenSizeChanged(int)), + d->penSize, SLOT(setValue(int))); + + connect(d->sketchWidget, SIGNAL(signalPenColorChanged(const QColor&)), + this, SLOT(slotPenColorChanged(const QColor&))); + connect(d->sketchWidget, SIGNAL(signalSketchChanged(const QImage&)), this, SLOT(slotDirtySketch())); @@ -704,6 +710,12 @@ setColor(color); } +void FuzzySearchView::slotPenColorChanged(const QColor& color) +{ + slotHSChanged(color.hue(), color.saturation()); + slotVChanged(color.value()); +} + void FuzzySearchView::setColor(QColor c) { if (c.isValid()) --- trunk/extragear/graphics/digikam/utilities/fuzzysearch/fuzzysearchview.h #1196101:1196102 @@ -88,6 +88,7 @@ void slotHSChanged(int h, int s); void slotVChanged(int v); + void slotPenColorChanged(const QColor&); void slotClearSketch(); void slotSaveSketchSAlbum(); void slotCheckNameEditSketchConditions(); --- trunk/extragear/graphics/digikam/utilities/fuzzysearch/sketchwidget.cpp #1196101:1196102 @@ -26,6 +26,7 @@ // Qt includes +#include <QCursor> #include <QMap> #include <QPainter> #include <QPainterPath> @@ -47,18 +48,17 @@ { public: - DrawEvent() - { - penWidth = 10; - penColor = Qt::black; - }; + DrawEvent() : + penWidth(10), + penColor(Qt::black) + {}; - DrawEvent(int width, const QColor& color) - { - penWidth = width; - penColor = color; - }; + DrawEvent(int width, const QColor& color) : + penWidth(width), + penColor(color) + {}; + void lineTo(const QPoint &pos) { path.lineTo(pos); @@ -77,14 +77,14 @@ { public: - SketchWidgetPriv() + SketchWidgetPriv() : + isClear(true), + drawing(false), + penWidth(10), + eventIndex(-1), + penColor(Qt::black) { - isClear = true; - drawing = false; - penWidth = 10; - penColor = Qt::black; pixmap = QPixmap(256, 256); - eventIndex = -1; } bool isClear; @@ -100,6 +100,8 @@ QPoint lastPoint; QTime drawEventCreationTime; + QCursor drawCursor; + QList<DrawEvent> drawEventList; void startDrawEvent(const QPoint& pos) @@ -149,6 +151,7 @@ setAttribute(Qt::WA_StaticContents); setMouseTracking(true); setFixedSize(256, 256); + setFocusPolicy(Qt::StrongFocus); slotClear(); } @@ -186,6 +189,7 @@ void SketchWidget::setPenWidth(int newWidth) { d->penWidth = newWidth; + updateDrawCursor(); d->ensureNewDrawEvent(); } @@ -431,8 +435,17 @@ update(); } + // sample color + if (e->modifiers() & Qt::CTRL) + { + QImage img = d->pixmap.toImage(); + emit signalPenColorChanged((img.pixel(e->pos()))); + return; + } + d->lastPoint = e->pos(); d->drawing = true; + setCursor(d->drawCursor); d->startDrawEvent(e->pos()); } @@ -442,9 +455,18 @@ { if (rect().contains(e->x(), e->y())) { + setFocus(); + + if (d->drawing || e->modifiers() & Qt::CTRL) + { + setCursor(d->drawCursor); + } + else + { setCursor(Qt::CrossCursor); + } - if ((e->buttons() & Qt::LeftButton) && d->drawing) + if ((e->buttons() & Qt::LeftButton)) { QPoint currentPos = e->pos(); d->currentDrawEvent().lineTo(currentPos); @@ -454,9 +476,30 @@ else { unsetCursor(); + clearFocus(); } } +void SketchWidget::wheelEvent (QWheelEvent* e) +{ + if (rect().contains(e->x(), e->y()) && e->modifiers() & Qt::CTRL) + { + int size = d->penWidth; + int decr = (e->modifiers() & Qt::SHIFT) ? 1 : 10; + + if (e->delta() > 0) + { + size += decr; + } + else + { + size -= decr; + } + emit signalPenSizeChanged(size); + setCursor(d->drawCursor); + } +} + void SketchWidget::mouseReleaseEvent(QMouseEvent* e) { if (e->button() == Qt::LeftButton && d->drawing) @@ -464,11 +507,32 @@ QPoint currentPos = e->pos(); d->currentDrawEvent().lineTo(currentPos); d->drawing = false; + setCursor(Qt::CrossCursor); emit signalSketchChanged(sketchImage()); emit signalUndoRedoStateChanged(true, false); } } +void SketchWidget::keyPressEvent(QKeyEvent* e) +{ + QWidget::keyPressEvent(e); + + if (e->modifiers() == Qt::CTRL) + { + setCursor(d->drawCursor); + } +} + +void SketchWidget::keyReleaseEvent(QKeyEvent* e) +{ + QWidget::keyReleaseEvent(e); + + if (e->key() == Qt::Key_Control) + { + setCursor(Qt::CrossCursor); + } +} + void SketchWidget::paintEvent(QPaintEvent*) { QPainter p(this); @@ -510,4 +574,25 @@ d->lastPoint = path.currentPosition().toPoint(); } +void SketchWidget::updateDrawCursor() +{ + int size = d->penWidth; + if (size > 64) + size = 64; + + QPixmap pix(size, size); + pix.fill(Qt::transparent); + + QPainter p(&pix); + if (size > 4) + { + int middle = size / 2; + p.drawLine(middle - 2, middle, middle + 2, middle); + p.drawLine(middle, middle - 2, middle, middle + 2); + } + p.drawEllipse( 0, 0, size-1, size-1); + + d->drawCursor = QCursor(pix); +} + } // namespace Digikam --- trunk/extragear/graphics/digikam/utilities/fuzzysearch/sketchwidget.h #1196101:1196102 @@ -66,6 +66,8 @@ Q_SIGNALS: void signalSketchChanged(const QImage&); + void signalPenSizeChanged(int); + void signalPenColorChanged(const QColor&); void signalUndoRedoStateChanged(bool hasUndo, bool hasRedo); public Q_SLOTS: @@ -80,11 +82,15 @@ void mousePressEvent(QMouseEvent*); void mouseMoveEvent(QMouseEvent*); + void wheelEvent (QWheelEvent*); void mouseReleaseEvent(QMouseEvent*); + void keyPressEvent (QKeyEvent*); + void keyReleaseEvent(QKeyEvent*); void paintEvent(QPaintEvent*); private: + void updateDrawCursor(); void replayEvents(int index); void drawLineTo(const QPoint& endPoint); void drawLineTo(int width, const QColor& color, const QPoint& start, const QPoint& end); _______________________________________________ Digikam-devel mailing list [hidden email] https://mail.kde.org/mailman/listinfo/digikam-devel |
|
2010/11/12 Andi Clemens <[hidden email]>:
> SVN commit 1196102 by aclemens: > > Make the SketchWidget a little bit more user-friendly: > - Use the CTRL+mouse wheel to increase / decrease the pen size > - Use the SHIFT+CTRL+mouse wheel to increase / decrease the pen size (single step) > - Use the CTRL key and left mouse click to sample the underlying color > > We could do the same thing for the liquid rescale plugin?? Why not... Julien ? Gilles Caulier _______________________________________________ Digikam-devel mailing list [hidden email] https://mail.kde.org/mailman/listinfo/digikam-devel |
|
Le 12/11/2010 16:40, Gilles Caulier a écrit :
> 2010/11/12 Andi Clemens<[hidden email]>: >> SVN commit 1196102 by aclemens: >> >> Make the SketchWidget a little bit more user-friendly: >> - Use the CTRL+mouse wheel to increase / decrease the pen size >> - Use the SHIFT+CTRL+mouse wheel to increase / decrease the pen size (single step) >> - Use the CTRL key and left mouse click to sample the underlying color >> >> We could do the same thing for the liquid rescale plugin?? > Why not... > > Julien ? > > Gilles Caulier > _______________________________________________ > Digikam-devel mailing list > [hidden email] > https://mail.kde.org/mailman/listinfo/digikam-devel Julien _______________________________________________ Digikam-devel mailing list [hidden email] https://mail.kde.org/mailman/listinfo/digikam-devel |
| Free forum by Nabble | Edit this page |
