// @SuppressWarnings("null") public void run() { try { try { BufferedReader in = new BufferedReader(new InputStreamReader(ss.getInputStream())); while ((line = in.readLine()) != null) { Log.d("In Client: Path " + cnt, line); // got a new path stouter = new StringTokenizer(line, "|"); flag = 1; while (stouter.hasMoreTokens()) { // getting x,ys for each path stinner = new StringTokenizer(stouter.nextToken(), ","); if (stinner.hasMoreTokens()) { if (flag == 1) // this is the moveTo X,Y { flag = 0; String x, y; x = stinner.nextToken(); y = stinner.nextToken(); p.moveTo(Float.parseFloat(x), Float.parseFloat(y)); p.lineTo(Float.parseFloat(x), Float.parseFloat(y)); } else { // lineTo String x, y; x = stinner.nextToken(); y = stinner.nextToken(); p.lineTo(Float.parseFloat(x), Float.parseFloat(y)); } } } // p.close(); synchronized (_graphics) { if (!_graphics.contains(p)) _graphics.add(p); d.postInvalidate(); } cnt++; } in.close(); } catch (Exception e) { // e.printStackTrace(); Log.d("S-C ERROR", "END OF INPUT FROM SERVER"); /*handler.post(new Runnable(){ @Override public void run(){ d.addthepath((SArrayList)o); //_graphics.add((SPath)o); } });*/ } // } ss.close(); } catch (Exception e) { e.printStackTrace(); try { ss.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }
private static SNode parsePathNode(Elem root) throws IOException { SPath path = new SPath(); String d = root.attr("d"); PushbackReader read = new PushbackReader(new StringReader(d)); int count = 0; double x = 0; double y = 0; SPath.PathPoint prev = null; boolean go = true; while (go) { count++; char ch = (char) read.read(); if (ch == -1) break; double x1, x2, y1, y2; u.p("ch = " + ch); switch (ch) { // absolute move case 'M': x = readDouble(read); y = readDouble(read); prev = path.moveTo(x, y); continue; // relative vertical lineto case 'v': y += readDouble(read); prev = path.lineTo(x, y); continue; // absolute vertical lineto case 'V': y = readDouble(read); prev = path.lineTo(x, y); continue; // relative horiz lineto case 'h': x += readDouble(read); prev = path.lineTo(x, y); continue; case 'H': x = readDouble(read); prev = path.lineTo(x, y); continue; // relative lineto case 'l': x += readDouble(read); y += readDouble(read); prev = path.lineTo(x, y); continue; case 'L': x = readDouble(read); y = readDouble(read); prev = path.lineTo(x, y); continue; // relative cubic curve case 'c': x1 = x + readDouble(read); y1 = y + readDouble(read); x2 = x + readDouble(read); y2 = y + readDouble(read); x += readDouble(read); y += readDouble(read); prev = path.curveTo(prev, x1, y1, x2, y2, x, y); continue; // relative shorthand curve case 's': x2 = x + readDouble(read); y2 = y + readDouble(read); x += readDouble(read); y += readDouble(read); double dx = prev.x - prev.cx1; double dy = prev.y - prev.cy1; double rx = prev.x + dx; double ry = prev.y + dy; prev = path.curveTo(prev, rx, ry, x2, y2, x, y); continue; // absolute cubic curve case 'C': x1 = readDouble(read); y1 = readDouble(read); x2 = readDouble(read); y2 = readDouble(read); x = readDouble(read); y = readDouble(read); prev = path.curveTo(prev, x1, y1, x2, y2, x, y); continue; case 'z': path.close(); break; case ' ': continue; case '\n': continue; // end of string case (char) -1: go = false; break; default: u.p("unrecognized character! " + ch + " " + ((int) ch)); go = false; break; } } parseFill(path, root); parseStroke(path, root); return path; }