]> source.dussan.org Git - tigervnc.git/commitdiff
ScaledPixelBuffer class code improvements. Remove scale
authorgeorge82 <george82@3789f03b-4d11-0410-bbf8-ca57d06f2519>
Sat, 29 Jul 2006 10:27:19 +0000 (10:27 +0000)
committergeorge82 <george82@3789f03b-4d11-0410-bbf8-ca57d06f2519>
Sat, 29 Jul 2006 10:27:19 +0000 (10:27 +0000)
parameter. Now we set the scale using setScaleRatio. It
improve the accuracy of scaling operation.

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

common/rfb/ScaledPixelBuffer.cxx
common/rfb/ScaledPixelBuffer.h

index e459b39bdf13ad1139dc6b8aa645817e0096a53e..e590580a721ee3cd7b1fc31c5250c142eff6b707 100644 (file)
@@ -29,14 +29,14 @@ using namespace rfb;
 
 ScaledPixelBuffer::ScaledPixelBuffer(U8 **src_data_, int src_width_,
                                      int src_height_, int scale, PixelFormat pf_)
-  : scaled_data(0), scale_ratio(1), scale(100) {
+  : scaled_data(0), scale_ratio(1) {
 
   setSourceBuffer(src_data_, src_width_, src_height_);
   setPF(pf_);
 }
 
 ScaledPixelBuffer::ScaledPixelBuffer() 
-  : src_data(0), src_width(0), src_height(0), scale_ratio(1), scale(100),
+  : src_data(0), src_width(0), src_height(0), scale_ratio(1),
     pf(PixelFormat(32,24,0,1,255,255,255,0,8,16)), scaled_data(0) {
 }
 
@@ -55,10 +55,9 @@ void ScaledPixelBuffer::setPF(const PixelFormat &pf_) {
   pf = pf_;
 }
 
-void ScaledPixelBuffer::setScale(int scale_) {
-  if (scale != scale_) {
-    scale = scale_;
-    scale_ratio = double(scale) / 100;
+void ScaledPixelBuffer::setScaleRatio(double scale_ratio_) {
+  if (scale_ratio != scale_ratio_) {
+    scale_ratio = scale_ratio_;
     calculateScaledBufferSize();
   }
 }
index 17da5d6a87052357968dbad38bc90f86cab1f0a4..7ac318700d21b03b210692eb6538c2b4e54686eb 100644 (file)
@@ -48,7 +48,8 @@ namespace rfb {
     int getSrcWidth()  const { return src_width; }
     int getSrcHeight() const { return src_height; }
     int area() const { return scaled_width * scaled_height; }
-    int getScale() const { return scale; }
+    int getScale() const { return int(scale_ratio + 0.5); }
+    double getScaleRatio() const { return scale_ratio; }
 
     // Get rectangle encompassing this buffer
     //   Top-left of rectangle is either at (0,0), or the specified point.
@@ -64,7 +65,8 @@ namespace rfb {
     void setPF(const PixelFormat &pf);
 
     // Set the new scale, in percent
-    virtual void setScale(int scale);
+    virtual void setScale(int scale) { setScaleRatio(double(scale)/100.0); }
+    virtual void setScaleRatio(double scale_ratio);
 
     // Scale rect from the source image buffer to the destination buffer
     // using bilinear interpolation
@@ -86,7 +88,6 @@ namespace rfb {
     int scaled_width;
     int scaled_height;
     PixelFormat pf;
-    int scale;
     double scale_ratio;
     U8 **src_data;
     U8 *scaled_data;