Stefan Schuermans commited on 2019-06-21 16:14:59
Showing 9 changed files, with 704 additions and 64 deletions.
... | ... |
@@ -7,8 +7,8 @@ BLINKENLIB:=../BlinkenLibJava/BlinkenLib.jar |
7 | 7 |
JETHERPIX:=../JEtherPix/JEtherPix.jar |
8 | 8 |
|
9 | 9 |
VERSION_MAJOR:=1 |
10 |
-VERSION_MINOR:=4 |
|
11 |
-VERSION_REVISION:=6 |
|
10 |
+VERSION_MINOR:=5 |
|
11 |
+VERSION_REVISION:=0 |
|
12 | 12 |
|
13 | 13 |
JAVAC:=javac |
14 | 14 |
JAR:=jar |
... | ... |
@@ -23,10 +23,21 @@ GENJAVA:=$(P)/Version.java |
23 | 23 |
|
24 | 24 |
CLASSPATH:=.:$(BLINKENLIB):$(JETHERPIX) |
25 | 25 |
|
26 |
-CLASS_FILES:=$(P)/BlinkenFileFilter.class $(P)/BlinkenFrameDisplay.class \ |
|
27 |
- $(P)/BlinkenFrameDisplayListener.class $(P)/BlinkenFrameDisplayInterceptor.class \ |
|
28 |
- $(P)/BlinkenFrameEditor.class $(P)/BlinkenFrameEditorListener.class \ |
|
29 |
- $(P)/Blimp.class $(P)/Version.class |
|
26 |
+CLASS_FILES:=$(P)/BlinkenFileFilter.class \ |
|
27 |
+ $(P)/BlinkenFrameDisplay.class \ |
|
28 |
+ $(P)/BlinkenFrameDisplayListener.class \ |
|
29 |
+ $(P)/BlinkenFrameDisplayInterceptor.class \ |
|
30 |
+ $(P)/BlinkenFrameEditor.class \ |
|
31 |
+ $(P)/BlinkenFrameEditorListener.class \ |
|
32 |
+ $(P)/Blimp.class \ |
|
33 |
+ $(P)/FrameTemplateChaosknoten.class \ |
|
34 |
+ $(P)/FrameTemplateIf.class \ |
|
35 |
+ $(P)/FrameTemplatePixelLists.class \ |
|
36 |
+ $(P)/Version.class |
|
37 |
+ |
|
38 |
+NESTED_CLASS_FILES:=$(P)/FrameTemplatePixelLists$$ContentPixel.class \ |
|
39 |
+ $(P)/FrameTemplatePixelLists$$CopyPixel.class \ |
|
40 |
+ $(P)/FrameTemplatePixelLists$$FixedPixel.class |
|
30 | 41 |
|
31 | 42 |
IMAGE_FILES:=$(IMG)/ColorPicker.png $(IMG)/Dot.png $(IMG)/Line.png \ |
32 | 43 |
$(IMG)/Rectangle.png $(IMG)/FilledRectangle.png \ |
... | ... |
@@ -44,7 +55,9 @@ IMAGE_FILES:=$(IMG)/ColorPicker.png $(IMG)/Dot.png $(IMG)/Line.png \ |
44 | 55 |
all: jar |
45 | 56 |
|
46 | 57 |
clean: |
47 |
- rm -f $(P)/Version.java $(CLASS_FILES) BlinkenLib.jar Blimp.jar |
|
58 |
+ rm -f $(P)/Version.java $(CLASS_FILES) \ |
|
59 |
+ $(subst $$,\$$,$(NESTED_CLASS_FILES)) \ |
|
60 |
+ BlinkenLib.jar Blimp.jar |
|
48 | 61 |
|
49 | 62 |
jar: Blimp.jar |
50 | 63 |
|
... | ... |
@@ -65,13 +78,15 @@ $(P)/Version.java: Makefile |
65 | 78 |
Blimp.keystore: |
66 | 79 |
$(KEYTOOL) -genkey -alias Blimp -dname CN=Blimp,O=blinkenarea,C=org -keypass $(KEYPASS) -keystore Blimp.keystore -storepass $(KEYPASS) -validity 3652 |
67 | 80 |
|
68 |
-Blimp.jar: Blimp.mf Blimp.keystore $(CLASS_FILES) $(IMAGE_FILES) |
|
81 |
+Blimp.jar: Blimp.mf Blimp.keystore \ |
|
82 |
+ $(CLASS_FILES) $(NESTED_CLASS_FILES) $(IMAGE_FILES) |
|
69 | 83 |
rm -rf tmp |
70 | 84 |
mkdir tmp |
71 |
- for FILE in $(CLASS_FILES) $(IMAGE_FILES); \ |
|
85 |
+ for FILE in $(CLASS_FILES) $(subst $$,\$$,$(NESTED_CLASS_FILES)) \ |
|
86 |
+ $(IMAGE_FILES); \ |
|
72 | 87 |
do \ |
73 |
- mkdir -p tmp/$$(dirname $$FILE) || exit; \ |
|
74 |
- cp $$FILE tmp/$$FILE || exit; \ |
|
88 |
+ mkdir -p "tmp/$$(dirname "$$FILE")" || exit; \ |
|
89 |
+ cp "$$FILE" "tmp/$$FILE" || exit; \ |
|
75 | 90 |
done |
76 | 91 |
for JAR in $(filter %.jar,$(subst :, ,$(CLASSPATH))); \ |
77 | 92 |
do ( \ |
... | ... |
@@ -1,5 +1,5 @@ |
1 | 1 |
/* BlinkenLightsInteractiveMovieProgram |
2 |
- * Copyright (C) 2004-2018: Stefan Schuermans <stefan@blinkenarea.org> |
|
2 |
+ * Copyright (C) 2004-2019: Stefan Schuermans <stefan@blinkenarea.org> |
|
3 | 3 |
* Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html |
4 | 4 |
* a blinkenarea.org project |
5 | 5 |
*/ |
... | ... |
@@ -79,9 +79,10 @@ public class Blimp extends JApplet |
79 | 79 |
JMenu menuOutput, menuHelp; |
80 | 80 |
JMenuItem menuFileNew, menuFileLoad, menuFileSave, menuFileSaveAs, menuFileQuit; |
81 | 81 |
JMenuItem menuInfoShow, menuInfoAdd, menuInfoDelete; |
82 |
- JMenu menuEditResize, menuEditScale; |
|
82 |
+ JMenu menuEditResize, menuEditScale, menuEditTemplate; |
|
83 | 83 |
JMenuItem menuEditResizeUser, menuEditScaleUser; |
84 | 84 |
JMenuItem menuEditResizeKnown[], menuEditScaleKnown[]; |
85 |
+ JMenuItem menuEditTemplateChaosknoten; |
|
85 | 86 |
JMenuItem menuEditInsertFrame, menuEditDuplicateFrame, menuEditDeleteFrame; |
86 | 87 |
JMenuItem menuFrameSelNone, menuFrameSelSingle, menuFrameSelStart, menuFrameSelEnd; |
87 | 88 |
JMenuItem menuFrameSelCopy, menuFrameSelMove, menuFrameSelReverse, menuFrameSelDelete; |
... | ... |
@@ -132,6 +133,7 @@ public class Blimp extends JApplet |
132 | 133 |
|
133 | 134 |
//file, movie, frame |
134 | 135 |
File curDir = null, curFile = null; //current directory and file |
136 |
+ FrameTemplateIf curTemplate = null; //current frame template |
|
135 | 137 |
BlinkenMovie curMovie = null; //current movie |
136 | 138 |
boolean curMovieChanged = false; //if changes have been made to current movie |
137 | 139 |
BlinkenFrame curFrame = null; //current frame |
... | ... |
@@ -526,6 +528,10 @@ public class Blimp extends JApplet |
526 | 528 |
if( ! (formatMatcher = formatPattern.matcher( format )).find( ) ) //abort and return error if format not valid |
527 | 529 |
return false; |
528 | 530 |
|
531 |
+ //unset frame template |
|
532 |
+ curTemplate = null; |
|
533 |
+ frameEditor.setTemplate( null ); |
|
534 |
+ |
|
529 | 535 |
//resize movie |
530 | 536 |
curMovie.resize( Integer.parseInt( formatMatcher.group( 2 ) ), |
531 | 537 |
Integer.parseInt( formatMatcher.group( 1 ) ), |
... | ... |
@@ -616,6 +622,10 @@ public class Blimp extends JApplet |
616 | 622 |
if( ! (sizeMatcher = sizePattern.matcher( size.toString( ) )).find( ) ) //abort and return error if size not valid |
617 | 623 |
return false; |
618 | 624 |
|
625 |
+ //unset frame template |
|
626 |
+ curTemplate = null; |
|
627 |
+ frameEditor.setTemplate( null ); |
|
628 |
+ |
|
619 | 629 |
//scale movie |
620 | 630 |
curMovie.scale( Integer.parseInt( sizeMatcher.group( 2 ) ), |
621 | 631 |
Integer.parseInt( sizeMatcher.group( 1 ) ) ); |
... | ... |
@@ -659,6 +669,23 @@ public class Blimp extends JApplet |
659 | 669 |
while( ! actionEditScaleToSize( size.toString( ) ) ); //repeat question if answer not valid |
660 | 670 |
} |
661 | 671 |
|
672 |
+ // a template has been selected from edit menu |
|
673 |
+ private void actionEditTemplate( FrameTemplateIf template ) |
|
674 |
+ { |
|
675 |
+ // set movie size matching template |
|
676 |
+ actionEditResizeToFormat( template.getFormat() ); |
|
677 |
+ |
|
678 |
+ // set template |
|
679 |
+ curTemplate = template; |
|
680 |
+ frameEditor.setTemplate( curTemplate ); |
|
681 |
+ } |
|
682 |
+ |
|
683 |
+ // Chaosknoten template has been selected from edit menu |
|
684 |
+ private void actionEditTemplateChaosknoten( ) |
|
685 |
+ { |
|
686 |
+ actionEditTemplate( new FrameTemplateChaosknoten( ) ); |
|
687 |
+ } |
|
688 |
+ |
|
662 | 689 |
//"Edit Insert Frame" was chosen from menu / Insert Frame button was pressed |
663 | 690 |
private void actionEditInsertFrame( ) |
664 | 691 |
{ |
... | ... |
@@ -1516,7 +1543,7 @@ public class Blimp extends JApplet |
1516 | 1543 |
JOptionPane.showMessageDialog( dialogParent, |
1517 | 1544 |
"BlinkenLightsInteractiveMovieProgram\n" + |
1518 | 1545 |
String.format( "version %d.%d.%d\n", Version.Major, Version.Minor, Version.Revision ) + |
1519 |
- "Copyright (C) 2004-2018: Stefan Schuermans <stefan@blinkenarea.org>\n" + |
|
1546 |
+ "Copyright (C) 2004-2019: Stefan Schuermans <stefan@blinkenarea.org>\n" + |
|
1520 | 1547 |
"Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html\n" + |
1521 | 1548 |
"a blinkenarea.org project\n\n" + |
1522 | 1549 |
String.format( "contains BlinkenLibJava %d.%d.%d\n", |
... | ... |
@@ -2264,6 +2291,8 @@ public class Blimp extends JApplet |
2264 | 2291 |
actionEditResizeUser( ); |
2265 | 2292 |
else if( e.getSource( ) == menuEditScaleUser ) |
2266 | 2293 |
actionEditScaleUser( ); |
2294 |
+ else if( e.getSource( ) == menuEditTemplateChaosknoten ) |
|
2295 |
+ actionEditTemplateChaosknoten( ); |
|
2267 | 2296 |
else if( e.getSource( ) == menuEditInsertFrame ) |
2268 | 2297 |
actionEditInsertFrame( ); |
2269 | 2298 |
else if( e.getSource( ) == menuEditDuplicateFrame ) |
... | ... |
@@ -2763,6 +2792,12 @@ public class Blimp extends JApplet |
2763 | 2792 |
menuEditScaleKnown[i].addActionListener( this ); |
2764 | 2793 |
menuEditScale.add( menuEditScaleKnown[i] ); |
2765 | 2794 |
} |
2795 |
+ menuEditTemplate = new JMenu ( "Set Template" ); |
|
2796 |
+ menuEdit.add( menuEditTemplate ); |
|
2797 |
+ menuEditTemplate.setMnemonic( KeyEvent.VK_T ); |
|
2798 |
+ menuEditTemplateChaosknoten = new JMenuItem( "Chaosknoten" ); |
|
2799 |
+ menuEditTemplateChaosknoten.addActionListener( this ); |
|
2800 |
+ menuEditTemplate.add( menuEditTemplateChaosknoten ); |
|
2766 | 2801 |
menuEdit.addSeparator( ); |
2767 | 2802 |
menuEditInsertFrame = new JMenuItem( "Insert Frame" ); |
2768 | 2803 |
menuEditInsertFrame.setMnemonic( KeyEvent.VK_I ); |
... | ... |
@@ -3341,7 +3376,7 @@ public class Blimp extends JApplet |
3341 | 3376 |
//running as command line tool |
3342 | 3377 |
System.out.println( "BlinkenLightsInteractiveMovieProgram\n" + |
3343 | 3378 |
String.format( "Blimp (version %d.%d.%d)", Version.Major, Version.Minor, Version.Revision ) + |
3344 |
- "Copyright (C) 2004-2018: Stefan Schuermans <stefan@blinkenarea.org>\n" + |
|
3379 |
+ "Copyright (C) 2004-2019: Stefan Schuermans <stefan@blinkenarea.org>\n" + |
|
3345 | 3380 |
"Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html\n" + |
3346 | 3381 |
"a blinkenarea.org project\n" ); |
3347 | 3382 |
|
... | ... |
@@ -24,6 +24,7 @@ public class BlinkenFrameDisplay extends JLabel |
24 | 24 |
Graphics graphics = null; |
25 | 25 |
BlinkenFrameDisplayListener displayListener = null; |
26 | 26 |
BlinkenFrameDisplayInterceptor displayInterceptor = null; |
27 |
+ FrameTemplateIf template = null; |
|
27 | 28 |
|
28 | 29 |
public BlinkenFrameDisplay( ) |
29 | 30 |
{ |
... | ... |
@@ -121,6 +122,7 @@ public class BlinkenFrameDisplay extends JLabel |
121 | 122 |
//frame available |
122 | 123 |
else |
123 | 124 |
{ |
125 |
+ applyTemplate( ); |
|
124 | 126 |
//get dimensions of frame |
125 | 127 |
height = frame.getHeight( ); |
126 | 128 |
width = frame.getWidth( ); |
... | ... |
@@ -237,4 +239,17 @@ public class BlinkenFrameDisplay extends JLabel |
237 | 239 |
{ |
238 | 240 |
displayInterceptor = newDisplayInterceptor; |
239 | 241 |
} |
242 |
+ |
|
243 |
+ public void setTemplate( FrameTemplateIf template_ ) |
|
244 |
+ { |
|
245 |
+ template = template_; |
|
246 |
+ applyTemplate(); |
|
247 |
+ } |
|
248 |
+ |
|
249 |
+ protected void applyTemplate( ) |
|
250 |
+ { |
|
251 |
+ if( template != null && frame != null ) { |
|
252 |
+ template.apply( frame ); |
|
253 |
+ } |
|
254 |
+ } |
|
240 | 255 |
} |
... | ... |
@@ -105,8 +105,7 @@ public class BlinkenFrameEditor extends BlinkenFrameDisplay |
105 | 105 |
{ |
106 | 106 |
//we do not save undo information here, it was saved in blinkenFrameDisplayPressed |
107 | 107 |
frame.setColor( curY, curX, color ); |
108 |
- if( editorListener != null ) |
|
109 |
- editorListener.blinkenFrameEditorFrameChanged( ); |
|
108 |
+ internalFrameChanged( ); |
|
110 | 109 |
} |
111 | 110 |
break; |
112 | 111 |
} |
... | ... |
@@ -184,8 +183,7 @@ public class BlinkenFrameEditor extends BlinkenFrameDisplay |
184 | 183 |
{ |
185 | 184 |
undoSave( ); |
186 | 185 |
frame.setColor( curY, curX, color ); |
187 |
- if( editorListener != null ) |
|
188 |
- editorListener.blinkenFrameEditorFrameChanged( ); |
|
186 |
+ internalFrameChanged( ); |
|
189 | 187 |
} |
190 | 188 |
break; |
191 | 189 |
case toolPaste: |
... | ... |
@@ -200,8 +198,7 @@ public class BlinkenFrameEditor extends BlinkenFrameDisplay |
200 | 198 |
for( x = 0; x < x2; x++ ) |
201 | 199 |
for( c = 0; c < channels; c++ ) |
202 | 200 |
frame.setPixel( y1 + y, x1 + x, c, clipboard.getPixel( y, x, c ) ); |
203 |
- if( editorListener != null ) |
|
204 |
- editorListener.blinkenFrameEditorFrameChanged( ); |
|
201 |
+ internalFrameChanged( ); |
|
205 | 202 |
} |
206 | 203 |
break; |
207 | 204 |
} |
... | ... |
@@ -276,8 +273,7 @@ public class BlinkenFrameEditor extends BlinkenFrameDisplay |
276 | 273 |
frame.setColor( (y1 + y), (x1 + x), color ); |
277 | 274 |
} |
278 | 275 |
} |
279 |
- if( editorListener != null ) |
|
280 |
- editorListener.blinkenFrameEditorFrameChanged( ); |
|
276 |
+ internalFrameChanged( ); |
|
281 | 277 |
} |
282 | 278 |
break; |
283 | 279 |
case toolRect: |
... | ... |
@@ -298,8 +294,7 @@ public class BlinkenFrameEditor extends BlinkenFrameDisplay |
298 | 294 |
if( y1 != y2 ) |
299 | 295 |
for( x = x1 + 1; x < x2; x++ ) |
300 | 296 |
frame.setColor( y2, x, color ); |
301 |
- if( editorListener != null ) |
|
302 |
- editorListener.blinkenFrameEditorFrameChanged( ); |
|
297 |
+ internalFrameChanged( ); |
|
303 | 298 |
} |
304 | 299 |
break; |
305 | 300 |
case toolFilledRect: |
... | ... |
@@ -313,8 +308,7 @@ public class BlinkenFrameEditor extends BlinkenFrameDisplay |
313 | 308 |
for( y = y1; y <= y2; y++ ) |
314 | 309 |
for( x = x1; x <= x2; x++ ) |
315 | 310 |
frame.setColor( y, x, color ); |
316 |
- if( editorListener != null ) |
|
317 |
- editorListener.blinkenFrameEditorFrameChanged( ); |
|
311 |
+ internalFrameChanged( ); |
|
318 | 312 |
} |
319 | 313 |
break; |
320 | 314 |
case toolCircle: |
... | ... |
@@ -347,8 +341,7 @@ public class BlinkenFrameEditor extends BlinkenFrameDisplay |
347 | 341 |
else if( z2a < z3a ) { x--; z = z2; } |
348 | 342 |
else { x--; y++; z = z3; } |
349 | 343 |
} |
350 |
- if( editorListener != null ) |
|
351 |
- editorListener.blinkenFrameEditorFrameChanged( ); |
|
344 |
+ internalFrameChanged( ); |
|
352 | 345 |
} |
353 | 346 |
break; |
354 | 347 |
case toolFilledCircle: |
... | ... |
@@ -381,8 +374,7 @@ public class BlinkenFrameEditor extends BlinkenFrameDisplay |
381 | 374 |
else if( z2a < z3a ) { x--; z = z2; } |
382 | 375 |
else { x--; y++; z = z3; } |
383 | 376 |
} |
384 |
- if( editorListener != null ) |
|
385 |
- editorListener.blinkenFrameEditorFrameChanged( ); |
|
377 |
+ internalFrameChanged( ); |
|
386 | 378 |
} |
387 | 379 |
break; |
388 | 380 |
case toolCopy: |
... | ... |
@@ -772,9 +764,8 @@ public class BlinkenFrameEditor extends BlinkenFrameDisplay |
772 | 764 |
for( x = 0; x < width; x++ ) |
773 | 765 |
for( c = 0; c < channels; c++ ) |
774 | 766 |
frame.setPixel( y, x, c, (byte)(maxval - ((int)frame.getPixel( y, x, c ) & 0xFF)) ); |
767 |
+ internalFrameChanged( ); |
|
775 | 768 |
updateDisplay( ); |
776 |
- if( editorListener != null ) |
|
777 |
- editorListener.blinkenFrameEditorFrameChanged( ); |
|
778 | 769 |
} |
779 | 770 |
} |
780 | 771 |
} |
... | ... |
@@ -824,9 +815,8 @@ public class BlinkenFrameEditor extends BlinkenFrameDisplay |
824 | 815 |
for( x = 0; x < wi; x++ ) |
825 | 816 |
for( c = 0; c < channels; c++ ) |
826 | 817 |
frame.setPixel( y1 + y, x1 + x, c, buffer.getPixel( y, x, c ) ); |
818 |
+ internalFrameChanged( ); |
|
827 | 819 |
updateDisplay( ); |
828 |
- if( editorListener != null ) |
|
829 |
- editorListener.blinkenFrameEditorFrameChanged( ); |
|
830 | 820 |
} |
831 | 821 |
} |
832 | 822 |
} |
... | ... |
@@ -891,9 +881,8 @@ public class BlinkenFrameEditor extends BlinkenFrameDisplay |
891 | 881 |
frame.setPixel( height / 2, width - 1 - x, c, b1 ); |
892 | 882 |
frame.setPixel( height / 2, x, c, b2 ); |
893 | 883 |
} |
884 |
+ internalFrameChanged( ); |
|
894 | 885 |
updateDisplay( ); |
895 |
- if( editorListener != null ) |
|
896 |
- editorListener.blinkenFrameEditorFrameChanged( ); |
|
897 | 886 |
} |
898 | 887 |
} |
899 | 888 |
} |
... | ... |
@@ -943,9 +932,8 @@ public class BlinkenFrameEditor extends BlinkenFrameDisplay |
943 | 932 |
for( x = 0; x < wi; x++ ) |
944 | 933 |
for( c = 0; c < channels; c++ ) |
945 | 934 |
frame.setPixel( y1 + y, x1 + x, c, buffer.getPixel( y, x, c ) ); |
935 |
+ internalFrameChanged( ); |
|
946 | 936 |
updateDisplay( ); |
947 |
- if( editorListener != null ) |
|
948 |
- editorListener.blinkenFrameEditorFrameChanged( ); |
|
949 | 937 |
} |
950 | 938 |
} |
951 | 939 |
} |
... | ... |
@@ -991,9 +979,8 @@ public class BlinkenFrameEditor extends BlinkenFrameDisplay |
991 | 979 |
frame.setPixel( height - 1 - y, x, c, b1 ); |
992 | 980 |
frame.setPixel( y, x, c, b2 ); |
993 | 981 |
} |
982 |
+ internalFrameChanged( ); |
|
994 | 983 |
updateDisplay( ); |
995 |
- if( editorListener != null ) |
|
996 |
- editorListener.blinkenFrameEditorFrameChanged( ); |
|
997 | 984 |
} |
998 | 985 |
} |
999 | 986 |
} |
... | ... |
@@ -1039,9 +1026,8 @@ public class BlinkenFrameEditor extends BlinkenFrameDisplay |
1039 | 1026 |
frame.setPixel( y, width - 1 - x, c, b1 ); |
1040 | 1027 |
frame.setPixel( y, x, c, b2 ); |
1041 | 1028 |
} |
1029 |
+ internalFrameChanged( ); |
|
1042 | 1030 |
updateDisplay( ); |
1043 |
- if( editorListener != null ) |
|
1044 |
- editorListener.blinkenFrameEditorFrameChanged( ); |
|
1045 | 1031 |
} |
1046 | 1032 |
} |
1047 | 1033 |
} |
... | ... |
@@ -1091,9 +1077,8 @@ public class BlinkenFrameEditor extends BlinkenFrameDisplay |
1091 | 1077 |
for( x = 0; x < wi; x++ ) |
1092 | 1078 |
for( c = 0; c < channels; c++ ) |
1093 | 1079 |
frame.setPixel( y1 + y, x1 + x, c, buffer.getPixel( y, x, c ) ); |
1080 |
+ internalFrameChanged( ); |
|
1094 | 1081 |
updateDisplay( ); |
1095 |
- if( editorListener != null ) |
|
1096 |
- editorListener.blinkenFrameEditorFrameChanged( ); |
|
1097 | 1082 |
} |
1098 | 1083 |
} |
1099 | 1084 |
} |
... | ... |
@@ -1143,9 +1128,8 @@ public class BlinkenFrameEditor extends BlinkenFrameDisplay |
1143 | 1128 |
for( x = 0; x < wi; x++ ) |
1144 | 1129 |
for( c = 0; c < channels; c++ ) |
1145 | 1130 |
frame.setPixel( y1 + y, x1 + x, c, buffer.getPixel( y, x, c ) ); |
1131 |
+ internalFrameChanged( ); |
|
1146 | 1132 |
updateDisplay( ); |
1147 |
- if( editorListener != null ) |
|
1148 |
- editorListener.blinkenFrameEditorFrameChanged( ); |
|
1149 | 1133 |
} |
1150 | 1134 |
} |
1151 | 1135 |
} |
... | ... |
@@ -1188,9 +1172,8 @@ public class BlinkenFrameEditor extends BlinkenFrameDisplay |
1188 | 1172 |
frame.setPixel( y, x - 1, c, frame.getPixel( y, x, c ) ); |
1189 | 1173 |
frame.setPixel( y, width - 1, c, b ); |
1190 | 1174 |
} |
1175 |
+ internalFrameChanged( ); |
|
1191 | 1176 |
updateDisplay( ); |
1192 |
- if( editorListener != null ) |
|
1193 |
- editorListener.blinkenFrameEditorFrameChanged( ); |
|
1194 | 1177 |
} |
1195 | 1178 |
} |
1196 | 1179 |
} |
... | ... |
@@ -1233,9 +1216,8 @@ public class BlinkenFrameEditor extends BlinkenFrameDisplay |
1233 | 1216 |
frame.setPixel( y, x + 1, c, frame.getPixel( y, x, c ) ); |
1234 | 1217 |
frame.setPixel( y, 0, c, b ); |
1235 | 1218 |
} |
1219 |
+ internalFrameChanged( ); |
|
1236 | 1220 |
updateDisplay( ); |
1237 |
- if( editorListener != null ) |
|
1238 |
- editorListener.blinkenFrameEditorFrameChanged( ); |
|
1239 | 1221 |
} |
1240 | 1222 |
} |
1241 | 1223 |
} |
... | ... |
@@ -1278,9 +1260,8 @@ public class BlinkenFrameEditor extends BlinkenFrameDisplay |
1278 | 1260 |
frame.setPixel( y - 1, x, c, frame.getPixel( y, x, c ) ); |
1279 | 1261 |
frame.setPixel( height - 1, x, c, b ); |
1280 | 1262 |
} |
1263 |
+ internalFrameChanged( ); |
|
1281 | 1264 |
updateDisplay( ); |
1282 |
- if( editorListener != null ) |
|
1283 |
- editorListener.blinkenFrameEditorFrameChanged( ); |
|
1284 | 1265 |
} |
1285 | 1266 |
} |
1286 | 1267 |
} |
... | ... |
@@ -1323,9 +1304,8 @@ public class BlinkenFrameEditor extends BlinkenFrameDisplay |
1323 | 1304 |
frame.setPixel( y + 1, x, c, frame.getPixel( y, x, c ) ); |
1324 | 1305 |
frame.setPixel( 0, x, c, b ); |
1325 | 1306 |
} |
1307 |
+ internalFrameChanged( ); |
|
1326 | 1308 |
updateDisplay( ); |
1327 |
- if( editorListener != null ) |
|
1328 |
- editorListener.blinkenFrameEditorFrameChanged( ); |
|
1329 | 1309 |
} |
1330 | 1310 |
} |
1331 | 1311 |
} |
... | ... |
@@ -1353,9 +1333,8 @@ public class BlinkenFrameEditor extends BlinkenFrameDisplay |
1353 | 1333 |
for( x = 0; x < width; x++ ) |
1354 | 1334 |
for( c = 0; c < channels; c++ ) |
1355 | 1335 |
frame.setPixel( y, x, c, info.getPixel( y, x, c ) ); |
1336 |
+ internalFrameChanged( ); |
|
1356 | 1337 |
updateDisplay( ); |
1357 |
- if( editorListener != null ) |
|
1358 |
- editorListener.blinkenFrameEditorFrameChanged( ); |
|
1359 | 1338 |
|
1360 | 1339 |
//tell listener if undo or redo possible at the moment |
1361 | 1340 |
if( editorListener != null ) |
... | ... |
@@ -1386,9 +1365,8 @@ public class BlinkenFrameEditor extends BlinkenFrameDisplay |
1386 | 1365 |
for( x = 0; x < width; x++ ) |
1387 | 1366 |
for( c = 0; c < channels; c++ ) |
1388 | 1367 |
frame.setPixel( y, x, c, info.getPixel( y, x, c ) ); |
1368 |
+ internalFrameChanged( ); |
|
1389 | 1369 |
updateDisplay( ); |
1390 |
- if( editorListener != null ) |
|
1391 |
- editorListener.blinkenFrameEditorFrameChanged( ); |
|
1392 | 1370 |
|
1393 | 1371 |
//tell listener if undo or redo possible at the moment |
1394 | 1372 |
if( editorListener != null ) |
... | ... |
@@ -1458,4 +1436,12 @@ public class BlinkenFrameEditor extends BlinkenFrameDisplay |
1458 | 1436 |
if( editorListener != null ) |
1459 | 1437 |
editorListener.blinkenFrameEditorInfo( "-" ); |
1460 | 1438 |
} |
1439 |
+ |
|
1440 |
+ // internal callback for actions to be performed after change to frame |
|
1441 |
+ private void internalFrameChanged( ) |
|
1442 |
+ { |
|
1443 |
+ applyTemplate( ); |
|
1444 |
+ if( editorListener != null ) |
|
1445 |
+ editorListener.blinkenFrameEditorFrameChanged( ); |
|
1446 |
+ } |
|
1461 | 1447 |
} |
... | ... |
@@ -0,0 +1,415 @@ |
1 |
+/* BlinkenLightsInteractiveMovieProgram |
|
2 |
+ * Copyright (C) 2019: Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ * Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ * a blinkenarea.org project |
|
5 |
+ */ |
|
6 |
+ |
|
7 |
+package org.blinkenarea.Blimp; |
|
8 |
+ |
|
9 |
+import org.blinkenarea.BlinkenLib.*; |
|
10 |
+ |
|
11 |
+public class FrameTemplateChaosknoten extends FrameTemplatePixelLists |
|
12 |
+{ |
|
13 |
+ public FrameTemplateChaosknoten( ) |
|
14 |
+ { |
|
15 |
+ // format: 66x51-3/256 |
|
16 |
+ super( 51, 66, 3, 255 ); |
|
17 |
+ |
|
18 |
+ // dark blue background |
|
19 |
+ byte def[] = new byte [3]; |
|
20 |
+ def[0] = (byte)0; |
|
21 |
+ def[1] = (byte)0; |
|
22 |
+ def[2] = (byte)128; |
|
23 |
+ setDefColor( def ); |
|
24 |
+ |
|
25 |
+ // fixed pixels |
|
26 |
+ FixedPixel fixed[] = new FixedPixel [126]; |
|
27 |
+ fixed[0] = new FixedPixel( 6, 12, 2, (byte)0 ); |
|
28 |
+ fixed[1] = new FixedPixel( 6, 11, 2, (byte)0 ); |
|
29 |
+ fixed[2] = new FixedPixel( 6, 13, 2, (byte)0 ); |
|
30 |
+ fixed[3] = new FixedPixel( 6, 18, 2, (byte)0 ); |
|
31 |
+ fixed[4] = new FixedPixel( 6, 17, 2, (byte)0 ); |
|
32 |
+ fixed[5] = new FixedPixel( 6, 19, 2, (byte)0 ); |
|
33 |
+ fixed[6] = new FixedPixel( 6, 24, 2, (byte)0 ); |
|
34 |
+ fixed[7] = new FixedPixel( 6, 23, 2, (byte)0 ); |
|
35 |
+ fixed[8] = new FixedPixel( 6, 25, 2, (byte)0 ); |
|
36 |
+ fixed[9] = new FixedPixel( 7, 6, 2, (byte)0 ); |
|
37 |
+ fixed[10] = new FixedPixel( 8, 5, 2, (byte)0 ); |
|
38 |
+ fixed[11] = new FixedPixel( 6, 7, 2, (byte)0 ); |
|
39 |
+ fixed[12] = new FixedPixel( 7, 30, 2, (byte)0 ); |
|
40 |
+ fixed[13] = new FixedPixel( 6, 29, 2, (byte)0 ); |
|
41 |
+ fixed[14] = new FixedPixel( 8, 31, 2, (byte)0 ); |
|
42 |
+ fixed[15] = new FixedPixel( 10, 17, 2, (byte)0 ); |
|
43 |
+ fixed[16] = new FixedPixel( 9, 16, 2, (byte)0 ); |
|
44 |
+ fixed[17] = new FixedPixel( 11, 18, 2, (byte)0 ); |
|
45 |
+ fixed[18] = new FixedPixel( 10, 24, 2, (byte)0 ); |
|
46 |
+ fixed[19] = new FixedPixel( 9, 23, 2, (byte)0 ); |
|
47 |
+ fixed[20] = new FixedPixel( 11, 25, 2, (byte)0 ); |
|
48 |
+ fixed[21] = new FixedPixel( 13, 5, 2, (byte)0 ); |
|
49 |
+ fixed[22] = new FixedPixel( 12, 5, 2, (byte)0 ); |
|
50 |
+ fixed[23] = new FixedPixel( 14, 5, 2, (byte)0 ); |
|
51 |
+ fixed[24] = new FixedPixel( 14, 21, 2, (byte)0 ); |
|
52 |
+ fixed[25] = new FixedPixel( 14, 20, 2, (byte)0 ); |
|
53 |
+ fixed[26] = new FixedPixel( 14, 22, 2, (byte)0 ); |
|
54 |
+ fixed[27] = new FixedPixel( 14, 27, 2, (byte)0 ); |
|
55 |
+ fixed[28] = new FixedPixel( 14, 26, 2, (byte)0 ); |
|
56 |
+ fixed[29] = new FixedPixel( 14, 28, 2, (byte)0 ); |
|
57 |
+ fixed[30] = new FixedPixel( 14, 33, 2, (byte)0 ); |
|
58 |
+ fixed[31] = new FixedPixel( 14, 32, 2, (byte)0 ); |
|
59 |
+ fixed[32] = new FixedPixel( 14, 34, 2, (byte)0 ); |
|
60 |
+ fixed[33] = new FixedPixel( 14, 39, 2, (byte)0 ); |
|
61 |
+ fixed[34] = new FixedPixel( 14, 38, 2, (byte)0 ); |
|
62 |
+ fixed[35] = new FixedPixel( 14, 40, 2, (byte)0 ); |
|
63 |
+ fixed[36] = new FixedPixel( 14, 47, 2, (byte)0 ); |
|
64 |
+ fixed[37] = new FixedPixel( 13, 46, 2, (byte)0 ); |
|
65 |
+ fixed[38] = new FixedPixel( 15, 48, 2, (byte)0 ); |
|
66 |
+ fixed[39] = new FixedPixel( 14, 51, 2, (byte)0 ); |
|
67 |
+ fixed[40] = new FixedPixel( 13, 50, 2, (byte)0 ); |
|
68 |
+ fixed[41] = new FixedPixel( 15, 52, 2, (byte)0 ); |
|
69 |
+ fixed[42] = new FixedPixel( 15, 44, 2, (byte)0 ); |
|
70 |
+ fixed[43] = new FixedPixel( 14, 43, 2, (byte)0 ); |
|
71 |
+ fixed[44] = new FixedPixel( 16, 45, 2, (byte)0 ); |
|
72 |
+ fixed[45] = new FixedPixel( 18, 21, 2, (byte)0 ); |
|
73 |
+ fixed[46] = new FixedPixel( 18, 20, 2, (byte)0 ); |
|
74 |
+ fixed[47] = new FixedPixel( 18, 22, 2, (byte)0 ); |
|
75 |
+ fixed[48] = new FixedPixel( 18, 27, 2, (byte)0 ); |
|
76 |
+ fixed[49] = new FixedPixel( 18, 26, 2, (byte)0 ); |
|
77 |
+ fixed[50] = new FixedPixel( 18, 28, 2, (byte)0 ); |
|
78 |
+ fixed[51] = new FixedPixel( 18, 33, 2, (byte)0 ); |
|
79 |
+ fixed[52] = new FixedPixel( 18, 32, 2, (byte)0 ); |
|
80 |
+ fixed[53] = new FixedPixel( 18, 34, 2, (byte)0 ); |
|
81 |
+ fixed[54] = new FixedPixel( 18, 39, 2, (byte)0 ); |
|
82 |
+ fixed[55] = new FixedPixel( 18, 38, 2, (byte)0 ); |
|
83 |
+ fixed[56] = new FixedPixel( 18, 40, 2, (byte)0 ); |
|
84 |
+ fixed[57] = new FixedPixel( 19, 5, 2, (byte)0 ); |
|
85 |
+ fixed[58] = new FixedPixel( 18, 5, 2, (byte)0 ); |
|
86 |
+ fixed[59] = new FixedPixel( 20, 5, 2, (byte)0 ); |
|
87 |
+ fixed[60] = new FixedPixel( 19, 45, 2, (byte)0 ); |
|
88 |
+ fixed[61] = new FixedPixel( 19, 44, 2, (byte)0 ); |
|
89 |
+ fixed[62] = new FixedPixel( 19, 46, 2, (byte)0 ); |
|
90 |
+ fixed[63] = new FixedPixel( 19, 50, 2, (byte)0 ); |
|
91 |
+ fixed[64] = new FixedPixel( 20, 49, 2, (byte)0 ); |
|
92 |
+ fixed[65] = new FixedPixel( 18, 51, 2, (byte)0 ); |
|
93 |
+ fixed[66] = new FixedPixel( 20, 53, 2, (byte)0 ); |
|
94 |
+ fixed[67] = new FixedPixel( 21, 52, 2, (byte)0 ); |
|
95 |
+ fixed[68] = new FixedPixel( 19, 54, 2, (byte)0 ); |
|
96 |
+ fixed[69] = new FixedPixel( 22, 17, 2, (byte)0 ); |
|
97 |
+ fixed[70] = new FixedPixel( 23, 16, 2, (byte)0 ); |
|
98 |
+ fixed[71] = new FixedPixel( 21, 18, 2, (byte)0 ); |
|
99 |
+ fixed[72] = new FixedPixel( 22, 24, 2, (byte)0 ); |
|
100 |
+ fixed[73] = new FixedPixel( 23, 23, 2, (byte)0 ); |
|
101 |
+ fixed[74] = new FixedPixel( 21, 25, 2, (byte)0 ); |
|
102 |
+ fixed[75] = new FixedPixel( 22, 45, 2, (byte)0 ); |
|
103 |
+ fixed[76] = new FixedPixel( 22, 44, 2, (byte)0 ); |
|
104 |
+ fixed[77] = new FixedPixel( 22, 46, 2, (byte)0 ); |
|
105 |
+ fixed[78] = new FixedPixel( 23, 54, 2, (byte)0 ); |
|
106 |
+ fixed[79] = new FixedPixel( 24, 53, 2, (byte)0 ); |
|
107 |
+ fixed[80] = new FixedPixel( 22, 55, 2, (byte)0 ); |
|
108 |
+ fixed[81] = new FixedPixel( 24, 49, 2, (byte)0 ); |
|
109 |
+ fixed[82] = new FixedPixel( 25, 48, 2, (byte)0 ); |
|
110 |
+ fixed[83] = new FixedPixel( 23, 50, 2, (byte)0 ); |
|
111 |
+ fixed[84] = new FixedPixel( 25, 6, 2, (byte)0 ); |
|
112 |
+ fixed[85] = new FixedPixel( 24, 5, 2, (byte)0 ); |
|
113 |
+ fixed[86] = new FixedPixel( 26, 7, 2, (byte)0 ); |
|
114 |
+ fixed[87] = new FixedPixel( 25, 30, 2, (byte)0 ); |
|
115 |
+ fixed[88] = new FixedPixel( 26, 29, 2, (byte)0 ); |
|
116 |
+ fixed[89] = new FixedPixel( 24, 31, 2, (byte)0 ); |
|
117 |
+ fixed[90] = new FixedPixel( 26, 12, 2, (byte)0 ); |
|
118 |
+ fixed[91] = new FixedPixel( 26, 11, 2, (byte)0 ); |
|
119 |
+ fixed[92] = new FixedPixel( 26, 13, 2, (byte)0 ); |
|
120 |
+ fixed[93] = new FixedPixel( 26, 18, 2, (byte)0 ); |
|
121 |
+ fixed[94] = new FixedPixel( 26, 17, 2, (byte)0 ); |
|
122 |
+ fixed[95] = new FixedPixel( 26, 19, 2, (byte)0 ); |
|
123 |
+ fixed[96] = new FixedPixel( 26, 24, 2, (byte)0 ); |
|
124 |
+ fixed[97] = new FixedPixel( 26, 23, 2, (byte)0 ); |
|
125 |
+ fixed[98] = new FixedPixel( 26, 25, 2, (byte)0 ); |
|
126 |
+ fixed[99] = new FixedPixel( 27, 50, 2, (byte)0 ); |
|
127 |
+ fixed[100] = new FixedPixel( 28, 49, 2, (byte)0 ); |
|
128 |
+ fixed[101] = new FixedPixel( 26, 51, 2, (byte)0 ); |
|
129 |
+ fixed[102] = new FixedPixel( 29, 54, 2, (byte)0 ); |
|
130 |
+ fixed[103] = new FixedPixel( 28, 53, 2, (byte)0 ); |
|
131 |
+ fixed[104] = new FixedPixel( 30, 55, 2, (byte)0 ); |
|
132 |
+ fixed[105] = new FixedPixel( 31, 60, 2, (byte)0 ); |
|
133 |
+ fixed[106] = new FixedPixel( 31, 59, 2, (byte)0 ); |
|
134 |
+ fixed[107] = new FixedPixel( 31, 61, 2, (byte)0 ); |
|
135 |
+ fixed[108] = new FixedPixel( 32, 51, 2, (byte)0 ); |
|
136 |
+ fixed[109] = new FixedPixel( 31, 51, 2, (byte)0 ); |
|
137 |
+ fixed[110] = new FixedPixel( 33, 51, 2, (byte)0 ); |
|
138 |
+ fixed[111] = new FixedPixel( 33, 47, 2, (byte)0 ); |
|
139 |
+ fixed[112] = new FixedPixel( 34, 46, 2, (byte)0 ); |
|
140 |
+ fixed[113] = new FixedPixel( 32, 48, 2, (byte)0 ); |
|
141 |
+ fixed[114] = new FixedPixel( 35, 55, 2, (byte)0 ); |
|
142 |
+ fixed[115] = new FixedPixel( 34, 55, 2, (byte)0 ); |
|
143 |
+ fixed[116] = new FixedPixel( 36, 55, 2, (byte)0 ); |
|
144 |
+ fixed[117] = new FixedPixel( 38, 51, 2, (byte)0 ); |
|
145 |
+ fixed[118] = new FixedPixel( 37, 51, 2, (byte)0 ); |
|
146 |
+ fixed[119] = new FixedPixel( 39, 51, 2, (byte)0 ); |
|
147 |
+ fixed[120] = new FixedPixel( 39, 46, 2, (byte)0 ); |
|
148 |
+ fixed[121] = new FixedPixel( 39, 45, 2, (byte)0 ); |
|
149 |
+ fixed[122] = new FixedPixel( 39, 47, 2, (byte)0 ); |
|
150 |
+ fixed[123] = new FixedPixel( 44, 52, 2, (byte)0 ); |
|
151 |
+ fixed[124] = new FixedPixel( 43, 51, 2, (byte)0 ); |
|
152 |
+ fixed[125] = new FixedPixel( 45, 53, 2, (byte)0 ); |
|
153 |
+ setFixed( fixed ); |
|
154 |
+ |
|
155 |
+ // content pixels |
|
156 |
+ ContentPixel content[] = new ContentPixel [42]; |
|
157 |
+ content[0] = new ContentPixel( 6, 12, 1 ); |
|
158 |
+ content[1] = new ContentPixel( 6, 18, 1 ); |
|
159 |
+ content[2] = new ContentPixel( 6, 24, 1 ); |
|
160 |
+ content[3] = new ContentPixel( 7, 6, 1 ); |
|
161 |
+ content[4] = new ContentPixel( 7, 30, 1 ); |
|
162 |
+ content[5] = new ContentPixel( 10, 17, 1 ); |
|
163 |
+ content[6] = new ContentPixel( 10, 24, 1 ); |
|
164 |
+ content[7] = new ContentPixel( 13, 5, 1 ); |
|
165 |
+ content[8] = new ContentPixel( 14, 21, 1 ); |
|
166 |
+ content[9] = new ContentPixel( 14, 27, 1 ); |
|
167 |
+ content[10] = new ContentPixel( 14, 33, 1 ); |
|
168 |
+ content[11] = new ContentPixel( 14, 39, 1 ); |
|
169 |
+ content[12] = new ContentPixel( 14, 47, 1 ); |
|
170 |
+ content[13] = new ContentPixel( 14, 51, 1 ); |
|
171 |
+ content[14] = new ContentPixel( 15, 44, 1 ); |
|
172 |
+ content[15] = new ContentPixel( 18, 21, 1 ); |
|
173 |
+ content[16] = new ContentPixel( 18, 27, 1 ); |
|
174 |
+ content[17] = new ContentPixel( 18, 33, 1 ); |
|
175 |
+ content[18] = new ContentPixel( 18, 39, 1 ); |
|
176 |
+ content[19] = new ContentPixel( 19, 5, 1 ); |
|
177 |
+ content[20] = new ContentPixel( 19, 45, 1 ); |
|
178 |
+ content[21] = new ContentPixel( 19, 50, 1 ); |
|
179 |
+ content[22] = new ContentPixel( 20, 53, 1 ); |
|
180 |
+ content[23] = new ContentPixel( 22, 17, 1 ); |
|
181 |
+ content[24] = new ContentPixel( 22, 24, 1 ); |
|
182 |
+ content[25] = new ContentPixel( 22, 45, 1 ); |
|
183 |
+ content[26] = new ContentPixel( 23, 54, 1 ); |
|
184 |
+ content[27] = new ContentPixel( 24, 49, 1 ); |
|
185 |
+ content[28] = new ContentPixel( 25, 6, 1 ); |
|
186 |
+ content[29] = new ContentPixel( 25, 30, 1 ); |
|
187 |
+ content[30] = new ContentPixel( 26, 12, 1 ); |
|
188 |
+ content[31] = new ContentPixel( 26, 18, 1 ); |
|
189 |
+ content[32] = new ContentPixel( 26, 24, 1 ); |
|
190 |
+ content[33] = new ContentPixel( 27, 50, 1 ); |
|
191 |
+ content[34] = new ContentPixel( 29, 54, 1 ); |
|
192 |
+ content[35] = new ContentPixel( 31, 60, 1 ); |
|
193 |
+ content[36] = new ContentPixel( 32, 51, 1 ); |
|
194 |
+ content[37] = new ContentPixel( 33, 47, 1 ); |
|
195 |
+ content[38] = new ContentPixel( 35, 55, 1 ); |
|
196 |
+ content[39] = new ContentPixel( 38, 51, 1 ); |
|
197 |
+ content[40] = new ContentPixel( 39, 46, 1 ); |
|
198 |
+ content[41] = new ContentPixel( 44, 52, 1 ); |
|
199 |
+ setContent( content ); |
|
200 |
+ |
|
201 |
+ // copy pixels |
|
202 |
+ CopyPixel copies[] = new CopyPixel [210]; |
|
203 |
+ copies[0] = new CopyPixel( 6, 12, 0, 0 ); |
|
204 |
+ copies[1] = new CopyPixel( 6, 11, 0, 0 ); |
|
205 |
+ copies[2] = new CopyPixel( 6, 11, 1, 0 ); |
|
206 |
+ copies[3] = new CopyPixel( 6, 13, 0, 0 ); |
|
207 |
+ copies[4] = new CopyPixel( 6, 13, 1, 0 ); |
|
208 |
+ copies[5] = new CopyPixel( 6, 18, 0, 1 ); |
|
209 |
+ copies[6] = new CopyPixel( 6, 17, 0, 1 ); |
|
210 |
+ copies[7] = new CopyPixel( 6, 17, 1, 1 ); |
|
211 |
+ copies[8] = new CopyPixel( 6, 19, 0, 1 ); |
|
212 |
+ copies[9] = new CopyPixel( 6, 19, 1, 1 ); |
|
213 |
+ copies[10] = new CopyPixel( 6, 24, 0, 2 ); |
|
214 |
+ copies[11] = new CopyPixel( 6, 23, 0, 2 ); |
|
215 |
+ copies[12] = new CopyPixel( 6, 23, 1, 2 ); |
|
216 |
+ copies[13] = new CopyPixel( 6, 25, 0, 2 ); |
|
217 |
+ copies[14] = new CopyPixel( 6, 25, 1, 2 ); |
|
218 |
+ copies[15] = new CopyPixel( 7, 6, 0, 3 ); |
|
219 |
+ copies[16] = new CopyPixel( 8, 5, 0, 3 ); |
|
220 |
+ copies[17] = new CopyPixel( 8, 5, 1, 3 ); |
|
221 |
+ copies[18] = new CopyPixel( 6, 7, 0, 3 ); |
|
222 |
+ copies[19] = new CopyPixel( 6, 7, 1, 3 ); |
|
223 |
+ copies[20] = new CopyPixel( 7, 30, 0, 4 ); |
|
224 |
+ copies[21] = new CopyPixel( 6, 29, 0, 4 ); |
|
225 |
+ copies[22] = new CopyPixel( 6, 29, 1, 4 ); |
|
226 |
+ copies[23] = new CopyPixel( 8, 31, 0, 4 ); |
|
227 |
+ copies[24] = new CopyPixel( 8, 31, 1, 4 ); |
|
228 |
+ copies[25] = new CopyPixel( 10, 17, 0, 5 ); |
|
229 |
+ copies[26] = new CopyPixel( 9, 16, 0, 5 ); |
|
230 |
+ copies[27] = new CopyPixel( 9, 16, 1, 5 ); |
|
231 |
+ copies[28] = new CopyPixel( 11, 18, 0, 5 ); |
|
232 |
+ copies[29] = new CopyPixel( 11, 18, 1, 5 ); |
|
233 |
+ copies[30] = new CopyPixel( 10, 24, 0, 6 ); |
|
234 |
+ copies[31] = new CopyPixel( 9, 23, 0, 6 ); |
|
235 |
+ copies[32] = new CopyPixel( 9, 23, 1, 6 ); |
|
236 |
+ copies[33] = new CopyPixel( 11, 25, 0, 6 ); |
|
237 |
+ copies[34] = new CopyPixel( 11, 25, 1, 6 ); |
|
238 |
+ copies[35] = new CopyPixel( 13, 5, 0, 7 ); |
|
239 |
+ copies[36] = new CopyPixel( 12, 5, 0, 7 ); |
|
240 |
+ copies[37] = new CopyPixel( 12, 5, 1, 7 ); |
|
241 |
+ copies[38] = new CopyPixel( 14, 5, 0, 7 ); |
|
242 |
+ copies[39] = new CopyPixel( 14, 5, 1, 7 ); |
|
243 |
+ copies[40] = new CopyPixel( 14, 21, 0, 8 ); |
|
244 |
+ copies[41] = new CopyPixel( 14, 20, 0, 8 ); |
|
245 |
+ copies[42] = new CopyPixel( 14, 20, 1, 8 ); |
|
246 |
+ copies[43] = new CopyPixel( 14, 22, 0, 8 ); |
|
247 |
+ copies[44] = new CopyPixel( 14, 22, 1, 8 ); |
|
248 |
+ copies[45] = new CopyPixel( 14, 27, 0, 9 ); |
|
249 |
+ copies[46] = new CopyPixel( 14, 26, 0, 9 ); |
|
250 |
+ copies[47] = new CopyPixel( 14, 26, 1, 9 ); |
|
251 |
+ copies[48] = new CopyPixel( 14, 28, 0, 9 ); |
|
252 |
+ copies[49] = new CopyPixel( 14, 28, 1, 9 ); |
|
253 |
+ copies[50] = new CopyPixel( 14, 33, 0, 10 ); |
|
254 |
+ copies[51] = new CopyPixel( 14, 32, 0, 10 ); |
|
255 |
+ copies[52] = new CopyPixel( 14, 32, 1, 10 ); |
|
256 |
+ copies[53] = new CopyPixel( 14, 34, 0, 10 ); |
|
257 |
+ copies[54] = new CopyPixel( 14, 34, 1, 10 ); |
|
258 |
+ copies[55] = new CopyPixel( 14, 39, 0, 11 ); |
|
259 |
+ copies[56] = new CopyPixel( 14, 38, 0, 11 ); |
|
260 |
+ copies[57] = new CopyPixel( 14, 38, 1, 11 ); |
|
261 |
+ copies[58] = new CopyPixel( 14, 40, 0, 11 ); |
|
262 |
+ copies[59] = new CopyPixel( 14, 40, 1, 11 ); |
|
263 |
+ copies[60] = new CopyPixel( 14, 47, 0, 12 ); |
|
264 |
+ copies[61] = new CopyPixel( 13, 46, 0, 12 ); |
|
265 |
+ copies[62] = new CopyPixel( 13, 46, 1, 12 ); |
|
266 |
+ copies[63] = new CopyPixel( 15, 48, 0, 12 ); |
|
267 |
+ copies[64] = new CopyPixel( 15, 48, 1, 12 ); |
|
268 |
+ copies[65] = new CopyPixel( 14, 51, 0, 13 ); |
|
269 |
+ copies[66] = new CopyPixel( 13, 50, 0, 13 ); |
|
270 |
+ copies[67] = new CopyPixel( 13, 50, 1, 13 ); |
|
271 |
+ copies[68] = new CopyPixel( 15, 52, 0, 13 ); |
|
272 |
+ copies[69] = new CopyPixel( 15, 52, 1, 13 ); |
|
273 |
+ copies[70] = new CopyPixel( 15, 44, 0, 14 ); |
|
274 |
+ copies[71] = new CopyPixel( 14, 43, 0, 14 ); |
|
275 |
+ copies[72] = new CopyPixel( 14, 43, 1, 14 ); |
|
276 |
+ copies[73] = new CopyPixel( 16, 45, 0, 14 ); |
|
277 |
+ copies[74] = new CopyPixel( 16, 45, 1, 14 ); |
|
278 |
+ copies[75] = new CopyPixel( 18, 21, 0, 15 ); |
|
279 |
+ copies[76] = new CopyPixel( 18, 20, 0, 15 ); |
|
280 |
+ copies[77] = new CopyPixel( 18, 20, 1, 15 ); |
|
281 |
+ copies[78] = new CopyPixel( 18, 22, 0, 15 ); |
|
282 |
+ copies[79] = new CopyPixel( 18, 22, 1, 15 ); |
|
283 |
+ copies[80] = new CopyPixel( 18, 27, 0, 16 ); |
|
284 |
+ copies[81] = new CopyPixel( 18, 26, 0, 16 ); |
|
285 |
+ copies[82] = new CopyPixel( 18, 26, 1, 16 ); |
|
286 |
+ copies[83] = new CopyPixel( 18, 28, 0, 16 ); |
|
287 |
+ copies[84] = new CopyPixel( 18, 28, 1, 16 ); |
|
288 |
+ copies[85] = new CopyPixel( 18, 33, 0, 17 ); |
|
289 |
+ copies[86] = new CopyPixel( 18, 32, 0, 17 ); |
|
290 |
+ copies[87] = new CopyPixel( 18, 32, 1, 17 ); |
|
291 |
+ copies[88] = new CopyPixel( 18, 34, 0, 17 ); |
|
292 |
+ copies[89] = new CopyPixel( 18, 34, 1, 17 ); |
|
293 |
+ copies[90] = new CopyPixel( 18, 39, 0, 18 ); |
|
294 |
+ copies[91] = new CopyPixel( 18, 38, 0, 18 ); |
|
295 |
+ copies[92] = new CopyPixel( 18, 38, 1, 18 ); |
|
296 |
+ copies[93] = new CopyPixel( 18, 40, 0, 18 ); |
|
297 |
+ copies[94] = new CopyPixel( 18, 40, 1, 18 ); |
|
298 |
+ copies[95] = new CopyPixel( 19, 5, 0, 19 ); |
|
299 |
+ copies[96] = new CopyPixel( 18, 5, 0, 19 ); |
|
300 |
+ copies[97] = new CopyPixel( 18, 5, 1, 19 ); |
|
301 |
+ copies[98] = new CopyPixel( 20, 5, 0, 19 ); |
|
302 |
+ copies[99] = new CopyPixel( 20, 5, 1, 19 ); |
|
303 |
+ copies[100] = new CopyPixel( 19, 45, 0, 20 ); |
|
304 |
+ copies[101] = new CopyPixel( 19, 44, 0, 20 ); |
|
305 |
+ copies[102] = new CopyPixel( 19, 44, 1, 20 ); |
|
306 |
+ copies[103] = new CopyPixel( 19, 46, 0, 20 ); |
|
307 |
+ copies[104] = new CopyPixel( 19, 46, 1, 20 ); |
|
308 |
+ copies[105] = new CopyPixel( 19, 50, 0, 21 ); |
|
309 |
+ copies[106] = new CopyPixel( 20, 49, 0, 21 ); |
|
310 |
+ copies[107] = new CopyPixel( 20, 49, 1, 21 ); |
|
311 |
+ copies[108] = new CopyPixel( 18, 51, 0, 21 ); |
|
312 |
+ copies[109] = new CopyPixel( 18, 51, 1, 21 ); |
|
313 |
+ copies[110] = new CopyPixel( 20, 53, 0, 22 ); |
|
314 |
+ copies[111] = new CopyPixel( 21, 52, 0, 22 ); |
|
315 |
+ copies[112] = new CopyPixel( 21, 52, 1, 22 ); |
|
316 |
+ copies[113] = new CopyPixel( 19, 54, 0, 22 ); |
|
317 |
+ copies[114] = new CopyPixel( 19, 54, 1, 22 ); |
|
318 |
+ copies[115] = new CopyPixel( 22, 17, 0, 23 ); |
|
319 |
+ copies[116] = new CopyPixel( 23, 16, 0, 23 ); |
|
320 |
+ copies[117] = new CopyPixel( 23, 16, 1, 23 ); |
|
321 |
+ copies[118] = new CopyPixel( 21, 18, 0, 23 ); |
|
322 |
+ copies[119] = new CopyPixel( 21, 18, 1, 23 ); |
|
323 |
+ copies[120] = new CopyPixel( 22, 24, 0, 24 ); |
|
324 |
+ copies[121] = new CopyPixel( 23, 23, 0, 24 ); |
|
325 |
+ copies[122] = new CopyPixel( 23, 23, 1, 24 ); |
|
326 |
+ copies[123] = new CopyPixel( 21, 25, 0, 24 ); |
|
327 |
+ copies[124] = new CopyPixel( 21, 25, 1, 24 ); |
|
328 |
+ copies[125] = new CopyPixel( 22, 45, 0, 25 ); |
|
329 |
+ copies[126] = new CopyPixel( 22, 44, 0, 25 ); |
|
330 |
+ copies[127] = new CopyPixel( 22, 44, 1, 25 ); |
|
331 |
+ copies[128] = new CopyPixel( 22, 46, 0, 25 ); |
|
332 |
+ copies[129] = new CopyPixel( 22, 46, 1, 25 ); |
|
333 |
+ copies[130] = new CopyPixel( 23, 54, 0, 26 ); |
|
334 |
+ copies[131] = new CopyPixel( 24, 53, 0, 26 ); |
|
335 |
+ copies[132] = new CopyPixel( 24, 53, 1, 26 ); |
|
336 |
+ copies[133] = new CopyPixel( 22, 55, 0, 26 ); |
|
337 |
+ copies[134] = new CopyPixel( 22, 55, 1, 26 ); |
|
338 |
+ copies[135] = new CopyPixel( 24, 49, 0, 27 ); |
|
339 |
+ copies[136] = new CopyPixel( 25, 48, 0, 27 ); |
|
340 |
+ copies[137] = new CopyPixel( 25, 48, 1, 27 ); |
|
341 |
+ copies[138] = new CopyPixel( 23, 50, 0, 27 ); |
|
342 |
+ copies[139] = new CopyPixel( 23, 50, 1, 27 ); |
|
343 |
+ copies[140] = new CopyPixel( 25, 6, 0, 28 ); |
|
344 |
+ copies[141] = new CopyPixel( 24, 5, 0, 28 ); |
|
345 |
+ copies[142] = new CopyPixel( 24, 5, 1, 28 ); |
|
346 |
+ copies[143] = new CopyPixel( 26, 7, 0, 28 ); |
|
347 |
+ copies[144] = new CopyPixel( 26, 7, 1, 28 ); |
|
348 |
+ copies[145] = new CopyPixel( 25, 30, 0, 29 ); |
|
349 |
+ copies[146] = new CopyPixel( 26, 29, 0, 29 ); |
|
350 |
+ copies[147] = new CopyPixel( 26, 29, 1, 29 ); |
|
351 |
+ copies[148] = new CopyPixel( 24, 31, 0, 29 ); |
|
352 |
+ copies[149] = new CopyPixel( 24, 31, 1, 29 ); |
|
353 |
+ copies[150] = new CopyPixel( 26, 12, 0, 30 ); |
|
354 |
+ copies[151] = new CopyPixel( 26, 11, 0, 30 ); |
|
355 |
+ copies[152] = new CopyPixel( 26, 11, 1, 30 ); |
|
356 |
+ copies[153] = new CopyPixel( 26, 13, 0, 30 ); |
|
357 |
+ copies[154] = new CopyPixel( 26, 13, 1, 30 ); |
|
358 |
+ copies[155] = new CopyPixel( 26, 18, 0, 31 ); |
|
359 |
+ copies[156] = new CopyPixel( 26, 17, 0, 31 ); |
|
360 |
+ copies[157] = new CopyPixel( 26, 17, 1, 31 ); |
|
361 |
+ copies[158] = new CopyPixel( 26, 19, 0, 31 ); |
|
362 |
+ copies[159] = new CopyPixel( 26, 19, 1, 31 ); |
|
363 |
+ copies[160] = new CopyPixel( 26, 24, 0, 32 ); |
|
364 |
+ copies[161] = new CopyPixel( 26, 23, 0, 32 ); |
|
365 |
+ copies[162] = new CopyPixel( 26, 23, 1, 32 ); |
|
366 |
+ copies[163] = new CopyPixel( 26, 25, 0, 32 ); |
|
367 |
+ copies[164] = new CopyPixel( 26, 25, 1, 32 ); |
|
368 |
+ copies[165] = new CopyPixel( 27, 50, 0, 33 ); |
|
369 |
+ copies[166] = new CopyPixel( 28, 49, 0, 33 ); |
|
370 |
+ copies[167] = new CopyPixel( 28, 49, 1, 33 ); |
|
371 |
+ copies[168] = new CopyPixel( 26, 51, 0, 33 ); |
|
372 |
+ copies[169] = new CopyPixel( 26, 51, 1, 33 ); |
|
373 |
+ copies[170] = new CopyPixel( 29, 54, 0, 34 ); |
|
374 |
+ copies[171] = new CopyPixel( 28, 53, 0, 34 ); |
|
375 |
+ copies[172] = new CopyPixel( 28, 53, 1, 34 ); |
|
376 |
+ copies[173] = new CopyPixel( 30, 55, 0, 34 ); |
|
377 |
+ copies[174] = new CopyPixel( 30, 55, 1, 34 ); |
|
378 |
+ copies[175] = new CopyPixel( 31, 60, 0, 35 ); |
|
379 |
+ copies[176] = new CopyPixel( 31, 59, 0, 35 ); |
|
380 |
+ copies[177] = new CopyPixel( 31, 59, 1, 35 ); |
|
381 |
+ copies[178] = new CopyPixel( 31, 61, 0, 35 ); |
|
382 |
+ copies[179] = new CopyPixel( 31, 61, 1, 35 ); |
|
383 |
+ copies[180] = new CopyPixel( 32, 51, 0, 36 ); |
|
384 |
+ copies[181] = new CopyPixel( 31, 51, 0, 36 ); |
|
385 |
+ copies[182] = new CopyPixel( 31, 51, 1, 36 ); |
|
386 |
+ copies[183] = new CopyPixel( 33, 51, 0, 36 ); |
|
387 |
+ copies[184] = new CopyPixel( 33, 51, 1, 36 ); |
|
388 |
+ copies[185] = new CopyPixel( 33, 47, 0, 37 ); |
|
389 |
+ copies[186] = new CopyPixel( 34, 46, 0, 37 ); |
|
390 |
+ copies[187] = new CopyPixel( 34, 46, 1, 37 ); |
|
391 |
+ copies[188] = new CopyPixel( 32, 48, 0, 37 ); |
|
392 |
+ copies[189] = new CopyPixel( 32, 48, 1, 37 ); |
|
393 |
+ copies[190] = new CopyPixel( 35, 55, 0, 38 ); |
|
394 |
+ copies[191] = new CopyPixel( 34, 55, 0, 38 ); |
|
395 |
+ copies[192] = new CopyPixel( 34, 55, 1, 38 ); |
|
396 |
+ copies[193] = new CopyPixel( 36, 55, 0, 38 ); |
|
397 |
+ copies[194] = new CopyPixel( 36, 55, 1, 38 ); |
|
398 |
+ copies[195] = new CopyPixel( 38, 51, 0, 39 ); |
|
399 |
+ copies[196] = new CopyPixel( 37, 51, 0, 39 ); |
|
400 |
+ copies[197] = new CopyPixel( 37, 51, 1, 39 ); |
|
401 |
+ copies[198] = new CopyPixel( 39, 51, 0, 39 ); |
|
402 |
+ copies[199] = new CopyPixel( 39, 51, 1, 39 ); |
|
403 |
+ copies[200] = new CopyPixel( 39, 46, 0, 40 ); |
|
404 |
+ copies[201] = new CopyPixel( 39, 45, 0, 40 ); |
|
405 |
+ copies[202] = new CopyPixel( 39, 45, 1, 40 ); |
|
406 |
+ copies[203] = new CopyPixel( 39, 47, 0, 40 ); |
|
407 |
+ copies[204] = new CopyPixel( 39, 47, 1, 40 ); |
|
408 |
+ copies[205] = new CopyPixel( 44, 52, 0, 41 ); |
|
409 |
+ copies[206] = new CopyPixel( 43, 51, 0, 41 ); |
|
410 |
+ copies[207] = new CopyPixel( 43, 51, 1, 41 ); |
|
411 |
+ copies[208] = new CopyPixel( 45, 53, 0, 41 ); |
|
412 |
+ copies[209] = new CopyPixel( 45, 53, 1, 41 ); |
|
413 |
+ setCopies( copies ); |
|
414 |
+ } |
|
415 |
+} |
... | ... |
@@ -0,0 +1,18 @@ |
1 |
+/* BlinkenLightsInteractiveMovieProgram |
|
2 |
+ * Copyright (C) 2019: Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ * Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ * a blinkenarea.org project |
|
5 |
+ */ |
|
6 |
+ |
|
7 |
+package org.blinkenarea.Blimp; |
|
8 |
+ |
|
9 |
+import org.blinkenarea.BlinkenLib.*; |
|
10 |
+ |
|
11 |
+public interface FrameTemplateIf |
|
12 |
+{ |
|
13 |
+ /// get template format as string |
|
14 |
+ public String getFormat( ); |
|
15 |
+ |
|
16 |
+ /// apply template to frame - potentially modifying size and content |
|
17 |
+ public void apply( BlinkenFrame frame ); |
|
18 |
+} |
... | ... |
@@ -0,0 +1,155 @@ |
1 |
+/* BlinkenLightsInteractiveMovieProgram |
|
2 |
+ * Copyright (C) 2019: Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ * Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ * a blinkenarea.org project |
|
5 |
+ */ |
|
6 |
+ |
|
7 |
+package org.blinkenarea.Blimp; |
|
8 |
+ |
|
9 |
+import org.blinkenarea.BlinkenLib.*; |
|
10 |
+ |
|
11 |
+/// a template based on list of modifiable pixels and copied pixels |
|
12 |
+public class FrameTemplatePixelLists implements FrameTemplateIf |
|
13 |
+{ |
|
14 |
+ /// location and color of a fixed pixel |
|
15 |
+ protected class FixedPixel { |
|
16 |
+ public int y, x, c; ///< location |
|
17 |
+ public byte val; ///< value |
|
18 |
+ public FixedPixel( int y_, int x_, int c_, byte val_ ) { |
|
19 |
+ y = y_; |
|
20 |
+ x = x_; |
|
21 |
+ c = c_; |
|
22 |
+ val = val_; |
|
23 |
+ } |
|
24 |
+ }; |
|
25 |
+ |
|
26 |
+ /// location of a content pixel |
|
27 |
+ protected class ContentPixel { |
|
28 |
+ public int y, x, c; ///< source location of content |
|
29 |
+ public ContentPixel( int y_, int x_, int c_ ) { |
|
30 |
+ y = y_; |
|
31 |
+ x = x_; |
|
32 |
+ c = c_; |
|
33 |
+ } |
|
34 |
+ }; |
|
35 |
+ |
|
36 |
+ /// a copy of a content pixel |
|
37 |
+ protected class CopyPixel { |
|
38 |
+ public int y, x, c; ///< destination position |
|
39 |
+ public int contentIdx; ///< index of content pixel |
|
40 |
+ public CopyPixel( int y_, int x_, int c_, int contentIdx_ ) { |
|
41 |
+ y = y_; |
|
42 |
+ x = x_; |
|
43 |
+ c = c_; |
|
44 |
+ contentIdx = contentIdx_; |
|
45 |
+ } |
|
46 |
+ } |
|
47 |
+ |
|
48 |
+ int height, width, channels, maxval; |
|
49 |
+ /// default color (for fixed pixels), must be of length channels |
|
50 |
+ byte defColor[]; |
|
51 |
+ /// fixed pixels |
|
52 |
+ FixedPixel fixed[]; |
|
53 |
+ /// actual content |
|
54 |
+ ContentPixel content[]; |
|
55 |
+ /// copies of content pixels: copies[i] = { y, x, c, index } |
|
56 |
+ CopyPixel copies[]; |
|
57 |
+ /// local buffer for content pixel colors (used in apply()) |
|
58 |
+ byte contentBuf[]; |
|
59 |
+ |
|
60 |
+ public FrameTemplatePixelLists( int height_, int width_, int channels_, |
|
61 |
+ int maxval_ ) |
|
62 |
+ { |
|
63 |
+ height = height_; |
|
64 |
+ width = width_; |
|
65 |
+ channels = channels_; |
|
66 |
+ maxval = maxval_; |
|
67 |
+ defColor = null; |
|
68 |
+ fixed = null; |
|
69 |
+ content = null; |
|
70 |
+ copies = null; |
|
71 |
+ contentBuf = null; |
|
72 |
+ } |
|
73 |
+ |
|
74 |
+ protected void setDefColor( byte defColor_[] ) |
|
75 |
+ { |
|
76 |
+ defColor = defColor_; |
|
77 |
+ } |
|
78 |
+ |
|
79 |
+ protected void setFixed( FixedPixel fixed_[] ) |
|
80 |
+ { |
|
81 |
+ fixed = fixed_; |
|
82 |
+ } |
|
83 |
+ |
|
84 |
+ protected void setContent( ContentPixel content_[] ) |
|
85 |
+ { |
|
86 |
+ content = content_; |
|
87 |
+ if( content == null ) { |
|
88 |
+ contentBuf = null; |
|
89 |
+ } else { |
|
90 |
+ contentBuf = new byte [content.length]; |
|
91 |
+ } |
|
92 |
+ } |
|
93 |
+ |
|
94 |
+ protected void setCopies( CopyPixel copies_[] ) |
|
95 |
+ { |
|
96 |
+ copies = copies_; |
|
97 |
+ } |
|
98 |
+ |
|
99 |
+ /// get template format as string |
|
100 |
+ public String getFormat( ) |
|
101 |
+ { |
|
102 |
+ return width + "x" + height + "-" + channels + "/" + (maxval + 1); |
|
103 |
+ } |
|
104 |
+ |
|
105 |
+ public void apply( BlinkenFrame frame ) |
|
106 |
+ { |
|
107 |
+ // ensure frame has desired size (no-op if size is already equal) |
|
108 |
+ frame.resize( height, width, channels, maxval ); |
|
109 |
+ |
|
110 |
+ // get content pixels |
|
111 |
+ if( content != null ) { |
|
112 |
+ for( int i = 0; i < content.length; ++i ) { |
|
113 |
+ ContentPixel cp = content[i]; |
|
114 |
+ contentBuf[i] = frame.getPixel( cp.y, cp.x, cp.c ); |
|
115 |
+ } |
|
116 |
+ } |
|
117 |
+ |
|
118 |
+ // set entire frame to default color |
|
119 |
+ if ( defColor != null && defColor.length >= channels ) { |
|
120 |
+ for( int y = 0; y < height; ++y ) { |
|
121 |
+ for( int x = 0; x < width; ++x ) { |
|
122 |
+ for( int c = 0; c < channels; ++c ) { |
|
123 |
+ frame.setPixel( y, x, c, defColor[c] ); |
|
124 |
+ } |
|
125 |
+ } |
|
126 |
+ } |
|
127 |
+ } |
|
128 |
+ |
|
129 |
+ // set fixed pixels |
|
130 |
+ if( fixed != null ) { |
|
131 |
+ for( int i = 0; i < fixed.length; ++i ) { |
|
132 |
+ FixedPixel fp = fixed[i]; |
|
133 |
+ frame.setPixel( fp.y, fp.x, fp.c, fp.val ); |
|
134 |
+ } |
|
135 |
+ } |
|
136 |
+ |
|
137 |
+ // set content pixels |
|
138 |
+ if( content != null ) { |
|
139 |
+ for( int i = 0; i < content.length; ++i ) { |
|
140 |
+ ContentPixel ct = content[i]; |
|
141 |
+ frame.setPixel( ct.y, ct.x, ct.c, contentBuf[i] ); |
|
142 |
+ } |
|
143 |
+ } |
|
144 |
+ |
|
145 |
+ // set copy pixels |
|
146 |
+ if( copies != null && content != null ) { |
|
147 |
+ for( int i = 0; i < copies.length; ++i ) { |
|
148 |
+ CopyPixel cp = copies[i]; |
|
149 |
+ if( cp.contentIdx < content.length ) { |
|
150 |
+ frame.setPixel( cp.y, cp.x, cp.c, contentBuf[cp.contentIdx] ); |
|
151 |
+ } |
|
152 |
+ } |
|
153 |
+ } |
|
154 |
+ } |
|
155 |
+} |
|
0 | 156 |