------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee. http://bugs.kde.org/show_bug.cgi?id=104439 caulier.gilles gmail com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution| |FIXED ------- Additional Comments From caulier.gilles gmail com 2007-03-20 21:02 ------- SVN commit 644731 by cgilles: digikam from trunk : image editor improvement ! If you want to pan over a large image using the mouse, use my new Pan tool avaialble on the right bottom corner of canvas area... Look a fresh screenshot of this tool in action : http://digikam3rdparty.free.fr/Screenshots/neweditorpantool.png BUG: 104439 BUG: 137391 M +99 -29 canvas.cpp M +4 -0 canvas.h --- trunk/extragear/graphics/digikam/utilities/imageeditor/canvas/canvas.cpp #644730:644731 @ -44,16 +44,21 @ #include <qcolor.h> #include <qdragobject.h> #include <qclipboard.h> +#include <qtoolbutton.h> // KDE includes. #include <kcursor.h> #include <klocale.h> +#include <kiconloader.h> +#include <kdatetbl.h> +#include <kglobalsettings.h> // Local includes. #include "ddebug.h" #include "imagehistogram.h" +#include "imagepaniconwidget.h" #include "dimginterface.h" #include "iccsettingscontainer.h" #include "exposurecontainer.h" @ -73,6 +78,9 @ CanvasPrivate() : tileSize(128), minZoom(0.1), maxZoom(10.0), zoomStep(0.1) { + panIconPopup = 0; + panIconWidget = 0; + cornerButton = 0; parent = 0; im = 0; rubber = 0; @ -81,40 +89,46 @ tileCache.setAutoDelete(true); } - bool autoZoom; - bool fullScreen; - bool pressedMoved; - bool pressedMoving; - bool ltActive; - bool rtActive; - bool lbActive; - bool rbActive; - bool midButtonPressed; + bool autoZoom; + bool fullScreen; + bool pressedMoved; + bool pressedMoving; + bool ltActive; + bool rtActive; + bool lbActive; + bool rbActive; + bool midButtonPressed; - const int tileSize; - int midButtonX; - int midButtonY; + const int tileSize; + int midButtonX; + int midButtonY; - double zoom; - const double minZoom; - const double maxZoom; - const double zoomStep; + double zoom; + const double minZoom; + const double maxZoom; + const double zoomStep; - QRect *rubber; - QRect pixmapRect; + QToolButton *cornerButton; + + QRect *rubber; + QRect pixmapRect; - QTimer *paintTimer; + QTimer *paintTimer; - QCache<QPixmap> tileCache; + QCache<QPixmap> tileCache; - QPixmap* tileTmpPix; - QPixmap qcheck; + QPixmap* tileTmpPix; + QPixmap qcheck; - QColor bgColor; + QColor bgColor; - QWidget *parent; + QWidget *parent; + + KPopupFrame *panIconPopup; - DImgInterface *im; + DImgInterface *im; + + ImagePanIconWidget *panIconWidget; }; Canvas::Canvas(QWidget *parent) @ -132,7 +146,7 @ d->autoZoom = false; d->fullScreen = false; d->tileTmpPix = new QPixmap(d->tileSize, d->tileSize); - d->bgColor.setRgb( 0, 0, 0 ); + d->bgColor.setRgb(0, 0, 0); d->rubber = 0; d->pressedMoved = false; @ -155,8 +169,18 @ p.fillRect(8, 0, 8, 8, QColor(100,100,100)); p.end(); + d->cornerButton = new QToolButton(this); + d->cornerButton->setIconSet(SmallIcon("move")); + setCornerWidget(d->cornerButton); + // ------------------------------------------------------------ - + + connect(this, SIGNAL(signalZoomChanged(float)), + this, SLOT(slotZoomChanged(float))); + + connect(d->cornerButton, SIGNAL(clicked()), + this, SLOT(slotCornerButtonClicked())); + connect(d->im, SIGNAL(signalColorManagementTool()), this, SIGNAL(signalColorManagementTool())); @ -349,15 +373,19 @ return ( QRect(x, y, w, h) ); } -void Canvas::updateAutoZoom() +float Canvas::calcAutoZoomFactor() { double srcWidth = d->im->origWidth(); double srcHeight = d->im->origHeight(); double dstWidth = contentsRect().width(); double dstHeight = contentsRect().height(); - d->zoom = QMIN(dstWidth/srcWidth, dstHeight/srcHeight); + return QMIN(dstWidth/srcWidth, dstHeight/srcHeight); +} +void Canvas::updateAutoZoom() +{ + d->zoom = calcAutoZoomFactor(); d->im->zoom(d->zoom); emit signalZoomChanged(d->zoom); @ -1147,5 +1175,47 @ paintViewport(contentsRect(), true); } +void Canvas::slotCornerButtonClicked() +{ + if (!d->panIconPopup) + { + d->panIconPopup = new KPopupFrame(this); + + ImagePanIconWidget *pan = new ImagePanIconWidget(90, 60, d->panIconPopup); + d->panIconPopup->setMainWidget(pan); + + QRect r((int)(contentsX() / d->zoom), (int)(contentsY() / d->zoom), + (int)(visibleWidth() / d->zoom), (int)(visibleHeight() / d->zoom)); + pan->setRegionSelection(r); + + connect(pan, SIGNAL(signalSelectionMoved(QRect, bool)), + this, SLOT(slotPanIconSelectionMoved(QRect, bool))); + } + + QPoint g = mapToGlobal(d->cornerButton->pos()); + d->panIconPopup->popup(QPoint(g.x() - d->panIconPopup->width(), g.y() - d->panIconPopup->height())); +} + +void Canvas::slotPanIconSelectionMoved(QRect r, bool b) +{ + setContentsPos((int)(r.x()*d->zoom), (int)(r.y()*d->zoom)); + + if (b) + { + int r; + d->panIconPopup->close(r); + delete d->panIconPopup; + d->panIconPopup = 0; + } +} + +void Canvas::slotZoomChanged(float zoom) +{ + if (zoom > calcAutoZoomFactor()) + d->cornerButton->show(); + else + d->cornerButton->hide(); +} + } // namespace Digikam --- trunk/extragear/graphics/digikam/utilities/imageeditor/canvas/canvas.h #644730:644731 @ -115,6 +115,7 @ private: + float calcAutoZoomFactor(); void updateAutoZoom(); void updateContentsSize(); void drawRubber(); @ -153,6 +154,9 @ void slotModified(); void slotImageLoaded(const QString& filePath, bool success); void slotImageSaved(const QString& filePath, bool success); + void slotCornerButtonClicked(); + void slotPanIconSelectionMoved(QRect, bool); + void slotZoomChanged(float); signals: _______________________________________________ Digikam-devel mailing list [hidden email] https://mail.kde.org/mailman/listinfo/digikam-devel |
Free forum by Nabble | Edit this page |