src/zoom_func.h
author truebrain
Fri, 13 Jun 2008 19:57:25 +0000
branchnoai
changeset 10957 7a140b4cd91d
parent 10455 22c441f5adf9
permissions -rw-r--r--
(svn r13511) [NoAI] -Fix: add a reference to objects given in Valuate(), so they remain valid during their usage. This allows nameless functions (lambda functions) in Valuate() on long lists.
9723
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
     1
/* $Id$ */
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
     2
10455
22c441f5adf9 (svn r12997) [NoAI] -Sync: with trunk r12895:12996.
rubidium
parents: 10294
diff changeset
     3
/** @file zoom_func.h Functions related to zooming. */
9723
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
     4
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
     5
#ifndef ZOOM_FUNC_H
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
     6
#define ZOOM_FUNC_H
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
     7
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
     8
#include "zoom_type.h"
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
     9
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    10
extern ZoomLevel _saved_scrollpos_zoom;
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    11
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    12
/**
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    13
 * Scale by zoom level, usually shift left (when zoom > ZOOM_LVL_NORMAL)
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    14
 * When shifting right, value is rounded up
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    15
 * @param value value to shift
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    16
 * @param zoom  zoom level to shift to
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    17
 * @return shifted value
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    18
 */
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    19
static inline int ScaleByZoom(int value, ZoomLevel zoom)
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    20
{
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    21
	if (zoom == ZOOM_LVL_NORMAL) return value;
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    22
	int izoom = zoom - ZOOM_LVL_NORMAL;
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    23
	return (zoom > ZOOM_LVL_NORMAL) ? value << izoom : (value + (1 << -izoom) - 1) >> -izoom;
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    24
}
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    25
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    26
/**
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    27
 * Scale by zoom level, usually shift right (when zoom > ZOOM_LVL_NORMAL)
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    28
 * When shifting right, value is rounded up
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    29
 * @param value value to shift
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    30
 * @param zoom  zoom level to shift to
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    31
 * @return shifted value
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    32
 */
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    33
static inline int UnScaleByZoom(int value, ZoomLevel zoom)
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    34
{
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    35
	if (zoom == ZOOM_LVL_NORMAL) return value;
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    36
	int izoom = zoom - ZOOM_LVL_NORMAL;
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    37
	return (zoom > ZOOM_LVL_NORMAL) ? (value + (1 << izoom) - 1) >> izoom : value << -izoom;
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    38
}
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    39
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    40
/**
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    41
 * Scale by zoom level, usually shift left (when zoom > ZOOM_LVL_NORMAL)
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    42
 * @param value value to shift
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    43
 * @param zoom  zoom level to shift to
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    44
 * @return shifted value
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    45
 */
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    46
static inline int ScaleByZoomLower(int value, ZoomLevel zoom)
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    47
{
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    48
	if (zoom == ZOOM_LVL_NORMAL) return value;
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    49
	int izoom = zoom - ZOOM_LVL_NORMAL;
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    50
	return (zoom > ZOOM_LVL_NORMAL) ? value << izoom : value >> -izoom;
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    51
}
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    52
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    53
/**
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    54
 * Scale by zoom level, usually shift right (when zoom > ZOOM_LVL_NORMAL)
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    55
 * @param value value to shift
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    56
 * @param zoom  zoom level to shift to
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    57
 * @return shifted value
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    58
 */
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    59
static inline int UnScaleByZoomLower(int value, ZoomLevel zoom)
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    60
{
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    61
	if (zoom == ZOOM_LVL_NORMAL) return value;
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    62
	int izoom = zoom - ZOOM_LVL_NORMAL;
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    63
	return (zoom > ZOOM_LVL_NORMAL) ? value >> izoom : value << -izoom;
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    64
}
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    65
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
diff changeset
    66
#endif /* ZOOM_FUNC_H */