Optimize window blur calculation.
This commit is contained in:
parent
2f2cfae227
commit
10bdd298b8
10
cairo-util.c
10
cairo-util.c
@ -101,13 +101,13 @@ buffer_create_from_cairo_surface(int fd, cairo_surface_t *surface)
|
||||
}
|
||||
|
||||
void
|
||||
blur_surface(cairo_surface_t *surface)
|
||||
blur_surface(cairo_surface_t *surface, int margin)
|
||||
{
|
||||
cairo_surface_t *tmp;
|
||||
int32_t width, height, stride, x, y, z, w;
|
||||
uint8_t *src, *dst;
|
||||
uint32_t *s, *d, a, p;
|
||||
int i, j, k, size = 23, half;
|
||||
int i, j, k, size = 17, half;
|
||||
uint8_t kernel[100];
|
||||
double f;
|
||||
|
||||
@ -131,6 +131,9 @@ blur_surface(cairo_surface_t *surface)
|
||||
s = (uint32_t *) (src + i * stride);
|
||||
d = (uint32_t *) (dst + i * stride);
|
||||
for (j = 0; j < width; j++) {
|
||||
if (margin < j && j < width - margin &&
|
||||
margin < i && i < height - margin)
|
||||
continue;
|
||||
x = 0;
|
||||
y = 0;
|
||||
z = 0;
|
||||
@ -153,6 +156,9 @@ blur_surface(cairo_surface_t *surface)
|
||||
s = (uint32_t *) (dst + i * stride);
|
||||
d = (uint32_t *) (src + i * stride);
|
||||
for (j = 0; j < width; j++) {
|
||||
if (margin <= j && j < width - margin &&
|
||||
margin <= i && i < height - margin)
|
||||
continue;
|
||||
x = 0;
|
||||
y = 0;
|
||||
z = 0;
|
||||
|
@ -19,6 +19,6 @@ struct buffer *
|
||||
buffer_create_from_cairo_surface(int fd, cairo_surface_t *surface);
|
||||
|
||||
void
|
||||
blur_surface(cairo_surface_t *surface);
|
||||
blur_surface(cairo_surface_t *surface, int margin);
|
||||
|
||||
#endif
|
||||
|
@ -48,7 +48,7 @@ draw_pointer(int width, int height)
|
||||
cairo_set_source_rgb(cr, 0, 0, 0);
|
||||
cairo_stroke_preserve(cr);
|
||||
cairo_fill(cr);
|
||||
blur_surface(surface);
|
||||
blur_surface(surface, INT_MAX);
|
||||
|
||||
pointer_path(cr, hotspot_x, hotspot_y);
|
||||
cairo_stroke_preserve(cr);
|
||||
|
3
window.c
3
window.c
@ -89,7 +89,7 @@ draw_window(void *data)
|
||||
rounded_rect(cr, 1, 1, window->width - 1, window->height - 1, radius);
|
||||
cairo_stroke_preserve(cr);
|
||||
cairo_fill(cr);
|
||||
blur_surface(surface);
|
||||
blur_surface(surface, 16 + radius);
|
||||
|
||||
cairo_translate(cr, -5, -3);
|
||||
cairo_set_line_width (cr, border);
|
||||
@ -148,7 +148,6 @@ draw_window(void *data)
|
||||
cairo_stroke_preserve(cr);
|
||||
cairo_set_source_rgb(cr, 1, 1, 1);
|
||||
cairo_fill(cr);
|
||||
|
||||
cairo_destroy(cr);
|
||||
|
||||
if (window->buffer != NULL)
|
||||
|
Loading…
Reference in New Issue
Block a user