src/zoom_func.h
branchNewGRF_ports
changeset 6872 1c4a4a609f85
child 10274 b3c58f3df92b
equal deleted inserted replaced
6871:5a9dc001e1ad 6872:1c4a4a609f85
       
     1 /* $Id$ */
       
     2 
       
     3 /** @file zoom_func.hpp */
       
     4 
       
     5 #ifndef ZOOM_FUNC_H
       
     6 #define ZOOM_FUNC_H
       
     7 
       
     8 #include "zoom_type.h"
       
     9 
       
    10 extern ZoomLevel _saved_scrollpos_zoom;
       
    11 
       
    12 /**
       
    13  * Scale by zoom level, usually shift left (when zoom > ZOOM_LVL_NORMAL)
       
    14  * When shifting right, value is rounded up
       
    15  * @param value value to shift
       
    16  * @param zoom  zoom level to shift to
       
    17  * @return shifted value
       
    18  */
       
    19 static inline int ScaleByZoom(int value, ZoomLevel zoom)
       
    20 {
       
    21 	if (zoom == ZOOM_LVL_NORMAL) return value;
       
    22 	int izoom = zoom - ZOOM_LVL_NORMAL;
       
    23 	return (zoom > ZOOM_LVL_NORMAL) ? value << izoom : (value + (1 << -izoom) - 1) >> -izoom;
       
    24 }
       
    25 
       
    26 /**
       
    27  * Scale by zoom level, usually shift right (when zoom > ZOOM_LVL_NORMAL)
       
    28  * When shifting right, value is rounded up
       
    29  * @param value value to shift
       
    30  * @param zoom  zoom level to shift to
       
    31  * @return shifted value
       
    32  */
       
    33 static inline int UnScaleByZoom(int value, ZoomLevel zoom)
       
    34 {
       
    35 	if (zoom == ZOOM_LVL_NORMAL) return value;
       
    36 	int izoom = zoom - ZOOM_LVL_NORMAL;
       
    37 	return (zoom > ZOOM_LVL_NORMAL) ? (value + (1 << izoom) - 1) >> izoom : value << -izoom;
       
    38 }
       
    39 
       
    40 /**
       
    41  * Scale by zoom level, usually shift left (when zoom > ZOOM_LVL_NORMAL)
       
    42  * @param value value to shift
       
    43  * @param zoom  zoom level to shift to
       
    44  * @return shifted value
       
    45  */
       
    46 static inline int ScaleByZoomLower(int value, ZoomLevel zoom)
       
    47 {
       
    48 	if (zoom == ZOOM_LVL_NORMAL) return value;
       
    49 	int izoom = zoom - ZOOM_LVL_NORMAL;
       
    50 	return (zoom > ZOOM_LVL_NORMAL) ? value << izoom : value >> -izoom;
       
    51 }
       
    52 
       
    53 /**
       
    54  * Scale by zoom level, usually shift right (when zoom > ZOOM_LVL_NORMAL)
       
    55  * @param value value to shift
       
    56  * @param zoom  zoom level to shift to
       
    57  * @return shifted value
       
    58  */
       
    59 static inline int UnScaleByZoomLower(int value, ZoomLevel zoom)
       
    60 {
       
    61 	if (zoom == ZOOM_LVL_NORMAL) return value;
       
    62 	int izoom = zoom - ZOOM_LVL_NORMAL;
       
    63 	return (zoom > ZOOM_LVL_NORMAL) ? value >> izoom : value << -izoom;
       
    64 }
       
    65 
       
    66 #endif /* ZOOM_FUNC_H */