diff --git a/contrib/patches/syncscrollers.patch b/contrib/patches/syncscrollers.patch index 3faced9..56d7fad 100644 --- a/contrib/patches/syncscrollers.patch +++ b/contrib/patches/syncscrollers.patch @@ -1,14 +1,14 @@ ---- server/render.c -+++ server/render.c -@@ -176,6 +176,7 @@ - int length, speed; - int str_length = BUFSIZE-1; - int reset = 1; +--- server/render.c-ok 2007-04-28 23:54:21.000000000 +0200 ++++ server/render.c 2007-04-28 23:51:33.000000000 +0200 +@@ -170,6 +170,7 @@ + int vis_width = right - left; /* width of visible frame area */ + int vis_height = bottom - top; /* height of visible frame area */ + int /*fx = 0,*/ fy = 0; /* Scrolling offset for the frame... */ + int max_scroller_len = 0; debug(RPT_DEBUG, "%s(list=%p, fscroll='%c', left=%d, top=%d, " - "right=%d, bottom=%d, fwid=%d, fhgt=%d, fspeed=%d, timer=%d)", -@@ -202,6 +203,27 @@ + "right=%d, bottom=%d, fwid=%d, fhgt=%d, fspeed=%d, timer=%ld)", +@@ -196,6 +197,27 @@ /* TODO: Frames don't scroll horizontally yet! */ } @@ -23,7 +23,7 @@ + case WID_SCROLLER: + /* length is really direction(!) */ + if (w->length == 'h') { -+ length = strlen(w->text) + 1; ++ int length = strlen(w->text) + 1; + if (max_scroller_len < length) + max_scroller_len = length; + } @@ -36,23 +36,24 @@ /* reset widget list */ LL_Rewind(list); -@@ -341,13 +363,9 @@ - /* it fits within the box, just render it */ +@@ -331,14 +353,10 @@ drivers_string(w->left, w->top, w->text); - } else { + } + else { - int necessaryTimeUnits = 0; - if (w->speed > 0) { - necessaryTimeUnits = length * w->speed; offset = (timer % (length * w->speed)) / w->speed; - } else if (w->speed < 0) { + } + else if (w->speed < 0) { - necessaryTimeUnits = length / (w->speed * -1); offset = (timer % (length / (w->speed * -1))) * w->speed * -1; - } else { - offset = 0; -@@ -378,28 +396,39 @@ - drivers_string(w->left, w->top, w->text); - } else { + } + else { +@@ -372,32 +390,43 @@ + } + else { int effLength = length - screen_width; - int necessaryTimeUnits = 0; + int maxeffLength = max_scroller_len - screen_width; @@ -62,64 +63,69 @@ - necessaryTimeUnits = effLength * w->speed; - if (((timer / (effLength * w->speed)) % 2) == 0) { + if (((timer / (maxeffLength * w->speed)) % 2) == 0) { - /*wiggle one way*/ + /* wiggle one way */ - offset = (timer % (effLength * w->speed)) + offset = (timer % (maxeffLength * w->speed)) / w->speed; -+ if (offset >= effLength) -+ offset = effLength - 1; - } else { - /*wiggle the other*/ -- offset = (((timer % (effLength * w->speed)) -- - (effLength * w->speed) + 1) -+ offset = (((timer % (maxeffLength * w->speed)) -+ - (maxeffLength * w->speed) + 1) - / w->speed) * -1; -+ if (offset <= waitlen) -+ offset = 0; -+ else -+ offset -= waitlen; ++ if (offset >= effLength) ++ offset = effLength - 1; } - } else if (w->speed < 0) { + else { + /* wiggle the other */ +- offset = (((timer % (effLength * w->speed)) +- - (effLength * w->speed) + 1) ++ offset = (((timer % (maxeffLength * w->speed)) ++ - (maxeffLength * w->speed) + 1) + / w->speed) * -1; ++ if (offset <= waitlen) ++ offset = 0; ++ else ++ offset -= waitlen; + } + } + else if (w->speed < 0) { - necessaryTimeUnits = effLength / (w->speed * -1); - if (((timer / (effLength / (w->speed * -1))) % 2) == 0) { - offset = (timer % (effLength / (w->speed * -1))) + if (((timer / (maxeffLength / (w->speed * -1))) % 2) == 0) { + offset = (timer % (maxeffLength / (w->speed * -1))) * w->speed * -1; -+ if (offset >= effLength) -+ offset = effLength - 1; - } else { -- offset = (((timer % (effLength / (w->speed * -1))) -- * w->speed * -1) - effLength + 1) * -1; -+ offset = (((timer % (maxeffLength / (w->speed * -1))) -+ * w->speed * -1) - maxeffLength + 1) * -1; -+ if (offset <= waitlen) -+ offset = 0; -+ else -+ offset -= waitlen; ++ if (offset >= effLength) ++ offset = effLength - 1; } - } else { - offset = 0; -@@ -438,13 +467,11 @@ - drivers_string (w->left, w->top + i, str); - } - } else { -- int necessaryTimeUnits = 0; - int effLines = lines_required - available_lines + 1; - int begin = 0; + else { +- offset = (((timer % (effLength / (w->speed * -1))) ++ offset = (((timer % (maxeffLength / (w->speed * -1))) + * w->speed * -1) +- - effLength + 1) * -1; ++ - maxeffLength + 1) * -1; ++ if (offset <= waitlen) ++ offset = 0; ++ else ++ offset -= waitlen; + } + } + else { +@@ -439,14 +468,12 @@ + } + } + else { +- int necessaryTimeUnits = 0; + int effLines = lines_required - available_lines + 1; + int begin = 0; + int i = 0; - /*debug(RPT_DEBUG, "length: %d sw: %d lines req: %d avail lines: %d effLines: %d ",length,screen_width,lines_required,available_lines,effLines);*/ - if (w->speed > 0) { -- necessaryTimeUnits = effLines * w->speed; - if (((timer / (effLines * w->speed)) % 2) == 0) { - /*debug(RPT_DEBUG, "up ");*/ - begin = (timer % (effLines * w->speed)) -@@ -456,7 +483,6 @@ - * -1; - } - } else if (w->speed < 0) { -- necessaryTimeUnits = effLines / (w->speed * -1); - if (((timer / (effLines / (w->speed * -1))) % 2) == 0) { - begin = (timer % (effLines / (w->speed * -1))) - * w->speed * -1; + /*debug(RPT_DEBUG, "length: %d sw: %d lines req: %d avail lines: %d effLines: %d ",length,screen_width,lines_required,available_lines,effLines);*/ + if (w->speed > 0) { +- necessaryTimeUnits = effLines * w->speed; + if (((timer / (effLines * w->speed)) % 2) == 0) { + /*debug(RPT_DEBUG, "up ");*/ + begin = (timer % (effLines * w->speed)) +@@ -460,7 +487,6 @@ + } + } + else if (w->speed < 0) { +- necessaryTimeUnits = effLines / (w->speed * -1); + if (((timer / (effLines / (w->speed * -1))) % 2) == 0) { + begin = (timer % (effLines / (w->speed * -1))) + * w->speed * -1; diff --git a/server/render.c b/server/render.c index 9968a2d..f6be668 100644 --- a/server/render.c +++ b/server/render.c @@ -435,7 +435,7 @@ render_frame(LinkedList *list, for (i = 0; i < lines_required; i++) { strncpy(str, &((w->text)[i * screen_width]), screen_width); str[screen_width] = '\0'; - drivers_string (w->left, w->top + i, str); + drivers_string(w->left, w->top + i, str); } } else {