comparison layer/WaveformLayer.cpp @ 978:64c2b3a4435a 3.0-integration

Merge from branch osx-retina
author Chris Cannam
date Fri, 26 Jun 2015 14:10:40 +0100
parents 4fe7a09be0fe
children 2adca8f05583
comparison
equal deleted inserted replaced
977:f40ccbf228c2 978:64c2b3a4435a
324 m_cacheValid = false; 324 m_cacheValid = false;
325 emit layerParametersChanged(); 325 emit layerParametersChanged();
326 } 326 }
327 327
328 int 328 int
329 WaveformLayer::getCompletion(View *) const 329 WaveformLayer::getCompletion(LayerGeometryProvider *) const
330 { 330 {
331 int completion = 100; 331 int completion = 100;
332 if (!m_model || !m_model->isOK()) return completion; 332 if (!m_model || !m_model->isOK()) return completion;
333 if (m_model->isReady(&completion)) return 100; 333 if (m_model->isReady(&completion)) return 100;
334 return completion; 334 return completion;
397 397
398 return channels; 398 return channels;
399 } 399 }
400 400
401 bool 401 bool
402 WaveformLayer::isLayerScrollable(const View *) const 402 WaveformLayer::isLayerScrollable(const LayerGeometryProvider *) const
403 { 403 {
404 return !m_autoNormalize; 404 return !m_autoNormalize;
405 } 405 }
406 406
407 static float meterdbs[] = { -40, -30, -20, -15, -10, 407 static float meterdbs[] = { -40, -30, -20, -15, -10,
408 -5, -3, -2, -1, -0.5, 0 }; 408 -5, -3, -2, -1, -0.5, 0 };
409 409
410 bool 410 bool
411 WaveformLayer::getSourceFramesForX(View *v, int x, int modelZoomLevel, 411 WaveformLayer::getSourceFramesForX(LayerGeometryProvider *v, int x, int modelZoomLevel,
412 sv_frame_t &f0, sv_frame_t &f1) const 412 sv_frame_t &f0, sv_frame_t &f1) const
413 { 413 {
414 sv_frame_t viewFrame = v->getFrameForX(x); 414 sv_frame_t viewFrame = v->getFrameForX(x);
415 if (viewFrame < 0) { 415 if (viewFrame < 0) {
416 f0 = 0; 416 f0 = 0;
431 431
432 return (f0 < m_model->getEndFrame()); 432 return (f0 < m_model->getEndFrame());
433 } 433 }
434 434
435 float 435 float
436 WaveformLayer::getNormalizeGain(View *v, int channel) const 436 WaveformLayer::getNormalizeGain(LayerGeometryProvider *v, int channel) const
437 { 437 {
438 sv_frame_t startFrame = v->getStartFrame(); 438 sv_frame_t startFrame = v->getStartFrame();
439 sv_frame_t endFrame = v->getEndFrame(); 439 sv_frame_t endFrame = v->getEndFrame();
440 440
441 sv_frame_t modelStart = m_model->getStartFrame(); 441 sv_frame_t modelStart = m_model->getStartFrame();
471 471
472 return float(1.0 / std::max(fabs(range.max()), fabs(range.min()))); 472 return float(1.0 / std::max(fabs(range.max()), fabs(range.min())));
473 } 473 }
474 474
475 void 475 void
476 WaveformLayer::paint(View *v, QPainter &viewPainter, QRect rect) const 476 WaveformLayer::paint(LayerGeometryProvider *v, QPainter &viewPainter, QRect rect) const
477 { 477 {
478 if (!m_model || !m_model->isOK()) { 478 if (!m_model || !m_model->isOK()) {
479 return; 479 return;
480 } 480 }
481 481
492 492
493 channels = getChannelArrangement(minChannel, maxChannel, 493 channels = getChannelArrangement(minChannel, maxChannel,
494 mergingChannels, mixingChannels); 494 mergingChannels, mixingChannels);
495 if (channels == 0) return; 495 if (channels == 0) return;
496 496
497 int w = v->width(); 497 int w = v->getPaintWidth();
498 int h = v->height(); 498 int h = v->getPaintHeight();
499 499
500 bool ready = m_model->isReady(); 500 bool ready = m_model->isReady();
501 QPainter *paint; 501 QPainter *paint;
502 502
503 if (m_aggressive) { 503 if (m_aggressive) {
557 x1 = rect.right(); 557 x1 = rect.right();
558 y0 = rect.top(); 558 y0 = rect.top();
559 y1 = rect.bottom(); 559 y1 = rect.bottom();
560 560
561 if (x0 > 0) --x0; 561 if (x0 > 0) --x0;
562 if (x1 < v->width()) ++x1; 562 if (x1 < w) ++x1;
563 563
564 // Our zoom level may differ from that at which the underlying 564 // Our zoom level may differ from that at which the underlying
565 // model has its blocks. 565 // model has its blocks.
566 566
567 // Each pixel within our visible range must always draw from 567 // Each pixel within our visible range must always draw from
937 paint->restore(); 937 paint->restore();
938 } 938 }
939 939
940 if (m_aggressive) { 940 if (m_aggressive) {
941 941
942 if (ready && rect == v->rect()) { 942 if (ready && rect == v->getPaintRect()) {
943 m_cacheValid = true; 943 m_cacheValid = true;
944 m_cacheZoomLevel = zoomLevel; 944 m_cacheZoomLevel = zoomLevel;
945 } 945 }
946 paint->end(); 946 paint->end();
947 delete paint; 947 delete paint;
951 if (otherChannelRanges != ranges) delete otherChannelRanges; 951 if (otherChannelRanges != ranges) delete otherChannelRanges;
952 delete ranges; 952 delete ranges;
953 } 953 }
954 954
955 QString 955 QString
956 WaveformLayer::getFeatureDescription(View *v, QPoint &pos) const 956 WaveformLayer::getFeatureDescription(LayerGeometryProvider *v, QPoint &pos) const
957 { 957 {
958 int x = pos.x(); 958 int x = pos.x();
959 959
960 if (!m_model || !m_model->isOK()) return ""; 960 if (!m_model || !m_model->isOK()) return "";
961 961
1034 1034
1035 return text; 1035 return text;
1036 } 1036 }
1037 1037
1038 int 1038 int
1039 WaveformLayer::getYForValue(const View *v, double value, int channel) const 1039 WaveformLayer::getYForValue(const LayerGeometryProvider *v, double value, int channel) const
1040 { 1040 {
1041 int channels = 0, minChannel = 0, maxChannel = 0; 1041 int channels = 0, minChannel = 0, maxChannel = 0;
1042 bool mergingChannels = false, mixingChannels = false; 1042 bool mergingChannels = false, mixingChannels = false;
1043 1043
1044 channels = getChannelArrangement(minChannel, maxChannel, 1044 channels = getChannelArrangement(minChannel, maxChannel,
1045 mergingChannels, mixingChannels); 1045 mergingChannels, mixingChannels);
1046 if (channels == 0) return 0; 1046 if (channels == 0) return 0;
1047 if (maxChannel < minChannel || channel < minChannel) return 0; 1047 if (maxChannel < minChannel || channel < minChannel) return 0;
1048 1048
1049 int h = v->height(); 1049 int h = v->getPaintHeight();
1050 int m = (h / channels) / 2; 1050 int m = (h / channels) / 2;
1051 1051
1052 if ((m_scale == dBScale || m_scale == MeterScale) && 1052 if ((m_scale == dBScale || m_scale == MeterScale) &&
1053 m_channelMode != MergeChannels) { 1053 m_channelMode != MergeChannels) {
1054 m = (h / channels); 1054 m = (h / channels);
1077 1077
1078 return my - vy; 1078 return my - vy;
1079 } 1079 }
1080 1080
1081 double 1081 double
1082 WaveformLayer::getValueForY(const View *v, int y, int &channel) const 1082 WaveformLayer::getValueForY(const LayerGeometryProvider *v, int y, int &channel) const
1083 { 1083 {
1084 int channels = 0, minChannel = 0, maxChannel = 0; 1084 int channels = 0, minChannel = 0, maxChannel = 0;
1085 bool mergingChannels = false, mixingChannels = false; 1085 bool mergingChannels = false, mixingChannels = false;
1086 1086
1087 channels = getChannelArrangement(minChannel, maxChannel, 1087 channels = getChannelArrangement(minChannel, maxChannel,
1088 mergingChannels, mixingChannels); 1088 mergingChannels, mixingChannels);
1089 if (channels == 0) return 0; 1089 if (channels == 0) return 0;
1090 if (maxChannel < minChannel) return 0; 1090 if (maxChannel < minChannel) return 0;
1091 1091
1092 int h = v->height(); 1092 int h = v->getPaintHeight();
1093 int m = (h / channels) / 2; 1093 int m = (h / channels) / 2;
1094 1094
1095 if ((m_scale == dBScale || m_scale == MeterScale) && 1095 if ((m_scale == dBScale || m_scale == MeterScale) &&
1096 m_channelMode != MergeChannels) { 1096 m_channelMode != MergeChannels) {
1097 m = (h / channels); 1097 m = (h / channels);
1123 1123
1124 return value / m_gain; 1124 return value / m_gain;
1125 } 1125 }
1126 1126
1127 bool 1127 bool
1128 WaveformLayer::getYScaleValue(const View *v, int y, 1128 WaveformLayer::getYScaleValue(const LayerGeometryProvider *v, int y,
1129 double &value, QString &unit) const 1129 double &value, QString &unit) const
1130 { 1130 {
1131 int channel; 1131 int channel;
1132 1132
1133 value = getValueForY(v, y, channel); 1133 value = getValueForY(v, y, channel);
1149 1149
1150 return true; 1150 return true;
1151 } 1151 }
1152 1152
1153 bool 1153 bool
1154 WaveformLayer::getYScaleDifference(const View *v, int y0, int y1, 1154 WaveformLayer::getYScaleDifference(const LayerGeometryProvider *v, int y0, int y1,
1155 double &diff, QString &unit) const 1155 double &diff, QString &unit) const
1156 { 1156 {
1157 int c0, c1; 1157 int c0, c1;
1158 double v0 = getValueForY(v, y0, c0); 1158 double v0 = getValueForY(v, y0, c0);
1159 double v1 = getValueForY(v, y1, c1); 1159 double v1 = getValueForY(v, y1, c1);
1187 1187
1188 return true; 1188 return true;
1189 } 1189 }
1190 1190
1191 int 1191 int
1192 WaveformLayer::getVerticalScaleWidth(View *, bool, QPainter &paint) const 1192 WaveformLayer::getVerticalScaleWidth(LayerGeometryProvider *, bool, QPainter &paint) const
1193 { 1193 {
1194 if (m_scale == LinearScale) { 1194 if (m_scale == LinearScale) {
1195 return paint.fontMetrics().width("0.0") + 13; 1195 return paint.fontMetrics().width("0.0") + 13;
1196 } else { 1196 } else {
1197 return std::max(paint.fontMetrics().width(tr("0dB")), 1197 return std::max(paint.fontMetrics().width(tr("0dB")),
1198 paint.fontMetrics().width(tr("-Inf"))) + 13; 1198 paint.fontMetrics().width(tr("-Inf"))) + 13;
1199 } 1199 }
1200 } 1200 }
1201 1201
1202 void 1202 void
1203 WaveformLayer::paintVerticalScale(View *v, bool, QPainter &paint, QRect rect) const 1203 WaveformLayer::paintVerticalScale(LayerGeometryProvider *v, bool, QPainter &paint, QRect rect) const
1204 { 1204 {
1205 if (!m_model || !m_model->isOK()) { 1205 if (!m_model || !m_model->isOK()) {
1206 return; 1206 return;
1207 } 1207 }
1208 1208