changeset 1077:5144d7185fb5 spectrogram-minor-refactor

Move LayerGeometryProvider from view to layer
author Chris Cannam
date Thu, 30 Jun 2016 10:59:11 +0100
parents e536dfc6b250
children ee01a4062747
files layer/Colour3DPlotLayer.cpp layer/Colour3DPlotRenderer.cpp layer/FlexiNoteLayer.cpp layer/LayerGeometryProvider.h layer/LinearColourScale.cpp layer/LinearNumericalScale.cpp layer/LogColourScale.cpp layer/LogNumericalScale.cpp layer/NoteLayer.cpp layer/PianoScale.cpp layer/RegionLayer.cpp layer/ScrollableImageCache.h svgui.pro view/LayerGeometryProvider.h view/View.h view/ViewProxy.h
diffstat 16 files changed, 204 insertions(+), 198 deletions(-) [+]
line wrap: on
line diff
--- a/layer/Colour3DPlotLayer.cpp	Thu Jun 30 10:36:52 2016 +0100
+++ b/layer/Colour3DPlotLayer.cpp	Thu Jun 30 10:59:11 2016 +0100
@@ -15,11 +15,14 @@
 
 #include "Colour3DPlotLayer.h"
 
-#include "view/View.h"
 #include "base/Profiler.h"
 #include "base/LogRange.h"
 #include "base/RangeMapper.h"
+
 #include "ColourMapper.h"
+#include "LayerGeometryProvider.h"
+
+#include "view/ViewManager.h"
 
 #include <QPainter>
 #include <QImage>
@@ -864,12 +867,12 @@
 
         paint.setWorldMatrix(m);
 
-        v->drawVisibleText(paint, 2, 0, minstr, View::OutlinedText);
+        v->drawVisibleText(paint, 2, 0, minstr, LayerGeometryProvider::OutlinedText);
 
         m.translate(ch - msw - 2, 0);
         paint.setWorldMatrix(m);
 
-        v->drawVisibleText(paint, 0, 0, maxstr, View::OutlinedText);
+        v->drawVisibleText(paint, 0, 0, maxstr, LayerGeometryProvider::OutlinedText);
 
         paint.restore();
     }
@@ -1442,7 +1445,7 @@
                          rx0 + 2,
                          ry0 - h / sh - 1 + 2 + paint.fontMetrics().ascent(),
                          text,
-                         View::OutlinedText);
+                         LayerGeometryProvider::OutlinedText);
 		}
 	    }
 	}
--- a/layer/Colour3DPlotRenderer.cpp	Thu Jun 30 10:36:52 2016 +0100
+++ b/layer/Colour3DPlotRenderer.cpp	Thu Jun 30 10:59:11 2016 +0100
@@ -20,7 +20,7 @@
 #include "data/model/Dense3DModelPeakCache.h"
 #include "data/model/FFTModel.h"
 
-#include "view/LayerGeometryProvider.h"
+#include "LayerGeometryProvider.h"
 
 Colour3DPlotRenderer::RenderResult
 Colour3DPlotRenderer::render(QPainter &paint, QRect rect)
--- a/layer/FlexiNoteLayer.cpp	Thu Jun 30 10:36:52 2016 +0100
+++ b/layer/FlexiNoteLayer.cpp	Thu Jun 30 10:59:11 2016 +0100
@@ -23,7 +23,7 @@
 #include "base/LogRange.h"
 #include "base/RangeMapper.h"
 #include "ColourDatabase.h"
-#include "view/View.h"
+#include "LayerGeometryProvider.h"
 
 #include "PianoScale.h"
 #include "LinearNumericalScale.h"
@@ -31,6 +31,8 @@
 
 #include "data/model/FlexiNoteModel.h"
 
+#include "view/View.h"
+
 #include "widgets/ItemEditDialog.h"
 #include "widgets/TextAbbrev.h"
 
