annotate layer/VerticalBinLayer.h @ 1110:67dd16e33a3d spectrogram-minor-refactor

Make VerticalBinLayer an actual Layer (via SliceableLayer)
author Chris Cannam
date Tue, 19 Jul 2016 08:55:13 +0100
parents 179ea8a2f650
children 953ce409ccfb
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@1082 23 * rather than scale value. Colour3DPlotLayer is the obvious example.
Chris@1083 24 *!!! should just be a mapper interface, not a layer one?
Chris@1083 25 *!!! or even an application of RangeMapper
Chris@1082 26 */
Chris@1110 27 class VerticalBinLayer : public SliceableLayer
Chris@1082 28 {
Chris@1082 29 public:
Chris@1082 30 /**
Chris@1082 31 * Return the y coordinate at which the given bin "starts"
Chris@1082 32 * (i.e. at the bottom of the bin, if the given bin is an integer
Chris@1082 33 * and the vertical scale is the usual way up). Bin number may be
Chris@1082 34 * fractional, to obtain a position part-way through a bin.
Chris@1082 35 */
Chris@1082 36 virtual double getYForBin(LayerGeometryProvider *, double bin) const = 0;
Chris@1082 37
Chris@1082 38 /**
Chris@1082 39 * As getYForBin, but rounding to integer values.
Chris@1082 40 */
Chris@1085 41 virtual int getIYForBin(LayerGeometryProvider *v, int bin) const {
Chris@1085 42 return int(round(getYForBin(v, bin)));
Chris@1085 43 }
Chris@1082 44
Chris@1082 45 /**
Chris@1082 46 * Return the bin number, possibly fractional, at the given y
Chris@1082 47 * coordinate. Note that the whole numbers occur at the positions
Chris@1082 48 * at which the bins "start" (i.e. the bottom of the visible bin,
Chris@1082 49 * if the vertical scale is the usual way up).
Chris@1082 50 */
Chris@1082 51 virtual double getBinForY(LayerGeometryProvider *, double y) const = 0;
Chris@1082 52
Chris@1082 53 /**
Chris@1082 54 * As getBinForY, but rounding to integer values.
Chris@1082 55 */
Chris@1085 56 virtual int getIBinForY(LayerGeometryProvider *v, int y) const {
Chris@1085 57 return int(floor(getBinForY(v, y)));
Chris@1085 58 }
Chris@1082 59 };
Chris@1082 60
Chris@1082 61 #endif
Chris@1082 62