Mercurial > hg > svgui
comparison layer/LogColourScale.cpp @ 1324:13d9b422f7fe zoom
Merge from default branch
author | Chris Cannam |
---|---|
date | Mon, 17 Sep 2018 13:51:31 +0100 |
parents | a34a2a25907c |
children | f2525e6cbdf1 |
comparison
equal
deleted
inserted
replaced
1183:57d192e26331 | 1324:13d9b422f7fe |
---|---|
24 | 24 |
25 #include "LayerGeometryProvider.h" | 25 #include "LayerGeometryProvider.h" |
26 | 26 |
27 int | 27 int |
28 LogColourScale::getWidth(LayerGeometryProvider *, | 28 LogColourScale::getWidth(LayerGeometryProvider *, |
29 QPainter &paint) | 29 QPainter &paint) |
30 { | 30 { |
31 return paint.fontMetrics().width("-000.00") + 15; | 31 return paint.fontMetrics().width("-000.00") + 15; |
32 } | 32 } |
33 | 33 |
34 void | 34 void |
35 LogColourScale::paintVertical(LayerGeometryProvider *v, | 35 LogColourScale::paintVertical(LayerGeometryProvider *v, |
36 const ColourScaleLayer *layer, | 36 const ColourScaleLayer *layer, |
37 QPainter &paint, | 37 QPainter &paint, |
38 int /* x0 */, | 38 int /* x0 */, |
39 double minlog, | 39 double minlog, |
40 double maxlog) | 40 double maxlog) |
41 { | 41 { |
42 int h = v->getPaintHeight(); | 42 int h = v->getPaintHeight(); |
43 | 43 |
44 int n = 10; | 44 int n = 10; |
45 | 45 |
58 int tx = 5 + boxx + boxw; | 58 int tx = 5 + boxx + boxw; |
59 paint.drawRect(boxx, boxy, boxw, boxh); | 59 paint.drawRect(boxx, boxy, boxw, boxh); |
60 | 60 |
61 paint.save(); | 61 paint.save(); |
62 for (int y = 0; y < boxh; ++y) { | 62 for (int y = 0; y < boxh; ++y) { |
63 double val = ((boxh - y) * (maxlog - minlog)) / boxh + minlog; | 63 double val = ((boxh - y) * (maxlog - minlog)) / boxh + minlog; |
64 paint.setPen(layer->getColourForValue(v, LogRange::unmap(val))); | 64 paint.setPen(layer->getColourForValue(v, LogRange::unmap(val))); |
65 paint.drawLine(boxx + 1, y + boxy + 1, boxx + boxw, y + boxy + 1); | 65 paint.drawLine(boxx + 1, y + boxy + 1, boxx + boxw, y + boxy + 1); |
66 } | 66 } |
67 paint.restore(); | 67 paint.restore(); |
68 | 68 |
69 int dp = 0; | 69 int dp = 0; |
70 if (inc > 0) { | 70 if (inc > 0) { |
73 if (prec < 0) dp = -prec; | 73 if (prec < 0) dp = -prec; |
74 } | 74 } |
75 | 75 |
76 for (int i = 0; i < n; ++i) { | 76 for (int i = 0; i < n; ++i) { |
77 | 77 |
78 int y, ty; | 78 int y, ty; |
79 | 79 |
80 y = boxy + int(boxh - ((val - minlog) * boxh) / (maxlog - minlog)); | 80 y = boxy + int(boxh - ((val - minlog) * boxh) / (maxlog - minlog)); |
81 | 81 |
82 ty = y - paint.fontMetrics().height() + | 82 ty = y - paint.fontMetrics().height() + |
83 paint.fontMetrics().ascent() + 2; | 83 paint.fontMetrics().ascent() + 2; |
84 | 84 |
85 double dv = LogRange::unmap(val); | 85 double dv = LogRange::unmap(val); |
86 int digits = int(trunc(log10(dv))); | 86 int digits = int(trunc(log10(dv))); |
87 int sf = dp + (digits > 0 ? digits : 0); | 87 int sf = dp + (digits > 0 ? digits : 0); |
88 if (sf < 2) sf = 2; | 88 if (sf < 2) sf = 2; |
89 snprintf(buffer, buflen, "%.*g", sf, dv); | 89 snprintf(buffer, buflen, "%.*g", sf, dv); |
90 | 90 |
91 QString label = QString(buffer); | 91 QString label = QString(buffer); |
92 | 92 |
93 paint.drawLine(boxx + boxw - boxw/3, y, boxx + boxw, y); | 93 paint.drawLine(boxx + boxw - boxw/3, y, boxx + boxw, y); |
94 paint.drawText(tx, ty, label); | 94 paint.drawText(tx, ty, label); |
95 | 95 |
96 val += inc; | 96 val += inc; |
97 } | 97 } |
98 } | 98 } |