Libraryless. Click here for Pure Java version (18213L/115K).
abstract sclass DynImageSurface extends DynModule {
transient ImageSurface imageSurface;
transient BufferedImage image;
transient S imageID;
transient bool useUpdateHack, zoomToWindowOnSetImage;
transient O onNewImage;
switchable bool autoSaveToDisk = autoSaveToDiskDefault(); // dev.
switchable bool pixelate;
visualize { ret _visualize(); }
final private JComponent _visualize() {
imageSurface = imageSurface(image);
imageSurface.onNewImage = r newImageFromSurface;
imageSurface_pixelated(imageSurface, pixelate);
ret jscroll_center(imageSurface);
}
// call after visualize
void enableDoubleBuffering {
if (imageSurface != null) imageSurface.setDoubleBuffered(true);
}
JComponent visualizeWithDoubleBuffering() {
JComponent c = _visualize();
enableDoubleBuffering();
ret c;
}
// hold image during reload (not during reboot yet)
O _getReloadData() { ret image; }
void _setReloadData(BufferedImage image) { this.image = image; }
start {
dm_watchField pixelate(-> imageSurface_pixelated(imageSurface, pixelate));
if (autoSaveToDisk)
autoLoadNow();
}
void autoLoadNow enter {
pcall {
File f = autoSaveImageFile();
if (fileExists(f)) {
print("Auto-loading " + f);
setImage(loadImage2(f), true);
}
}
}
void autoSaveNow enter {
pcall {
File f = autoSaveImageFile();
savePNG(f, image);
infoBox("Auto-saved " + renderFileInfo(f));
}
}
bool autoSaveToDiskDefault() { false; }
enhanceFrame {
internalFramePopupMenuItem(f, "Auto-save now", rThread autoSaveNow);
}
// API
void setImage(MakesBufferedImage image) { imageID = null; setImage(image == null ? null : image.getBufferedImage()); }
void newImageFromSurface {
setImage(imageSurface.getImage());
}
void setImage(BufferedImage image, bool loadingFromAutoSave default false) {
this.image = image; imageID = null;
if (imageSurface != null) {
temp tempSetField(imageSurface, onNewImage := null); // avoid recursion
imageSurface.setImage(image);
if (zoomToWindowOnSetImage) imageSurface.zoomToWindow();
if (autoSaveToDisk && !loadingFromAutoSave)
autoSaveNow();
}
vmBus_send('newImage, this);
pcallF(onNewImage, image);
}
void setImage(S imageID) {
if (sameSnippetID(this.imageID, imageID)) ret;
setImage(loadImage2(imageID));
this.imageID = imageID;
}
File autoSaveImageFile() {
S id = dm_moduleID(me());
ret javaxDataDir("Image Autosaves/" + id + "-autosave.png");
}
BufferedImage getImage() {
if (useUpdateHack) {
// HACKY: to get changes in ImageSurface (e.g. images drag&dropped in there directly)
ImageSurface is = imageSurface;
if (is != null && is.getImage() != image) setImage(is.getImage());
}
ret image;
}
bool hasImage() { ret image != null; }
void setZoom(double zoom) { if (imageSurface != null) imageSurface.setZoom(zoom); }
Rect getSelection() { ret imageSurface == null ? null : toRect(imageSurface.getSelection()); }
void setSelection(Rect r) { if (imageSurface != null) imageSurface.setSelection(toRectangle(r)); }
int imageWidth() { ret imageSurface.getImage().getWidth(); }
int imageHeight() { ret imageSurface.getImage().getHeight(); }
void pixelate() {
setField(pixelate := true);
}
}Began life as a copy of #1016205
download show line numbers debug dex old transpilations
Travelled to 15 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, irmadwmeruwu, ishqpsrjomds, lpdgvwnxivlt, mowyntqkapby, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, tvejysmllsmz, vouqrxazstgt
No comments. add comment
| Snippet ID: | #1018873 |
| Snippet name: | DynImageSurface - module showing an image |
| Eternal ID of this version: | #1018873/32 |
| Text MD5: | 0dc93b3fa8b5eb4a9ab4ecd07f0b4940 |
| Transpilation MD5: | 167b95c936a83af5ff68510232830595 |
| Author: | stefan |
| Category: | javax |
| Type: | JavaX fragment (include) |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2021-12-26 18:51:09 |
| Source code size: | 3567 bytes / 121 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 1206 / 4198 |
| Version history: | 31 change(s) |
| Referenced in: | [show references] |