Chris@1082: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@1082: Chris@1082: /* Chris@1082: Sonic Visualiser Chris@1082: An audio file viewer and annotation editor. Chris@1082: Centre for Digital Music, Queen Mary, University of London. Chris@1082: This file copyright 2006-2016 Chris Cannam and QMUL. Chris@1082: Chris@1082: This program is free software; you can redistribute it and/or Chris@1082: modify it under the terms of the GNU General Public License as Chris@1082: published by the Free Software Foundation; either version 2 of the Chris@1082: License, or (at your option) any later version. See the file Chris@1082: COPYING included with this distribution for more information. Chris@1082: */ Chris@1082: Chris@1082: #ifndef VERTICAL_BIN_LAYER_H Chris@1082: #define VERTICAL_BIN_LAYER_H Chris@1082: Chris@1110: #include "SliceableLayer.h" Chris@1110: Chris@1082: /** Chris@1082: * Interface for layers in which the Y axis corresponds to bin number Chris@1082: * rather than scale value. Colour3DPlotLayer is the obvious example. Chris@1083: *!!! should just be a mapper interface, not a layer one? Chris@1083: *!!! or even an application of RangeMapper Chris@1082: */ Chris@1110: class VerticalBinLayer : public SliceableLayer Chris@1082: { Chris@1082: public: Chris@1082: /** Chris@1082: * Return the y coordinate at which the given bin "starts" Chris@1082: * (i.e. at the bottom of the bin, if the given bin is an integer Chris@1082: * and the vertical scale is the usual way up). Bin number may be Chris@1082: * fractional, to obtain a position part-way through a bin. Chris@1082: */ Chris@1082: virtual double getYForBin(LayerGeometryProvider *, double bin) const = 0; Chris@1082: Chris@1082: /** Chris@1082: * As getYForBin, but rounding to integer values. Chris@1082: */ Chris@1085: virtual int getIYForBin(LayerGeometryProvider *v, int bin) const { Chris@1085: return int(round(getYForBin(v, bin))); Chris@1085: } Chris@1082: Chris@1082: /** Chris@1082: * Return the bin number, possibly fractional, at the given y Chris@1082: * coordinate. Note that the whole numbers occur at the positions Chris@1082: * at which the bins "start" (i.e. the bottom of the visible bin, Chris@1082: * if the vertical scale is the usual way up). Chris@1082: */ Chris@1082: virtual double getBinForY(LayerGeometryProvider *, double y) const = 0; Chris@1082: Chris@1082: /** Chris@1082: * As getBinForY, but rounding to integer values. Chris@1082: */ Chris@1085: virtual int getIBinForY(LayerGeometryProvider *v, int y) const { Chris@1085: return int(floor(getBinForY(v, y))); Chris@1085: } Chris@1082: }; Chris@1082: Chris@1082: #endif Chris@1082: