view 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
line wrap: on
line source
/* -*- c-basic-offset: 4 -*-  vi:set ts=8 sts=4 sw=4: */

/*
    A waveform viewer and audio annotation editor.
    Chris Cannam, Queen Mary University of London, 2005-2006
    
    This is experimental software.  Not for distribution.
*/

#ifndef _ZOOM_CONSTRAINT_H_
#define _ZOOM_CONSTRAINT_H_

#include <stdlib.h>

/**
 * ZoomConstraint is a simple interface that describes a limitation on
 * the available zoom sizes for a view, for example based on cache
 * strategy or a (processing) window-size limitation.
 *
 * The default ZoomConstraint imposes no actual constraint.
 */

class ZoomConstraint
{
public:
    enum RoundingDirection {
	RoundDown,
	RoundUp,
	RoundNearest
    };

    /**
     * Given the "ideal" block size (frames per pixel) for a given
     * zoom level, return the nearest viable block size for this
     * constraint.
     *
     * For example, if a block size of 1523 frames per pixel is
     * requested but the underlying model only supports value
     * summaries at powers-of-two block sizes, return 1024 or 2048
     * depending on the rounding direction supplied.
     */
    virtual size_t getNearestBlockSize(size_t requestedBlockSize,
				       RoundingDirection = RoundNearest)
	const
    {
	return requestedBlockSize;
    }
};

#endif