annotate layer/VerticalBinLayer.h @ 1605:ae2d5f8ff005

When asked to render the whole view width, we need to wait for the layers to be ready before we can determine what the width is
author Chris Cannam
date Thu, 30 Apr 2020 14:47:13 +0100
parents 4eafe5a1b655
children
rev   line source
Chris@1082 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@1082 2
Chris@1082 3 /*
Chris@1082 4 Sonic Visualiser
Chris@1082 5 An audio file viewer and annotation editor.
Chris@1082 6 Centre for Digital Music, Queen Mary, University of London.
Chris@1082 7 This file copyright 2006-2016 Chris Cannam and QMUL.
Chris@1082 8
Chris@1082 9 This program is free software; you can redistribute it and/or
Chris@1082 10 modify it under the terms of the GNU General Public License as
Chris@1082 11 published by the Free Software Foundation; either version 2 of the
Chris@1082 12 License, or (at your option) any later version. See the file
Chris@1082 13 COPYING included with this distribution for more information.
Chris@1082 14 */
Chris@1082 15
Chris@1082 16 #ifndef VERTICAL_BIN_LAYER_H
Chris@1082 17 #define VERTICAL_BIN_LAYER_H
Chris@1082 18
Chris@1110 19 #include "SliceableLayer.h"
Chris@1110 20
Chris@1082 21 /**
Chris@1082 22 * Interface for layers in which the Y axis corresponds to bin number
Chris@1520 23 * rather than scale value. Colour3DPlotLayer and SpectrogramLayer are
Chris@1520 24 * obvious examples. Conceptually these are always SliceableLayers as
Chris@1520 25 * well, and this subclasses from SliceableLayer to avoid a big
Chris@1520 26 * inheritance mess.
Chris@1082 27 */
Chris@1110 28 class VerticalBinLayer : public SliceableLayer
Chris@1082 29 {
Chris@1082 30 public:
Chris@1082 31 /**
Chris@1082 32 * Return the y coordinate at which the given bin "starts"
Chris@1082 33 * (i.e. at the bottom of the bin, if the given bin is an integer
Chris@1082 34 * and the vertical scale is the usual way up). Bin number may be
Chris@1082 35 * fractional, to obtain a position part-way through a bin.
Chris@1082 36 */
Chris@1113 37 virtual double getYForBin(const LayerGeometryProvider *, double bin) const = 0;
Chris@1082 38
Chris@1082 39 /**
Chris@1082 40 * As getYForBin, but rounding to integer values.
Chris@1082 41 */
Chris@1113 42 virtual int getIYForBin(const LayerGeometryProvider *v, int bin) const {
Chris@1085 43 return int(round(getYForBin(v, bin)));
Chris@1085 44 }
Chris@1082 45
Chris@1082 46 /**
Chris@1082 47 * Return the bin number, possibly fractional, at the given y
Chris@1082 48 * coordinate. Note that the whole numbers occur at the positions
Chris@1082 49 * at which the bins "start" (i.e. the bottom of the visible bin,
Chris@1082 50 * if the vertical scale is the usual way up).
Chris@1082 51 */
Chris@1113 52 virtual double getBinForY(const LayerGeometryProvider *, double y) const = 0;
Chris@1082 53
Chris@1082 54 /**
Chris@1082 55 * As getBinForY, but rounding to integer values.
Chris@1082 56 */
Chris@1113 57 virtual int getIBinForY(const LayerGeometryProvider *v, int y) const {
Chris@1085 58 return int(floor(getBinForY(v, y)));
Chris@1085 59 }
Chris@1082 60 };
Chris@1082 61
Chris@1082 62 #endif
Chris@1082 63