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