@@ -871,30 +873,30 @@
                 //                    x - paint.fontMetrics().width(vlabel) - 2,
                 //                    y + paint.fontMetrics().height()/2
                 //                      - paint.fontMetrics().descent(), 
-                //                    vlabel, View::OutlinedText);
+                //                    vlabel, LayerGeometryProvider::OutlinedText);
                 v->drawVisibleText(paint, 
                                    x,
                                    y - h/2 - 2 - paint.fontMetrics().height()
                                      - paint.fontMetrics().descent(), 
-                                   vlabel, View::OutlinedText);
+                                   vlabel, LayerGeometryProvider::OutlinedText);
 
                 QString hlabel = "dur: " + QString(RealTime::frame2RealTime
                     (p.duration, m_model->getSampleRate()).toText(true).c_str());
                 v->drawVisibleText(paint, 
                                    x,
                                    y - h/2 - paint.fontMetrics().descent() - 2,
-                                   hlabel, View::OutlinedText);
+                                   hlabel, LayerGeometryProvider::OutlinedText);
 
                 QString llabel = QString("%1").arg(p.label);
                 v->drawVisibleText(paint, 
                                    x,
                                    y + h + 2 + paint.fontMetrics().descent(),
-                                   llabel, View::OutlinedText);
+                                   llabel, LayerGeometryProvider::OutlinedText);
                 QString nlabel = QString("%1").arg(noteNumber);
                 v->drawVisibleText(paint, 
                                    x + paint.fontMetrics().averageCharWidth() / 2,
                                    y + h/2 - paint.fontMetrics().descent(),
-                                   nlabel, View::OutlinedText);
+                                   nlabel, LayerGeometryProvider::OutlinedText);
         }
     
         paint.drawRect(x, y - h/2, w, h);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/layer/LayerGeometryProvider.h	Thu Jun 30 10:59:11 2016 +0100
