Danny Browne wrote:

when adding an element to an svg document i am getting a short delay. ie. it
takes a second or two for the element to appear after the mouse is clicked.
This in it's self is not a major issue but when attempting to draw a free
hand line dragging the mouse to quickly causes gaps to be created in the
line.

For complex SVG documents it might take a second or two for it to update after an element was added. However I suspect that the problem is that you are not making your changes in the UpdateManager thread.

   It looks like you probably want to run the 'paint' function
in the UpdateManager thread:

   final <sometype> myObject=this;
   svgCanvas.getUpdateManager().getUpdateRunnableQueue().invokeLater
      (new Runnable() {
        public void run() {
           myOBject->paint(....);
        });

am i doing this correctly? is there some code i am missing? can this be
rectified? my code is below and is rather hap hazzard any pointers on
cleaning it up would be appreciated...

kind regards

Danny Browne

public void registerListeners(){

        // Set the canvas mouse listeners
        svgCanvas.addMouseListener(new java.awt.event.MouseAdapter() {
             public void mousePressed(java.awt.event.MouseEvent e) {

             statusLabel.setText("Pressed......");
             startPoint = e;

}

public void mouseReleased(java.awt.event.MouseEvent e) {

              int x = startPoint.getX();
              String sx = new Integer(x).toString();
              int y = startPoint.getY();
              String sy = new Integer(y).toString();

              int w = e.getX();
              String sw = new Integer(w).toString();
              int h = e.getY();
              String sh = new Integer(h).toString();

              w = w-x;
              h = h-y;


paint(sx,sy,sw,sh);


           }
        });

        svgCanvas.addMouseMotionListener(new
java.awt.event.MouseMotionAdapter() {
             public void mouseDragged(java.awt.event.MouseEvent e) {

                 int x = startPoint.getX();
                 String sx = new Integer(x).toString();
                 int y = startPoint.getY();
                 String sy = new Integer(y).toString();
                 int x2 = e.getX();
                 String sx2 = new Integer(x2).toString();
                 int y2 = e.getY();
                 String sy2 = new Integer(y2).toString();

paint(sx,sy,sx2,sy2);

                 startPoint = e;
             }
        });

}



which calls this method paint method.



public void paint (String sx, String sy, String sw, String sh){

toolType = getTool();

if (toolType == 1){

statusLabel.setText("Select Tool Selsected...");

}

else if (toolType == 2){

Document doc = svgCanvas.getSVGDocument();

String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;

          // get the root element (the svg element)
          Element svgRoot = doc.getDocumentElement();
          // create the rectangle
          Element line = doc.createElementNS(svgNS, "line");
          line.setAttributeNS(null, "x", sx);
          line.setAttributeNS(null, "y", sy);
          line.setAttributeNS(null, "y2", sw);
          line.setAttributeNS(null, "y2", sh);
          line.setAttributeNS(null, "style", "stroke:black;stroke-width:2");
          //attach the rectangle to the svg root element
          svgRoot.appendChild(line);

}

else if (toolType == 3){

statusLabel.setText("Paint Tool Selsected...");

}

else if (toolType == 4){

Document doc = svgCanvas.getSVGDocument();

String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;

          statusLabel.setText("w: " +sw+ " h: " +sh+ " x: " +sx+ " y: "
+sy);

          // get the root element (the svg element)
          Element svgRoot = doc.getDocumentElement();
          // create the rectangle
          Element line = doc.createElementNS(svgNS, "line");
          line.setAttributeNS(null, "x", sx);
          line.setAttributeNS(null, "y", sy);
          line.setAttributeNS(null, "y2", sw);
          line.setAttributeNS(null, "y2", sh);
          line.setAttributeNS(null, "style", "stroke:black;stroke-width:2");
          //attach the rectangle to the svg root element
          svgRoot.appendChild(line);

}

else if (toolType == 5){

Document doc = svgCanvas.getSVGDocument();

String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;

          // get the root element (the svg element)
          Element svgRoot = doc.getDocumentElement();
          // create the rectangle
          Element rectangle = doc.createElementNS(svgNS, "rect");
          rectangle.setAttributeNS(null, "x", sx);
          rectangle.setAttributeNS(null, "y", sy);
          rectangle.setAttributeNS(null, "width", sw);
          rectangle.setAttributeNS(null, "height", sh);
          rectangle.setAttributeNS(null, "fill", "black");
          //attach the rectangle to the svg root element
          svgRoot.appendChild(rectangle);

}

else if (toolType == 6){

Document doc = svgCanvas.getSVGDocument();

String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;

          // get the root element (the svg element)
          Element svgRoot = doc.getDocumentElement();
          // create the rectangle
          Element circle = doc.createElementNS(svgNS, "circle");
          circle.setAttributeNS(null, "cx", sx);
          circle.setAttributeNS(null, "r", "25");
          circle.setAttributeNS(null, "cy", sy);
          circle.setAttributeNS(null, "style", "fill:crimson");
          //attach the rectangle to the svg root element
          svgRoot.appendChild(circle);

}

}






--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]




--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to