annotate data/model/PowerOfTwoZoomConstraint.cpp @ 1455:ec9e65fcf749

The use of the begin/end pairs here just seems to cause too many rows to be deleted (from the visual representation, not the underlying model). Things apparently work better if we just modify the underlying model and let the change signals percolate back up again. To that end, update the change handlers so as to cover their proper ranges with dataChanged signals.
author Chris Cannam
date Mon, 23 Apr 2018 16:03:35 +0100
parents 48e9f538e6e9
children 710e6250a401 a7485c1bdba5
rev   line source
Chris@147 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@147 2
Chris@147 3 /*
Chris@147 4 Sonic Visualiser
Chris@147 5 An audio file viewer and annotation editor.
Chris@147 6 Centre for Digital Music, Queen Mary, University of London.
Chris@147 7 This file copyright 2006 Chris Cannam.
Chris@147 8
Chris@147 9 This program is free software; you can redistribute it and/or
Chris@147 10 modify it under the terms of the GNU General Public License as
Chris@147 11 published by the Free Software Foundation; either version 2 of the
Chris@147 12 License, or (at your option) any later version. See the file
Chris@147 13 COPYING included with this distribution for more information.
Chris@147 14 */
Chris@147 15
Chris@147 16 #include "PowerOfTwoZoomConstraint.h"
Chris@147 17
Chris@929 18 int
Chris@929 19 PowerOfTwoZoomConstraint::getNearestBlockSize(int req,
Chris@1429 20 RoundingDirection dir) const
Chris@147 21 {
Chris@929 22 int result = 0;
Chris@147 23
Chris@929 24 for (int bs = 1; ; bs *= 2) {
Chris@1429 25 if (bs >= req) {
Chris@1429 26 if (dir == RoundNearest) {
Chris@1429 27 if (bs - req < req - bs/2) {
Chris@1429 28 result = bs;
Chris@1429 29 break;
Chris@1429 30 } else {
Chris@1429 31 result = bs/2;
Chris@1429 32 break;
Chris@1429 33 }
Chris@1429 34 } else if (dir == RoundDown) {
Chris@1429 35 result = bs/2;
Chris@1429 36 break;
Chris@1429 37 } else {
Chris@1429 38 result = bs;
Chris@1429 39 break;
Chris@1429 40 }
Chris@1429 41 }
Chris@147 42 }
Chris@147 43
Chris@147 44 if (result > getMaxZoomLevel()) result = getMaxZoomLevel();
Chris@147 45 return result;
Chris@147 46 }
Chris@147 47