comparison data/model/PowerOfTwoZoomConstraint.cpp @ 147:3a13b0d4934e

* Reorganising code base. This revision will not compile.
author Chris Cannam
date Mon, 31 Jul 2006 11:44:37 +0000
parents
children 59e7fe1b1003
comparison
equal deleted inserted replaced
146:f90fad823cea 147:3a13b0d4934e
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
2
3 /*
4 Sonic Visualiser
5 An audio file viewer and annotation editor.
6 Centre for Digital Music, Queen Mary, University of London.
7 This file copyright 2006 Chris Cannam.
8
9 This program is free software; you can redistribute it and/or
10 modify it under the terms of the GNU General Public License as
11 published by the Free Software Foundation; either version 2 of the
12 License, or (at your option) any later version. See the file
13 COPYING included with this distribution for more information.
14 */
15
16 #include "PowerOfTwoZoomConstraint.h"
17
18 size_t
19 PowerOfTwoZoomConstraint::getNearestBlockSize(size_t req,
20 RoundingDirection dir) const
21 {
22 size_t result = 0;
23
24 for (size_t bs = 1; ; bs *= 2) {
25 if (bs >= req) {
26 if (dir == RoundNearest) {
27 if (bs - req < req - bs/2) {
28 result = bs;
29 break;
30 } else {
31 result = bs/2;
32 break;
33 }
34 } else if (dir == RoundDown) {
35 result = bs/2;
36 break;
37 } else {
38 result = bs;
39 break;
40 }
41 }
42 }
43
44 if (result > getMaxZoomLevel()) result = getMaxZoomLevel();
45 return result;
46 }
47