Mercurial > hg > svcore
annotate base/ZoomConstraint.h @ 6:44bbf5793d84
* Rework handling of layer properties in file I/O -- we now get the individual
layers to load and save them rather than doing it via generic property lists
in the base class, so as to ensure we read and write meaningful values rather
than generic int values requiring conversion.
author | Chris Cannam |
---|---|
date | Thu, 19 Jan 2006 12:54:38 +0000 |
parents | d86891498eef |
children | f67ddc287bc3 |
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@0 | 20 * The default ZoomConstraint imposes no actual constraint. |
Chris@0 | 21 */ |
Chris@0 | 22 |
Chris@0 | 23 class ZoomConstraint |
Chris@0 | 24 { |
Chris@0 | 25 public: |
Chris@0 | 26 enum RoundingDirection { |
Chris@0 | 27 RoundDown, |
Chris@0 | 28 RoundUp, |
Chris@0 | 29 RoundNearest |
Chris@0 | 30 }; |
Chris@0 | 31 |
Chris@0 | 32 /** |
Chris@0 | 33 * Given the "ideal" block size (frames per pixel) for a given |
Chris@0 | 34 * zoom level, return the nearest viable block size for this |
Chris@0 | 35 * constraint. |
Chris@0 | 36 * |
Chris@0 | 37 * For example, if a block size of 1523 frames per pixel is |
Chris@0 | 38 * requested but the underlying model only supports value |
Chris@0 | 39 * summaries at powers-of-two block sizes, return 1024 or 2048 |
Chris@0 | 40 * depending on the rounding direction supplied. |
Chris@0 | 41 */ |
Chris@0 | 42 virtual size_t getNearestBlockSize(size_t requestedBlockSize, |
Chris@0 | 43 RoundingDirection = RoundNearest) |
Chris@0 | 44 const |
Chris@0 | 45 { |
Chris@0 | 46 return requestedBlockSize; |
Chris@0 | 47 } |
Chris@0 | 48 }; |
Chris@0 | 49 |
Chris@0 | 50 #endif |
Chris@0 | 51 |