changeset 54:8dae7f6732c1

* improve label drawing logic in colour plot layer
author Chris Cannam
date Wed, 15 Mar 2006 18:21:17 +0000
parents 68869408f5c7
children 128ebfeeebee
files layer/Colour3DPlotLayer.cpp
diffstat 1 files changed, 21 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/layer/Colour3DPlotLayer.cpp	Wed Mar 15 18:11:23 2006 +0000
+++ b/layer/Colour3DPlotLayer.cpp	Wed Mar 15 18:21:17 2006 +0000
@@ -285,6 +285,7 @@
 
     QPoint illuminatePos;
     bool illuminate = v->shouldIlluminateLocalFeatures(this, illuminatePos);
+    char labelbuf[10];
 
     for (int sx = sx0 - 1; sx <= sx1; ++sx) {
 
@@ -293,11 +294,18 @@
 	if (fx + modelWindow < int(modelStart) ||
 	    fx > int(modelEnd)) continue;
 
+	int rx0 = v->getXForFrame(fx + int(modelStart));
+	int rx1 = v->getXForFrame(fx + int(modelStart) + int(modelWindow));
+
+	int w = rx1 - rx0;
+	if (w < 1) w = 1;
+
+	bool showLabel = (w > 10 &&
+			  paint.fontMetrics().width("0.000000") < w - 3 &&
+			  paint.fontMetrics().height() < (h / sh));
+
 	for (int sy = 0; sy < sh; ++sy) {
 
-	    int rx0 = v->getXForFrame(fx + int(modelStart));
-	    int rx1 = v->getXForFrame(fx + int(modelStart) + int(modelWindow));
-
 	    int ry0 = h - (sy * h) / sh - 1;
 	    int ry1 = h - ((sy + 1) * h) / sh - 2;
 	    QRgb pixel = qRgb(255, 255, 255);
@@ -307,16 +315,11 @@
 	    }
 
 	    QColor pen(255, 255, 255, 80);
-//	    QColor pen(pixel);
 	    QColor brush(pixel);
 	    brush.setAlpha(160);
-//	    paint.setPen(pen);
 	    paint.setPen(Qt::NoPen);
 	    paint.setBrush(brush);
 
-	    int w = rx1 - rx0;
-	    if (w < 1) w = 1;
-
 	    QRect r(rx0, ry0 - h / sh - 1, w, h / sh + 1);
 
 	    if (illuminate) {
@@ -327,21 +330,17 @@
 
 	    paint.drawRect(r);
 
-	    if (sx >= 0 && sx < m_cache->width() &&
-		sy >= 0 && sy < m_cache->height()) {
-		if (w > 10) {
+	    if (showLabel) {
+		if (sx >= 0 && sx < m_cache->width() &&
+		    sy >= 0 && sy < m_cache->height()) {
 		    int dv = m_cache->pixelIndex(sx, sy);
-//		    if (dv != 0 && paint.fontMetrics().height() < (h / sh)) {
-		    if (paint.fontMetrics().height() < (h / sh)) {
-			float value = m_model->getBinValue(fx, sy);
-			QString text = QString("%1").arg(value); //dv);
-			if (paint.fontMetrics().width(text) < w - 3) {
-			    paint.setPen(Qt::white);
-			    paint.drawText(rx0 + 2,
-					   ry0 - h / sh - 1 + 2 + paint.fontMetrics().ascent(),
-					   QString("%1").arg(value));
-			}
-		    }
+		    float value = m_model->getBinValue(fx, sy);
+		    sprintf(labelbuf, "%06f", value);
+		    QString text(labelbuf);
+		    paint.setPen(Qt::white);
+		    paint.drawText(rx0 + 2,
+				   ry0 - h / sh - 1 + 2 + paint.fontMetrics().ascent(),
+				   text);
 		}
 	    }
 	}