Added ScaledPixelBuffer::calculateScaleBoundary() in the rfb library.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@503 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/rfb/ScaledPixelBuffer.cxx b/rfb/ScaledPixelBuffer.cxx
index 8e7430b..b566ea4 100644
--- a/rfb/ScaledPixelBuffer.cxx
+++ b/rfb/ScaledPixelBuffer.cxx
@@ -140,6 +140,17 @@
}
}
+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)];
diff --git a/rfb/ScaledPixelBuffer.h b/rfb/ScaledPixelBuffer.h
index b4b5a8e..8342a58 100644
--- a/rfb/ScaledPixelBuffer.h
+++ b/rfb/ScaledPixelBuffer.h
@@ -68,6 +68,10 @@
// 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();