comparison view/View.cpp @ 1148:c0d841cb8ab9 tony-2.0-integration

Merge latest SV 3.0 branch code
author Chris Cannam
date Fri, 19 Aug 2016 15:58:57 +0100
parents 179ea8a2f650
children 0edfed2c8482
comparison
equal deleted inserted replaced
1009:96cf499fad62 1148:c0d841cb8ab9
22 #include "base/Preferences.h" 22 #include "base/Preferences.h"
23 #include "ViewProxy.h" 23 #include "ViewProxy.h"
24 24
25 #include "layer/TimeRulerLayer.h" 25 #include "layer/TimeRulerLayer.h"
26 #include "layer/SingleColourLayer.h" 26 #include "layer/SingleColourLayer.h"
27 #include "layer/PaintAssistant.h"
28
27 #include "data/model/PowerOfSqrtTwoZoomConstraint.h" 29 #include "data/model/PowerOfSqrtTwoZoomConstraint.h"
28 #include "data/model/RangeSummarisableTimeValueModel.h" 30 #include "data/model/RangeSummarisableTimeValueModel.h"
29 31
30 #include "widgets/IconLoader.h" 32 #include "widgets/IconLoader.h"
31 33
47 #include <unistd.h> 49 #include <unistd.h>
48 50
49 //#define DEBUG_VIEW 1 51 //#define DEBUG_VIEW 1
50 //#define DEBUG_VIEW_WIDGET_PAINT 1 52 //#define DEBUG_VIEW_WIDGET_PAINT 1
51 53
52
53 View::View(QWidget *w, bool showProgress) : 54 View::View(QWidget *w, bool showProgress) :
54 QFrame(w), 55 QFrame(w),
56 m_id(getNextId()),
55 m_centreFrame(0), 57 m_centreFrame(0),
56 m_zoomLevel(1024), 58 m_zoomLevel(1024),
57 m_followPan(true), 59 m_followPan(true),
58 m_followZoom(true), 60 m_followZoom(true),
59 m_followPlay(PlaybackScrollPageWithCentre), 61 m_followPlay(PlaybackScrollPageWithCentre),
363 } 365 }
364 366
365 sv_frame_t 367 sv_frame_t
366 View::getFrameForX(int x) const 368 View::getFrameForX(int x) const
367 { 369 {
368 int z = m_zoomLevel; 370 sv_frame_t z = m_zoomLevel; // nb not just int, or multiplication may overflow
369 sv_frame_t frame = m_centreFrame - (width()/2) * z; 371 sv_frame_t frame = m_centreFrame - (width()/2) * z;
370 372
373 frame = (frame / z) * z; // this is start frame
374 frame = frame + x * z;
375
371 #ifdef DEBUG_VIEW_WIDGET_PAINT 376 #ifdef DEBUG_VIEW_WIDGET_PAINT
372 SVDEBUG << "View::getFrameForX(" << x << "): z = " << z << ", m_centreFrame = " << m_centreFrame << ", width() = " << width() << ", frame = " << frame << endl; 377 cerr << "View::getFrameForX(" << x << "): z = " << z << ", m_centreFrame = " << m_centreFrame << ", width() = " << width() << ", frame = " << frame << endl;
373 #endif 378 #endif
374 379
375 frame = (frame / z) * z; // this is start frame 380 return frame;
376 return frame + x * z;
377 } 381 }
378 382
379 double 383 double
380 View::getYForFrequency(double frequency, 384 View::getYForFrequency(double frequency,
381 double minf, 385 double minf,
409 return h - (h * (frequency - minf)) / (maxf - minf); 413 return h - (h * (frequency - minf)) / (maxf - minf);
410 } 414 }
411 } 415 }
412 416
413 double 417 double
414 View::getFrequencyForY(int y, 418 View::getFrequencyForY(double y,
415 double minf, 419 double minf,
416 double maxf, 420 double maxf,
417 bool logarithmic) const 421 bool logarithmic) const
418 { 422 {
419 int h = height(); 423 double h = height();
420 424
421 if (logarithmic) { 425 if (logarithmic) {
422 426
423 static double lastminf = 0.0, lastmaxf = 0.0; 427 static double lastminf = 0.0, lastmaxf = 0.0;
424 static double logminf = 0.0, logmaxf = 0.0; 428 static double logminf = 0.0, logmaxf = 0.0;
806 m_followZoom = f; 810 m_followZoom = f;
807 emit propertyContainerPropertyChanged(m_propertyContainer); 811 emit propertyContainerPropertyChanged(m_propertyContainer);
808 } 812 }
809 813
810 void 814 void
811 View::drawVisibleText(QPainter &paint, int x, int y, QString text, TextStyle style) const
812 {
813 if (style == OutlinedText || style == OutlinedItalicText) {
814
815 paint.save();
816
817 if (style == OutlinedItalicText) {
818 QFont f(paint.font());
819 f.setItalic(true);
820 paint.setFont(f);
821 }
822
823 QColor penColour, surroundColour, boxColour;
824
825 penColour = getForeground();
826 surroundColour = getBackground();
827 boxColour = surroundColour;
828 boxColour.setAlpha(127);
829
830 paint.setPen(Qt::NoPen);
831 paint.setBrush(boxColour);
832
833 QRect r = paint.fontMetrics().boundingRect(text);
834 r.translate(QPoint(x, y));
835 // cerr << "drawVisibleText: r = " << r.x() << "," <<r.y() << " " << r.width() << "x" << r.height() << endl;
836 paint.drawRect(r);
837 paint.setBrush(Qt::NoBrush);
838
839 paint.setPen(surroundColour);
840
841 for (int dx = -1; dx <= 1; ++dx) {
842 for (int dy = -1; dy <= 1; ++dy) {
843 if (!(dx || dy)) continue;
844 paint.drawText(x + dx, y + dy, text);
845 }
846 }
847
848 paint.setPen(penColour);
849
850 paint.drawText(x, y, text);
851
852 paint.restore();
853
854 } else {
855
856 cerr << "ERROR: View::drawVisibleText: Boxed style not yet implemented!" << endl;
857 }
858 }
859
860 void
861 View::setPlaybackFollow(PlaybackFollowMode m) 815 View::setPlaybackFollow(PlaybackFollowMode m)
862 { 816 {
863 m_followPlay = m; 817 m_followPlay = m;
864 emit propertyContainerPropertyChanged(m_propertyContainer); 818 emit propertyContainerPropertyChanged(m_propertyContainer);
865 } 819 }
2365 2319
2366 dxy = r.y() + r.height() + fontAscent + 2; 2320 dxy = r.y() + r.height() + fontAscent + 2;
2367 } 2321 }
2368 2322
2369 if (axs != "") { 2323 if (axs != "") {
2370 drawVisibleText(paint, axx, axy, axs, OutlinedText); 2324 PaintAssistant::drawVisibleText(this, paint, axx, axy, axs, PaintAssistant::OutlinedText);
2371 axy += fontHeight; 2325 axy += fontHeight;
2372 } 2326 }
2373 2327
2374 if (ays != "") { 2328 if (ays != "") {
2375 drawVisibleText(paint, axx, axy, ays, OutlinedText); 2329 PaintAssistant::drawVisibleText(this, paint, axx, axy, ays, PaintAssistant::OutlinedText);
2376 axy += fontHeight; 2330 axy += fontHeight;
2377 } 2331 }
2378 2332
2379 if (bxs != "") { 2333 if (bxs != "") {
2380 drawVisibleText(paint, bxx, bxy, bxs, OutlinedText); 2334 PaintAssistant::drawVisibleText(this, paint, bxx, bxy, bxs, PaintAssistant::OutlinedText);
2381 bxy += fontHeight; 2335 bxy += fontHeight;
2382 } 2336 }
2383 2337
2384 if (bys != "") { 2338 if (bys != "") {
2385 drawVisibleText(paint, bxx, bxy, bys, OutlinedText); 2339 PaintAssistant::drawVisibleText(this, paint, bxx, bxy, bys, PaintAssistant::OutlinedText);
2386 bxy += fontHeight; 2340 bxy += fontHeight;
2387 } 2341 }
2388 2342
2389 if (dxs != "") { 2343 if (dxs != "") {
2390 drawVisibleText(paint, dxx, dxy, dxs, OutlinedText); 2344 PaintAssistant::drawVisibleText(this, paint, dxx, dxy, dxs, PaintAssistant::OutlinedText);
2391 dxy += fontHeight; 2345 dxy += fontHeight;
2392 } 2346 }
2393 2347
2394 if (dys != "") { 2348 if (dys != "") {
2395 drawVisibleText(paint, dxx, dxy, dys, OutlinedText); 2349 PaintAssistant::drawVisibleText(this, paint, dxx, dxy, dys, PaintAssistant::OutlinedText);
2396 dxy += fontHeight; 2350 dxy += fontHeight;
2397 } 2351 }
2398 2352
2399 paint.restore(); 2353 paint.restore();
2400 } 2354 }