annotate layer/VerticalBinLayer.h @ 1330:c1f719094c25 zoom

Ensure getFrameForX returns value on zoom blocksize boundary; take advantage of that (this is essentially reverting to the same behaviour as in the default branch, which we should probably have done all along)
author Chris Cannam
date Fri, 21 Sep 2018 11:50:05 +0100
parents 261a00010918
children 4eafe5a1b655
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@1111 24 * Conceptually these are always SliceableLayers as well, and this
Chris@1111 25 * subclasses from SliceableLayer to avoid a big inheritance mess.
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@1113 36 virtual double getYForBin(const 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@1113 41 virtual int getIYForBin(const 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@1113 51 virtual double getBinForY(const 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@1113 56 virtual int getIBinForY(const 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