From: george82 Date: Mon, 27 Mar 2006 15:10:43 +0000 (+0000) Subject: Added ScaledPixelBuffer::calculateScaleBoundary() in the rfb library. X-Git-Tag: v0.0.90~384^2~332 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=1d78bd307ca4da879746cf480cd8657eb806f8aa;p=tigervnc.git 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 8e7430b4..b566ea4e 100644 --- a/rfb/ScaledPixelBuffer.cxx +++ b/rfb/ScaledPixelBuffer.cxx @@ -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)]; diff --git a/rfb/ScaledPixelBuffer.h b/rfb/ScaledPixelBuffer.h index b4b5a8ec..8342a583 100644 --- a/rfb/ScaledPixelBuffer.h +++ b/rfb/ScaledPixelBuffer.h @@ -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();