@@ -0,0 +1,174 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
+
+/*
+    Sonic Visualiser
+    An audio file viewer and annotation editor.
+    Centre for Digital Music, Queen Mary, University of London.
+    
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License as
+    published by the Free Software Foundation; either version 2 of the
+    License, or (at your option) any later version.  See the file
+    COPYING included with this distribution for more information.
+*/
+
+#ifndef LAYER_GEOMETRY_PROVIDER_H
+#define LAYER_GEOMETRY_PROVIDER_H
+
+#include "base/BaseTypes.h"
+
+#include <QMutex>
+#include <QMutexLocker>
+#include <QPainter>
+
+class ViewManager;
+class View;
+class Layer;
+
+class LayerGeometryProvider
+{
+protected:
+    static int getNextId() {
+        static QMutex idMutex;
+        static int nextId = 1;
+        static int maxId = INT_MAX;
+        QMutexLocker locker(&idMutex);
+        int id = nextId;
+        if (nextId == maxId) {
+            // we don't expect this to happen in the lifetime of a
+            // process, but it would be undefined behaviour if it did
+            // since we're using a signed int, so we should really
+            // guard for it...
+            nextId = 1;
+        } else {
+            nextId++;
+        }
+        return id;
+    }            
+    
+public:
+    LayerGeometryProvider() { }
+    
+    /**
+     * Retrieve the id of this object.
+     */
+    virtual int getId() const = 0;
+
+    /**
+     * Retrieve the first visible sample frame on the widget.
+     * This is a calculated value based on the centre-frame, widget
+     * width and zoom level.  The result may be negative.
+     */
+    virtual sv_frame_t getStartFrame() const = 0;
+
+    /**
+     * Return the centre frame of the visible widget.  This is an
+     * exact value that does not depend on the zoom block size.  Other
+     * frame values (start, end) are calculated from this based on the
+     * zoom and other factors.
+     */
+    virtual sv_frame_t getCentreFrame() const = 0;
+
+    /**
+     * Retrieve the last visible sample frame on the widget.
+     * This is a calculated value based on the centre-frame, widget
+     * width and zoom level.
+     */
+    virtual sv_frame_t getEndFrame() const = 0;
+
+    /**
+     * Return the pixel x-coordinate corresponding to a given sample
+     * frame (which may be negative).
+     */
+    virtual int getXForFrame(sv_frame_t frame) const = 0;
+
+    /**
+     * Return the closest frame to the given pixel x-coordinate.
+     */
+    virtual sv_frame_t getFrameForX(int x) const = 0;
+
+    virtual sv_frame_t getModelsStartFrame() const = 0;
+    virtual sv_frame_t getModelsEndFrame() const = 0;
+
+    /**
+     * Return the closest pixel x-coordinate corresponding to a given
+     * view x-coordinate.
+     */
+    virtual int getXForViewX(int viewx) const = 0;
+    
+    /**
+     * Return the closest view x-coordinate corresponding to a given
+     * pixel x-coordinate.
+     */
+    virtual int getViewXForX(int x) const = 0;
+    
+    /**
+     * Return the pixel y-coordinate corresponding to a given
+     * frequency, if the frequency range is as specified.  This does
+     * not imply any policy about layer frequency ranges, but it might
+     * be useful for layers to match theirs up if desired.
+     *
+     * Not thread-safe in logarithmic mode.  Call only from GUI thread.
+     */
+    virtual double getYForFrequency(double frequency, double minFreq, double maxFreq, 
+                                    bool logarithmic) const = 0;
+
+    /**
+     * Return the closest frequency to the given pixel y-coordinate,
+     * if the frequency range is as specified.
+     *
+     * Not thread-safe in logarithmic mode.  Call only from GUI thread.
+     */
+    virtual double getFrequencyForY(int y, double minFreq, double maxFreq,
+			   bool logarithmic) const = 0;
+
+    virtual int getTextLabelHeight(const Layer *layer, QPainter &) const = 0;
+
+    virtual bool getValueExtents(QString unit, double &min, double &max,
+                                 bool &log) const = 0;
+
+    /**
+     * Return the zoom level, i.e. the number of frames per pixel
+     */
+    virtual int getZoomLevel() const = 0;
+
+    /**
+     * To be called from a layer, to obtain the extent of the surface
+     * that the layer is currently painting to. This may be the extent
+     * of the view (if 1x display scaling is in effect) or of a larger
+     * cached pixmap (if greater display scaling is in effect).
+     */
+    virtual QRect getPaintRect() const = 0;
+
+    virtual QSize getPaintSize() const { return getPaintRect().size(); }
+    virtual int getPaintWidth() const { return getPaintRect().width(); }
+    virtual int getPaintHeight() const { return getPaintRect().height(); }
+
+    virtual bool hasLightBackground() const = 0;
+    virtual QColor getForeground() const = 0;
+    virtual QColor getBackground() const = 0;
+
+    virtual ViewManager *getViewManager() const = 0;
+
+    virtual bool shouldIlluminateLocalFeatures(const Layer *, QPoint &) const = 0;
+    virtual bool shouldShowFeatureLabels() const = 0;
+
+    enum TextStyle {
+	BoxedText,
+	OutlinedText,
+        OutlinedItalicText
+    };
+
+    virtual void drawVisibleText(QPainter &p, int x, int y,
+				 QString text, TextStyle style) const = 0;
+
+    virtual void drawMeasurementRect(QPainter &p, const Layer *,
+                                     QRect rect, bool focus) const = 0;
+
+    virtual void updatePaintRect(QRect r) = 0;
+    
+    virtual View *getView() = 0;
+    virtual const View *getView() const = 0;
+};
+
+#endif
--- a/layer/LinearColourScale.cpp	Thu Jun 30 10:36:52 2016 +0100
+++ b/layer/LinearColourScale.cpp	Thu Jun 30 10:59:11 2016 +0100
@@ -20,7 +20,7 @@
 
 #include <cmath>
 
