[Kst] extragear/graphics/kst/src/libkstapp

Andrew Walker arwalker at sumusltd.com
Fri Jan 5 23:37:30 CET 2007


SVN commit 620401 by arwalker:

BUG:129399 Correctly handle the printing of legends and labels. This wasn't working properly as the lineWidthAdjustmentFactor() for the border wasn't taken into account when printing.

 M  +9 -0      kstborderedviewobject.cpp  
 M  +2 -1      kstborderedviewobject.h  
 M  +21 -14    kstviewlabel.cpp  
 M  +1 -0      kstviewlabel.h  
 M  +16 -6     kstviewlegend.cpp  
 M  +1 -0      kstviewlegend.h  


--- trunk/extragear/graphics/kst/src/libkstapp/kstborderedviewobject.cpp #620400:620401
@@ -186,6 +186,15 @@
 }
 
 
+void KstBorderedViewObject::setContentsRectForDevice(const KstPainter& painter, QRect& rect) {
+  const int mpb = (_margin + _padding + _borderWidth) * painter.lineWidthAdjustmentFactor();
+  _geom.setX(rect.left() - mpb);
+  _geom.setY(rect.top() - mpb);
+  _geom.setWidth(rect.width() + 2 * mpb);
+  _geom.setHeight(rect.height() + 2 * mpb);
+}
+
+
 void KstBorderedViewObject::setContentsRect(QRect& rect) {
   const int mpb = _margin + _padding + _borderWidth;
   _geom.setX(rect.left() - mpb);
--- trunk/extragear/graphics/kst/src/libkstapp/kstborderedviewobject.h #620400:620401
@@ -104,7 +104,8 @@
     virtual void paintSelf(KstPainter& p, const QRegion& bounds);
 
     QRect contentsRectForDevice(const KstPainter& painter) const;
-
+    virtual void setContentsRectForDevice(const KstPainter& painter, QRect& rect);
+  
   protected:
     virtual void readBinary(QDataStream& str);
     virtual void writeBinary(QDataStream& str);
--- trunk/extragear/graphics/kst/src/libkstapp/kstviewlabel.cpp #620400:620401
@@ -382,16 +382,15 @@
   if (p.type() == KstPainter::P_PRINT || p.type() == KstPainter::P_EXPORT) {
     int absFontSizeOld = _absFontSize;
     
-    adjustSizeForText(_parent->geometry());
+    QRect cr(contentsRectForDevice(p));
+    cr.setSize(sizeForText(_parent->geometry()));
+    setContentsRectForDevice(p, cr);    
     KstBorderedViewObject::paintSelf(p, bounds);
-    const QRect geom(contentsRectForDevice(p));
-    p.setViewport(geom);
-    p.setWindow(0, 0, geom.width(), geom.height());
-
+    
+    p.translate(cr.left(), cr.top());
     if (!_transparent) {
-      p.fillRect(0, 0, geom.width(), geom.height(), backgroundColor());
+      p.fillRect(0, 0, cr.width(), cr.height(), backgroundColor());
     }
-
     drawToPainter(_parsed, p);
     
     _absFontSize = absFontSizeOld;
@@ -463,6 +462,13 @@
 
 
 void KstViewLabel::adjustSizeForText(QRect w) {
+  QRect cr(contentsRect());
+  cr.setSize(sizeForText(w));
+  setContentsRect(cr);
+}
+
+
+QSize KstViewLabel::sizeForText(QRect w) {
   double x_s, y_s;
   
   x_s = y_s = _fontSize + (double)KstSettings::globalSettings()->plotFontSize;
@@ -492,12 +498,13 @@
   }
  
   QSize sz(kMax(1, _textWidth), kMax(1, _textHeight));
+
   if (int(_rotation) != 0 && int(_rotation) != 180) {
     QPointArray pts(4);
     pts[0] = QPoint(0, 0);
     pts[1] = QPoint(0, _textHeight);
-    pts[2] = QPoint(_textWidth, 0);
-    pts[3] = QPoint(_textWidth, _textHeight);
+    pts[2] = QPoint(_textWidth, _textHeight);
+    pts[3] = QPoint(_textWidth, 0);
     double theta = M_PI * (int(_rotation) % 360) / 180;
     double sina = sin(theta);
     double cosa = cos(theta);
@@ -507,26 +514,26 @@
 
     if (_parent) {
       QRect r(position(), pts.boundingRect().size());
+      r.setSize(r.size() + QSize(2 * _labelMargin * _ascent / 10, 2 * _labelMargin * _ascent / 10));
       sz = r.intersect(_parent->geometry()).size();
     } else {
       sz = pts.boundingRect().size();
+      sz += QSize(2 * _labelMargin * _ascent / 10, 2 * _labelMargin * _ascent / 10);
     }
   } else {
     if (_parent) {
       QRect r(position(), sz);
+      r.setSize(r.size() + QSize(2 * _labelMargin * _ascent / 10, 2 * _labelMargin * _ascent / 10));
       sz = r.intersect(_parent->geometry()).size();
     }
   }
-
-  QRect cr(contentsRect());
-  cr.setSize(sz + QSize(2 * _labelMargin * _ascent / 10, 2 * _labelMargin * _ascent / 10));
-  setContentsRect(cr);
+    
+  return sz;
 }
 
 
 bool KstViewLabel::layoutPopupMenu(KPopupMenu *menu, const QPoint& pos, KstViewObjectPtr topLevelParent) {
   KstViewObject::layoutPopupMenu(menu, pos, topLevelParent);
-  //menu->insertItem(i18n("&Adjust Size"), this, SLOT(adjustSizeForText()));
   return true;
 }
 
--- trunk/extragear/graphics/kst/src/libkstapp/kstviewlabel.h #620400:620401
@@ -102,6 +102,7 @@
 
   public slots:
     void adjustSizeForText(QRect w);
+    QSize sizeForText(QRect w);
     void reparse();
 
   protected:
--- trunk/extragear/graphics/kst/src/libkstapp/kstviewlegend.cpp #620400:620401
@@ -363,14 +363,17 @@
 void KstViewLegend::paintSelf(KstPainter& p, const QRegion& bounds) {
   if (p.type() == KstPainter::P_PRINT || p.type() == KstPainter::P_EXPORT) {
     p.save();
-    adjustSizeForText(_parent->geometry());
+    QRect cr(contentsRectForDevice(p));
+    cr.setSize(sizeForText(_parent->geometry()));
+    setContentsRectForDevice(p, cr);    
     KstBorderedViewObject::paintSelf(p, bounds);
-    const QRect cr(contentsRectForDevice(p));
+    
     p.translate(cr.left(), cr.top());
     if (!_transparent) {
       p.fillRect(0, 0, cr.width(), cr.height(), _backgroundColor);
     }
     drawToPainter(p);
+    
     p.restore();
   } else {
     const QRect cr(contentsRect());
@@ -440,6 +443,13 @@
 
 
 void KstViewLegend::adjustSizeForText(QRect w) {
+  QRect cr(contentsRect());
+  cr.setSize(sizeForText(w));
+  setContentsRect(cr);
+}
+
+
+QSize KstViewLegend::sizeForText(QRect w) {
   double x_s, y_s;
 
   x_s = y_s = _fontSize + (double)KstSettings::globalSettings()->plotFontSize;
@@ -480,15 +490,15 @@
   }
 
   QSize sz(width, height);
+  
+  sz += QSize(2 * _legendMargin * _ascent / 10, 2 * _legendMargin * _ascent / 10);
 
   if (_parent) {
     QRect r(position(), sz);
     sz = r.intersect(_parent->geometry()).size();
   }
-
-  QRect cr(contentsRect());
-  cr.setSize(sz + QSize(2 * _legendMargin * _ascent / 10, 2 * _legendMargin * _ascent / 10));
-  setContentsRect(cr);
+    
+  return sz;
 }
 
 void KstViewLegend::modifiedLegendEntry() {
--- trunk/extragear/graphics/kst/src/libkstapp/kstviewlegend.h #620400:620401
@@ -101,6 +101,7 @@
 
   public slots:
     void adjustSizeForText(QRect w);
+    QSize sizeForText(QRect w);
     void modifiedLegendEntry(void);
 
   protected:


More information about the Kst mailing list