use of com.codename1.rad.models 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();
}
}
use of com.codename1.rad.models in project CodenameOne by codenameone.
the class CSSTheme method isInUse.
private boolean isInUse(String imageName) {
if (isImageReferencedInCSS(imageName)) {
return true;
}
Object multi = res.getResourceObject(imageName);
if (multi instanceof EditableResources.MultiImage) {
EditableResources.MultiImage m = (EditableResources.MultiImage) multi;
for (com.codename1.ui.Image i : m.getInternalImages()) {
if (isInUse(i)) {
return true;
}
}
return false;
}
com.codename1.ui.Image resourceValue = res.getImage(imageName);
return isInUse(resourceValue);
}
use of com.codename1.rad.models in project CodenameOne by codenameone.
the class EditableResources method setResource.
void setResource(final String id, final byte type, final Object value) {
/*if(!SwingUtilities.isEventDispatchThread()) {
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
setResource(id, type, value);
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
return;
}*/
if (overrideResource != null) {
overrideResource.setResource(id, type, value);
return;
}
boolean exists = false;
int index = -1;
if (value != null) {
exists = getResourceObject(id) != null;
} else {
index = getIndexOfChild(getParent(type), id);
}
Object superValue = value;
if (multiPending != null) {
if (superValue instanceof com.codename1.ui.EncodedImage) {
superValue = multiPending;
}
multiPending = null;
}
super.setResource(id, type, superValue);
if (superValue != null) {
index = getIndexOfChild(getParent(type), id);
if (exists) {
fireTreeNodeChanged(id, index);
} else {
fireTreeNodeAdded(id, index);
}
} else {
fireTreeNodeRemoved(id, type, index);
}
}
use of com.codename1.rad.models in project CodenameOne by codenameone.
the class EditableResources method saveFont.
private void saveFont(DataOutputStream output, boolean packed, String id) throws IOException {
EditorFont f = (EditorFont) getFont(id);
// write the system font fallback
output.writeByte(f.getSystemFallback().getFace() | f.getSystemFallback().getSize() | f.getSystemFallback().getStyle());
// do we have an emedded truetype font? Do we support embedded fonts?
boolean trueTypeIncluded = f.getTruetypeFont() != null;
output.writeBoolean(trueTypeIncluded);
if (trueTypeIncluded) {
output.writeInt(f.getTruetypeFont().length);
output.write(f.getTruetypeFont());
}
boolean lookupIncluded = f.getLookupFont() != null;
output.writeBoolean(lookupIncluded);
if (lookupIncluded) {
output.writeUTF(f.getLookupFont());
}
boolean bitmapIncluded = f.isIncludesBitmap();
output.writeBoolean(bitmapIncluded);
if (bitmapIncluded) {
com.codename1.ui.Font bitmapFont = f.getBitmapFont();
com.codename1.ui.Image cache = CodenameOneAccessor.getImage(bitmapFont);
int[] imageArray = cache.getRGB();
for (int iter = 0; iter < imageArray.length; iter++) {
imageArray[iter] = (imageArray[iter] >> 8) & 0xff0000;
}
saveImage(output, com.codename1.ui.Image.createImage(imageArray, cache.getWidth(), cache.getHeight()), null, BufferedImage.TYPE_INT_RGB);
String charset = bitmapFont.getCharset();
int charCount = charset.length();
output.writeShort(charCount);
int[] cutOffsets = CodenameOneAccessor.getOffsets(bitmapFont);
int[] charWidth = CodenameOneAccessor.getWidths(bitmapFont);
for (int iter = 0; iter < charCount; iter++) {
output.writeShort(cutOffsets[iter]);
}
for (int iter = 0; iter < charCount; iter++) {
output.writeByte(charWidth[iter]);
}
output.writeUTF(charset);
output.writeByte(f.getRenderingHint());
}
}
use of com.codename1.rad.models in project CodenameOne by codenameone.
the class EditableResources method readMultiImage.
@Override
Image readMultiImage(DataInputStream input, boolean skipAll) throws IOException {
com.codename1.ui.EncodedImage resultImage = null;
int dpi = com.codename1.ui.Display.getInstance().getDeviceDensity();
int dpiCount = input.readInt();
int bestFitOffset = 0;
int bestFitDPI = 0;
int[] lengths = new int[dpiCount];
dpisLoaded = new int[dpiCount];
widthForDPI = new int[dpiCount];
heightForDPI = new int[dpiCount];
for (int iter = 0; iter < dpiCount; iter++) {
int currentDPI = input.readInt();
dpisLoaded[iter] = currentDPI;
lengths[iter] = input.readInt();
if (bestFitDPI != dpi && dpi >= currentDPI && currentDPI >= bestFitDPI) {
bestFitDPI = currentDPI;
bestFitOffset = iter;
}
}
multiPending = new MultiImage();
multiPending.setDpi(dpisLoaded);
multiPending.setInternalImages(new EncodedImage[dpisLoaded.length]);
for (int iter = 0; iter < lengths.length; iter++) {
int size = lengths[iter];
if (!skipAll && bestFitOffset == iter) {
byte[] multiImageData = new byte[size];
input.readFully(multiImageData, 0, size);
resultImage = com.codename1.ui.EncodedImage.create(multiImageData);
widthForDPI[iter] = resultImage.getWidth();
heightForDPI[iter] = resultImage.getHeight();
multiPending.getInternalImages()[iter] = resultImage;
} else {
byte[] multiImageData = new byte[size];
input.readFully(multiImageData, 0, size);
com.codename1.ui.EncodedImage tmp = com.codename1.ui.EncodedImage.create(multiImageData);
widthForDPI[iter] = tmp.getWidth();
heightForDPI[iter] = tmp.getHeight();
multiPending.getInternalImages()[iter] = tmp;
}
}
if (resultImage == null) {
return Image.createImage(5, 5);
}
return resultImage;
}
Aggregations