]> source.dussan.org Git - tigervnc.git/commitdiff
Modified ScaledPixelBuffer::calculateScaleBoundary() in
authorgeorge82 <george82@3789f03b-4d11-0410-bbf8-ca57d06f2519>
Sun, 3 Dec 2006 17:31:39 +0000 (17:31 +0000)
committergeorge82 <george82@3789f03b-4d11-0410-bbf8-ca57d06f2519>
Sun, 3 Dec 2006 17:31:39 +0000 (17:31 +0000)
compliance with any scaled filters.

git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2166 3789f03b-4d11-0410-bbf8-ca57d06f2519

common/rfb/ScaledPixelBuffer.cxx

index b5b3ea327be4e62edb52e3bc843ae0a88a8aa1ab..639dcd9d16741958af604aae078a84ecd9cf9141 100644 (file)
@@ -158,13 +158,16 @@ void ScaledPixelBuffer::scaleRect(const Rect& rect) {
 
 Rect ScaledPixelBuffer::calculateScaleBoundary(const Rect& r) {
   int x_start, y_start, x_end, y_end;
-  double sup = scaleFilters[scaleFilterID].radius;
-  x_start = r.tl.x-sup < 0 ? 0 : int((r.tl.x-sup) * scale_ratio + 1);
-  y_start = r.tl.y-sup < 0 ? 0 : int((r.tl.y-sup) * scale_ratio + 1);
-  x_end = int((r.br.x+sup-1) * scale_ratio);
-  x_end = x_end < scaled_width ? x_end + 1 : scaled_width;
-  y_end = int((r.br.y+sup-1) * scale_ratio);
-  y_end = y_end < scaled_height ? y_end + 1 : scaled_height;
+  double radius = scaleFilters[scaleFilterID].radius;
+  double translate = 0.5*scale_ratio - 0.5;
+  x_start = (int)ceil(scale_ratio*(r.tl.x-radius) + translate);
+  y_start = (int)ceil(scale_ratio*(r.tl.y-radius) + translate);
+  x_end = (int)ceil(scale_ratio*(r.br.x+radius) + translate);
+  y_end = (int)ceil(scale_ratio*(r.br.y+radius) + translate);
+  if (x_start < 0) x_start = 0;
+  if (y_start < 0) y_start = 0;
+  if (x_end > scaled_width) x_end = scaled_width;
+  if (y_end > scaled_height) y_end = scaled_height;
   return Rect(x_start, y_start, x_end, y_end);
 }