]> source.dussan.org Git - tigervnc.git/commitdiff
Added ScaledPixelBuffer::calculateScaleBoundary() in the rfb library.
authorgeorge82 <george82@3789f03b-4d11-0410-bbf8-ca57d06f2519>
Mon, 27 Mar 2006 15:10:43 +0000 (15:10 +0000)
committergeorge82 <george82@3789f03b-4d11-0410-bbf8-ca57d06f2519>
Mon, 27 Mar 2006 15:10:43 +0000 (15:10 +0000)
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@503 3789f03b-4d11-0410-bbf8-ca57d06f2519

rfb/ScaledPixelBuffer.cxx
rfb/ScaledPixelBuffer.h

index 8e7430b41c4edca5dbf93d1e3718eb96caca30cd..b566ea4e70954a728f4a5e5f5e2d71cc3fa9e7ee 100644 (file)
@@ -140,6 +140,17 @@ void ScaledPixelBuffer::scaleRect(const Rect& r) {
   }
 }
 
+Rect ScaledPixelBuffer::calculateScaleBoundary(const Rect& r) {
+  static int x_start, y_start, x_end, y_end;
+  x_start = r.tl.x == 0 ? 0 : ceil((r.tl.x-1) * scale_ratio);
+  y_start = r.tl.y == 0 ? 0 : ceil((r.tl.y-1) * scale_ratio);
+  x_end = ceil(r.br.x * scale_ratio - 1); 
+  x_end = x_end < scaled_width ? x_end + 1 : scaled_width;
+  y_end = ceil(r.br.y * scale_ratio - 1);
+  y_end = y_end < scaled_height ? y_end + 1 : scaled_height;
+  return Rect(x_start, y_start, x_end, y_end);
+}
+
 void ScaledPixelBuffer::recreateScaledBuffer() {
   if (scaled_data) delete [] scaled_data;
   scaled_data = new U8[scaled_width * scaled_height * (bpp / 8)];
index b4b5a8ecabc53fc549c05ece0df1e87312456d1a..8342a5830a146938e560a5d30a9447a95033fe53 100644 (file)
@@ -68,6 +68,10 @@ namespace rfb {
     // using bilinear interpolation
     virtual void scaleRect(const Rect& r);
 
+    // Calculate the scaled image rectangle which depend on the source 
+    // image rectangle.
+    inline Rect calculateScaleBoundary(const Rect& r);
+
   protected:
     virtual void recreateScaledBuffer();