-#include "view/LayerGeometryProvider.h"
+#include "LayerGeometryProvider.h"
 
 int
 LinearColourScale::getWidth(LayerGeometryProvider *,
--- a/layer/LinearNumericalScale.cpp	Thu Jun 30 10:36:52 2016 +0100
+++ b/layer/LinearNumericalScale.cpp	Thu Jun 30 10:59:11 2016 +0100
@@ -20,7 +20,7 @@
 
 #include <cmath>
 
-#include "view/View.h"
+#include "LayerGeometryProvider.h"
 
 int
 LinearNumericalScale::getWidth(LayerGeometryProvider *,
--- a/layer/LogColourScale.cpp	Thu Jun 30 10:36:52 2016 +0100
+++ b/layer/LogColourScale.cpp	Thu Jun 30 10:59:11 2016 +0100
@@ -22,7 +22,7 @@
 
 #include <cmath>
 
-#include "view/View.h"
+#include "LayerGeometryProvider.h"
 
 int
 LogColourScale::getWidth(LayerGeometryProvider *,
--- a/layer/LogNumericalScale.cpp	Thu Jun 30 10:36:52 2016 +0100
+++ b/layer/LogNumericalScale.cpp	Thu Jun 30 10:59:11 2016 +0100
@@ -22,7 +22,7 @@
 
 #include <cmath>
 
-#include "view/View.h"
+#include "LayerGeometryProvider.h"
 
 //#define DEBUG_TIME_VALUE_LAYER 1
 
--- a/layer/NoteLayer.cpp	Thu Jun 30 10:36:52 2016 +0100
+++ b/layer/NoteLayer.cpp	Thu Jun 30 10:59:11 2016 +0100
@@ -813,14 +813,14 @@
                                x - paint.fontMetrics().width(vlabel) - 2,
                                y + paint.fontMetrics().height()/2
                                  - paint.fontMetrics().descent(), 
-                               vlabel, View::OutlinedText);
+                               vlabel, LayerGeometryProvider::OutlinedText);
 
             QString hlabel = RealTime::frame2RealTime
                 (p.frame, m_model->getSampleRate()).toText(true).c_str();
             v->drawVisibleText(paint, 
                                x,
                                y - h/2 - paint.fontMetrics().descent() - 2,
-                               hlabel, View::OutlinedText);
+                               hlabel, LayerGeometryProvider::OutlinedText);
 	}
 	
 	paint.drawRect(x, y - h/2, w, h);
--- a/layer/PianoScale.cpp	Thu Jun 30 10:36:52 2016 +0100
+++ b/layer/PianoScale.cpp	Thu Jun 30 10:59:11 2016 +0100
@@ -21,7 +21,7 @@
 
 #include "base/Pitch.h"
 
-#include "view/LayerGeometryProvider.h"
+#include "LayerGeometryProvider.h"
 
 void
 PianoScale::paintPianoVertical(LayerGeometryProvider *v,
--- a/layer/RegionLayer.cpp	Thu Jun 30 10:36:52 2016 +0100
+++ b/layer/RegionLayer.cpp	Thu Jun 30 10:59:11 2016 +0100
@@ -983,14 +983,14 @@
                                    x - paint.fontMetrics().width(vlabel) - 2,
                                    y + paint.fontMetrics().height()/2
                                    - paint.fontMetrics().descent(), 
-                                   vlabel, View::OutlinedText);
+                                   vlabel, LayerGeometryProvider::OutlinedText);
                 
                 QString hlabel = RealTime::frame2RealTime
                     (p.frame, m_model->getSampleRate()).toText(true).c_str();
                 v->drawVisibleText(paint, 
                                    x,
                                    y - h/2 - paint.fontMetrics().descent() - 2,
-                                   hlabel, View::OutlinedText);
+                                   hlabel, LayerGeometryProvider::OutlinedText);
             }
             
             paint.drawLine(x, y-1, x + w, y-1);
@@ -1048,7 +1048,7 @@
                 nextLabelMinX = labelX + paint.fontMetrics().width(label);
             }
 
