@@ -73,6 +73,7 @@ class GenericConvolutionFilter : public Filter {
73
73
class ApplyCache {
74
74
template <size_t >
75
75
friend class GenericConvolutionFilter ;
76
+
76
77
private:
77
78
RefPtr<Gfx::Bitmap> m_target;
78
79
};
@@ -120,23 +121,24 @@ class GenericConvolutionFilter : public Filter {
120
121
Bitmap* render_target_bitmap = (&target != &source) ? &target : apply_cache.m_target .ptr ();
121
122
122
123
// FIXME: Help! I am naive!
124
+ constexpr static ssize_t offset = N / 2 ;
123
125
for (auto i_ = 0 ; i_ < target_rect.width (); ++i_) {
124
- auto i = i_ + target_rect.x ();
126
+ ssize_t i = i_ + target_rect.x ();
125
127
for (auto j_ = 0 ; j_ < target_rect.height (); ++j_) {
126
- auto j = j_ + target_rect.y ();
128
+ ssize_t j = j_ + target_rect.y ();
127
129
FloatVector3 value (0 , 0 , 0 );
128
- for (auto k = 0 ; k < 4 ; ++k) {
129
- auto ki = i + k - 2 ;
130
- if (i < source_rect.x () || i > source_rect.right ()) {
130
+ for (auto k = 0l ; k < ( ssize_t )N ; ++k) {
131
+ auto ki = i + k - offset ;
132
+ if (ki < source_rect.x () || ki > source_rect.right ()) {
131
133
if (parameters.should_wrap ())
132
134
ki = (ki + source.size ().width ()) % source.size ().width (); // TODO: fix up using source_rect
133
135
else
134
136
continue ;
135
137
}
136
138
137
- for (auto l = 0 ; l < 4 ; ++l) {
138
- auto lj = j + l - 2 ;
139
- if (j < source_rect.y () || j > source_rect.bottom ()) {
139
+ for (auto l = 0l ; l < ( ssize_t )N ; ++l) {
140
+ auto lj = j + l - offset ;
141
+ if (lj < source_rect.y () || lj > source_rect.bottom ()) {
140
142
if (parameters.should_wrap ())
141
143
lj = (lj + source.size ().height ()) % source.size ().height (); // TODO: fix up using source_rect
142
144
else
@@ -150,7 +152,7 @@ class GenericConvolutionFilter : public Filter {
150
152
}
151
153
}
152
154
153
- // The float->u8 overflow is intentional.
155
+ value. clamp ( 0 , 255 );
154
156
render_target_bitmap->set_pixel (i, j, Color (value.x (), value.y (), value.z (), source.get_pixel (i + source_delta_x, j + source_delta_y).alpha ()));
155
157
}
156
158
}
0 commit comments