| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -23,10 +23,18 @@ | |||
| 23 | 23 | ||
| 24 | 24 | package processing.core; | |
| 25 | 25 | ||
| 26 | + import java.awt.Paint; | ||
| 27 | + import java.awt.PaintContext; | ||
| 28 | + import java.awt.Rectangle; | ||
| 29 | + import java.awt.RenderingHints; | ||
| 30 | + import java.awt.geom.AffineTransform; | ||
| 31 | + import java.awt.geom.Point2D; | ||
| 32 | + import java.awt.geom.Rectangle2D; | ||
| 33 | + import java.awt.image.ColorModel; | ||
| 34 | + import java.awt.image.Raster; | ||
| 35 | + import java.awt.image.WritableRaster; | ||
| 26 | 36 | import java.util.HashMap; | |
| 27 | 37 | ||
| 28 | - import android.graphics.*; | ||
| 29 | - | ||
| 30 | 38 | import processing.xml.XMLElement; | |
| 31 | 39 | ||
| 32 | 40 | ||
@@ -143,11 +151,11 @@ public class PShapeSVG extends PShape { | |||
| 143 | 151 | ||
| 144 | 152 | ||
| 145 | 153 | Gradient strokeGradient; | |
| 146 | - Shader strokeGradientPaint; | ||
| 154 | + Paint strokeGradientPaint; | ||
| 147 | 155 | String strokeName; // id of another object, gradients only? | |
| 148 | 156 | ||
| 149 | 157 | Gradient fillGradient; | |
| 150 | - Shader fillGradientPaint; | ||
| 158 | + Paint fillGradientPaint; | ||
| 151 | 159 | String fillName; // id of another object | |
| 152 | 160 | ||
| 153 | 161 | ||
@@ -274,7 +282,7 @@ public PShapeSVG(PShapeSVG parent, XMLElement properties) { | |||
| 274 | 282 | ||
| 275 | 283 | String transformStr = properties.getString("transform"); | |
| 276 | 284 | if (transformStr != null) { | |
| 277 | - matrix = parseMatrix(transformStr); | ||
| 285 | + matrix = parseTransform(transformStr); | ||
| 278 | 286 | } | |
| 279 | 287 | ||
| 280 | 288 | parseColors(properties); | |
@@ -817,8 +825,27 @@ private void parsePathQuadto(float x1, float y1, | |||
| 817 | 825 | * @param matrixStr text of the matrix param. | |
| 818 | 826 | * @return a good old-fashioned PMatrix2D | |
| 819 | 827 | */ | |
| 820 | - static protected PMatrix2D parseMatrix(String matrixStr) { | ||
| 821 | - String[] pieces = PApplet.match(matrixStr, "\\s*(\\w+)\\((.*)\\)"); | ||
| 828 | + static protected PMatrix2D parseTransform(String matrixStr) { | ||
| 829 | + matrixStr = matrixStr.trim(); | ||
| 830 | + PMatrix2D outgoing = null; | ||
| 831 | + int start = 0; | ||
| 832 | + int stop = -1; | ||
| 833 | + while ((stop = matrixStr.indexOf(')', start)) != -1) { | ||
| 834 | + PMatrix2D m = parseSingleTransform(matrixStr.substring(start, stop+1)); | ||
| 835 | + if (outgoing == null) { | ||
| 836 | + outgoing = m; | ||
| 837 | + } else { | ||
| 838 | + outgoing.apply(m); | ||
| 839 | + } | ||
| 840 | + start = stop + 1; | ||
| 841 | + } | ||
| 842 | + return outgoing; | ||
| 843 | + } | ||
| 844 | + | ||
| 845 | + | ||
| 846 | + static protected PMatrix2D parseSingleTransform(String matrixStr) { | ||
| 847 | + //String[] pieces = PApplet.match(matrixStr, "^\\s*(\\w+)\\((.*)\\)\\s*$"); | ||
| 848 | + String[] pieces = PApplet.match(matrixStr, "[,\\s]*(\\w+)\\((.*)\\)"); | ||
| 822 | 849 | if (pieces == null) { | |
| 823 | 850 | System.err.println("Could not parse transform " + matrixStr); | |
| 824 | 851 | return null; | |
@@ -1014,7 +1041,7 @@ void setColor(String colorText, boolean isFill) { | |||
| 1014 | 1041 | int color = 0; | |
| 1015 | 1042 | String name = ""; | |
| 1016 | 1043 | Gradient gradient = null; | |
| 1017 | - Shader paint = null; | ||
| 1044 | + Paint paint = null; | ||
| 1018 | 1045 | if (colorText.equals("none")) { | |
| 1019 | 1046 | visible = false; | |
| 1020 | 1047 | } else if (colorText.equals("black")) { | |
@@ -1131,7 +1158,7 @@ static protected float parseUnitSize(String text) { | |||
| 1131 | 1158 | ||
| 1132 | 1159 | ||
| 1133 | 1160 | static class Gradient extends PShapeSVG { | |
| 1134 | - Matrix transform; | ||
| 1161 | + AffineTransform transform; | ||
| 1135 | 1162 | ||
| 1136 | 1163 | float[] offset; | |
| 1137 | 1164 | int[] color; | |
@@ -1190,30 +1217,16 @@ public LinearGradient(PShapeSVG parent, XMLElement properties) { | |||
| 1190 | 1217 | properties.getString("gradientTransform"); | |
| 1191 | 1218 | ||
| 1192 | 1219 | if (transformStr != null) { | |
| 1193 | - float t[] = parseMatrix(transformStr).get(null); | ||
| 1194 | - //this.transform = new AffineTransform(t[0], t[3], t[1], t[4], t[2], t[5]); | ||
| 1195 | - transform = new Matrix(); | ||
| 1196 | - transform.setValues(new float[] { // TODO don't create temp floats | ||
| 1197 | - t[0], t[1], t[2], | ||
| 1198 | - t[3], t[4], t[5], | ||
| 1199 | - 0, 0, 1 | ||
| 1200 | - }); | ||
| 1201 | - | ||
| 1202 | - // Point2D t1 = transform.transform(new Point2D.Float(x1, y1), null); | ||
| 1203 | - // Point2D t2 = transform.transform(new Point2D.Float(x2, y2), null); | ||
| 1204 | - float[] t1 = new float[] { x1, y1 }; | ||
| 1205 | - float[] t2 = new float[] { x2, y2 }; | ||
| 1206 | - transform.mapPoints(t1); | ||
| 1207 | - transform.mapPoints(t2); | ||
| 1208 | - | ||
| 1209 | - // this.x1 = (float) t1.getX(); | ||
| 1210 | - // this.y1 = (float) t1.getY(); | ||
| 1211 | - // this.x2 = (float) t2.getX(); | ||
| 1212 | - // this.y2 = (float) t2.getY(); | ||
| 1213 | - x1 = t1[0]; | ||
| 1214 | - y1 = t1[1]; | ||
| 1215 | - x2 = t2[0]; | ||
| 1216 | - y2 = t2[1]; | ||
| 1220 | + float t[] = parseTransform(transformStr).get(null); | ||
| 1221 | + this.transform = new AffineTransform(t[0], t[3], t[1], t[4], t[2], t[5]); | ||
| 1222 | + | ||
| 1223 | + Point2D t1 = transform.transform(new Point2D.Float(x1, y1), null); | ||
| 1224 | + Point2D t2 = transform.transform(new Point2D.Float(x2, y2), null); | ||
| 1225 | + | ||
| 1226 | + this.x1 = (float) t1.getX(); | ||
| 1227 | + this.y1 = (float) t1.getY(); | ||
| 1228 | + this.x2 = (float) t2.getX(); | ||
| 1229 | + this.y2 = (float) t2.getY(); | ||
| 1217 | 1230 | } | |
| 1218 | 1231 | } | |
| 1219 | 1232 | } | |
@@ -1233,34 +1246,21 @@ public RadialGradient(PShapeSVG parent, XMLElement properties) { | |||
| 1233 | 1246 | properties.getString("gradientTransform"); | |
| 1234 | 1247 | ||
| 1235 | 1248 | if (transformStr != null) { | |
| 1236 | - float t[] = parseMatrix(transformStr).get(null); | ||
| 1237 | - // this.transform = new AffineTransform(t[0], t[3], t[1], t[4], t[2], t[5]); | ||
| 1238 | - transform = new Matrix(); | ||
| 1239 | - transform.setValues(new float[] { // TODO don't create temp floats | ||
| 1240 | - t[0], t[1], t[2], | ||
| 1241 | - t[3], t[4], t[5], | ||
| 1242 | - 0, 0, 1 | ||
| 1243 | - }); | ||
| 1244 | - | ||
| 1245 | - // Point2D t1 = transform.transform(new Point2D.Float(cx, cy), null); | ||
| 1246 | - // Point2D t2 = transform.transform(new Point2D.Float(cx + r, cy), null); | ||
| 1247 | - float[] t1 = new float[] { cx, cy }; | ||
| 1248 | - float[] t2 = new float[] { cx + r, cy }; | ||
| 1249 | - transform.mapPoints(t1); | ||
| 1250 | - transform.mapPoints(t2); | ||
| 1251 | - | ||
| 1252 | - // this.cx = (float) t1.getX(); | ||
| 1253 | - // this.cy = (float) t1.getY(); | ||
| 1254 | - // this.r = (float) (t2.getX() - t1.getX()); | ||
| 1255 | - cx = t1[0]; | ||
| 1256 | - cy = t1[1]; | ||
| 1257 | - r = t2[0] - t1[0]; | ||
| 1249 | + float t[] = parseTransform(transformStr).get(null); | ||
| 1250 | + this.transform = new AffineTransform(t[0], t[3], t[1], t[4], t[2], t[5]); | ||
| 1251 | + | ||
| 1252 | + Point2D t1 = transform.transform(new Point2D.Float(cx, cy), null); | ||
| 1253 | + Point2D t2 = transform.transform(new Point2D.Float(cx + r, cy), null); | ||
| 1254 | + | ||
| 1255 | + this.cx = (float) t1.getX(); | ||
| 1256 | + this.cy = (float) t1.getY(); | ||
| 1257 | + this.r = (float) (t2.getX() - t1.getX()); | ||
| 1258 | 1258 | } | |
| 1259 | 1259 | } | |
| 1260 | 1260 | } | |
| 1261 | 1261 | ||
| 1262 | 1262 | ||
| 1263 | - /* | ||
| 1263 | + | ||
| 1264 | 1264 | class LinearGradientPaint implements Paint { | |
| 1265 | 1265 | float x1, y1, x2, y2; | |
| 1266 | 1266 | float[] offset; | |
@@ -1324,7 +1324,7 @@ public Raster getRaster(int x, int y, int w, int h) { | |||
| 1324 | 1324 | ny /= len; | |
| 1325 | 1325 | } | |
| 1326 | 1326 | ||
| 1327 | - int span = (int) PActivity.dist(tx1, ty1, tx2, ty2) * ACCURACY; | ||
| 1327 | + int span = (int) PApplet.dist(tx1, ty1, tx2, ty2) * ACCURACY; | ||
| 1328 | 1328 | if (span <= 0) { | |
| 1329 | 1329 | //System.err.println("span is too small"); | |
| 1330 | 1330 | // annoying edge case where the gradient isn't legit | |
@@ -1347,11 +1347,11 @@ public Raster getRaster(int x, int y, int w, int h) { | |||
| 1347 | 1347 | int last = (int) (offset[i] * (span-1)); | |
| 1348 | 1348 | //System.out.println("last is " + last); | |
| 1349 | 1349 | for (int j = prev; j <= last; j++) { | |
| 1350 | - float btwn = PActivity.norm(j, prev, last); | ||
| 1351 | - interp[j][0] = (int) PActivity.lerp((c0 >> 16) & 0xff, (c1 >> 16) & 0xff, btwn); | ||
| 1352 | - interp[j][1] = (int) PActivity.lerp((c0 >> 8) & 0xff, (c1 >> 8) & 0xff, btwn); | ||
| 1353 | - interp[j][2] = (int) PActivity.lerp(c0 & 0xff, c1 & 0xff, btwn); | ||
| 1354 | - interp[j][3] = (int) (PActivity.lerp((c0 >> 24) & 0xff, (c1 >> 24) & 0xff, btwn) * opacity); | ||
| 1350 | + float btwn = PApplet.norm(j, prev, last); | ||
| 1351 | + interp[j][0] = (int) PApplet.lerp((c0 >> 16) & 0xff, (c1 >> 16) & 0xff, btwn); | ||
| 1352 | + interp[j][1] = (int) PApplet.lerp((c0 >> 8) & 0xff, (c1 >> 8) & 0xff, btwn); | ||
| 1353 | + interp[j][2] = (int) PApplet.lerp(c0 & 0xff, c1 & 0xff, btwn); | ||
| 1354 | + interp[j][3] = (int) (PApplet.lerp((c0 >> 24) & 0xff, (c1 >> 24) & 0xff, btwn) * opacity); | ||
| 1355 | 1355 | //System.out.println(j + " " + interp[j][0] + " " + interp[j][1] + " " + interp[j][2]); | |
| 1356 | 1356 | } | |
| 1357 | 1357 | prev = last; | |
@@ -1384,10 +1384,8 @@ public Raster getRaster(int x, int y, int w, int h) { | |||
| 1384 | 1384 | } | |
| 1385 | 1385 | } | |
| 1386 | 1386 | } | |
| 1387 | - */ | ||
| 1388 | 1387 | ||
| 1389 | 1388 | ||
| 1390 | - /* | ||
| 1391 | 1389 | class RadialGradientPaint implements Paint { | |
| 1392 | 1390 | float cx, cy, radius; | |
| 1393 | 1391 | float[] offset; | |
@@ -1436,11 +1434,11 @@ public Raster getRaster(int x, int y, int w, int h) { | |||
| 1436 | 1434 | int c1 = color[i]; | |
| 1437 | 1435 | int last = (int) (offset[i] * (span - 1)); | |
| 1438 | 1436 | for (int j = prev; j <= last; j++) { | |
| 1439 | - float btwn = PActivity.norm(j, prev, last); | ||
| 1440 | - interp[j][0] = (int) PActivity.lerp((c0 >> 16) & 0xff, (c1 >> 16) & 0xff, btwn); | ||
| 1441 | - interp[j][1] = (int) PActivity.lerp((c0 >> 8) & 0xff, (c1 >> 8) & 0xff, btwn); | ||
| 1442 | - interp[j][2] = (int) PActivity.lerp(c0 & 0xff, c1 & 0xff, btwn); | ||
| 1443 | - interp[j][3] = (int) (PActivity.lerp((c0 >> 24) & 0xff, (c1 >> 24) & 0xff, btwn) * opacity); | ||
| 1437 | + float btwn = PApplet.norm(j, prev, last); | ||
| 1438 | + interp[j][0] = (int) PApplet.lerp((c0 >> 16) & 0xff, (c1 >> 16) & 0xff, btwn); | ||
| 1439 | + interp[j][1] = (int) PApplet.lerp((c0 >> 8) & 0xff, (c1 >> 8) & 0xff, btwn); | ||
| 1440 | + interp[j][2] = (int) PApplet.lerp(c0 & 0xff, c1 & 0xff, btwn); | ||
| 1441 | + interp[j][3] = (int) (PApplet.lerp((c0 >> 24) & 0xff, (c1 >> 24) & 0xff, btwn) * opacity); | ||
| 1444 | 1442 | } | |
| 1445 | 1443 | prev = last; | |
| 1446 | 1444 | } | |
@@ -1449,8 +1447,8 @@ public Raster getRaster(int x, int y, int w, int h) { | |||
| 1449 | 1447 | int index = 0; | |
| 1450 | 1448 | for (int j = 0; j < h; j++) { | |
| 1451 | 1449 | for (int i = 0; i < w; i++) { | |
| 1452 | - float distance = PActivity.dist(cx, cy, x + i, y + j); | ||
| 1453 | - int which = PActivity.min((int) (distance * ACCURACY), interp.length-1); | ||
| 1450 | + float distance = PApplet.dist(cx, cy, x + i, y + j); | ||
| 1451 | + int which = PApplet.min((int) (distance * ACCURACY), interp.length-1); | ||
| 1454 | 1452 | ||
| 1455 | 1453 | data[index++] = interp[which][0]; | |
| 1456 | 1454 | data[index++] = interp[which][1]; | |
@@ -1464,41 +1462,26 @@ public Raster getRaster(int x, int y, int w, int h) { | |||
| 1464 | 1462 | } | |
| 1465 | 1463 | } | |
| 1466 | 1464 | } | |
| 1467 | - */ | ||
| 1468 | 1465 | ||
| 1469 | 1466 | ||
| 1470 | - protected Shader calcGradientPaint(Gradient gradient) { | ||
| 1471 | - // TODO just do this with the other parsing | ||
| 1472 | - int[] colors = new int[gradient.count]; | ||
| 1473 | - int opacityMask = ((int) (opacity * 255)) << 24; | ||
| 1474 | - for (int i = 0; i < gradient.count; i++) { | ||
| 1475 | - colors[i] = opacityMask | (gradient.color[i] & 0xFFFFFF); | ||
| 1476 | - } | ||
| 1477 | - | ||
| 1467 | + protected Paint calcGradientPaint(Gradient gradient) { | ||
| 1478 | 1468 | if (gradient instanceof LinearGradient) { | |
| 1479 | 1469 | LinearGradient grad = (LinearGradient) gradient; | |
| 1480 | - // return new LinearGradientPaint(grad.x1, grad.y1, grad.x2, grad.y2, | ||
| 1481 | - // grad.offset, grad.color, grad.count, | ||
| 1482 | - // opacity); | ||
| 1483 | - return new android.graphics.LinearGradient(grad.x1, grad.y1, | ||
| 1484 | - grad.x2, grad.y2, | ||
| 1485 | - colors, grad.offset, | ||
| 1486 | - Shader.TileMode.CLAMP ); | ||
| 1470 | + return new LinearGradientPaint(grad.x1, grad.y1, grad.x2, grad.y2, | ||
| 1471 | + grad.offset, grad.color, grad.count, | ||
| 1472 | + opacity); | ||
| 1487 | 1473 | ||
| 1488 | 1474 | } else if (gradient instanceof RadialGradient) { | |
| 1489 | 1475 | RadialGradient grad = (RadialGradient) gradient; | |
| 1490 | - // return new RadialGradientPaint(grad.cx, grad.cy, grad.r, | ||
| 1491 | - // grad.offset, grad.color, grad.count, | ||
| 1492 | - // opacity); | ||
| 1493 | - return new android.graphics.RadialGradient(grad.cx, grad.cy, grad.r, | ||
| 1494 | - colors, grad.offset, | ||
| 1495 | - Shader.TileMode.CLAMP); | ||
| 1476 | + return new RadialGradientPaint(grad.cx, grad.cy, grad.r, | ||
| 1477 | + grad.offset, grad.color, grad.count, | ||
| 1478 | + opacity); | ||
| 1496 | 1479 | } | |
| 1497 | 1480 | return null; | |
| 1498 | 1481 | } | |
| 1499 | 1482 | ||
| 1500 | 1483 | ||
| 1501 | - // protected Shader calcGradientPaint(Gradient gradient, | ||
| 1484 | + // protected Paint calcGradientPaint(Gradient gradient, | ||
| 1502 | 1485 | // float x1, float y1, float x2, float y2) { | |
| 1503 | 1486 | // if (gradient instanceof LinearGradient) { | |
| 1504 | 1487 | // LinearGradient grad = (LinearGradient) gradient; | |
@@ -1510,7 +1493,7 @@ protected Shader calcGradientPaint(Gradient gradient) { | |||
| 1510 | 1493 | // } | |
| 1511 | 1494 | ||
| 1512 | 1495 | ||
| 1513 | - // protected Shader calcGradientPaint(Gradient gradient, | ||
| 1496 | + // protected Paint calcGradientPaint(Gradient gradient, | ||
| 1514 | 1497 | // float cx, float cy, float r) { | |
| 1515 | 1498 | // if (gradient instanceof RadialGradient) { | |
| 1516 | 1499 | // RadialGradient grad = (RadialGradient) gradient; | |
@@ -1528,18 +1511,22 @@ protected Shader calcGradientPaint(Gradient gradient) { | |||
| 1528 | 1511 | protected void styles(PGraphics g) { | |
| 1529 | 1512 | super.styles(g); | |
| 1530 | 1513 | ||
| 1531 | - if (g instanceof PGraphicsAndroid2D) { | ||
| 1532 | - PGraphicsAndroid2D gg = (PGraphicsAndroid2D) g; | ||
| 1514 | + if (g instanceof PGraphicsJava2D) { | ||
| 1515 | + PGraphicsJava2D p2d = (PGraphicsJava2D) g; | ||
| 1533 | 1516 | ||
| 1534 | 1517 | if (strokeGradient != null) { | |
| 1535 | - // gg.strokeGradient = true; | ||
| 1536 | - // gg.strokeGradientObject = strokeGradientPaint; | ||
| 1537 | - gg.strokePaint.setShader(strokeGradientPaint); | ||
| 1518 | + p2d.strokeGradient = true; | ||
| 1519 | + p2d.strokeGradientObject = strokeGradientPaint; | ||
| 1520 | + } else { | ||
| 1521 | + // need to shut off, in case parent object has a gradient applied | ||
| 1522 | + //p2d.strokeGradient = false; | ||
| 1538 | 1523 | } | |
| 1539 | 1524 | if (fillGradient != null) { | |
| 1540 | - // p2d.fillGradient = true; | ||
| 1541 | - // p2d.fillGradientObject = fillGradientPaint; | ||
| 1542 | - gg.fillPaint.setShader(fillGradientPaint); | ||
| 1525 | + p2d.fillGradient = true; | ||
| 1526 | + p2d.fillGradientObject = fillGradientPaint; | ||
| 1527 | + } else { | ||
| 1528 | + // need to shut off, in case parent object has a gradient applied | ||
| 1529 | + //p2d.fillGradient = false; | ||
| 1543 | 1530 | } | |
| 1544 | 1531 | } | |
| 1545 | 1532 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -863,13 +863,13 @@ public class Glyph { | |||
| 863 | 863 | public int leftExtent; | |
| 864 | 864 | ||
| 865 | 865 | ||
| 866 | - protected Glyph() { | ||
| 866 | + public Glyph() { | ||
| 867 | 867 | index = -1; | |
| 868 | 868 | // used when reading from a stream or for subclasses | |
| 869 | 869 | } | |
| 870 | 870 | ||
| 871 | 871 | ||
| 872 | - protected Glyph(DataInputStream is) throws IOException { | ||
| 872 | + public Glyph(DataInputStream is) throws IOException { | ||
| 873 | 873 | index = -1; | |
| 874 | 874 | readHeader(is); | |
| 875 | 875 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -2766,7 +2766,7 @@ protected boolean saveTGA(OutputStream output) { | |||
| 2766 | 2766 | * To get a list of the supported formats for writing, use: <BR> | |
| 2767 | 2767 | * <TT>println(javax.imageio.ImageIO.getReaderFormatNames())</TT> | |
| 2768 | 2768 | */ | |
| 2769 | - protected void saveImageIO(String path) throws IOException { | ||
| 2769 | + protected boolean saveImageIO(String path) throws IOException { | ||
| 2770 | 2770 | try { | |
| 2771 | 2771 | int outputFormat = (format == ARGB) ? | |
| 2772 | 2772 | BufferedImage.TYPE_INT_ARGB : BufferedImage.TYPE_INT_RGB; | |
@@ -2785,7 +2785,7 @@ protected void saveImageIO(String path) throws IOException { | |||
| 2785 | 2785 | File file = new File(path); | |
| 2786 | 2786 | String extension = path.substring(path.lastIndexOf('.') + 1); | |
| 2787 | 2787 | ||
| 2788 | - ImageIO.write(bimage, extension, file); | ||
| 2788 | + return ImageIO.write(bimage, extension, file); | ||
| 2789 | 2789 | ||
| 2790 | 2790 | } catch (Exception e) { | |
| 2791 | 2791 | e.printStackTrace(); | |
@@ -2863,7 +2863,9 @@ public void save(String filename) { // ignore | |||
| 2863 | 2863 | if (saveImageFormats != null) { | |
| 2864 | 2864 | for (int i = 0; i < saveImageFormats.length; i++) { | |
| 2865 | 2865 | if (filename.endsWith("." + saveImageFormats[i])) { | |
| 2866 | - saveImageIO(filename); | ||
| 2866 | + if (!saveImageIO(filename)) { | ||
| 2867 | + throw new RuntimeException("Error while saving image."); | ||
| 2868 | + } | ||
| 2867 | 2869 | return; | |
| 2868 | 2870 | } | |
| 2869 | 2871 | } | |
| Back | FazBrowse Home | New Git URL |
0 commit comments