projects
/
dana
/
openbox.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
3a03a55
)
make horizontal gradients faster by not jumping around in memory as much
author
Dana Jansens
<danakj@orodu.net>
Sun, 27 Jan 2008 08:36:26 +0000
(
03:36
-0500)
committer
Dana Jansens
<danakj@orodu.net>
Sun, 27 Jan 2008 09:25:09 +0000
(
04:25
-0500)
render/gradient.c
patch
|
blob
|
history
diff --git
a/render/gradient.c
b/render/gradient.c
index
63b8e94
..
6439b30
100644
(file)
--- a/
render/gradient.c
+++ b/
render/gradient.c
@@
-2,7
+2,7
@@
gradient.c for the Openbox window manager
Copyright (c) 2006 Mikael Magnusson
gradient.c for the Openbox window manager
Copyright (c) 2006 Mikael Magnusson
- Copyright (c) 2003-200
7
Dana Jansens
+ Copyright (c) 2003-200
8
Dana Jansens
Copyright (c) 2003 Derek Foreman
This program is free software; you can redistribute it and/or modify
Copyright (c) 2003 Derek Foreman
This program is free software; you can redistribute it and/or modify
@@
-22,6
+22,7
@@
#include "gradient.h"
#include "color.h"
#include <glib.h>
#include "gradient.h"
#include "color.h"
#include <glib.h>
+#include <string.h>
static void highlight(RrSurface *s, RrPixel32 *x, RrPixel32 *y,
gboolean raised);
static void highlight(RrSurface *s, RrPixel32 *x, RrPixel32 *y,
gboolean raised);
@@
-483,64
+484,60
@@
static void gradient_horizontal(RrSurface *sf, gint w, gint h)
{
gint x, y;
RrPixel32 *data = sf->pixel_data, *datav;
{
gint x, y;
RrPixel32 *data = sf->pixel_data, *datav;
- RrPixel32 current;
VARS(x);
SETUP(x, sf->primary, sf->secondary, w);
VARS(x);
SETUP(x, sf->primary, sf->secondary, w);
- for (x = w - 1; x > 0; --x) { /* 0 -> w-1 */
- current = COLOR(x);
- datav = data;
- for (y = h - 1; y >= 0; --y) { /* 0 -> h */
- *datav = current;
- datav += w;
- }
- ++data;
-
+ datav = data;
+ for (x = w - 1; x > 0; --x) { /* 0 -> w - 1 */
+ *datav = COLOR(x);
+ ++datav;
NEXT(x);
}
NEXT(x);
}
- current = COLOR(x);
- for (y = h - 1; y >= 0; --y) /* 0 -> h */
- *(data + y * w) = current;
+ *datav = COLOR(x);
+ ++datav;
+
+ for (y = h - 1; y > 0; --y) { /* 1 -> h */
+ memcpy(datav, data, w * sizeof(RrPixel32));
+ datav += w;
+ }
}
static void gradient_mirrorhorizontal(RrSurface *sf, gint w, gint h)
{
}
static void gradient_mirrorhorizontal(RrSurface *sf, gint w, gint h)
{
- gint x, y;
+ gint x, y
, half1, half2
;
RrPixel32 *data = sf->pixel_data, *datav;
RrPixel32 *data = sf->pixel_data, *datav;
- RrPixel32 current;
VARS(x);
VARS(x);
- SETUP(x, sf->primary, sf->secondary, w/2);
- if (w > 1) {
- for (x = w - 1; x > w/2-1; --x) { /* 0 -> w-1 */
- current = COLOR(x);
- datav = data;
- for (y = h - 1; y >= 0; --y) { /* 0 -> h */
- *datav = current;
- datav += w;
- }
- ++data;
+ half1 = (w + 1) / 2;
+ half2 = w / 2;
+ SETUP(x, sf->primary, sf->secondary, half1);
+ datav = data;
+ for (x = half1 - 1; x > 0; --x) { /* 0 -> half1 - 1 */
+ *datav = COLOR(x);
+ ++datav;
+ NEXT(x);
+ }
+ *datav = COLOR(x);
+ ++datav;
+
+ if (half2 > 0) {
+ SETUP(x, sf->secondary, sf->primary, half2);
+ for (x = half2 - 1; x > 0; --x) { /* 0 -> half2 - 1 */
+ *datav = COLOR(x);
+ ++datav;
NEXT(x);
}
NEXT(x);
}
- SETUP(x, sf->secondary, sf->primary, w/2);
- for (x = w/2 - 1; x > 0; --x) { /* 0 -> w-1 */
- current = COLOR(x);
- datav = data;
- for (y = h - 1; y >= 0; --y) { /* 0 -> h */
- *datav = current;
- datav += w;
- }
- ++data;
+ *datav = COLOR(x);
+ ++datav;
+ }
- NEXT(x);
- }
+ for (y = h - 1; y > 0; --y) { /* 1 -> h */
+ memcpy(datav, data, w * sizeof(RrPixel32));
+ datav += w;
}
}
- current = COLOR(x);
- for (y = h - 1; y >= 0; --y) /* 0 -> h */
- *(data + y * w) = current;
}
static void gradient_vertical(RrSurface *sf, gint w, gint h)
}
static void gradient_vertical(RrSurface *sf, gint w, gint h)