chore: tweak fit-in-view menu action behavior
This commit is contained in:
parent
635199b85b
commit
4c07a89ca3
|
@ -75,35 +75,35 @@ void GraphicsView::showImage(const QPixmap &pixmap)
|
|||
{
|
||||
resetTransform();
|
||||
scene()->showImage(pixmap);
|
||||
checkAndDoFitInView();
|
||||
displayScene();
|
||||
}
|
||||
|
||||
void GraphicsView::showImage(const QImage &image)
|
||||
{
|
||||
resetTransform();
|
||||
scene()->showImage(QPixmap::fromImage(image));
|
||||
checkAndDoFitInView();
|
||||
displayScene();
|
||||
}
|
||||
|
||||
void GraphicsView::showText(const QString &text)
|
||||
{
|
||||
resetTransform();
|
||||
scene()->showText(text);
|
||||
checkAndDoFitInView();
|
||||
displayScene();
|
||||
}
|
||||
|
||||
void GraphicsView::showSvg(const QString &filepath)
|
||||
{
|
||||
resetTransform();
|
||||
scene()->showSvg(filepath);
|
||||
checkAndDoFitInView();
|
||||
displayScene();
|
||||
}
|
||||
|
||||
void GraphicsView::showAnimated(const QString &filepath)
|
||||
{
|
||||
resetTransform();
|
||||
scene()->showAnimated(filepath);
|
||||
checkAndDoFitInView();
|
||||
displayScene();
|
||||
}
|
||||
|
||||
GraphicsScene *GraphicsView::scene() const
|
||||
|
@ -196,16 +196,22 @@ void GraphicsView::fitByOrientation(Qt::Orientation ori, bool scaleDownOnly)
|
|||
emit navigatorViewRequired(!isThingSmallerThanWindowWith(transform()), transform());
|
||||
}
|
||||
|
||||
void GraphicsView::checkAndDoFitInView(bool markItOnAnyway)
|
||||
void GraphicsView::displayScene()
|
||||
{
|
||||
if (!isThingSmallerThanWindowWith(transform())) {
|
||||
m_enableFitInView = true;
|
||||
if (isSceneBiggerThanView()) {
|
||||
fitInView(sceneRect(), Qt::KeepAspectRatio);
|
||||
}
|
||||
|
||||
if (markItOnAnyway) {
|
||||
m_enableFitInView = true;
|
||||
}
|
||||
|
||||
bool GraphicsView::isSceneBiggerThanView() const
|
||||
{
|
||||
if (!isThingSmallerThanWindowWith(transform())) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Automately do fit in view when viewport(window) smaller than image original size.
|
||||
|
|
|
@ -32,7 +32,8 @@ public:
|
|||
void fitInView(const QRectF &rect, Qt::AspectRatioMode aspectRadioMode = Qt::IgnoreAspectRatio);
|
||||
void fitByOrientation(Qt::Orientation ori = Qt::Horizontal, bool scaleDownOnly = false);
|
||||
|
||||
void checkAndDoFitInView(bool markItOnAnyway = true);
|
||||
void displayScene();
|
||||
bool isSceneBiggerThanView() const;
|
||||
void setEnableAutoFitInView(bool enable = true);
|
||||
|
||||
static QTransform resetScale(const QTransform & orig);
|
||||
|
@ -61,6 +62,9 @@ private:
|
|||
void setCheckerboardEnabled(bool enabled, bool invertColor = false);
|
||||
void applyTransformationModeByScaleFactor();
|
||||
|
||||
// Consider switch to 3 state for "no fit", "always fit" and "fit when view is smaller"?
|
||||
// ... or even more? e.g. "fit/snap width" things...
|
||||
// Currently it's "no fit" when it's false and "fit when view is smaller" when it's true.
|
||||
bool m_enableFitInView = false;
|
||||
bool m_checkerboardEnabled = false;
|
||||
bool m_isLastCheckerboardColorInverted = false;
|
||||
|
|
|
@ -120,7 +120,7 @@ MainWindow::MainWindow(QWidget *parent)
|
|||
connect(m_bottomButtonGroup, &BottomButtonGroup::rotateRightBtnClicked,
|
||||
this, [ = ](){
|
||||
m_graphicsView->rotateView();
|
||||
m_graphicsView->checkAndDoFitInView();
|
||||
m_graphicsView->displayScene();
|
||||
m_gv->setVisible(false);
|
||||
});
|
||||
|
||||
|
@ -493,12 +493,12 @@ void MainWindow::toggleStayOnTop()
|
|||
show();
|
||||
}
|
||||
|
||||
bool MainWindow::stayOnTop()
|
||||
bool MainWindow::stayOnTop() const
|
||||
{
|
||||
return windowFlags().testFlag(Qt::WindowStaysOnTopHint);
|
||||
}
|
||||
|
||||
bool MainWindow::canPaste()
|
||||
bool MainWindow::canPaste() const
|
||||
{
|
||||
const QMimeData * clipboardData = QApplication::clipboard()->mimeData();
|
||||
if (clipboardData->hasImage()) {
|
||||
|
@ -565,10 +565,8 @@ void MainWindow::on_actionHorizontalFlip_triggered()
|
|||
|
||||
void MainWindow::on_actionFitInView_triggered()
|
||||
{
|
||||
// TODO: maybe do it if window is smaller than original image size?
|
||||
m_graphicsView->setEnableAutoFitInView(false);
|
||||
|
||||
m_graphicsView->fitInView(m_gv->sceneRect(), Qt::KeepAspectRatio);
|
||||
m_graphicsView->setEnableAutoFitInView(m_graphicsView->scaleFactor() <= 1);
|
||||
}
|
||||
|
||||
void MainWindow::on_actionFitByWidth_triggered()
|
||||
|
|
|
@ -53,8 +53,8 @@ protected slots:
|
|||
void toggleCheckerboard();
|
||||
void toggleProtectedMode();
|
||||
void toggleStayOnTop();
|
||||
bool stayOnTop();
|
||||
bool canPaste();
|
||||
bool stayOnTop() const;
|
||||
bool canPaste() const;
|
||||
void quitAppAction(bool force = false);
|
||||
void toggleFullscreen();
|
||||
void toggleMaximize();
|
||||
|
|
Loading…
Reference in New Issue
Block a user