annotate view/ViewProxy.h @ 1064:77564d4fff43 spectrogram-minor-refactor

Extend column logic to peak frequency display as well, and correct some scopes according to whether values are per source column or per target pixel
author Chris Cannam
date Mon, 20 Jun 2016 12:00:32 +0100
parents 4e5c1c326794
children 5144d7185fb5
rev   line source
Chris@919 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@919 2
Chris@919 3 /*
Chris@919 4 Sonic Visualiser
Chris@919 5 An audio file viewer and annotation editor.
Chris@919 6 Centre for Digital Music, Queen Mary, University of London.
Chris@919 7
Chris@919 8 This program is free software; you can redistribute it and/or
Chris@919 9 modify it under the terms of the GNU General Public License as
Chris@919 10 published by the Free Software Foundation; either version 2 of the
Chris@919 11 License, or (at your option) any later version. See the file
Chris@919 12 COPYING included with this distribution for more information.
Chris@919 13 */
Chris@919 14
Chris@919 15 #ifndef VIEW_PROXY_H
Chris@919 16 #define VIEW_PROXY_H
Chris@919 17
Chris@919 18 #include "LayerGeometryProvider.h"
Chris@919 19
Chris@919 20 class ViewProxy : public LayerGeometryProvider
Chris@919 21 {
Chris@919 22 public:
Chris@919 23 ViewProxy(View *view, int scaleFactor) :
Chris@919 24 m_view(view), m_scaleFactor(scaleFactor) { }
Chris@919 25
Chris@1044 26 virtual int getId() const {
Chris@1044 27 return m_view->getId();
Chris@1044 28 }
Chris@919 29 virtual sv_frame_t getStartFrame() const {
Chris@919 30 return m_view->getStartFrame();
Chris@919 31 }
Chris@919 32 virtual sv_frame_t getCentreFrame() const {
Chris@919 33 return m_view->getCentreFrame();
Chris@919 34 }
Chris@919 35 virtual sv_frame_t getEndFrame() const {
Chris@919 36 return m_view->getEndFrame();
Chris@919 37 }
Chris@919 38 virtual int getXForFrame(sv_frame_t frame) const {
Chris@950 39 //!!! not actually correct, if frame lies between view's pixels
Chris@919 40 return m_scaleFactor * m_view->getXForFrame(frame);
Chris@919 41 }
Chris@919 42 virtual sv_frame_t getFrameForX(int x) const {
Chris@950 43 sv_frame_t f0 = m_view->getFrameForX(x / m_scaleFactor);
Chris@950 44 if (m_scaleFactor == 1) return f0;
Chris@950 45 sv_frame_t f1 = m_view->getFrameForX((x / m_scaleFactor) + 1);
Chris@950 46 return f0 + ((f1 - f0) * (x % m_scaleFactor)) / m_scaleFactor;
Chris@919 47 }
Chris@1030 48 virtual int getXForViewX(int viewx) const {
Chris@1030 49 return viewx * m_scaleFactor;
Chris@1030 50 }
Chris@1030 51 virtual int getViewXForX(int x) const {
Chris@1030 52 return x / m_scaleFactor;
Chris@1030 53 }
Chris@919 54 virtual sv_frame_t getModelsStartFrame() const {
Chris@919 55 return m_view->getModelsStartFrame();
Chris@919 56 }
Chris@919 57 virtual sv_frame_t getModelsEndFrame() const {
Chris@919 58 return m_view->getModelsEndFrame();
Chris@919 59 }
Chris@919 60 virtual double getYForFrequency(double frequency,
Chris@919 61 double minFreq, double maxFreq,
Chris@919 62 bool logarithmic) const {
Chris@919 63 return m_scaleFactor *
Chris@919 64 m_view->getYForFrequency(frequency, minFreq, maxFreq, logarithmic);
Chris@919 65 }
Chris@919 66 virtual double getFrequencyForY(int y, double minFreq, double maxFreq,
Chris@919 67 bool logarithmic) const {
Chris@950 68 double f0 = m_view->getFrequencyForY
Chris@950 69 (y / m_scaleFactor, minFreq, maxFreq, logarithmic);
Chris@950 70 if (m_scaleFactor == 1) return f0;
Chris@950 71 double f1 = m_view->getFrequencyForY
Chris@950 72 ((y / m_scaleFactor) + 1, minFreq, maxFreq, logarithmic);
Chris@950 73 return f0 + ((f1 - f0) * (y % m_scaleFactor)) / m_scaleFactor;
Chris@919 74 }
Chris@919 75 virtual int getTextLabelHeight(const Layer *layer, QPainter &paint) const {
Chris@919 76 return m_scaleFactor * m_view->getTextLabelHeight(layer, paint);
Chris@919 77 }
Chris@919 78 virtual bool getValueExtents(QString unit, double &min, double &max,
Chris@919 79 bool &log) const {
Chris@919 80 return m_view->getValueExtents(unit, min, max, log);
Chris@919 81 }
Chris@919 82 virtual int getZoomLevel() const {
Chris@919 83 int z = m_view->getZoomLevel();
Chris@1000 84 // cerr << "getZoomLevel: from " << z << " to ";
Chris@919 85 z = z / m_scaleFactor;
Chris@1000 86 // cerr << z << endl;
Chris@999 87 if (z < 1) z = 1;
Chris@919 88 return z;
Chris@919 89 }
Chris@919 90 virtual QRect getPaintRect() const {
Chris@919 91 QRect r = m_view->getPaintRect();
Chris@919 92 return QRect(r.x() * m_scaleFactor,
Chris@919 93 r.y() * m_scaleFactor,
Chris@919 94 r.width() * m_scaleFactor,
Chris@919 95 r.height() * m_scaleFactor);
Chris@919 96 }
Chris@954 97 virtual QSize getPaintSize() const {
Chris@954 98 return getPaintRect().size();
Chris@954 99 }
Chris@954 100 virtual int getPaintWidth() const {
Chris@954 101 return getPaintRect().width();
Chris@954 102 }
Chris@954 103 virtual int getPaintHeight() const {
Chris@954 104 return getPaintRect().height();
Chris@954 105 }
Chris@919 106 virtual bool hasLightBackground() const {
Chris@919 107 return m_view->hasLightBackground();
Chris@919 108 }
Chris@919 109 virtual QColor getForeground() const {
Chris@919 110 return m_view->getForeground();
Chris@919 111 }
Chris@919 112 virtual QColor getBackground() const {
Chris@919 113 return m_view->getBackground();
Chris@919 114 }
Chris@919 115 virtual ViewManager *getViewManager() const {
Chris@919 116 return m_view->getViewManager();
Chris@919 117 }
Chris@919 118
Chris@954 119 virtual bool shouldIlluminateLocalFeatures(const Layer *layer,
Chris@954 120 QPoint &point) const {
Chris@954 121 QPoint p;
Chris@954 122 bool should = m_view->shouldIlluminateLocalFeatures(layer, p);
Chris@954 123 point = QPoint(p.x() * m_scaleFactor, p.y() * m_scaleFactor);
Chris@954 124 return should;
Chris@919 125 }
Chris@954 126
Chris@919 127 virtual bool shouldShowFeatureLabels() const {
Chris@919 128 return m_view->shouldShowFeatureLabels();
Chris@919 129 }
Chris@919 130
Chris@919 131 virtual void drawVisibleText(QPainter &p, int x, int y,
Chris@919 132 QString text, TextStyle style) const {
Chris@919 133 m_view->drawVisibleText(p, x, y, text, style);
Chris@919 134 }
Chris@919 135
Chris@919 136 virtual void drawMeasurementRect(QPainter &p, const Layer *layer,
Chris@919 137 QRect rect, bool focus) const {
Chris@919 138 m_view->drawMeasurementRect(p, layer, rect, focus);
Chris@919 139 }
Chris@919 140
Chris@1030 141 virtual void updatePaintRect(QRect r) {
Chris@1030 142 m_view->update(r.x() / m_scaleFactor,
Chris@1030 143 r.y() / m_scaleFactor,
Chris@1030 144 r.width() / m_scaleFactor,
Chris@1030 145 r.height() / m_scaleFactor);
Chris@1030 146 }
Chris@1030 147
Chris@919 148 virtual View *getView() { return m_view; }
Chris@919 149 virtual const View *getView() const { return m_view; }
Chris@919 150
Chris@919 151 private:
Chris@919 152 View *m_view;
Chris@919 153 int m_scaleFactor;
Chris@919 154 };
Chris@919 155
Chris@919 156 #endif