Search in sources :

Example 1 with EditableResourcesForCSS

use of com.codename1.ui.util.EditableResourcesForCSS in project CodenameOne by codenameone.

the class CSSTheme method createImageBorders.

public void createImageBorders(WebViewProvider webviewProvider) {
    if (res == null) {
        res = new EditableResourcesForCSS(resourceFile);
    }
    ArrayList<Border> borders = new ArrayList<Border>();
    ResourcesMutator resm = new ResourcesMutator(res, Display.DENSITY_VERY_HIGH, minDpi, maxDpi);
    resm.targetDensity = targetDensity;
    List<Runnable> onComplete = new ArrayList<Runnable>();
    for (String id : elements.keySet()) {
        try {
            if (!isModified(id)) {
                continue;
            }
            Element e = (Element) elements.get(id);
            Element unselected = e.getUnselected();
            Map<String, LexicalUnit> unselectedStyles = (Map<String, LexicalUnit>) unselected.getFlattenedStyle();
            Border b = unselected.createBorder(unselectedStyles);
            Border unselectedBorder = b;
            currentId = id;
            if (e.requiresImageBorder(unselectedStyles)) {
                if (!borders.contains(b)) {
                    borders.add(b);
                    resm.addImageProcessor(id, (img) -> {
                        Insets insets = unselected.getImageBorderInsets(unselectedStyles, img.getWidth(), img.getHeight());
                        resm.targetDensity = getSourceDensity(unselectedStyles, resm.targetDensity);
                        com.codename1.ui.plaf.Border border = resm.create9PieceBorder(img, id, (int) insets.top, (int) insets.right, (int) insets.bottom, (int) insets.left);
                        resm.put(id + ".border", border);
                        unselectedBorder.border = border;
                        resm.targetDensity = targetDensity;
                    });
                } else {
                    onComplete.add(() -> {
                        resm.put(id + ".border", borders.get(borders.indexOf(unselectedBorder)).border);
                    });
                }
            } else if (e.requiresBackgroundImageGeneration(unselectedStyles)) {
                if (!borders.contains(b)) {
                    borders.add(b);
                    resm.addImageProcessor(id, (img) -> {
                        int i = 1;
                        while (res.containsResource(id + "_" + i + ".png")) {
                            i++;
                        }
                        String prefix = id + "_" + i + ".png";
                        resm.targetDensity = getSourceDensity(unselectedStyles, resm.targetDensity);
                        Image im = resm.storeImage(EncodedImage.create(ResourcesMutator.toPngOrJpeg(img)), prefix, false);
                        unselectedBorder.image = im;
                        resm.put(id + ".bgImage", im);
                        resm.targetDensity = targetDensity;
                    // resm.put(id+".press#bgType", Style.B)
                    });
                } else {
                    onComplete.add(() -> {
                        resm.put(id + ".bgImage", unselectedBorder.image);
                    });
                }
            }
            Element selected = e.getSelected();
            Map<String, LexicalUnit> selectedStyles = (Map<String, LexicalUnit>) selected.getFlattenedStyle();
            b = selected.createBorder(selectedStyles);
            Border selectedBorder = b;
            if (e.requiresImageBorder(selectedStyles)) {
                if (!borders.contains(b)) {
                    borders.add(b);
                    resm.addImageProcessor(id + ".sel", (img) -> {
                        Insets insets = selected.getImageBorderInsets(selectedStyles, img.getWidth(), img.getHeight());
                        resm.targetDensity = getSourceDensity(selectedStyles, resm.targetDensity);
                        com.codename1.ui.plaf.Border border = resm.create9PieceBorder(img, id, (int) insets.top, (int) insets.right, (int) insets.bottom, (int) insets.left);
                        resm.put(id + ".sel#border", border);
                        selectedBorder.border = border;
                        resm.targetDensity = targetDensity;
                    });
                } else {
                    onComplete.add(() -> {
                        resm.put(id + ".sel#border", borders.get(borders.indexOf(selectedBorder)).border);
                    });
                }
            } else if (e.requiresBackgroundImageGeneration(selectedStyles)) {
                if (!borders.contains(b)) {
                    borders.add(b);
                    resm.addImageProcessor(id + ".sel", (img) -> {
                        int i = 1;
                        while (res.containsResource(id + "_" + i + ".png")) {
                            i++;
                        }
                        String prefix = id + "_" + i + ".png";
                        resm.targetDensity = getSourceDensity(selectedStyles, resm.targetDensity);
                        Image im = resm.storeImage(EncodedImage.create(ResourcesMutator.toPngOrJpeg(img)), prefix, false);
                        selectedBorder.image = im;
                        resm.put(id + ".sel#bgImage", im);
                        // resm.put(id+".press#bgType", Style.B)
                        resm.targetDensity = targetDensity;
                    });
                } else {
                    onComplete.add(() -> {
                        resm.put(id + ".sel#bgImage", selectedBorder.image);
                    });
                }
            }
            Element pressed = e.getPressed();
            Map<String, LexicalUnit> pressedStyles = (Map<String, LexicalUnit>) pressed.getFlattenedStyle();
            b = pressed.createBorder(pressedStyles);
            Border pressedBorder = b;
            if (e.requiresImageBorder(pressedStyles)) {
                if (!borders.contains(b)) {
                    borders.add(b);
                    resm.addImageProcessor(id + ".press", (img) -> {
                        Insets insets = pressed.getImageBorderInsets(pressedStyles, img.getWidth(), img.getHeight());
                        resm.targetDensity = getSourceDensity(pressedStyles, resm.targetDensity);
                        com.codename1.ui.plaf.Border border = resm.create9PieceBorder(img, id, (int) insets.top, (int) insets.right, (int) insets.bottom, (int) insets.left);
                        resm.put(id + ".press#border", border);
                        pressedBorder.border = border;
                        resm.targetDensity = targetDensity;
                    });
                } else {
                    onComplete.add(() -> {
                        resm.put(id + ".press#border", borders.get(borders.indexOf(pressedBorder)).border);
                    });
                }
            } else if (e.requiresBackgroundImageGeneration(pressedStyles)) {
                if (!borders.contains(b)) {
                    borders.add(b);
                    resm.addImageProcessor(id + ".press", (img) -> {
                        int i = 1;
                        while (res.containsResource(id + "_" + i + ".png")) {
                            i++;
                        }
                        String prefix = id + "_" + i + ".png";
                        resm.targetDensity = getSourceDensity(pressedStyles, resm.targetDensity);
                        Image im = resm.storeImage(EncodedImage.create(ResourcesMutator.toPngOrJpeg(img)), prefix, false);
                        pressedBorder.imageId = prefix;
                        resm.put(id + ".press#bgImage", im);
                        resm.targetDensity = targetDensity;
                    // resm.put(id+".press#bgType", Style.B)
                    });
                } else {
                    onComplete.add(() -> {
                        resm.put(id + ".press#bgImage", res.findId(pressedBorder.imageId, true));
                    });
                }
            }
            Element disabled = e.getDisabled();
            Map<String, LexicalUnit> disabledStyles = (Map<String, LexicalUnit>) disabled.getFlattenedStyle();
            b = disabled.createBorder(disabledStyles);
            Border disabledBorder = b;
            if (e.requiresImageBorder(disabledStyles)) {
                if (!borders.contains(b)) {
                    borders.add(b);
                    resm.addImageProcessor(id + ".dis", (img) -> {
                        Insets disabledInsets = disabled.getImageBorderInsets(disabledStyles, img.getWidth(), img.getHeight());
                        resm.targetDensity = getSourceDensity(disabledStyles, resm.targetDensity);
                        com.codename1.ui.plaf.Border border = resm.create9PieceBorder(img, id, (int) disabledInsets.top, (int) disabledInsets.right, (int) disabledInsets.bottom, (int) disabledInsets.left);
                        disabledBorder.border = border;
                        resm.put(id + ".dis#border", border);
                        resm.targetDensity = targetDensity;
                    });
                } else {
                    onComplete.add(() -> {
                        resm.put(id + ".dis#border", borders.get(borders.indexOf(disabledBorder)).border);
                    });
                }
            } else if (e.requiresBackgroundImageGeneration(disabledStyles)) {
                if (!borders.contains(b)) {
                    borders.add(b);
                    resm.addImageProcessor(id + ".dis", (img) -> {
                        int i = 1;
                        while (res.containsResource(id + "_" + i + ".png")) {
                            i++;
                        }
                        String prefix = id + "_" + i + ".png";
                        resm.targetDensity = getSourceDensity(disabledStyles, resm.targetDensity);
                        Image im = resm.storeImage(EncodedImage.create(ResourcesMutator.toPngOrJpeg(img)), prefix, false);
                        disabledBorder.image = im;
                        resm.put(id + ".dis#bgImage", im);
                        resm.targetDensity = targetDensity;
                    // resm.put(id+".press#bgType", Style.B)
                    });
                } else {
                    onComplete.add(() -> {
                        resm.put(id + ".dis#bgImage", disabledBorder.image);
                    });
                }
            }
        } catch (Exception ex) {
            throw new RuntimeException("An exception occurred while processing the image border for element " + id, ex);
        }
    }
    if (requiresCaptureHtml()) {
        resm.createScreenshots(webviewProvider.getWebView(), generateCaptureHtml(), this.baseURL.toExternalForm());
    }
    for (Runnable r : onComplete) {
        r.run();
    }
}
Also used : Arrays(java.util.Arrays) CharArrayReader(java.io.CharArrayReader) URL(java.net.URL) ConditionalSelector(org.w3c.css.sac.ConditionalSelector) URISyntaxException(java.net.URISyntaxException) ObjectInputStream(java.io.ObjectInputStream) IIOMetadata(javax.imageio.metadata.IIOMetadata) SelectorList(org.w3c.css.sac.SelectorList) CSSParseException(org.w3c.css.sac.CSSParseException) IIOMetadataNode(javax.imageio.metadata.IIOMetadataNode) DocumentHandler(org.w3c.css.sac.DocumentHandler) ParserFactory(org.w3c.css.sac.helpers.ParserFactory) EditorTTFFont(com.codename1.ui.EditorTTFFont) Vector(java.util.Vector) ByteArrayInputStream(java.io.ByteArrayInputStream) DataOutputStream(java.io.DataOutputStream) Display(com.codename1.ui.Display) RoundRectBorder(com.codename1.ui.plaf.RoundRectBorder) Locale(java.util.Locale) Map(java.util.Map) ImageIO(javax.imageio.ImageIO) Condition(org.w3c.css.sac.Condition) LexicalUnit(org.w3c.css.sac.LexicalUnit) Set(java.util.Set) InputSource(org.w3c.css.sac.InputSource) Logger(java.util.logging.Logger) Style(com.codename1.ui.plaf.Style) FileNotFoundException(java.io.FileNotFoundException) ImageInputStream(javax.imageio.stream.ImageInputStream) List(java.util.List) SACMediaList(org.w3c.css.sac.SACMediaList) ParseException(org.w3c.flute.parser.ParseException) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) CSSBorder(com.codename1.ui.plaf.CSSBorder) Util(com.codename1.io.Util) EditableResources(com.codename1.ui.util.EditableResources) MessageDigest(java.security.MessageDigest) CSSException(org.w3c.css.sac.CSSException) ElementSelector(org.w3c.css.sac.ElementSelector) HashMap(java.util.HashMap) AttributeCondition(org.w3c.css.sac.AttributeCondition) Selector(org.w3c.css.sac.Selector) ArrayList(java.util.ArrayList) Level(java.util.logging.Level) Accessor(com.codename1.ui.plaf.Accessor) HashSet(java.util.HashSet) LinkedHashMap(java.util.LinkedHashMap) Parser(org.w3c.css.sac.Parser) SimpleSelector(org.w3c.css.sac.SimpleSelector) Component(com.codename1.ui.Component) Node(org.w3c.dom.Node) EncodedImage(com.codename1.ui.EncodedImage) ObjectOutputStream(java.io.ObjectOutputStream) NamedNodeMap(org.w3c.dom.NamedNodeMap) LinkedList(java.util.LinkedList) Hashtable(java.util.Hashtable) OutputStream(java.io.OutputStream) EditableResourcesForCSS(com.codename1.ui.util.EditableResourcesForCSS) ImageReader(javax.imageio.ImageReader) ErrorHandler(org.w3c.css.sac.ErrorHandler) NodeList(org.w3c.dom.NodeList) Iterator(java.util.Iterator) Image(com.codename1.ui.Image) AnimationAccessor(com.codename1.ui.animations.AnimationAccessor) Resources(com.codename1.ui.util.Resources) FileOutputStream(java.io.FileOutputStream) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) JSONParser(com.codename1.io.JSONParser) RoundBorder(com.codename1.ui.plaf.RoundBorder) InputStreamReader(java.io.InputStreamReader) File(java.io.File) StringReader(java.io.StringReader) Font(com.codename1.ui.Font) Result(com.codename1.processing.Result) Collections(java.util.Collections) InputStream(java.io.InputStream) ArrayList(java.util.ArrayList) EncodedImage(com.codename1.ui.EncodedImage) Image(com.codename1.ui.Image) URISyntaxException(java.net.URISyntaxException) CSSParseException(org.w3c.css.sac.CSSParseException) FileNotFoundException(java.io.FileNotFoundException) ParseException(org.w3c.flute.parser.ParseException) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) CSSException(org.w3c.css.sac.CSSException) IOException(java.io.IOException) EditableResourcesForCSS(com.codename1.ui.util.EditableResourcesForCSS) RoundRectBorder(com.codename1.ui.plaf.RoundRectBorder) CSSBorder(com.codename1.ui.plaf.CSSBorder) RoundBorder(com.codename1.ui.plaf.RoundBorder) Map(java.util.Map) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) NamedNodeMap(org.w3c.dom.NamedNodeMap) LexicalUnit(org.w3c.css.sac.LexicalUnit)

Aggregations

JSONParser (com.codename1.io.JSONParser)1 Util (com.codename1.io.Util)1 Result (com.codename1.processing.Result)1 Component (com.codename1.ui.Component)1 Display (com.codename1.ui.Display)1 EditorTTFFont (com.codename1.ui.EditorTTFFont)1 EncodedImage (com.codename1.ui.EncodedImage)1 Font (com.codename1.ui.Font)1 Image (com.codename1.ui.Image)1 AnimationAccessor (com.codename1.ui.animations.AnimationAccessor)1 Accessor (com.codename1.ui.plaf.Accessor)1 CSSBorder (com.codename1.ui.plaf.CSSBorder)1 RoundBorder (com.codename1.ui.plaf.RoundBorder)1 RoundRectBorder (com.codename1.ui.plaf.RoundRectBorder)1 Style (com.codename1.ui.plaf.Style)1 EditableResources (com.codename1.ui.util.EditableResources)1 EditableResourcesForCSS (com.codename1.ui.util.EditableResourcesForCSS)1 Resources (com.codename1.ui.util.Resources)1 ByteArrayInputStream (java.io.ByteArrayInputStream)1 CharArrayReader (java.io.CharArrayReader)1