]> source.dussan.org Git - vaadin-framework.git/commitdiff
added basic SVG support for Embedded
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Wed, 11 Feb 2009 20:30:28 +0000 (20:30 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Wed, 11 Feb 2009 20:30:28 +0000 (20:30 +0000)
svn changeset:6812/svn branch:trunk

src/com/itmill/toolkit/terminal/gwt/client/ui/IEmbedded.java
src/com/itmill/toolkit/ui/Embedded.java

index 669d578b5339309ee6414766773c59aadfc2b70f..f2c65d6de5115c36fb0d6b96330ba596647067d0 100644 (file)
@@ -4,8 +4,12 @@
 
 package com.itmill.toolkit.terminal.gwt.client.ui;
 
+import java.util.Iterator;
+
+import com.google.gwt.dom.client.Document;
 import com.google.gwt.dom.client.Node;
 import com.google.gwt.dom.client.NodeList;
+import com.google.gwt.dom.client.ObjectElement;
 import com.google.gwt.dom.client.Style;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Element;
@@ -105,6 +109,25 @@ public class IEmbedded extends HTML implements Paintable {
                         + getSrc(uidl, client) + "\"><embed src=\""
                         + getSrc(uidl, client) + "\" width=\"" + width
                         + "\" height=\"" + height + "\"></embed></object>");
+            } else if (mime.equals("image/svg+xml")) {
+                String data;
+                if (getParameter("data", uidl) == null) {
+                    data = getSrc(uidl, client);
+                } else {
+                    data = "data:image/svg+xml," + getParameter("data", uidl);
+                }
+                setHTML("");
+                ObjectElement obj = Document.get().createObjectElement();
+                obj.setType(mime);
+                obj.setData(data);
+                if (width != null) {
+                    obj.getStyle().setProperty("width", "100%");
+                }
+                if (height != null) {
+                    obj.getStyle().setProperty("height", "100%");
+                }
+                getElement().appendChild(obj);
+
             } else {
                 ApplicationConnection.getConsole().log(
                         "Unknown Embedded mimetype '" + mime + "'");
@@ -120,6 +143,23 @@ public class IEmbedded extends HTML implements Paintable {
 
     }
 
+    private static String getParameter(String paramName, UIDL uidl) {
+        Iterator childIterator = uidl.getChildIterator();
+        while (childIterator.hasNext()) {
+            Object child = childIterator.next();
+            if (child instanceof UIDL) {
+                UIDL childUIDL = (UIDL) child;
+                if (childUIDL.getTag().equals("embeddedparam")
+                        && childUIDL.getStringAttribute("name").equals(
+                                paramName)) {
+                    return childUIDL.getStringAttribute("value");
+                }
+
+            }
+        }
+        return null;
+    }
+
     /**
      * Helper to return translated src-attribute from embedded's UIDL
      * 
index cf06205cc14495700c7bf58a2f537e20a9de4374..a42ec6e02e2ec6831f79643c4b7c10eec6f15963 100644 (file)
@@ -358,7 +358,15 @@ public class Embedded extends AbstractComponent {
         if (source != null && !source.equals(this.source)) {
             this.source = source;
             final String mt = source.getMIMEType();
-            if ((mt.substring(0, mt.indexOf("/")).equalsIgnoreCase("image"))) {
+
+            if (mimeType == null) {
+                mimeType = mt;
+            }
+
+            if (mt.equals("image/svg+xml")) {
+                type = TYPE_OBJECT;
+            } else if ((mt.substring(0, mt.indexOf("/"))
+                    .equalsIgnoreCase("image"))) {
                 type = TYPE_IMAGE;
             } else {
                 // Keep previous type