]> source.dussan.org Git - tigervnc.git/commitdiff
Added the new method makeWeightTabs to the ScaleFilters
authorgeorge82 <george82@3789f03b-4d11-0410-bbf8-ca57d06f2519>
Tue, 14 Nov 2006 15:59:25 +0000 (15:59 +0000)
committergeorge82 <george82@3789f03b-4d11-0410-bbf8-ca57d06f2519>
Tue, 14 Nov 2006 15:59:25 +0000 (15:59 +0000)
class. It's used to calculate weight coeffs on the scale
filter interval.

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

common/rfb/ScaleFilters.cxx
common/rfb/ScaleFilters.h

index d5530b724ac97cb082f7379d86e7fa2d41003cea..28fa24f981f378c034320c9e4f258399832f8d1d 100644 (file)
@@ -20,6 +20,7 @@
 #include <assert.h>\r
 #include <math.h>\r
 \r
+#include <rfb/Rect.h>\r
 #include <rfb/ScaleFilters.h>\r
 \r
 using namespace rfb;\r
@@ -84,4 +85,28 @@ SFilter ScaleFilters::create(char *name_, double radius_, filter_func func_) {
   filter.radius = radius_;\r
   filter.func = func_;\r
   return filter;\r
-}
\ No newline at end of file
+}\r
+\r
+void ScaleFilters::makeWeightTabs(int filter_id, int src_x, int dst_x, SFilterWeightTab *weightTabs) {\r
+  double sx;\r
+  double ratio = dst_x / src_x;\r
+  SFilter sFilter = filters[filter_id];\r
+\r
+  weightTabs = new SFilterWeightTab[dst_x];\r
+\r
+  // Make the weight tab for the each dest x position\r
+  for (int x = 0; x < dst_x; x++) {\r
+    sx = double(x) / ratio;\r
+\r
+    // Calculate the scale filter interval, [i0, i1)\r
+    int i0 = int(__rfbmin(ceil(sx-sFilter.radius), 0));\r
+    int i1 = int(__rfbmax(ceil(sx+sFilter.radius), src_x));\r
+    weightTabs[x].i0 = i0; weightTabs[x].i1 = i1;\r
+    weightTabs[x].weight = new float[i1-i0];\r
+\r
+    // Calculate the weight coeffs on the scale filter interval\r
+    for (int ci = 0, i = i0; i < i1; i++) {\r
+      weightTabs[x].weight[ci++] = (float)sFilter.func(float(i)-sx);\r
+    }\r
+  }\r
+}\r
index 0ec0730db00b232397e7e799cf1fc6db822aa99b..317d0b41395e3b296c656a888920d579b452347e 100644 (file)
@@ -60,6 +60,8 @@ namespace rfb {
 \r
     SFilter &operator[](unsigned int filter_id);\r
 \r
+    void makeWeightTabs(int filter, int src_x, int dst_x, SFilterWeightTab *weightTabs);\r
+\r
   protected:\r
     void initFilters();\r
 \r