1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.millscript.millscript.functions;
22
23 import org.millscript.commons.vfs.VFile;
24 import org.millscript.millscript.Prefs;
25 import org.millscript.millscript.datatypes.Image;
26 import org.millscript.millscript.render.ImageRender;
27 import org.millscript.millscript.vm.Machine;
28 import org.millscript.millscript.vm.Package;
29
30 /**
31 * This class represents the parent of all image saving functions in MillScript.
32 */
33 public abstract class ImageFileFunction extends AbstractOutputFileFunction {
34
35 /**
36 * The image renderer this function should use to render images.
37 */
38 private final ImageRender imageRender;
39
40 /**
41 * Constructs a new image file function for the specified package and image
42 * renderer.
43 *
44 * @param pack the package this function belongs to
45 * @param ir the image renderer this image function should use to render
46 * the image
47 */
48 protected ImageFileFunction( final Package pack, final ImageRender ir ) {
49 super( pack );
50 this.imageRender = ir;
51 }
52
53 /**
54 * @see org.millscript.millscript.functions.Function#apply(org.millscript.millscript.vm.Machine, int)
55 */
56 @Override
57 public void apply( final Machine mc, final int nargs ) {
58 if ( nargs == 2 ) {
59 Image image = mc.popImage();
60 Page page = toPage( mc.popObject() );
61 page.createDirectoryFor();
62
63 VFile file = page.getFile();
64 config.getLogger().infoLine( "About to render to " + file );
65
66 imageRender.renderImage( image, file );
67
68 Prefs.imageCount += 1;
69 mc.pushObject( page );
70 } else {
71 checkNargs( mc, 2, nargs );
72 }
73 }
74
75 }