src/zoom.hpp
branchNewGRF_ports
changeset 6871 5a9dc001e1ad
parent 6720 35756db7e577
equal deleted inserted replaced
6870:ca3fd1fbe311 6871:5a9dc001e1ad
    30 	ZOOM_LVL_MAX      = ZOOM_LVL_OUT_8X,
    30 	ZOOM_LVL_MAX      = ZOOM_LVL_OUT_8X,
    31 };
    31 };
    32 
    32 
    33 extern ZoomLevel _saved_scrollpos_zoom;
    33 extern ZoomLevel _saved_scrollpos_zoom;
    34 
    34 
       
    35 /**
       
    36  * Scale by zoom level, usually shift left (when zoom > ZOOM_LVL_NORMAL)
       
    37  * When shifting right, value is rounded up
       
    38  * @param value value to shift
       
    39  * @param zoom  zoom level to shift to
       
    40  * @return shifted value
       
    41  */
    35 static inline int ScaleByZoom(int value, ZoomLevel zoom)
    42 static inline int ScaleByZoom(int value, ZoomLevel zoom)
    36 {
    43 {
    37 	if (zoom == ZOOM_LVL_NORMAL) return value;
    44 	if (zoom == ZOOM_LVL_NORMAL) return value;
    38 	int izoom = (int)zoom - (int)ZOOM_LVL_NORMAL;
    45 	int izoom = (int)zoom - (int)ZOOM_LVL_NORMAL;
    39 	return (zoom > ZOOM_LVL_NORMAL) ? value << izoom : (value + (1 << -izoom) - 1) >> -izoom;
    46 	return (zoom > ZOOM_LVL_NORMAL) ? value << izoom : (value + (1 << -izoom) - 1) >> -izoom;
    40 }
    47 }
    41 
    48 
       
    49 /**
       
    50  * Scale by zoom level, usually shift right (when zoom > ZOOM_LVL_NORMAL)
       
    51  * When shifting right, value is rounded up
       
    52  * @param value value to shift
       
    53  * @param zoom  zoom level to shift to
       
    54  * @return shifted value
       
    55  */
    42 static inline int UnScaleByZoom(int value, ZoomLevel zoom)
    56 static inline int UnScaleByZoom(int value, ZoomLevel zoom)
    43 {
    57 {
    44 	if (zoom == ZOOM_LVL_NORMAL) return value;
    58 	if (zoom == ZOOM_LVL_NORMAL) return value;
    45 	int izoom = (int)zoom - (int)ZOOM_LVL_NORMAL;
    59 	int izoom = (int)zoom - (int)ZOOM_LVL_NORMAL;
    46 	return (zoom > ZOOM_LVL_NORMAL) ? (value + (1 << izoom) - 1) >> izoom : value << -izoom;
    60 	return (zoom > ZOOM_LVL_NORMAL) ? (value + (1 << izoom) - 1) >> izoom : value << -izoom;
    47 }
    61 }
    48 
    62 
       
    63 /**
       
    64  * Scale by zoom level, usually shift left (when zoom > ZOOM_LVL_NORMAL)
       
    65  * @param value value to shift
       
    66  * @param zoom  zoom level to shift to
       
    67  * @return shifted value
       
    68  */
       
    69 static inline int ScaleByZoomLower(int value, ZoomLevel zoom)
       
    70 {
       
    71 	if (zoom == ZOOM_LVL_NORMAL) return value;
       
    72 	int izoom = (int)zoom - (int)ZOOM_LVL_NORMAL;
       
    73 	return (zoom > ZOOM_LVL_NORMAL) ? value << izoom : value >> -izoom;
       
    74 }
       
    75 
       
    76 /**
       
    77  * Scale by zoom level, usually shift right (when zoom > ZOOM_LVL_NORMAL)
       
    78  * @param value value to shift
       
    79  * @param zoom  zoom level to shift to
       
    80  * @return shifted value
       
    81  */
       
    82 static inline int UnScaleByZoomLower(int value, ZoomLevel zoom)
       
    83 {
       
    84 	if (zoom == ZOOM_LVL_NORMAL) return value;
       
    85 	int izoom = (int)zoom - (int)ZOOM_LVL_NORMAL;
       
    86 	return (zoom > ZOOM_LVL_NORMAL) ? value >> izoom : value << -izoom;
       
    87 }
       
    88 
    49 #endif /* ZOOM_HPP */
    89 #endif /* ZOOM_HPP */