Chris@919: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@919: Chris@919: /* Chris@919: Sonic Visualiser Chris@919: An audio file viewer and annotation editor. Chris@919: Centre for Digital Music, Queen Mary, University of London. Chris@919: Chris@919: This program is free software; you can redistribute it and/or Chris@919: modify it under the terms of the GNU General Public License as Chris@919: published by the Free Software Foundation; either version 2 of the Chris@919: License, or (at your option) any later version. See the file Chris@919: COPYING included with this distribution for more information. Chris@919: */ Chris@919: Chris@919: #ifndef VIEW_PROXY_H Chris@919: #define VIEW_PROXY_H Chris@919: Chris@919: #include "LayerGeometryProvider.h" Chris@919: Chris@919: class ViewProxy : public LayerGeometryProvider Chris@919: { Chris@919: public: Chris@919: ViewProxy(View *view, int scaleFactor) : Chris@919: m_view(view), m_scaleFactor(scaleFactor) { } Chris@919: Chris@919: virtual sv_frame_t getStartFrame() const { Chris@919: return m_view->getStartFrame(); Chris@919: } Chris@919: virtual sv_frame_t getCentreFrame() const { Chris@919: return m_view->getCentreFrame(); Chris@919: } Chris@919: virtual sv_frame_t getEndFrame() const { Chris@919: return m_view->getEndFrame(); Chris@919: } Chris@919: virtual int getXForFrame(sv_frame_t frame) const { Chris@950: //!!! not actually correct, if frame lies between view's pixels Chris@919: return m_scaleFactor * m_view->getXForFrame(frame); Chris@919: } Chris@919: virtual sv_frame_t getFrameForX(int x) const { Chris@950: sv_frame_t f0 = m_view->getFrameForX(x / m_scaleFactor); Chris@950: if (m_scaleFactor == 1) return f0; Chris@950: sv_frame_t f1 = m_view->getFrameForX((x / m_scaleFactor) + 1); Chris@950: return f0 + ((f1 - f0) * (x % m_scaleFactor)) / m_scaleFactor; Chris@919: } Chris@1030: virtual int getXForViewX(int viewx) const { Chris@1030: return viewx * m_scaleFactor; Chris@1030: } Chris@1030: virtual int getViewXForX(int x) const { Chris@1030: return x / m_scaleFactor; Chris@1030: } Chris@919: virtual sv_frame_t getModelsStartFrame() const { Chris@919: return m_view->getModelsStartFrame(); Chris@919: } Chris@919: virtual sv_frame_t getModelsEndFrame() const { Chris@919: return m_view->getModelsEndFrame(); Chris@919: } Chris@919: virtual double getYForFrequency(double frequency, Chris@919: double minFreq, double maxFreq, Chris@919: bool logarithmic) const { Chris@919: return m_scaleFactor * Chris@919: m_view->getYForFrequency(frequency, minFreq, maxFreq, logarithmic); Chris@919: } Chris@919: virtual double getFrequencyForY(int y, double minFreq, double maxFreq, Chris@919: bool logarithmic) const { Chris@950: double f0 = m_view->getFrequencyForY Chris@950: (y / m_scaleFactor, minFreq, maxFreq, logarithmic); Chris@950: if (m_scaleFactor == 1) return f0; Chris@950: double f1 = m_view->getFrequencyForY Chris@950: ((y / m_scaleFactor) + 1, minFreq, maxFreq, logarithmic); Chris@950: return f0 + ((f1 - f0) * (y % m_scaleFactor)) / m_scaleFactor; Chris@919: } Chris@919: virtual int getTextLabelHeight(const Layer *layer, QPainter &paint) const { Chris@919: return m_scaleFactor * m_view->getTextLabelHeight(layer, paint); Chris@919: } Chris@919: virtual bool getValueExtents(QString unit, double &min, double &max, Chris@919: bool &log) const { Chris@919: return m_view->getValueExtents(unit, min, max, log); Chris@919: } Chris@919: virtual int getZoomLevel() const { Chris@919: int z = m_view->getZoomLevel(); Chris@1000: // cerr << "getZoomLevel: from " << z << " to "; Chris@919: z = z / m_scaleFactor; Chris@1000: // cerr << z << endl; Chris@999: if (z < 1) z = 1; Chris@919: return z; Chris@919: } Chris@919: virtual QRect getPaintRect() const { Chris@919: QRect r = m_view->getPaintRect(); Chris@919: return QRect(r.x() * m_scaleFactor, Chris@919: r.y() * m_scaleFactor, Chris@919: r.width() * m_scaleFactor, Chris@919: r.height() * m_scaleFactor); Chris@919: } Chris@954: virtual QSize getPaintSize() const { Chris@954: return getPaintRect().size(); Chris@954: } Chris@954: virtual int getPaintWidth() const { Chris@954: return getPaintRect().width(); Chris@954: } Chris@954: virtual int getPaintHeight() const { Chris@954: return getPaintRect().height(); Chris@954: } Chris@919: virtual bool hasLightBackground() const { Chris@919: return m_view->hasLightBackground(); Chris@919: } Chris@919: virtual QColor getForeground() const { Chris@919: return m_view->getForeground(); Chris@919: } Chris@919: virtual QColor getBackground() const { Chris@919: return m_view->getBackground(); Chris@919: } Chris@919: virtual ViewManager *getViewManager() const { Chris@919: return m_view->getViewManager(); Chris@919: } Chris@919: Chris@954: virtual bool shouldIlluminateLocalFeatures(const Layer *layer, Chris@954: QPoint &point) const { Chris@954: QPoint p; Chris@954: bool should = m_view->shouldIlluminateLocalFeatures(layer, p); Chris@954: point = QPoint(p.x() * m_scaleFactor, p.y() * m_scaleFactor); Chris@954: return should; Chris@919: } Chris@954: Chris@919: virtual bool shouldShowFeatureLabels() const { Chris@919: return m_view->shouldShowFeatureLabels(); Chris@919: } Chris@919: Chris@919: virtual void drawVisibleText(QPainter &p, int x, int y, Chris@919: QString text, TextStyle style) const { Chris@919: m_view->drawVisibleText(p, x, y, text, style); Chris@919: } Chris@919: Chris@919: virtual void drawMeasurementRect(QPainter &p, const Layer *layer, Chris@919: QRect rect, bool focus) const { Chris@919: m_view->drawMeasurementRect(p, layer, rect, focus); Chris@919: } Chris@919: Chris@1030: virtual void updatePaintRect(QRect r) { Chris@1030: m_view->update(r.x() / m_scaleFactor, Chris@1030: r.y() / m_scaleFactor, Chris@1030: r.width() / m_scaleFactor, Chris@1030: r.height() / m_scaleFactor); Chris@1030: } Chris@1030: Chris@919: virtual View *getView() { return m_view; } Chris@919: virtual const View *getView() const { return m_view; } Chris@919: Chris@919: private: Chris@919: View *m_view; Chris@919: int m_scaleFactor; Chris@919: }; Chris@919: Chris@919: #endif