annotate layer/VerticalBinLayer.h @ 1089:c8683d94442a spectrogram-minor-refactor

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