annotate base/ZoomConstraint.h @ 12:f67ddc287bc3

* Add ability to create empty layers for editing * Add first basic editing capability (adding points to a time instant layer) * Add various keyboard and mouse shortcuts for navigation &c * Add ability to resize a selection by dragging its edges * Add maximum zoom level
author Chris Cannam
date Thu, 26 Jan 2006 16:15:40 +0000
parents d86891498eef
children 070e9e1e40ea
rev   line source
Chris@0 1 /* -*- c-basic-offset: 4 -*- vi:set ts=8 sts=4 sw=4: */
Chris@0 2
Chris@0 3 /*
Chris@0 4 A waveform viewer and audio annotation editor.
Chris@2 5 Chris Cannam, Queen Mary University of London, 2005-2006
Chris@0 6
Chris@0 7 This is experimental software. Not for distribution.
Chris@0 8 */
Chris@0 9
Chris@0 10 #ifndef _ZOOM_CONSTRAINT_H_
Chris@0 11 #define _ZOOM_CONSTRAINT_H_
Chris@0 12
Chris@0 13 #include <stdlib.h>
Chris@0 14
Chris@0 15 /**
Chris@0 16 * ZoomConstraint is a simple interface that describes a limitation on
Chris@0 17 * the available zoom sizes for a view, for example based on cache
Chris@0 18 * strategy or a (processing) window-size limitation.
Chris@0 19 *
Chris@12 20 * The default ZoomConstraint imposes no actual constraint except for
Chris@12 21 * a nominal maximum.
Chris@0 22 */
Chris@0 23
Chris@0 24 class ZoomConstraint
Chris@0 25 {
Chris@0 26 public:
Chris@0 27 enum RoundingDirection {
Chris@0 28 RoundDown,
Chris@0 29 RoundUp,
Chris@0 30 RoundNearest
Chris@0 31 };
Chris@0 32
Chris@0 33 /**
Chris@0 34 * Given the "ideal" block size (frames per pixel) for a given
Chris@0 35 * zoom level, return the nearest viable block size for this
Chris@0 36 * constraint.
Chris@0 37 *
Chris@0 38 * For example, if a block size of 1523 frames per pixel is
Chris@0 39 * requested but the underlying model only supports value
Chris@0 40 * summaries at powers-of-two block sizes, return 1024 or 2048
Chris@0 41 * depending on the rounding direction supplied.
Chris@0 42 */
Chris@0 43 virtual size_t getNearestBlockSize(size_t requestedBlockSize,
Chris@0 44 RoundingDirection = RoundNearest)
Chris@0 45 const
Chris@0 46 {
Chris@12 47 if (requestedBlockSize > getMaxZoomLevel()) return getMaxZoomLevel();
Chris@12 48 else return requestedBlockSize;
Chris@0 49 }
Chris@12 50
Chris@12 51 virtual size_t getMaxZoomLevel() const { return 262144; }
Chris@0 52 };
Chris@0 53
Chris@0 54 #endif
Chris@0 55