-            v->drawVisibleText(paint, labelX, labelY, label, View::OutlinedText);
+            v->drawVisibleText(paint, labelX, labelY, label, LayerGeometryProvider::OutlinedText);
         }
     }
 
--- a/layer/ScrollableImageCache.h	Thu Jun 30 10:36:52 2016 +0100
+++ b/layer/ScrollableImageCache.h	Thu Jun 30 10:59:11 2016 +0100
@@ -17,7 +17,7 @@
 
 #include "base/BaseTypes.h"
 
-#include "view/LayerGeometryProvider.h"
+#include "LayerGeometryProvider.h"
 
 #include <QImage>
 #include <QRect>
--- a/svgui.pro	Thu Jun 30 10:36:52 2016 +0100
+++ b/svgui.pro	Thu Jun 30 10:59:11 2016 +0100
@@ -49,6 +49,7 @@
            layer/ImageRegionFinder.h \
            layer/Layer.h \
            layer/LayerFactory.h \
+           layer/LayerGeometryProvider.h \
            layer/LinearNumericalScale.h \
            layer/LogNumericalScale.h \
            layer/LinearColourScale.h \
--- a/view/LayerGeometryProvider.h	Thu Jun 30 10:36:52 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,174 +0,0 @@
-/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
-
-/*
-    Sonic Visualiser
-    An audio file viewer and annotation editor.
-    Centre for Digital Music, Queen Mary, University of London.
-    
-    This program is free software; you can redistribute it and/or
-    modify it under the terms of the GNU General Public License as
-    published by the Free Software Foundation; either version 2 of the
-    License, or (at your option) any later version.  See the file
-    COPYING included with this distribution for more information.
-*/
-
-#ifndef LAYER_GEOMETRY_PROVIDER_H
-#define LAYER_GEOMETRY_PROVIDER_H
-
-#include "base/BaseTypes.h"
-
-#include <QMutex>
-#include <QMutexLocker>
-#include <QPainter>
-
-class ViewManager;
-class View;
-class Layer;
-
-class LayerGeometryProvider
-{
-protected:
-    static int getNextId() {
-        static QMutex idMutex;
-        static int nextId = 1;
-        static int maxId = INT_MAX;
-        QMutexLocker locker(&idMutex);
-        int id = nextId;
-        if (nextId == maxId) {
-            // we don't expect this to happen in the lifetime of a
-            // process, but it would be undefined behaviour if it did
-            // since we're using a signed int, so we should really
-            // guard for it...
-            nextId = 1;
-        } else {
-            nextId++;
-        }
-        return id;
-    }            
-    
-public:
-    LayerGeometryProvider() { }
-    
-    /**
-     * Retrieve the id of this object.
-     */
-    virtual int getId() const = 0;
-
-    /**
-     * Retrieve the first visible sample frame on the widget.
-     * This is a calculated value based on the centre-frame, widget
-     * width and zoom level.  The result may be negative.
-     */
-    virtual sv_frame_t getStartFrame() const = 0;
-
-    /**
-     * Return the centre frame of the visible widget.  This is an
-     * exact value that does not depend on the zoom block size.  Other
-     * frame values (start, end) are calculated from this based on the
-     * zoom and other factors.
-     */
-    virtual sv_frame_t getCentreFrame() const = 0;
-
-    /**
-     * Retrieve the last visible sample frame on the widget.
-     * This is a calculated value based on the centre-frame, widget
-     * width and zoom level.
-     */
-    virtual sv_frame_t getEndFrame() const = 0;
-
-    /**
-     * Return the pixel x-coordinate corresponding to a given sample
-     * frame (which may be negative).
-     */
-    virtual int getXForFrame(sv_frame_t frame) const = 0;
-
-    /**
-     * Return the closest frame to the given pixel x-coordinate.
-     */
-    virtual sv_frame_t getFrameForX(int x) const = 0;
-
-    virtual sv_frame_t getModelsStartFrame() const = 0;
-    virtual sv_frame_t getModelsEndFrame() const = 0;
-
-    /**
-     * Return the closest pixel x-coordinate corresponding to a given
-     * view x-coordinate.
-     */
-    virtual int getXForViewX(int viewx) const = 0;
-    
-    /**
-     * Return the closest view x-coordinate corresponding to a given
-     * pixel x-coordinate.
-     */
-    virtual int getViewXForX(int x) const = 0;
-    
-    /**
-     * Return the pixel y-coordinate corresponding to a given
-     * frequency, if the frequency range is as specified.  This does
-     * not imply any policy about layer frequency ranges, but it might
-     * be useful for layers to match theirs up if desired.
-     *
-     * Not thread-safe in logarithmic mode.  Call only from GUI thread.
-     */
-    virtual double getYForFrequency(double frequency, double minFreq, double maxFreq, 
-                                    bool logarithmic) const = 0;
-
-    /**
-     * Return the closest frequency to the given pixel y-coordinate,
-     * if the frequency range is as specified.
-     *
-     * Not thread-safe in logarithmic mode.  Call only from GUI thread.
-     */
-    virtual double getFrequencyForY(int y, double minFreq, double maxFreq,
-			   bool logarithmic) const = 0;
-
-    virtual int getTextLabelHeight(const Layer *layer, QPainter &) const = 0;
-
-    virtual bool getValueExtents(QString unit, double &min, double &max,
-                                 bool &log) const = 0;
-
-    /**
-     * Return the zoom level, i.e. the number of frames per pixel
-     */
-    virtual int getZoomLevel() const = 0;
-
-    /**
-     * To be called from a layer, to obtain the extent of the surface
-     * that the layer is currently painting to. This may be the extent
-     * of the view (if 1x display scaling is in effect) or of a larger
-     * cached pixmap (if greater display scaling is in effect).
-     */
-    virtual QRect getPaintRect() const = 0;
-
-    virtual QSize getPaintSize() const { return getPaintRect().size(); }
-    virtual int getPaintWidth() const { return getPaintRect().width(); }
-    virtual int getPaintHeight() const { return getPaintRect().height(); }
-
-    virtual bool hasLightBackground() const = 0;
-    virtual QColor getForeground() const = 0;
-    virtual QColor getBackground() const = 0;
-
-    virtual ViewManager *getViewManager() const = 0;
-
-    virtual bool shouldIlluminateLocalFeatures(const Layer *, QPoint &) const = 0;
-    virtual bool shouldShowFeatureLabels() const = 0;
-
-    enum TextStyle {
-	BoxedText,
-	OutlinedText,
-        OutlinedItalicText
-    };
-
-    virtual void drawVisibleText(QPainter &p, int x, int y,
-				 QString text, TextStyle style) const = 0;
-
-    virtual void drawMeasurementRect(QPainter &p, const Layer *,
-                                     QRect rect, bool focus) const = 0;
-
-    virtual void updatePaintRect(QRect r) = 0;
-    
-    virtual View *getView() = 0;
-    virtual const View *getView() const = 0;
-};
-
-#endif
--- a/view/View.h	Thu Jun 30 10:36:52 2016 +0100
+++ b/view/View.h	Thu Jun 30 10:59:11 2016 +0100
@@ -19,7 +19,7 @@
 #include <QFrame>
 #include <QProgressBar>
 
-#include "LayerGeometryProvider.h"
+#include "layer/LayerGeometryProvider.h"
 
 #include "base/ZoomConstraint.h"
 #include "base/PropertyContainer.h"
--- a/view/ViewProxy.h	Thu Jun 30 10:36:52 2016 +0100
+++ b/view/ViewProxy.h	Thu Jun 30 10:59:11 2016 +0100
@@ -15,7 +15,7 @@
 #ifndef VIEW_PROXY_H
 #define VIEW_PROXY_H
 
-#include "LayerGeometryProvider.h"
+#include "layer/LayerGeometryProvider.h"
 
 class ViewProxy : public LayerGeometryProvider
 {