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