summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-07-11 14:17:34 +0000
committerDana Jansens <danakj@orodu.net>2007-07-11 14:17:34 +0000
commit0bfe6c1e5242d27df3b5063fb873fa1d3b0c283d (patch)
tree8ffebed5817c93cf730348ca99419a7b2bc76a4f
parente4c0504058024ae7450d287a5726186c1bfb5444 (diff)
no more crash in splitvertical. i think i changed the size of the middle gradient too. it's always 1px now unless the texture is very small, then it can be 0. if theres a discrepency, the bottom color gets the extra pixel.
-rw-r--r--render/gradient.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/render/gradient.c b/render/gradient.c
index 41514ac4..4cd3c18f 100644
--- a/render/gradient.c
+++ b/render/gradient.c
@@ -431,15 +431,24 @@ static void gradient_splitvertical(RrAppearance *a, gint w, gint h)
VARS(y2);
VARS(y3);
-
- y1sz = MAX(h/2 - 1, 1);
- /* setup to get the colors _in between_ these other 2 */
- y2sz = (h < 3 ? 0 : (h % 2 ? 3 : 2));
- y3sz = MAX(h/2 - 1, 0);
+ /* if h <= 5, then a 0 or 1px middle gradient.
+ if h > 5, then always a 1px middle gradient.
+ */
+ if (h <= 5) {
+ y1sz = MAX(h/2, 0);
+ y2sz = (h < 3 ? 0 : h % 2);
+ y3sz = MAX(h/2, 1);
+ }
+ else {
+ y1sz = h/2 - (1 - (h % 2));
+ y2sz = 1;
+ y3sz = h/2;
+ }
SETUP(y1, sf->split_primary, sf->primary, y1sz);
if (y2sz) {
- SETUP(y2, sf->primary, sf->secondary, y2sz);
+ /* setup to get the colors _in between_ these other 2 */
+ SETUP(y2, sf->primary, sf->secondary, y2sz + 2);
NEXT(y2); /* skip the first one, its the same as the last of y1 */
}
SETUP(y3, sf->secondary, sf->split_secondary, y3sz);