W3C home > Mailing lists > Public > www-svg@w3.org > October 2002

Re: Updating text during an event

From: Vincent Hardy <vincent.hardy@sun.com>
Date: Thu, 10 Oct 2002 09:40:43 +0200
Message-ID: <3DA52EFB.7050406@sun.com>
To: "Harmon S. Nine" <hnine@netarx.com>
CC: www-svg@w3.org

Harmon,

The SVGSVGElement interface has methods to deal with immediate redraw 
(or suspending of redraw):

interface SVGSVGElement : ... {
...
unsigned long suspendRedraw ( in unsigned long max_wait_milliseconds );
void unsuspendRedraw ( in unsigned long suspend_handle_id )
raises( DOMException );
void unsuspendRedrawAll ( );
void forceRedraw ( );
void pauseAnimations ( );
void unpauseAnimations ( );
...
};

I do not know if the Adobe viewer supports it though.
Vincent.

Harmon S. Nine wrote:
> 
> Hi all.
> 
> Does anyone have a better solution for doing this?
> 
> 
> I'm using the adobe SVG and was wondering how to display text in an SVG 
> document that indicates that a given (relatively long) task is in 
> progress and the user should wait ...
> 
> He're the scenario.  On a mousemove event, I'm hiding all text in the 
> document to improve dynamic performance.  However, hiding all of the 
> text takes a while (a second or two).  So, in the event-handler for 
> mousemove, I'd like to update a "status" text element (that is not 
> hidden :-) to say "Hiding text elements -- please wait ..." just before 
> the operation(s) that hide the text.  Here's a code snippet:
> 
> function handleMouseMove(event) {
>  status.nodeValue = "Hiding text elements -- please wait ...";
>  /* HIDE THE TEXT */
>  for(ix = textNodes.length ; --ix >= 0 ;) {
>    textNodes[ix].displayAttr.value = "none";
>  }
> }
> 
> The problem is that the SVG display does not update the "status" text 
> element with this message until the entire event handler has executed, 
> i.e. including the text-hiding operations.  Thus what the user 
> experiences is a few seconds of unresponsiveness, followed by the text 
> being hidden and the "status" text saying "Hiding text elements -- 
> please wait ...", which isn't very helpful.
> 
> The only solution I've found is to split the event handler into two 
> functions.  One function updates the "status" text element and then 
> schedules the second function (which hides the text elements) to run 50 
> milliseconds later via setTimeout.  Apparently, 50 milliseconds is 
> enough time for the SVG display to update.  Here's the code:
> 
> function handleMouseEvent(event) {
>  status.nodeValue = "Hiding text elements -- please wait ...";
>  setTimeout("hideText()", 50);
> }
> 
> function hideText() {
>  /* HIDE THE TEXT */
>  for(ix = textNodes.length ; --ix >= 0 ;) {
>    textNodes[ix].displayAttr.value = "none";
>  }
> }
> 
> 
> This is IMHO a horrible kludge, but its the only thing that works.
> 
> If anyone has a better solution, I'd be most appreciative. :-)
> 
> TIA
> 
> -- Harmon S. Nine
> 
Received on Thursday, 10 October 2002 03:47:32 GMT

This archive was generated by hypermail 2.3.1 : Friday, 8 March 2013 15:54:23 GMT