00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "PowerOfTwoZoomConstraint.h"
00017
00018 size_t
00019 PowerOfTwoZoomConstraint::getNearestBlockSize(size_t req,
00020 RoundingDirection dir) const
00021 {
00022 size_t result = 0;
00023
00024 for (size_t bs = 1; ; bs *= 2) {
00025 if (bs >= req) {
00026 if (dir == RoundNearest) {
00027 if (bs - req < req - bs/2) {
00028 result = bs;
00029 break;
00030 } else {
00031 result = bs/2;
00032 break;
00033 }
00034 } else if (dir == RoundDown) {
00035 result = bs/2;
00036 break;
00037 } else {
00038 result = bs;
00039 break;
00040 }
00041 }
00042 }
00043
00044 if (result > getMaxZoomLevel()) result = getMaxZoomLevel();
00045 return result;
00046 }
00047