annotate view/LayerGeometryProvider.h @ 1024:3bce4c45b681 spectrogram-minor-refactor

Rearrange cache update calculations so as to use the actual painted width returned by paint functions (though they only ever return the same width as requested, at this point)
author Chris Cannam
date Mon, 25 Jan 2016 15:52:26 +0000
parents a5488775f880
children 0be17aafa935
rev   line source
Chris@916 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@916 2
Chris@916 3 /*
Chris@916 4 Sonic Visualiser
Chris@916 5 An audio file viewer and annotation editor.
Chris@916 6 Centre for Digital Music, Queen Mary, University of London.
Chris@916 7
Chris@916 8 This program is free software; you can redistribute it and/or
Chris@916 9 modify it under the terms of the GNU General Public License as
Chris@916 10 published by the Free Software Foundation; either version 2 of the
Chris@916 11 License, or (at your option) any later version. See the file
Chris@916 12 COPYING included with this distribution for more information.
Chris@916 13 */
Chris@916 14
Chris@916 15 #ifndef LAYER_GEOMETRY_PROVIDER_H
Chris@916 16 #define LAYER_GEOMETRY_PROVIDER_H
Chris@916 17
Chris@916 18 #include "base/BaseTypes.h"
Chris@916 19
Chris@916 20 class ViewManager;
Chris@918 21 class View;
Chris@916 22 class Layer;
Chris@916 23
Chris@916 24 class LayerGeometryProvider
Chris@916 25 {
Chris@916 26 public:
Chris@916 27 /**
Chris@916 28 * Retrieve the first visible sample frame on the widget.
Chris@916 29 * This is a calculated value based on the centre-frame, widget
Chris@916 30 * width and zoom level. The result may be negative.
Chris@916 31 */
Chris@916 32 virtual sv_frame_t getStartFrame() const = 0;
Chris@916 33
Chris@916 34 /**
Chris@916 35 * Return the centre frame of the visible widget. This is an
Chris@916 36 * exact value that does not depend on the zoom block size. Other
Chris@916 37 * frame values (start, end) are calculated from this based on the
Chris@916 38 * zoom and other factors.
Chris@916 39 */
Chris@916 40 virtual sv_frame_t getCentreFrame() const = 0;
Chris@916 41
Chris@916 42 /**
Chris@916 43 * Retrieve the last visible sample frame on the widget.
Chris@916 44 * This is a calculated value based on the centre-frame, widget
Chris@916 45 * width and zoom level.
Chris@916 46 */
Chris@916 47 virtual sv_frame_t getEndFrame() const = 0;
Chris@916 48
Chris@916 49 /**
Chris@916 50 * Return the pixel x-coordinate corresponding to a given sample
Chris@916 51 * frame (which may be negative).
Chris@916 52 */
Chris@916 53 virtual int getXForFrame(sv_frame_t frame) const = 0;
Chris@916 54
Chris@916 55 /**
Chris@916 56 * Return the closest frame to the given pixel x-coordinate.
Chris@916 57 */
Chris@916 58 virtual sv_frame_t getFrameForX(int x) const = 0;
Chris@916 59
Chris@919 60 virtual sv_frame_t getModelsStartFrame() const = 0;
Chris@919 61 virtual sv_frame_t getModelsEndFrame() const = 0;
Chris@919 62
Chris@916 63 /**
Chris@916 64 * Return the pixel y-coordinate corresponding to a given
Chris@916 65 * frequency, if the frequency range is as specified. This does
Chris@916 66 * not imply any policy about layer frequency ranges, but it might
Chris@916 67 * be useful for layers to match theirs up if desired.
Chris@916 68 *
Chris@916 69 * Not thread-safe in logarithmic mode. Call only from GUI thread.
Chris@916 70 */
Chris@916 71 virtual double getYForFrequency(double frequency, double minFreq, double maxFreq,
Chris@916 72 bool logarithmic) const = 0;
Chris@916 73
Chris@916 74 /**
Chris@916 75 * Return the closest frequency to the given pixel y-coordinate,
Chris@916 76 * if the frequency range is as specified.
Chris@916 77 *
Chris@916 78 * Not thread-safe in logarithmic mode. Call only from GUI thread.
Chris@916 79 */
Chris@916 80 virtual double getFrequencyForY(int y, double minFreq, double maxFreq,
Chris@916 81 bool logarithmic) const = 0;
Chris@916 82
Chris@918 83 virtual int getTextLabelHeight(const Layer *layer, QPainter &) const = 0;
Chris@918 84
Chris@918 85 virtual bool getValueExtents(QString unit, double &min, double &max,
Chris@918 86 bool &log) const = 0;
Chris@918 87
Chris@916 88 /**
Chris@916 89 * Return the zoom level, i.e. the number of frames per pixel
Chris@916 90 */
Chris@916 91 virtual int getZoomLevel() const = 0;
Chris@916 92
Chris@916 93 /**
Chris@916 94 * To be called from a layer, to obtain the extent of the surface
Chris@916 95 * that the layer is currently painting to. This may be the extent
Chris@916 96 * of the view (if 1x display scaling is in effect) or of a larger
Chris@916 97 * cached pixmap (if greater display scaling is in effect).
Chris@916 98 */
Chris@916 99 virtual QRect getPaintRect() const = 0;
Chris@916 100
Chris@916 101 virtual QSize getPaintSize() const { return getPaintRect().size(); }
Chris@916 102 virtual int getPaintWidth() const { return getPaintRect().width(); }
Chris@916 103 virtual int getPaintHeight() const { return getPaintRect().height(); }
Chris@916 104
Chris@916 105 virtual bool hasLightBackground() const = 0;
Chris@916 106 virtual QColor getForeground() const = 0;
Chris@916 107 virtual QColor getBackground() const = 0;
Chris@916 108
Chris@916 109 virtual ViewManager *getViewManager() const = 0;
Chris@916 110
Chris@916 111 virtual bool shouldIlluminateLocalFeatures(const Layer *, QPoint &) const = 0;
Chris@919 112 virtual bool shouldShowFeatureLabels() const = 0;
Chris@916 113
Chris@916 114 enum TextStyle {
Chris@916 115 BoxedText,
Chris@916 116 OutlinedText,
Chris@916 117 OutlinedItalicText
Chris@916 118 };
Chris@916 119
Chris@916 120 virtual void drawVisibleText(QPainter &p, int x, int y,
Chris@916 121 QString text, TextStyle style) const = 0;
Chris@916 122
Chris@916 123 virtual void drawMeasurementRect(QPainter &p, const Layer *,
Chris@916 124 QRect rect, bool focus) const = 0;
Chris@916 125
Chris@918 126 virtual View *getView() = 0;
Chris@918 127 virtual const View *getView() const = 0;
Chris@916 128 };
Chris@916 129
Chris@916 130 #endif