mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-27 00:33:48 -05:00
font size fixe in Postscript
git-svn-id: http://svn.osgeo.org/qgis/trunk@3081 c8812cc2-4d05-0410-92ff-de0c093fc19c
This commit is contained in:
parent
4091c88aaa
commit
636887b054
@ -252,7 +252,7 @@ void QgsComposer::print(void)
|
||||
|
||||
double scale = resolution / 25.4 / mComposition->scale();
|
||||
|
||||
mComposition->setPlotStyle ( QgsComposition::Print );
|
||||
mComposition->setPlotStyle ( QgsComposition::Postscript );
|
||||
|
||||
if ( mPrinter->outputToFile() ) {
|
||||
std::cout << "Print to file" << std::endl;
|
||||
|
@ -115,22 +115,20 @@ void QgsComposerLabel::draw ( QPainter & painter )
|
||||
{
|
||||
std::cout << "QgsComposerLabel::render" << std::endl;
|
||||
|
||||
int size = (int) ( 25.4 * mComposition->scale() * mFont.pointSize() / 72);
|
||||
QFont font ( mFont );
|
||||
font.setPointSize ( size );
|
||||
float size = 25.4 * mComposition->scale() * mFont.pointSizeFloat() / 72;
|
||||
|
||||
QFontMetrics metrics ( font );
|
||||
QFont font ( mFont );
|
||||
font.setPointSizeFloat ( size );
|
||||
|
||||
// Fonts for rendering
|
||||
|
||||
// It seems that font pointSize is used in points in Postscript, that means it depends
|
||||
// on resolution!
|
||||
if ( plotStyle() == QgsComposition::Print ) {
|
||||
size = (int) ( 72.0 * size / mComposition->resolution() );
|
||||
}
|
||||
|
||||
font.setPointSize ( size );
|
||||
// I have no idea why 2.54 - it is an empirical value
|
||||
if ( plotStyle() == QgsComposition::Postscript ) {
|
||||
size = 2.54 * 72.0 * mFont.pointSizeFloat() / mComposition->resolution();
|
||||
}
|
||||
|
||||
font.setPointSizeFloat ( size );
|
||||
|
||||
// Not sure about Style Strategy, QFont::PreferMatch ?
|
||||
font.setStyleStrategy ( (QFont::StyleStrategy) (QFont::PreferOutline | QFont::PreferAntialias ) );
|
||||
|
||||
@ -139,13 +137,17 @@ void QgsComposerLabel::draw ( QPainter & painter )
|
||||
|
||||
int x = (int) QCanvasPolygonalItem::x();
|
||||
int y = (int) QCanvasPolygonalItem::y();
|
||||
int w = metrics.width ( mText );
|
||||
int h = metrics.height();
|
||||
|
||||
//painter.drawText( (int)(x-w/2), (int)(y+h/2), mText );
|
||||
|
||||
QRect r = boundingRect();
|
||||
|
||||
/*
|
||||
QBrush brush ( QColor(255,255,255) );
|
||||
painter.setBrush ( brush );
|
||||
painter.drawRect ( r );
|
||||
*/
|
||||
|
||||
painter.drawText ( r, Qt::AlignCenter|Qt::SingleLine , mText );
|
||||
//painter.drawText ( r.x(), (int)(r.y()+r.height()), mText );
|
||||
|
||||
// Show selected / Highlight
|
||||
if ( mSelected && plotStyle() == QgsComposition::Preview ) {
|
||||
@ -178,17 +180,23 @@ QRect QgsComposerLabel::boundingRect ( void ) const
|
||||
{
|
||||
// Recalculate sizes according to current font size
|
||||
|
||||
int size = (int) ( 25.4 * mComposition->scale() * mFont.pointSize() / 72);
|
||||
float size = 25.4 * mComposition->scale() * mFont.pointSize() / 72;
|
||||
|
||||
QFont font ( mFont );
|
||||
font.setPointSize ( size );
|
||||
|
||||
font.setPointSizeFloat ( size );
|
||||
|
||||
QFontMetrics metrics ( font );
|
||||
|
||||
|
||||
int x = (int) QCanvasPolygonalItem::x();
|
||||
int y = (int) QCanvasPolygonalItem::y();
|
||||
int w = metrics.width ( mText );
|
||||
int h = metrics.height();
|
||||
QRect r ( (int)(x - w/2), (int) (y - h/2), w, h );
|
||||
int h = metrics.height() ;
|
||||
|
||||
|
||||
// make the buffer bigger because the output in Postscript can be different
|
||||
int buf = (int) (size / 20 * mComposition->scale());
|
||||
|
||||
QRect r ( (int)(x - w/2 - buf), (int) (y - h/2), w+2*buf, h );
|
||||
|
||||
return r;
|
||||
}
|
||||
|
@ -137,7 +137,7 @@ void QgsComposerMap::draw ( QPainter *painter, QgsRect *extent, QgsMapToPixel *t
|
||||
|
||||
if ( vector->labelOn() ) {
|
||||
double fontScale = 25.4 * mFontScale * mComposition->scale() / 72;
|
||||
if ( plotStyle() == QgsComposition::Print ) {
|
||||
if ( plotStyle() == QgsComposition::Postscript ) {
|
||||
fontScale *= 72.0 / mComposition->resolution();
|
||||
}
|
||||
vector->drawLabels ( painter, extent, transform, device, fontScale );
|
||||
@ -227,7 +227,8 @@ void QgsComposerMap::draw ( QPainter & painter )
|
||||
painter.restore();
|
||||
|
||||
} else if ( (plotStyle() == QgsComposition::Preview && mPreviewMode == Render) ||
|
||||
plotStyle() == QgsComposition::Print )
|
||||
plotStyle() == QgsComposition::Print ||
|
||||
plotStyle() == QgsComposition::Postscript )
|
||||
{
|
||||
std::cout << "render" << std::endl;
|
||||
|
||||
|
@ -211,21 +211,20 @@ QRect QgsComposerScalebar::render ( QPainter *p )
|
||||
|
||||
|
||||
// Font size in canvas units
|
||||
int size = (int) ( 25.4 * mComposition->scale() * mFont.pointSize() / 72);
|
||||
float size = 25.4 * mComposition->scale() * mFont.pointSizeFloat() / 72;
|
||||
|
||||
// Metrics
|
||||
QFont font ( mFont );
|
||||
font.setPointSize ( size );
|
||||
font.setPointSizeFloat ( size );
|
||||
QFontMetrics metrics ( font );
|
||||
|
||||
// Fonts for rendering
|
||||
|
||||
// It seems that font pointSize is used in points in Postscript, that means it depends
|
||||
// on resolution!
|
||||
if ( plotStyle() == QgsComposition::Print ) {
|
||||
size = (int) ( 72.0 * size / mComposition->resolution() );
|
||||
// I have no idea why 2.54 - it is an empirical value
|
||||
if ( plotStyle() == QgsComposition::Postscript ) {
|
||||
size = 2.54 * 72.0 * mFont.pointSizeFloat() / mComposition->resolution();
|
||||
}
|
||||
font.setPointSize ( size );
|
||||
font.setPointSizeFloat ( size );
|
||||
|
||||
// Not sure about Style Strategy, QFont::PreferMatch?
|
||||
font.setStyleStrategy ( (QFont::StyleStrategy) (QFont::PreferOutline | QFont::PreferAntialias) );
|
||||
|
@ -192,9 +192,9 @@ QRect QgsComposerVectorLegend::render ( QPainter *p )
|
||||
|
||||
std::cout << "mComposition->scale() = " << mComposition->scale() << std::endl;
|
||||
// Font size in canvas units
|
||||
int titleSize = (int) ( 25.4 * mComposition->scale() * mTitleFont.pointSize() / 72);
|
||||
int sectionSize = (int) ( 25.4 * mComposition->scale() * mSectionFont.pointSize() / 72);
|
||||
int size = (int) ( 25.4 * mComposition->scale() * mFont.pointSize() / 72);
|
||||
float titleSize = 25.4 * mComposition->scale() * mTitleFont.pointSizeFloat() / 72;
|
||||
float sectionSize = 25.4 * mComposition->scale() * mSectionFont.pointSizeFloat() / 72;
|
||||
float size = 25.4 * mComposition->scale() * mFont.pointSizeFloat() / 72;
|
||||
|
||||
std::cout << "font sizes = " << titleSize << " " << sectionSize << " " << size << std::endl;
|
||||
|
||||
@ -203,27 +203,26 @@ QRect QgsComposerVectorLegend::render ( QPainter *p )
|
||||
QFont sectionFont ( mSectionFont );
|
||||
QFont font ( mFont );
|
||||
|
||||
titleFont.setPointSize ( titleSize );
|
||||
sectionFont.setPointSize ( sectionSize );
|
||||
font.setPointSize ( size );
|
||||
titleFont.setPointSizeFloat ( titleSize );
|
||||
sectionFont.setPointSizeFloat ( sectionSize );
|
||||
font.setPointSizeFloat ( size );
|
||||
|
||||
QFontMetrics titleMetrics ( titleFont );
|
||||
QFontMetrics sectionMetrics ( sectionFont );
|
||||
QFontMetrics metrics ( font );
|
||||
|
||||
// Fonts for rendering
|
||||
|
||||
// It seems that font pointSize is used in points in Postscript, that means it depends
|
||||
// on resolution!
|
||||
if ( plotStyle() == QgsComposition::Print ) {
|
||||
titleSize = (int) ( 72.0 * titleSize / mComposition->resolution() );
|
||||
sectionSize = (int) ( 72.0 * sectionSize / mComposition->resolution() );
|
||||
size = (int) ( 72.0 * size / mComposition->resolution() );
|
||||
|
||||
// I have no idea why 2.54 - it is an empirical value
|
||||
if ( plotStyle() == QgsComposition::Postscript) {
|
||||
titleSize = 2.54 * 72.0 * mTitleFont.pointSizeFloat() / mComposition->resolution();
|
||||
sectionSize = 2.54 * 72.0 * mSectionFont.pointSizeFloat() / mComposition->resolution();
|
||||
size = 2.54 * 72.0 * mFont.pointSizeFloat() / mComposition->resolution();
|
||||
}
|
||||
|
||||
titleFont.setPointSize ( titleSize );
|
||||
sectionFont.setPointSize ( sectionSize );
|
||||
font.setPointSize ( size );
|
||||
titleFont.setPointSizeFloat ( titleSize );
|
||||
sectionFont.setPointSizeFloat ( sectionSize );
|
||||
font.setPointSizeFloat ( size );
|
||||
|
||||
// Not sure about Style Strategy, QFont::PreferMatch?
|
||||
titleFont.setStyleStrategy ( (QFont::StyleStrategy) (QFont::PreferOutline | QFont::PreferAntialias) );
|
||||
@ -430,10 +429,12 @@ QRect QgsComposerVectorLegend::render ( QPainter *p )
|
||||
lab = itemLabels[icnt];
|
||||
}
|
||||
|
||||
// drawText (x, y w, h, ...) was cutting last letter (the box was tto small)
|
||||
QRect br = metrics.boundingRect ( lab );
|
||||
x = (int) ( 2*mMargin + mSymbolWidth );
|
||||
y = (int) ( localHeight + symbolHeight/2 - br.height()/2 );
|
||||
painter->drawText( x, y, br.width(), br.height(), Qt::AlignLeft|Qt::AlignVCenter, lab );
|
||||
y = (int) ( localHeight + symbolHeight/2 + ( metrics.height()/2 - metrics.descent()) );
|
||||
|
||||
painter->drawText( x, y, lab );
|
||||
|
||||
int w = 3*mMargin + mSymbolWidth + metrics.width(lab);
|
||||
if ( w > width ) width = w;
|
||||
@ -514,7 +515,8 @@ void QgsComposerVectorLegend::draw ( QPainter & painter )
|
||||
painter.restore();
|
||||
|
||||
} else if ( (plotStyle() == QgsComposition::Preview && mPreviewMode == Render) ||
|
||||
plotStyle() == QgsComposition::Print )
|
||||
plotStyle() == QgsComposition::Print ||
|
||||
plotStyle() == QgsComposition::Postscript )
|
||||
{
|
||||
std::cout << "render" << std::endl;
|
||||
|
||||
@ -611,15 +613,15 @@ void QgsComposerVectorLegend::recalculate ( void )
|
||||
|
||||
// Title and section font
|
||||
mTitleFont = mFont;
|
||||
mTitleFont.setPointSize ( (int) (1.4 * mFont.pointSize()) );
|
||||
mTitleFont.setPointSizeFloat ( 1.4 * mFont.pointSizeFloat());
|
||||
mSectionFont = mFont;
|
||||
mSectionFont.setPointSize ( (int) (1.2 * mFont.pointSize()) );
|
||||
mSectionFont.setPointSizeFloat ( 1.2 * mFont.pointSizeFloat() );
|
||||
|
||||
std::cout << "font size = " << mFont.pointSize() << std::endl;
|
||||
std::cout << "title font size = " << mTitleFont.pointSize() << std::endl;
|
||||
std::cout << "font size = " << mFont.pointSizeFloat() << std::endl;
|
||||
std::cout << "title font size = " << mTitleFont.pointSizeFloat() << std::endl;
|
||||
|
||||
// Font size in canvas units
|
||||
int size = (int) ( 25.4 * mComposition->scale() * mFont.pointSize() / 72);
|
||||
float size = 25.4 * mComposition->scale() * mFont.pointSizeFloat() / 72;
|
||||
|
||||
mMargin = (int) ( 0.9 * size );
|
||||
mSymbolHeight = (int) ( 1.3 * size );
|
||||
|
@ -93,7 +93,8 @@ public:
|
||||
/** \brief Plot type */
|
||||
enum PlotStyle {
|
||||
Preview = 0, // Use cache etc
|
||||
Print // Render well
|
||||
Print, // Render well
|
||||
Postscript // Fonts need different scaling!
|
||||
};
|
||||
|
||||
/** \brief Composition ID */
|
||||
|
Loading…
x
Reference in New Issue
Block a user