@@ -101,6 +101,8 @@ PDFReaderWidget::setupToolBar () {
101101
102102 zoomCombo_->addItem (" Fit Width" );
103103 zoomCombo_->addItem (" Fit Height" );
104+ zoomCombo_->addItem (" 25%" );
105+ zoomCombo_->addItem (" 33%" );
104106 zoomCombo_->addItem (" 50%" );
105107 zoomCombo_->addItem (" 75%" );
106108 zoomCombo_->addItem (" 100%" );
@@ -109,11 +111,23 @@ PDFReaderWidget::setupToolBar () {
109111 zoomCombo_->addItem (" 200%" );
110112 zoomCombo_->addItem (" 300%" );
111113 zoomCombo_->addItem (" 400%" );
114+ zoomCombo_->addItem (" 600%" );
115+ zoomCombo_->addItem (" 800%" );
112116
113117 connect (zoomCombo_, QOverload<int >::of (&QComboBox::currentIndexChanged),
114118 this , &PDFReaderWidget::onZoomChanged);
115119
120+ zoomOutBtn_= new QPushButton (" -" , toolBar_);
121+ zoomOutBtn_->setFixedWidth (30 );
122+ connect (zoomOutBtn_, &QPushButton::clicked, this , &PDFReaderWidget::zoomOut);
123+
124+ zoomInBtn_= new QPushButton (" +" , toolBar_);
125+ zoomInBtn_->setFixedWidth (30 );
126+ connect (zoomInBtn_, &QPushButton::clicked, this , &PDFReaderWidget::zoomIn);
127+
128+ toolBar_->addWidget (zoomOutBtn_);
116129 toolBar_->addWidget (zoomCombo_);
130+ toolBar_->addWidget (zoomInBtn_);
117131 toolBar_->addSeparator ();
118132
119133 prevPageBtn_= new QPushButton (" <" , toolBar_);
@@ -216,6 +230,28 @@ PDFReaderWidget::fitHeight () {
216230 setZoomFactor (static_cast <double > (viewportHeight) / baseHeight);
217231}
218232
233+ void
234+ PDFReaderWidget::zoomIn () {
235+ for (int i= 0 ; i < ZOOM_LEVEL_COUNT ; ++i) {
236+ if (ZOOM_LEVELS [i] > zoomFactor_ * 1.001 ) {
237+ setZoomFactor (ZOOM_LEVELS [i]);
238+ return ;
239+ }
240+ }
241+ setZoomFactor (MAX_ZOOM );
242+ }
243+
244+ void
245+ PDFReaderWidget::zoomOut () {
246+ for (int i= ZOOM_LEVEL_COUNT - 1 ; i >= 0 ; --i) {
247+ if (ZOOM_LEVELS [i] < zoomFactor_ * 0.999 ) {
248+ setZoomFactor (ZOOM_LEVELS [i]);
249+ return ;
250+ }
251+ }
252+ setZoomFactor (MIN_ZOOM );
253+ }
254+
219255int
220256PDFReaderWidget::currentPage () const {
221257 if (!scrollArea_ || pageCount_ <= 0 ) return 0 ;
@@ -715,6 +751,24 @@ PDFReaderWidget::keyPressEvent (QKeyEvent* event) {
715751 return ;
716752 }
717753
754+ if (event->modifiers () & Qt::ControlModifier) {
755+ switch (event->key ()) {
756+ case Qt::Key_Plus:
757+ case Qt::Key_Equal:
758+ zoomIn ();
759+ event->accept ();
760+ return ;
761+ case Qt::Key_Minus:
762+ zoomOut ();
763+ event->accept ();
764+ return ;
765+ case Qt::Key_0:
766+ setZoomFactor (1.0 );
767+ event->accept ();
768+ return ;
769+ }
770+ }
771+
718772 QWidget::keyPressEvent (event);
719773}
720774
@@ -726,12 +780,8 @@ PDFReaderWidget::eventFilter (QObject* watched, QEvent* event) {
726780 if (wheelEvent->modifiers () & Qt::ControlModifier) {
727781 int delta= wheelEvent->angleDelta ().y ();
728782 if (delta != 0 ) {
729- if (delta > 0 ) {
730- zoomFactor_= qMin (zoomFactor_ + ZOOM_STEP , MAX_ZOOM );
731- }
732- else {
733- zoomFactor_= qMax (zoomFactor_ - ZOOM_STEP , MIN_ZOOM );
734- }
783+ double factor= 1.0 + static_cast <double > (delta) / 500.0 ;
784+ zoomFactor_ = qBound (MIN_ZOOM , zoomFactor_ * factor, MAX_ZOOM );
735785 updateZoomDisplay ();
736786 if (!pdfData_.isEmpty () && pageCount_ > 0 ) {
737787 zoomDebounceTimer_->start ();
0 commit comments