rubidium@9723: /* $Id$ */ rubidium@9723: glx@10294: /** @file zoom_func.h */ rubidium@9723: rubidium@9723: #ifndef ZOOM_FUNC_H rubidium@9723: #define ZOOM_FUNC_H rubidium@9723: rubidium@9723: #include "zoom_type.h" rubidium@9723: rubidium@9723: extern ZoomLevel _saved_scrollpos_zoom; rubidium@9723: rubidium@9723: /** rubidium@9723: * Scale by zoom level, usually shift left (when zoom > ZOOM_LVL_NORMAL) rubidium@9723: * When shifting right, value is rounded up rubidium@9723: * @param value value to shift rubidium@9723: * @param zoom zoom level to shift to rubidium@9723: * @return shifted value rubidium@9723: */ rubidium@9723: static inline int ScaleByZoom(int value, ZoomLevel zoom) rubidium@9723: { rubidium@9723: if (zoom == ZOOM_LVL_NORMAL) return value; rubidium@9723: int izoom = zoom - ZOOM_LVL_NORMAL; rubidium@9723: return (zoom > ZOOM_LVL_NORMAL) ? value << izoom : (value + (1 << -izoom) - 1) >> -izoom; rubidium@9723: } rubidium@9723: rubidium@9723: /** rubidium@9723: * Scale by zoom level, usually shift right (when zoom > ZOOM_LVL_NORMAL) rubidium@9723: * When shifting right, value is rounded up rubidium@9723: * @param value value to shift rubidium@9723: * @param zoom zoom level to shift to rubidium@9723: * @return shifted value rubidium@9723: */ rubidium@9723: static inline int UnScaleByZoom(int value, ZoomLevel zoom) rubidium@9723: { rubidium@9723: if (zoom == ZOOM_LVL_NORMAL) return value; rubidium@9723: int izoom = zoom - ZOOM_LVL_NORMAL; rubidium@9723: return (zoom > ZOOM_LVL_NORMAL) ? (value + (1 << izoom) - 1) >> izoom : value << -izoom; rubidium@9723: } rubidium@9723: rubidium@9723: /** rubidium@9723: * Scale by zoom level, usually shift left (when zoom > ZOOM_LVL_NORMAL) rubidium@9723: * @param value value to shift rubidium@9723: * @param zoom zoom level to shift to rubidium@9723: * @return shifted value rubidium@9723: */ rubidium@9723: static inline int ScaleByZoomLower(int value, ZoomLevel zoom) rubidium@9723: { rubidium@9723: if (zoom == ZOOM_LVL_NORMAL) return value; rubidium@9723: int izoom = zoom - ZOOM_LVL_NORMAL; rubidium@9723: return (zoom > ZOOM_LVL_NORMAL) ? value << izoom : value >> -izoom; rubidium@9723: } rubidium@9723: rubidium@9723: /** rubidium@9723: * Scale by zoom level, usually shift right (when zoom > ZOOM_LVL_NORMAL) rubidium@9723: * @param value value to shift rubidium@9723: * @param zoom zoom level to shift to rubidium@9723: * @return shifted value rubidium@9723: */ rubidium@9723: static inline int UnScaleByZoomLower(int value, ZoomLevel zoom) rubidium@9723: { rubidium@9723: if (zoom == ZOOM_LVL_NORMAL) return value; rubidium@9723: int izoom = zoom - ZOOM_LVL_NORMAL; rubidium@9723: return (zoom > ZOOM_LVL_NORMAL) ? value >> izoom : value << -izoom; rubidium@9723: } rubidium@9723: rubidium@9723: #endif /* ZOOM_FUNC_H */