------- 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=106508 caulier.gilles gmail com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|REOPENED |RESOLVED Resolution| |FIXED ------- Additional Comments From caulier.gilles gmail com 2007-03-19 23:52 ------- SVN commit 644437 by cgilles: digiKam from trunk : add a combo box with a pre-zoom selection options like gimp prvovide. You can enter a customized zoom scale value if you want. BUG: 106508 M +22 -26 canvas/canvas.cpp M +1 -0 canvas/canvas.h M +2 -1 editor/digikamimagewindowui.rc M +56 -7 editor/editorwindow.cpp M +3 -1 editor/editorwindow.h M +8 -0 editor/editorwindowprivate.h --- trunk/extragear/graphics/digikam/utilities/imageeditor/canvas/canvas.cpp #644436:644437 @ -1,6 +1,6 @ /* ============================================================ * Authors: Renchi Raju <renchi pooh tam uiuc edu> - * Gilles Caulier <caulier dot gilles at gmail dot com> + * Gilles Caulier <caulier dot gilles at gmail dot com> * Date : 2003-01-09 * Description : image editor canvas management class * @ -70,16 +70,15 @ public: - CanvasPrivate() : - tileSize(128), maxZoom(8.0) + CanvasPrivate() : + tileSize(128), minZoom(0.1), maxZoom(10.0), zoomStep(0.1) { - tileCache.setMaxCost((10*1024*1024)/(tileSize*tileSize*4)); - tileCache.setAutoDelete(true); - parent = 0; im = 0; rubber = 0; paintTimer = 0; + tileCache.setMaxCost((10*1024*1024)/(tileSize*tileSize*4)); + tileCache.setAutoDelete(true); } bool autoZoom; @ -97,7 +96,9 @ int midButtonY; double zoom; + const double minZoom; const double maxZoom; + const double zoomStep; QRect *rubber; QRect pixmapRect; @ -114,7 +115,6 @ QWidget *parent; DImgInterface *im; - }; Canvas::Canvas(QWidget *parent) @ -817,12 +817,12 @ bool Canvas::maxZoom() { - return ((d->zoom + 1.0/16.0) >= d->maxZoom); + return ((d->zoom + d->zoomStep) >= d->maxZoom); } bool Canvas::minZoom() { - return ((d->zoom - 1.0/16.0) <= 0.1); + return ((d->zoom - d->zoomStep) <= d->minZoom); } bool Canvas::exifRotated() @ -832,33 +832,29 @ void Canvas::slotIncreaseZoom() { - if (d->autoZoom || maxZoom()) + if (maxZoom()) return; - float cpx = (contentsX() + visibleWidth() / 2.0) / d->zoom; - float cpy = (contentsY() + visibleHeight() / 2.0) / d->zoom; + setZoomFactor(d->zoom + d->zoomStep); +} - d->zoom = d->zoom + 1.0/16.0; - d->im->zoom(d->zoom); - updateContentsSize(); +void Canvas::slotDecreaseZoom() +{ + if (minZoom()) + return; - viewport()->setUpdatesEnabled(false); - center((int)(cpx * d->zoom), (int)(cpy * d->zoom)); - viewport()->setUpdatesEnabled(true); - viewport()->update(); - - emit signalZoomChanged(d->zoom); + setZoomFactor(d->zoom - d->zoomStep); } -void Canvas::slotDecreaseZoom() +void Canvas::setZoomFactor(float zoom) { - if (d->autoZoom || minZoom()) + if (d->autoZoom) return; float cpx = (contentsX() + visibleWidth() / 2.0) / d->zoom; - float cpy = (contentsY() + visibleHeight() / 2.0) / d->zoom; - - d->zoom = d->zoom - 1.0/16.0; + float cpy = (contentsY() + visibleHeight() / 2.0) / d->zoom; + + d->zoom = zoom; d->im->zoom(d->zoom); updateContentsSize(); --- trunk/extragear/graphics/digikam/utilities/imageeditor/canvas/canvas.h #644436:644437 @ -75,6 +75,7 @ DImg currentImage(); QString currentImageFileFormat(); + void setZoomFactor(float z); bool maxZoom(); bool minZoom(); bool exifRotated(); --- trunk/extragear/graphics/digikam/utilities/imageeditor/editor/digikamimagewindowui.rc #644436:644437 @ -1,5 +1,5 @ <!DOCTYPE kpartgui SYSTEM "kpartgui.dtd"> -<gui version="10" name="digikamimagewindow" > +<gui version="11" name="digikamimagewindow" > <MenuBar> @ -87,6 +87,7 @ <Action name="editorwindow_revert" /> <Separator/> <Action name="editorwindow_zoomplus" /> + <Action name="editorwindow_zoomto" /> <Action name="editorwindow_zoomminus" /> <Action name="editorwindow_zoomfit" /> <Separator/> --- trunk/extragear/graphics/digikam/utilities/imageeditor/editor/editorwindow.cpp #644436:644437 @ -26,6 +26,10 @ #include <sys/stat.h> } +// C++ includes. + +#include <cmath> + // Qt includes. #include <qlabel.h> @ -70,6 +74,7 @ #include <kstatusbar.h> #include <kprogress.h> #include <kwin.h> +#include <kcombobox.h> // Local includes. @ -311,12 +316,41 @ d->zoomPlusAction = KStdAction::zoomIn(m_canvas, SLOT(slotIncreaseZoom()), actionCollection(), "editorwindow_zoomplus"); + + d->zoomMinusAction = KStdAction::zoomOut(m_canvas, SLOT(slotDecreaseZoom()), actionCollection(), "editorwindow_zoomminus"); + d->zoomFitAction = new KToggleAction(i18n("Zoom &AutoFit"), "viewmagfit", CTRL+SHIFT+Key_A, this, SLOT(slotToggleAutoZoom()), actionCollection(), "editorwindow_zoomfit"); + d->zoomCombo = new KComboBox(true); + d->zoomCombo->setDuplicatesEnabled(false); + d->zoomCombo->setFocusPolicy(ClickFocus); + d->zoomCombo->setInsertionPolicy(QComboBox::NoInsertion); + d->zoomComboAction = new KWidgetAction(d->zoomCombo, i18n("Zoom"), 0, 0, 0, + actionCollection(), "editorwindow_zoomto"); + + d->zoomCombo->insertItem(QString("10%")); + d->zoomCombo->insertItem(QString("25%")); + d->zoomCombo->insertItem(QString("50%")); + d->zoomCombo->insertItem(QString("75%")); + d->zoomCombo->insertItem(QString("100%")); + d->zoomCombo->insertItem(QString("150%")); + d->zoomCombo->insertItem(QString("200%")); + d->zoomCombo->insertItem(QString("300%")); + d->zoomCombo->insertItem(QString("450%")); + d->zoomCombo->insertItem(QString("600%")); + d->zoomCombo->insertItem(QString("800%")); + + connect(d->zoomCombo, SIGNAL(activated(int)), + this, SLOT(slotZoomSelected()) ); + + connect(d->zoomCombo, SIGNAL(returnPressed(const QString&)), + this, SLOT(slotZoomTextChanged(const QString &)) ); + + #if KDE_IS_VERSION(3,2,0) m_fullScreenAction = KStdAction::fullScreen(this, SLOT(slotToggleFullScreen()), actionCollection(), this, "editorwindow_fullscreen"); @ -618,21 +652,36 @ bool checked = d->zoomFitAction->isChecked(); d->zoomPlusAction->setEnabled(!checked); + d->zoomComboAction->setEnabled(!checked); d->zoomMinusAction->setEnabled(!checked); m_canvas->slotToggleAutoZoom(); } +void EditorWindow::slotZoomTextChanged(const QString &txt) +{ + double zoom = KGlobal::locale()->readNumber(txt) / 100.0; + if (zoom > 0.0) + m_canvas->setZoomFactor(zoom); +} + +void EditorWindow::slotZoomSelected() +{ + QString txt = d->zoomCombo->currentText(); + txt = txt.left(txt.find('%')); + slotZoomTextChanged(txt); +} + void EditorWindow::slotZoomChanged(float zoom) { - m_zoomLabel->setText(i18n("Zoom: ") + - QString::number(zoom*100, 'f', 2) + - QString("%")); + m_zoomLabel->setText(i18n("Zoom: %1%").arg(QString::number(lround(zoom*100.0)))); - d->zoomPlusAction->setEnabled(!m_canvas->maxZoom() && - !d->zoomFitAction->isChecked()); - d->zoomMinusAction->setEnabled(!m_canvas->minZoom() && - !d->zoomFitAction->isChecked()); + d->zoomPlusAction->setEnabled(!m_canvas->maxZoom() && !d->zoomFitAction->isChecked()); + d->zoomMinusAction->setEnabled(!m_canvas->minZoom() && !d->zoomFitAction->isChecked()); + + d->zoomCombo->blockSignals(true); + d->zoomCombo->setCurrentText(QString::number(lround(zoom*100.0)) + QString("%")); + d->zoomCombo->blockSignals(false); } void EditorWindow::slotEscapePressed() --- trunk/extragear/graphics/digikam/utilities/imageeditor/editor/editorwindow.h #644436:644437 @ -173,7 +173,6 @ void slotEscapePressed(); void slotToggleAutoZoom(); - void slotZoomChanged(float zoom); void slotSelected(bool); void slotLoadingProgress(const QString& filePath, float progress); @ -206,6 +205,9 @ void slotSavingFinished(const QString &filename, bool success); void slotDonateMoney(); void slotToggleSlideShow(); + void slotZoomSelected(); + void slotZoomTextChanged(const QString &); + void slotZoomChanged(float zoom); private: --- trunk/extragear/graphics/digikam/utilities/imageeditor/editor/editorwindowprivate.h #644436:644437 @ -24,8 +24,10 @ class QToolButton; +class KComboBox; class KAction; class KToggleAction; +class KWidgetAction; class KSelectAction; class KActionMenu; class KAccel; @ -72,6 +74,8 @ viewUnderExpoAction = 0; viewOverExpoAction = 0; slideShowAction = 0; + zoomCombo = 0; + zoomComboAction = 0; } ~EditorWindowPriv() @ -82,6 +86,8 @ bool fullScreenHideToolBar; bool slideShowInFullScreen; + KComboBox *zoomCombo; + QToolButton *cmViewIndicator; QToolButton *underExposureIndicator; QToolButton *overExposureIndicator; @ -108,6 +114,8 @ KToggleAction *viewUnderExpoAction; KToggleAction *viewOverExpoAction; + KWidgetAction *zoomComboAction; + KAccel *accelerators; ICCSettingsContainer *ICCSettings; _______________________________________________ Digikam-devel mailing list [hidden email] https://mail.kde.org/mailman/listinfo/digikam-devel |
Free forum by Nabble | Edit this page |