diff --git a/glabels/MainWindow.cpp b/glabels/MainWindow.cpp index dce81fd..953ec1c 100644 --- a/glabels/MainWindow.cpp +++ b/glabels/MainWindow.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -57,13 +58,9 @@ namespace glabels MainWindow::MainWindow() : mModel(0) { - mView = new View(); - mObjectEditor = new ObjectEditor(); - createActions(); createMenus(); createToolBars(); - createStatusBar(); QWidget* editorPage = createEditorPage(); QWidget* mergePage = createMergePage(); @@ -77,6 +74,8 @@ namespace glabels setCentralWidget( mNotebook ); + createStatusBar(); + setDocVerbsEnabled( false ); setPasteVerbsEnabled( false ); setTitle(); @@ -573,9 +572,17 @@ namespace glabels { QWidget* page = new QWidget; + mView = new View(); + mObjectEditor = new ObjectEditor(); + + QScrollArea* scrollArea = new QScrollArea(); + scrollArea->setMinimumSize( 640, 450 ); + scrollArea->setWidgetResizable( true ); + scrollArea->setWidget( mView ); + QVBoxLayout* editorVLayout = new QVBoxLayout; editorVLayout->addWidget( editorToolBar ); - editorVLayout->addWidget( mView ); + editorVLayout->addWidget( scrollArea ); QHBoxLayout* editorHLayout = new QHBoxLayout; editorHLayout->addLayout( editorVLayout ); diff --git a/glabels/View.cpp b/glabels/View.cpp index e764019..33ab5a0 100644 --- a/glabels/View.cpp +++ b/glabels/View.cpp @@ -85,8 +85,6 @@ glabels::View::View( QWidget *parent ) : QWidget(parent) mInObjectCreateMode = false; setMouseTracking( true ); - - setMinimumSize( 640, 450 ); } @@ -234,8 +232,12 @@ glabels::View::zoomToFit() using std::min; using std::max; - double x_scale = ( width() - ZOOM_TO_FIT_PAD ) / mModel->w(); - double y_scale = ( height() - ZOOM_TO_FIT_PAD ) / mModel->h(); + // Assumes parent widget (QScrollArea) exists + double wPixels = parentWidget()->width(); + double hPixels = parentWidget()->height(); + + double x_scale = ( wPixels - ZOOM_TO_FIT_PAD ) / mModel->w(); + double y_scale = ( hPixels - ZOOM_TO_FIT_PAD ) / mModel->h(); double newZoom = min( x_scale, y_scale ) * PTS_PER_INCH / physicalDpiX(); // Limits @@ -278,6 +280,8 @@ glabels::View::setZoomReal( double zoom, bool zoomToFitFlag ) /* Actual scale depends on DPI of display (assume DpiX == DpiY). */ mScale = zoom * physicalDpiX() / PTS_PER_INCH; + setMinimumSize( mScale*mModel->w(), mScale*mModel->h() ); + /* Adjust origin to center label in widget. */ mX0 = (width()/mScale - mModel->w()) / 2; mY0 = (height()/mScale - mModel->h()) / 2;