From 5b9eba9af9e9f1a2e19f9e25f331d5bccdd9a2a8 Mon Sep 17 00:00:00 2001 From: Jim Evins Date: Sun, 21 Jul 2019 13:17:45 -0400 Subject: [PATCH] Tweaked look of image object placeholders. --- glabels/images/checkerboard.png | Bin 177 -> 2917 bytes model/ModelImageObject.cpp | 62 ++++++++++++++++++++++++++++++++ translations/glabels_C.ts | 7 ++++ 3 files changed, 69 insertions(+) diff --git a/glabels/images/checkerboard.png b/glabels/images/checkerboard.png index c97f40e2e67b6e4362b24b2936daa6e99d021dd1..575edc368640edeee32cfb7b4a385ee9ca4d8f4f 100644 GIT binary patch literal 2917 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 ljN(?05|w0P(6wA7;OCpQgbEamTas2JY zjl2vBJj@6Ala{=(cPvv9l@{oHba&_GQbw7ERZI%Tl{du?-wZyTFJCVpm9e0a4M-dm aXX9O#bgPrkpxO>-5`(9!pUXO@geCw&H7yhX diff --git a/model/ModelImageObject.cpp b/model/ModelImageObject.cpp index bc9eb18..9c30a42 100644 --- a/model/ModelImageObject.cpp +++ b/model/ModelImageObject.cpp @@ -40,6 +40,17 @@ namespace glabels QImage* ModelImageObject::smDefaultImage = nullptr; + // + // Private + // + namespace + { + const QColor fillColor = QColor( 224, 224, 224, 255 ); + const QColor labelColor = QColor( 102, 102, 102, 255 ); + const Distance pad = Distance::pt(2); + } + + /// /// Constructor /// @@ -436,10 +447,61 @@ namespace glabels if ( inEditor && (mFilenameNode.isField() || (!mImage && !mSvgRenderer) ) ) { + // + // Render default place holder image + // painter->save(); painter->setRenderHint( QPainter::SmoothPixmapTransform, false ); painter->drawImage( destRect, *smDefaultImage ); painter->restore(); + + // + // Print label on top of place holder image, if we have room + // + if ( (mW > 6*pad) && (mH > 4*pad) ) + { + QString labelText = tr("No image"); + if ( mFilenameNode.isField() ) + { + labelText = QString( "${%1}" ).arg( mFilenameNode.data() ); + } + + // Determine font size for labelText + QFont font( "Sans" ); + font.setPointSizeF( 6 ); + + QFontMetricsF fm( font ); + QRectF textRect = fm.boundingRect( labelText ); + + double wPts = (mW - 2*pad).pt(); + double hPts = (mH - 2*pad).pt(); + if ( (wPts < textRect.width()) || (hPts < textRect.height()) ) + { + double scaleX = wPts / textRect.width(); + double scaleY = hPts / textRect.height(); + font.setPointSizeF( 6 * std::min( scaleX, scaleY ) ); + } + + // Render hole for text (font size may have changed above) + fm = QFontMetricsF( font ); + textRect = fm.boundingRect( labelText ); + + QRectF holeRect( (mW.pt() - textRect.width())/2 - pad.pt(), + (mH.pt() - textRect.height())/2 - pad.pt(), + textRect.width() + 2*pad.pt(), + textRect.height() + 2*pad.pt() ); + + painter->setPen( Qt::NoPen ); + painter->setBrush( QBrush( fillColor ) ); + painter->drawRect( holeRect ); + + // Render text + painter->setFont( font ); + painter->setPen( QPen( labelColor ) ); + painter->drawText( QRectF( 0, 0, mW.pt(), mH.pt() ), + Qt::AlignCenter, + labelText ); + } } else if ( mImage ) { diff --git a/translations/glabels_C.ts b/translations/glabels_C.ts index 9a9f61b..78a87d5 100644 --- a/translations/glabels_C.ts +++ b/translations/glabels_C.ts @@ -2550,6 +2550,13 @@ + + glabels::model::ModelImageObject + + No image + + + glabels::model::ModelTextObject