summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChunEon Park <chuneon.park@samsung.com>2013-02-23 21:45:10 +0900
committerChunEon Park <chuneon.park@samsung.com>2013-02-23 21:45:10 +0900
commit53fa4cd2d8603b8f9aa8e8597e0b73144b301181 (patch)
tree7a3089b74685b58d45d1860006284f4129e69d51
parent029d539a85306019608e27a611ace500b313dd71 (diff)
evas/common - scale sample code refactoring. simpler and more effcient.
-rw-r--r--src/lib/evas/common/evas_scale_sample.c106
1 files changed, 56 insertions, 50 deletions
diff --git a/src/lib/evas/common/evas_scale_sample.c b/src/lib/evas/common/evas_scale_sample.c
index cec5b0f011..e0a82e5a1d 100644
--- a/src/lib/evas/common/evas_scale_sample.c
+++ b/src/lib/evas/common/evas_scale_sample.c
@@ -78,112 +78,118 @@ evas_common_scale_rgba_sample_draw(RGBA_Image *src, RGBA_Image *dst, int dst_cli
78 (dst_region_w <= 0) || (dst_region_h <= 0)) return; 78 (dst_region_w <= 0) || (dst_region_h <= 0)) return;
79 79
80 src_w = src->cache_entry.w; 80 src_w = src->cache_entry.w;
81 if (src_region_x >= src_w) return;
82
81 src_h = src->cache_entry.h; 83 src_h = src->cache_entry.h;
84 if (src_region_y >= src_h) return;
85
82 dst_w = dst->cache_entry.w; 86 dst_w = dst->cache_entry.w;
83 dst_h = dst->cache_entry.h; 87 dst_h = dst->cache_entry.h;
84 88
85 src_data = src->image.data; 89 src_data = src->image.data;
86 dst_data = dst->image.data; 90 dst_data = dst->image.data;
87 91
92 /* sanitise clip x */
88 if (dst_clip_x < 0) 93 if (dst_clip_x < 0)
89 { 94 {
90 dst_clip_w += dst_clip_x; 95 dst_clip_w += dst_clip_x;
91 dst_clip_x = 0; 96 dst_clip_x = 0;
92 } 97 }
93 if (dst_clip_y < 0) 98
94 {
95 dst_clip_h += dst_clip_y;
96 dst_clip_y = 0;
97 }
98 if ((dst_clip_x + dst_clip_w) > dst_w) 99 if ((dst_clip_x + dst_clip_w) > dst_w)
99 dst_clip_w = dst_w - dst_clip_x; 100 dst_clip_w = dst_w - dst_clip_x;
100 if ((dst_clip_y + dst_clip_h) > dst_h)
101 dst_clip_h = dst_h - dst_clip_y;
102 101
103 if (dst_clip_x < dst_region_x) 102 if (dst_clip_x < dst_region_x)
104 { 103 {
105 dst_clip_w += dst_clip_x - dst_region_x; 104 dst_clip_w += dst_clip_x - dst_region_x;
106 dst_clip_x = dst_region_x; 105 dst_clip_x = dst_region_x;
107 } 106 }
107
108 if (dst_clip_x >= dst_w) return;
109
108 if ((dst_clip_x + dst_clip_w) > (dst_region_x + dst_region_w)) 110 if ((dst_clip_x + dst_clip_w) > (dst_region_x + dst_region_w))
109 dst_clip_w = dst_region_x + dst_region_w - dst_clip_x; 111 dst_clip_w = dst_region_x + dst_region_w - dst_clip_x;
112
113 if (dst_clip_w <= 0) return;
114
115 /* sanitise clip y */
116 if (dst_clip_y < 0)
117 {
118 dst_clip_h += dst_clip_y;
119 dst_clip_y = 0;
120 }
121
122 if ((dst_clip_y + dst_clip_h) > dst_h)
123 dst_clip_h = dst_h - dst_clip_y;
124
110 if (dst_clip_y < dst_region_y) 125 if (dst_clip_y < dst_region_y)
111 { 126 {
112 dst_clip_h += dst_clip_y - dst_region_y; 127 dst_clip_h += dst_clip_y - dst_region_y;
113 dst_clip_y = dst_region_y; 128 dst_clip_y = dst_region_y;
114 } 129 }
130
131 if (dst_clip_y >= dst_h) return;
132
115 if ((dst_clip_y + dst_clip_h) > (dst_region_y + dst_region_h)) 133 if ((dst_clip_y + dst_clip_h) > (dst_region_y + dst_region_h))
116 dst_clip_h = dst_region_y + dst_region_h - dst_clip_y; 134 dst_clip_h = dst_region_y + dst_region_h - dst_clip_y;
117 135
118 if ((dst_clip_w <= 0) || (dst_clip_h <= 0)) return; 136 if (dst_clip_h <= 0) return;
119 137
120 /* sanitise x */ 138 /* sanitise region x */
121 if (src_region_x < 0) 139 if (src_region_x < 0)
122 { 140 {
123 dst_region_x -= (src_region_x * dst_region_w) / src_region_w; 141 dst_region_x -= (src_region_x * dst_region_w) / src_region_w;
124 dst_region_w += (src_region_x * dst_region_w) / src_region_w; 142 dst_region_w += (src_region_x * dst_region_w) / src_region_w;
125 src_region_w += src_region_x; 143 src_region_w += src_region_x;
126 src_region_x = 0; 144 src_region_x = 0;
145
146 if (dst_clip_x < dst_region_x)
147 {
148 dst_clip_w += (dst_clip_x - dst_region_x);
149 dst_clip_x = dst_region_x;
150 }
127 } 151 }
128 if (src_region_x >= src_w) return; 152
153 if ((dst_clip_x + dst_clip_w) > dst_w)
154 dst_clip_w = dst_w - dst_clip_x;
155
156 if (dst_clip_w <= 0) return;
157
129 if ((src_region_x + src_region_w) > src_w) 158 if ((src_region_x + src_region_w) > src_w)
130 { 159 {
131 dst_region_w = (dst_region_w * (src_w - src_region_x)) / (src_region_w); 160 dst_region_w = (dst_region_w * (src_w - src_region_x)) / (src_region_w);
132 src_region_w = src_w - src_region_x; 161 src_region_w = src_w - src_region_x;
133 } 162 }
134 if (dst_region_w <= 0) return;
135 if (src_region_w <= 0) return;
136 if (dst_clip_x < 0)
137 {
138 dst_clip_w += dst_clip_x;
139 dst_clip_x = 0;
140 }
141 if (dst_clip_w <= 0) return;
142 if (dst_clip_x >= dst_w) return;
143 if (dst_clip_x < dst_region_x)
144 {
145 dst_clip_w += (dst_clip_x - dst_region_x);
146 dst_clip_x = dst_region_x;
147 }
148 if ((dst_clip_x + dst_clip_w) > dst_w)
149 {
150 dst_clip_w = dst_w - dst_clip_x;
151 }
152 if (dst_clip_w <= 0) return;
153 163
154 /* sanitise y */ 164 if ((dst_region_w <= 0) || (src_region_w <= 0)) return;
165
166 /* sanitise region y */
155 if (src_region_y < 0) 167 if (src_region_y < 0)
156 { 168 {
157 dst_region_y -= (src_region_y * dst_region_h) / src_region_h; 169 dst_region_y -= (src_region_y * dst_region_h) / src_region_h;
158 dst_region_h += (src_region_y * dst_region_h) / src_region_h; 170 dst_region_h += (src_region_y * dst_region_h) / src_region_h;
159 src_region_h += src_region_y; 171 src_region_h += src_region_y;
160 src_region_y = 0; 172 src_region_y = 0;
173
174 if (dst_clip_y < dst_region_y)
175 {
176 dst_clip_h += (dst_clip_y - dst_region_y);
177 dst_clip_y = dst_region_y;
178 }
161 } 179 }
162 if (src_region_y >= src_h) return; 180
181 if ((dst_clip_y + dst_clip_h) > dst_h)
182 dst_clip_h = dst_h - dst_clip_y;
183
184 if (dst_clip_h <= 0) return;
185
163 if ((src_region_y + src_region_h) > src_h) 186 if ((src_region_y + src_region_h) > src_h)
164 { 187 {
165 dst_region_h = (dst_region_h * (src_h - src_region_y)) / (src_region_h); 188 dst_region_h = (dst_region_h * (src_h - src_region_y)) / (src_region_h);
166 src_region_h = src_h - src_region_y; 189 src_region_h = src_h - src_region_y;
167 } 190 }
168 if (dst_region_h <= 0) return; 191
169 if (src_region_h <= 0) return; 192 if ((dst_region_h <= 0) || (src_region_h <= 0)) return;
170 if (dst_clip_y < 0)
171 {
172 dst_clip_h += dst_clip_y;
173 dst_clip_y = 0;
174 }
175 if (dst_clip_h <= 0) return;
176 if (dst_clip_y >= dst_h) return;
177 if (dst_clip_y < dst_region_y)
178 {
179 dst_clip_h += (dst_clip_y - dst_region_y);
180 dst_clip_y = dst_region_y;
181 }
182 if ((dst_clip_y + dst_clip_h) > dst_h)
183 {
184 dst_clip_h = dst_h - dst_clip_y;
185 }
186 if (dst_clip_h <= 0) return;
187 193
188 /* allocate scale lookup tables */ 194 /* allocate scale lookup tables */
189 lin_ptr = alloca(dst_clip_w * sizeof(int)); 195 lin_ptr = alloca(dst_clip_w * sizeof(int));