mirror of
https://github.com/Zeal-Operating-System/ZealOS.git
synced 2025-04-12 02:38:38 +01:00
Add save/load to 32BitPaint app.
This commit is contained in:
parent
dbf8647d59
commit
584b5899d3
4 changed files with 6052 additions and 5911 deletions
Binary file not shown.
|
@ -110,126 +110,197 @@ body {background-color:#000000;}
|
|||
<a name="l83"></a>
|
||||
<a name="l84"></a>}
|
||||
<a name="l85"></a>
|
||||
<a name="l86"></a></span><span class=cF1>I0</span><span class=cF0> Paint32()
|
||||
<a name="l86"></a></span><span class=cF1>U0</span><span class=cF0> PaintSaveImage()
|
||||
<a name="l87"></a>{
|
||||
<a name="l88"></a> </span><span class=cF9>I64</span><span class=cF0> sc, ch, i, j;
|
||||
<a name="l89"></a> </span><span class=cF1>U8</span><span class=cF0> *str_r[</span><span class=cF3>STR_LEN</span><span class=cF0>],
|
||||
<a name="l90"></a> *str_g[</span><span class=cF3>STR_LEN</span><span class=cF0>],
|
||||
<a name="l91"></a> *str_b[</span><span class=cF3>STR_LEN</span><span class=cF0>];
|
||||
<a name="l88"></a> </span><span class=cF1>U8</span><span class=cF0> *filename, *tmp;
|
||||
<a name="l89"></a>
|
||||
<a name="l90"></a> </span><span class=cFB>text</span><span class=cF0>.is_fb_busy = </span><span class=cF3>FALSE</span><span class=cF0>;
|
||||
<a name="l91"></a> </span><span class=cF5>LFBFlush</span><span class=cF0>;
|
||||
<a name="l92"></a>
|
||||
<a name="l93"></a> </span><span class=cF5>SettingsPush</span><span class=cF0>; </span><span class=cF2>//See </span><a href="https://tomawezome.github.io/ZealOS/System/TaskSettings.CC.html#l3"><span class=cF4>SettingsPush</span></a><span class=cF0>
|
||||
<a name="l94"></a> </span><span class=cF5>AutoComplete</span><span class=cF0>;
|
||||
<a name="l95"></a> </span><span class=cF5>WinBorder</span><span class=cF0>;
|
||||
<a name="l96"></a> </span><span class=cF5>WinMax</span><span class=cF0>;
|
||||
<a name="l97"></a> </span><span class=cF5>DocCursor</span><span class=cF0>;
|
||||
<a name="l98"></a> </span><span class=cF5>DocClear</span><span class=cF0>;
|
||||
<a name="l99"></a> </span><span class=cF5>MenuPush</span><span class=cF0>(</span><span class=cF6>""</span><span class=cF0>);
|
||||
<a name="l100"></a>
|
||||
<a name="l101"></a> </span><span class=cF5>PopUpOk</span><span class=cF0>(</span><span class=cF6>"Press $GREEN$0-9$FG$ to get colors from current palette.\n"</span><span class=cF0>
|
||||
<a name="l102"></a> </span><span class=cF6>"Press $GREEN$R, G, or B$FG$ to increase color values.\n"</span><span class=cF0>
|
||||
<a name="l103"></a> </span><span class=cF6>"Press $GREEN$Ctrl-R, Ctrl-G, or Ctrl-B$FG$ to decrease.\n"</span><span class=cF0>
|
||||
<a name="l104"></a> </span><span class=cF6>"Press $GREEN$+ or -$FG$ to change brush size.\n"</span><span class=cF0>
|
||||
<a name="l105"></a> </span><span class=cF6>"Left-click to draw."</span><span class=cF0>);
|
||||
<a name="l106"></a>
|
||||
<a name="l107"></a> </span><span class=cFB>text</span><span class=cF0>.is_fb_busy = </span><span class=cF3>TRUE</span><span class=cF0>;
|
||||
<a name="l108"></a> </span><span class=cF5>MemSet</span><span class=cF0>(</span><span class=cFB>text</span><span class=cF0>.fb_alias, </span><span class=cF3>WHITE32</span><span class=cF0>, </span><span class=cFB>text</span><span class=cF0>.buffer_size);
|
||||
<a name="l109"></a> </span><span class=cF5>MemSet</span><span class=cF0>(paint.fb, </span><span class=cF3>WHITE32</span><span class=cF0>, </span><span class=cFB>text</span><span class=cF0>.buffer_size);
|
||||
<a name="l110"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>)
|
||||
<a name="l111"></a> </span><span class=cF7>{</span><span class=cF0>
|
||||
<a name="l112"></a> </span><span class=cF1>for</span><span class=cF0> (i = paint.last_x; i < paint.last_x + paint.last_thick; i++)
|
||||
<a name="l113"></a> </span><span class=cF1>for</span><span class=cF0> (j = paint.last_y; j < paint.last_y + paint.last_thick; j++)
|
||||
<a name="l114"></a> DrawScreenPixel(i, j, paint.fb[i + j * </span><span class=cF3>GR_WIDTH</span><span class=cF0>]);
|
||||
<a name="l115"></a>
|
||||
<a name="l116"></a> DrawScreenBrush(</span><span class=cFB>mouse</span><span class=cF0>.pos.x, </span><span class=cFB>mouse</span><span class=cF0>.pos.y, paint.color, paint.thick);
|
||||
<a name="l117"></a>
|
||||
<a name="l118"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cFB>mouse</span><span class=cF0>.lb)
|
||||
<a name="l119"></a> DrawImageBrush(</span><span class=cFB>mouse</span><span class=cF0>.pos.x, </span><span class=cFB>mouse</span><span class=cF0>.pos.y, paint.color, paint.thick);
|
||||
<a name="l120"></a>
|
||||
<a name="l121"></a> </span><span class=cF5>StrPrint</span><span class=cF0>(str_r, </span><span class=cF6>"Red: %d"</span><span class=cF0>, paint.color.r);
|
||||
<a name="l122"></a> </span><span class=cF5>StrPrint</span><span class=cF0>(str_g, </span><span class=cF6>"Green: %d"</span><span class=cF0>, paint.color.g);
|
||||
<a name="l123"></a> </span><span class=cF5>StrPrint</span><span class=cF0>(str_b, </span><span class=cF6>"Blue: %d"</span><span class=cF0>, paint.color.b);
|
||||
<a name="l124"></a>
|
||||
<a name="l125"></a> </span><span class=cF1>for</span><span class=cF0> (i = </span><span class=cFE>0</span><span class=cF0>; i < </span><span class=cFE>3</span><span class=cF0> * </span><span class=cF3>FONT_HEIGHT</span><span class=cF0>; i++)
|
||||
<a name="l126"></a> </span><span class=cF1>for</span><span class=cF0> (j = </span><span class=cFE>0</span><span class=cF0>; j < </span><span class=cFE>12</span><span class=cF0> * </span><span class=cF3>FONT_WIDTH</span><span class=cF0>; j++)
|
||||
<a name="l127"></a> DrawScreenPixel(j, i, paint.fb[j + i * </span><span class=cF3>GR_WIDTH</span><span class=cF0>]);
|
||||
<a name="l128"></a>
|
||||
<a name="l129"></a> DrawScreenStr(</span><span class=cFE>0</span><span class=cF0>, </span><span class=cFE>0</span><span class=cF0> * </span><span class=cF3>FONT_HEIGHT</span><span class=cF0>, str_r);
|
||||
<a name="l130"></a> DrawScreenStr(</span><span class=cFE>0</span><span class=cF0>, </span><span class=cFE>1</span><span class=cF0> * </span><span class=cF3>FONT_HEIGHT</span><span class=cF0>, str_g);
|
||||
<a name="l131"></a> DrawScreenStr(</span><span class=cFE>0</span><span class=cF0>, </span><span class=cFE>2</span><span class=cF0> * </span><span class=cF3>FONT_HEIGHT</span><span class=cF0>, str_b);
|
||||
<a name="l132"></a>
|
||||
<a name="l133"></a> </span><span class=cF5>Refresh</span><span class=cF0>;
|
||||
<a name="l134"></a>
|
||||
<a name="l135"></a> </span><span class=cF2>// Get key, process</span><span class=cF0>
|
||||
<a name="l136"></a> </span><span class=cF5>KeyScan</span><span class=cF0>(&ch, &sc);
|
||||
<a name="l137"></a> </span><span class=cF1>switch</span><span class=cF0> (ch)
|
||||
<a name="l138"></a> {
|
||||
<a name="l139"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cFE>0</span><span class=cF0>:
|
||||
<a name="l140"></a> </span><span class=cF1>switch</span><span class=cF0> (sc.u8[</span><span class=cFE>0</span><span class=cF0>])
|
||||
<a name="l141"></a> </span><span class=cF7>{</span><span class=cF0>
|
||||
<a name="l142"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>SC_CURSOR_LEFT</span><span class=cF0>:
|
||||
<a name="l143"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l144"></a>
|
||||
<a name="l145"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>SC_CURSOR_RIGHT</span><span class=cF0>:
|
||||
<a name="l146"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l147"></a>
|
||||
<a name="l148"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>SC_CURSOR_UP</span><span class=cF0>:
|
||||
<a name="l149"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l150"></a>
|
||||
<a name="l151"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>SC_CURSOR_DOWN</span><span class=cF0>:
|
||||
<a name="l152"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l153"></a> </span><span class=cF7>}</span><span class=cF0>
|
||||
<a name="l154"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l155"></a>
|
||||
<a name="l156"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'+'</span><span class=cF0>:
|
||||
<a name="l157"></a> paint.thick++;
|
||||
<a name="l158"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l159"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'-'</span><span class=cF0>:
|
||||
<a name="l160"></a> paint.thick--;
|
||||
<a name="l161"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l162"></a>
|
||||
<a name="l163"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'r'</span><span class=cF0>:
|
||||
<a name="l164"></a> paint.color.r++;
|
||||
<a name="l165"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l166"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'g'</span><span class=cF0>:
|
||||
<a name="l167"></a> paint.color.g++;
|
||||
<a name="l168"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l169"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'b'</span><span class=cF0>:
|
||||
<a name="l170"></a> paint.color.b++;
|
||||
<a name="l171"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l172"></a>
|
||||
<a name="l173"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>CH_CTRLR</span><span class=cF0>:
|
||||
<a name="l174"></a> paint.color.r--;
|
||||
<a name="l175"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l176"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>CH_CTRLG</span><span class=cF0>:
|
||||
<a name="l177"></a> paint.color.g--;
|
||||
<a name="l178"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l179"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>CH_CTRLB</span><span class=cF0>:
|
||||
<a name="l180"></a> paint.color.b--;
|
||||
<a name="l181"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l182"></a>
|
||||
<a name="l183"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'0'</span><span class=cF0>...</span><span class=cF6>'9'</span><span class=cF0>:
|
||||
<a name="l184"></a> paint.color = </span><span class=cFB>gr_palette</span><span class=cF0>[ch - </span><span class=cF6>'0'</span><span class=cF0>];
|
||||
<a name="l185"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l93"></a> tmp = </span><span class=cF5>PopUpFileName</span><span class=cF0>(</span><span class=cF6>"~/"</span><span class=cF0>);
|
||||
<a name="l94"></a> filename = </span><span class=cF5>ExtChange</span><span class=cF0>(tmp, </span><span class=cF6>"GR32"</span><span class=cF0>);</span><span class=cF2>// make sure file ends in .GR32</span><span class=cF0>
|
||||
<a name="l95"></a> </span><span class=cF5>Free</span><span class=cF0>(tmp);
|
||||
<a name="l96"></a> </span><span class=cF5>FileWrite</span><span class=cF0>(filename, paint.fb, </span><span class=cFB>text</span><span class=cF0>.buffer_size);
|
||||
<a name="l97"></a> </span><span class=cF5>Free</span><span class=cF0>(filename);
|
||||
<a name="l98"></a>
|
||||
<a name="l99"></a> </span><span class=cFB>text</span><span class=cF0>.is_fb_busy = </span><span class=cF3>TRUE</span><span class=cF0>;
|
||||
<a name="l100"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(</span><span class=cFB>text</span><span class=cF0>.fb_alias, paint.fb, </span><span class=cFB>text</span><span class=cF0>.buffer_size);
|
||||
<a name="l101"></a>
|
||||
<a name="l102"></a>}
|
||||
<a name="l103"></a>
|
||||
<a name="l104"></a></span><span class=cF1>U0</span><span class=cF0> PaintLoadImage()
|
||||
<a name="l105"></a>{
|
||||
<a name="l106"></a> </span><span class=cF1>U8</span><span class=cF0> </span><span class=cFB>ext</span><span class=cF0>[</span><span class=cF3>STR_LEN</span><span class=cF0>],
|
||||
<a name="l107"></a> *file,
|
||||
<a name="l108"></a> filename[</span><span class=cF3>STR_LEN</span><span class=cF0>],
|
||||
<a name="l109"></a> *file_image;
|
||||
<a name="l110"></a>
|
||||
<a name="l111"></a> </span><span class=cFB>text</span><span class=cF0>.is_fb_busy = </span><span class=cF3>FALSE</span><span class=cF0>;
|
||||
<a name="l112"></a> </span><span class=cF5>LFBFlush</span><span class=cF0>;
|
||||
<a name="l113"></a>
|
||||
<a name="l114"></a> </span><span class=cF5>PopUpOk</span><span class=cF0>(</span><span class=cF6>"Pick a .GR32 file to load.\n\n"</span><span class=cF0>
|
||||
<a name="l115"></a> </span><span class=cF6>"(Double-click / ESC to pick.)"</span><span class=cF0>);
|
||||
<a name="l116"></a>
|
||||
<a name="l117"></a> </span><span class=cF1>do</span><span class=cF0>
|
||||
<a name="l118"></a> </span><span class=cF7>{</span><span class=cF0>
|
||||
<a name="l119"></a> file = </span><span class=cF5>PopUpPickFile</span><span class=cF0>(</span><span class=cF6>"~/"</span><span class=cF0>);
|
||||
<a name="l120"></a> </span><span class=cF5>FileExtRemove</span><span class=cF0>(file, </span><span class=cFB>ext</span><span class=cF0>);
|
||||
<a name="l121"></a> </span><span class=cF7>}</span><span class=cF0>
|
||||
<a name="l122"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF5>StrCompare</span><span class=cF7>(</span><span class=cFB>ext</span><span class=cF0>, </span><span class=cF6>"GR32"</span><span class=cF7>)</span><span class=cF0>);
|
||||
<a name="l123"></a>
|
||||
<a name="l124"></a> </span><span class=cF5>StrCopy</span><span class=cF0>(filename, file);
|
||||
<a name="l125"></a> </span><span class=cF5>Free</span><span class=cF0>(file);
|
||||
<a name="l126"></a> file = </span><span class=cF5>ExtDefault</span><span class=cF0>(filename, </span><span class=cF6>"GR32"</span><span class=cF0>);
|
||||
<a name="l127"></a>
|
||||
<a name="l128"></a> file_image = </span><span class=cF5>FileRead</span><span class=cF0>(file);
|
||||
<a name="l129"></a> </span><span class=cF5>Free</span><span class=cF0>(file);
|
||||
<a name="l130"></a>
|
||||
<a name="l131"></a> </span><span class=cFB>text</span><span class=cF0>.is_fb_busy = </span><span class=cF3>TRUE</span><span class=cF0>;
|
||||
<a name="l132"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(paint.fb, file_image, </span><span class=cFB>text</span><span class=cF0>.buffer_size);
|
||||
<a name="l133"></a> </span><span class=cF5>Free</span><span class=cF0>(file_image);
|
||||
<a name="l134"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(</span><span class=cFB>text</span><span class=cF0>.fb_alias, paint.fb, </span><span class=cFB>text</span><span class=cF0>.buffer_size);
|
||||
<a name="l135"></a>}
|
||||
<a name="l136"></a>
|
||||
<a name="l137"></a></span><span class=cF1>I0</span><span class=cF0> Paint32()
|
||||
<a name="l138"></a>{
|
||||
<a name="l139"></a> </span><span class=cF9>I64</span><span class=cF0> sc, ch, i, j, sc_space = </span><span class=cF5>Char2ScanCode</span><span class=cF0>(</span><span class=cF3>CH_SPACE</span><span class=cF0>);
|
||||
<a name="l140"></a> </span><span class=cF1>U8</span><span class=cF0> str_r[</span><span class=cF3>STR_LEN</span><span class=cF0>],
|
||||
<a name="l141"></a> str_g[</span><span class=cF3>STR_LEN</span><span class=cF0>],
|
||||
<a name="l142"></a> str_b[</span><span class=cF3>STR_LEN</span><span class=cF0>];
|
||||
<a name="l143"></a>
|
||||
<a name="l144"></a> </span><span class=cF5>SettingsPush</span><span class=cF0>; </span><span class=cF2>//See </span><a href="https://tomawezome.github.io/ZealOS/System/TaskSettings.CC.html#l3"><span class=cF4>SettingsPush</span></a><span class=cF0>
|
||||
<a name="l145"></a> </span><span class=cF5>AutoComplete</span><span class=cF0>;
|
||||
<a name="l146"></a> </span><span class=cF5>WinBorder</span><span class=cF0>;
|
||||
<a name="l147"></a> </span><span class=cF5>WinMax</span><span class=cF0>;
|
||||
<a name="l148"></a> </span><span class=cF5>DocCursor</span><span class=cF0>;
|
||||
<a name="l149"></a> </span><span class=cF5>DocClear</span><span class=cF0>;
|
||||
<a name="l150"></a> </span><span class=cF5>MenuPush</span><span class=cF0>(</span><span class=cF6>""</span><span class=cF0>);
|
||||
<a name="l151"></a>
|
||||
<a name="l152"></a> </span><span class=cF5>PopUpOk</span><span class=cF0>(</span><span class=cF6>"\n"</span><span class=cF0>
|
||||
<a name="l153"></a> </span><span class=cF6>"$GREEN$0-9$FG$ to get colors from current palette.\n"</span><span class=cF0>
|
||||
<a name="l154"></a> </span><span class=cF6>"$GREEN$R, G, or B$FG$ to increase color values.\n"</span><span class=cF0>
|
||||
<a name="l155"></a> </span><span class=cF6>"$GREEN$Shift-R, Shift-G, or Shift-B$FG$ to decrease.\n"</span><span class=cF0>
|
||||
<a name="l156"></a> </span><span class=cF6>"$GREEN$+ or -$FG$ to change brush size.\n\n"</span><span class=cF0>
|
||||
<a name="l157"></a> </span><span class=cF6>"$BLUE$Ctrl-S$FG$ to save image.\n"</span><span class=cF0>
|
||||
<a name="l158"></a> </span><span class=cF6>"$BLUE$Ctrl-L$FG$ to load image.\n\n"</span><span class=cF0>
|
||||
<a name="l159"></a> </span><span class=cF6>"$GREEN$Left-click or SPACE$FG$ to draw.\n\n"</span><span class=cF0>
|
||||
<a name="l160"></a> </span><span class=cF6>"$RED$ENTER$FG$ to clear image.\n"</span><span class=cF0>
|
||||
<a name="l161"></a> </span><span class=cF6>"$RED$Shift-Esc or Double Right-Click$FG$ to exit."</span><span class=cF0>);
|
||||
<a name="l162"></a> </span><span class=cF5>Sleep</span><span class=cF0>(</span><span class=cFE>250</span><span class=cF0>); </span><span class=cF2>// help ensure SPACE press doesn't draw early</span><span class=cF0>
|
||||
<a name="l163"></a>
|
||||
<a name="l164"></a> </span><span class=cFB>text</span><span class=cF0>.is_fb_busy = </span><span class=cF3>TRUE</span><span class=cF0>;
|
||||
<a name="l165"></a> </span><span class=cF5>MemSet</span><span class=cF0>(</span><span class=cFB>text</span><span class=cF0>.fb_alias, </span><span class=cF3>WHITE32</span><span class=cF0>, </span><span class=cFB>text</span><span class=cF0>.buffer_size);
|
||||
<a name="l166"></a> </span><span class=cF5>MemSet</span><span class=cF0>(paint.fb, </span><span class=cF3>WHITE32</span><span class=cF0>, </span><span class=cFB>text</span><span class=cF0>.buffer_size);
|
||||
<a name="l167"></a>
|
||||
<a name="l168"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>)
|
||||
<a name="l169"></a> </span><span class=cF7>{</span><span class=cF0>
|
||||
<a name="l170"></a> </span><span class=cF2>// draw the image where the brush was last covering it</span><span class=cF0>
|
||||
<a name="l171"></a> </span><span class=cF1>for</span><span class=cF0> (i = paint.last_x; i < paint.last_x + paint.last_thick; i++)
|
||||
<a name="l172"></a> </span><span class=cF1>for</span><span class=cF0> (j = paint.last_y; j < paint.last_y + paint.last_thick; j++)
|
||||
<a name="l173"></a> DrawScreenPixel(i, j, paint.fb[i + j * </span><span class=cF3>GR_WIDTH</span><span class=cF0>]);
|
||||
<a name="l174"></a>
|
||||
<a name="l175"></a> </span><span class=cF2>// draw the brush on the screen</span><span class=cF0>
|
||||
<a name="l176"></a> DrawScreenBrush(</span><span class=cFB>mouse</span><span class=cF0>.pos.x, </span><span class=cFB>mouse</span><span class=cF0>.pos.y, paint.color, paint.thick);
|
||||
<a name="l177"></a>
|
||||
<a name="l178"></a> </span><span class=cF2>// if clicked, draw brush on the image</span><span class=cF0>
|
||||
<a name="l179"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cFB>mouse</span><span class=cF0>.lb || </span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cFB>kbd</span><span class=cF0>.down_bitmap, sc_space</span><span class=cF7>)</span><span class=cF0>)
|
||||
<a name="l180"></a> DrawImageBrush(</span><span class=cFB>mouse</span><span class=cF0>.pos.x, </span><span class=cFB>mouse</span><span class=cF0>.pos.y, paint.color, paint.thick);
|
||||
<a name="l181"></a>
|
||||
<a name="l182"></a> </span><span class=cF2>// build the color strings (U8[], no MAlloc)</span><span class=cF0>
|
||||
<a name="l183"></a> </span><span class=cF5>StrPrint</span><span class=cF0>(str_r, </span><span class=cF6>"Red: %d"</span><span class=cF0>, paint.color.r);
|
||||
<a name="l184"></a> </span><span class=cF5>StrPrint</span><span class=cF0>(str_g, </span><span class=cF6>"Green: %d"</span><span class=cF0>, paint.color.g);
|
||||
<a name="l185"></a> </span><span class=cF5>StrPrint</span><span class=cF0>(str_b, </span><span class=cF6>"Blue: %d"</span><span class=cF0>, paint.color.b);
|
||||
<a name="l186"></a>
|
||||
<a name="l187"></a>
|
||||
<a name="l188"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'\n'</span><span class=cF0>:
|
||||
<a name="l189"></a> </span><span class=cF5>MemSet</span><span class=cF0>(paint.fb, </span><span class=cF3>WHITE32</span><span class=cF0>, </span><span class=cFB>text</span><span class=cF0>.buffer_size);
|
||||
<a name="l190"></a> </span><span class=cF5>MemSet</span><span class=cF0>(</span><span class=cFB>text</span><span class=cF0>.fb_alias, </span><span class=cF3>WHITE32</span><span class=cF0>, </span><span class=cFB>text</span><span class=cF0>.buffer_size);
|
||||
<a name="l191"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l192"></a>
|
||||
<a name="l193"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>CH_SHIFT_ESC</span><span class=cF0>:
|
||||
<a name="l194"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>CH_ESC</span><span class=cF0>:
|
||||
<a name="l195"></a> </span><span class=cF1>goto</span><span class=cF0> paint_done;
|
||||
<a name="l196"></a> }
|
||||
<a name="l197"></a> </span><span class=cF7>}</span><span class=cF0>
|
||||
<a name="l198"></a>
|
||||
<a name="l199"></a>paint_done:
|
||||
<a name="l200"></a> </span><span class=cFB>text</span><span class=cF0>.is_fb_busy = </span><span class=cF3>FALSE</span><span class=cF0>;
|
||||
<a name="l201"></a> </span><span class=cF5>LFBFlush</span><span class=cF0>;
|
||||
<a name="l202"></a> </span><span class=cF5>SettingsPop</span><span class=cF0>;
|
||||
<a name="l203"></a> </span><span class=cF5>MenuPop</span><span class=cF0>;
|
||||
<a name="l204"></a>}
|
||||
<a name="l205"></a>
|
||||
<a name="l206"></a>PaintGlobalsInit;
|
||||
<a name="l207"></a>Paint32;</span></pre></body>
|
||||
<a name="l187"></a> </span><span class=cF2>// draw the image where the color strings where covering it </span><span class=cF0>
|
||||
<a name="l188"></a> </span><span class=cF1>for</span><span class=cF0> (i = </span><span class=cFE>0</span><span class=cF0>; i < </span><span class=cFE>3</span><span class=cF0> * </span><span class=cF3>FONT_HEIGHT</span><span class=cF0>; i++)
|
||||
<a name="l189"></a> </span><span class=cF1>for</span><span class=cF0> (j = </span><span class=cFE>0</span><span class=cF0>; j < </span><span class=cFE>12</span><span class=cF0> * </span><span class=cF3>FONT_WIDTH</span><span class=cF0>; j++)
|
||||
<a name="l190"></a> DrawScreenPixel(j, i, paint.fb[j + i * </span><span class=cF3>GR_WIDTH</span><span class=cF0>]);
|
||||
<a name="l191"></a>
|
||||
<a name="l192"></a> </span><span class=cF2>// draw the color strings on screen</span><span class=cF0>
|
||||
<a name="l193"></a> DrawScreenStr(</span><span class=cFE>0</span><span class=cF0>, </span><span class=cFE>0</span><span class=cF0> * </span><span class=cF3>FONT_HEIGHT</span><span class=cF0>, str_r);
|
||||
<a name="l194"></a> DrawScreenStr(</span><span class=cFE>0</span><span class=cF0>, </span><span class=cFE>1</span><span class=cF0> * </span><span class=cF3>FONT_HEIGHT</span><span class=cF0>, str_g);
|
||||
<a name="l195"></a> DrawScreenStr(</span><span class=cFE>0</span><span class=cF0>, </span><span class=cFE>2</span><span class=cF0> * </span><span class=cF3>FONT_HEIGHT</span><span class=cF0>, str_b);
|
||||
<a name="l196"></a>
|
||||
<a name="l197"></a> </span><span class=cF2>// 60fps wait</span><span class=cF0>
|
||||
<a name="l198"></a> </span><span class=cF5>Refresh</span><span class=cF0>;
|
||||
<a name="l199"></a>
|
||||
<a name="l200"></a> </span><span class=cF2>// Get key, process</span><span class=cF0>
|
||||
<a name="l201"></a> </span><span class=cF5>KeyScan</span><span class=cF0>(&ch, &sc);
|
||||
<a name="l202"></a> </span><span class=cF1>switch</span><span class=cF0> (ch)
|
||||
<a name="l203"></a> {
|
||||
<a name="l204"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cFE>0</span><span class=cF0>:
|
||||
<a name="l205"></a> </span><span class=cF1>switch</span><span class=cF0> (sc.u8[</span><span class=cFE>0</span><span class=cF0>])
|
||||
<a name="l206"></a> </span><span class=cF7>{</span><span class=cF0>
|
||||
<a name="l207"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>SC_CURSOR_LEFT</span><span class=cF0>:
|
||||
<a name="l208"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l209"></a>
|
||||
<a name="l210"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>SC_CURSOR_RIGHT</span><span class=cF0>:
|
||||
<a name="l211"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l212"></a>
|
||||
<a name="l213"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>SC_CURSOR_UP</span><span class=cF0>:
|
||||
<a name="l214"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l215"></a>
|
||||
<a name="l216"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>SC_CURSOR_DOWN</span><span class=cF0>:
|
||||
<a name="l217"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l218"></a> </span><span class=cF7>}</span><span class=cF0>
|
||||
<a name="l219"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l220"></a>
|
||||
<a name="l221"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'+'</span><span class=cF0>:
|
||||
<a name="l222"></a> paint.thick++;
|
||||
<a name="l223"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l224"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'-'</span><span class=cF0>:
|
||||
<a name="l225"></a> paint.thick--;
|
||||
<a name="l226"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l227"></a>
|
||||
<a name="l228"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'r'</span><span class=cF0>:
|
||||
<a name="l229"></a> paint.color.r++;
|
||||
<a name="l230"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l231"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'g'</span><span class=cF0>:
|
||||
<a name="l232"></a> paint.color.g++;
|
||||
<a name="l233"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l234"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'b'</span><span class=cF0>:
|
||||
<a name="l235"></a> paint.color.b++;
|
||||
<a name="l236"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l237"></a>
|
||||
<a name="l238"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'R'</span><span class=cF0>:
|
||||
<a name="l239"></a> paint.color.r--;
|
||||
<a name="l240"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l241"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'G'</span><span class=cF0>:
|
||||
<a name="l242"></a> paint.color.g--;
|
||||
<a name="l243"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l244"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'B'</span><span class=cF0>:
|
||||
<a name="l245"></a> paint.color.b--;
|
||||
<a name="l246"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l247"></a>
|
||||
<a name="l248"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'0'</span><span class=cF0>...</span><span class=cF6>'9'</span><span class=cF0>:
|
||||
<a name="l249"></a> paint.color = </span><span class=cFB>gr_palette</span><span class=cF0>[ch - </span><span class=cF6>'0'</span><span class=cF0>];
|
||||
<a name="l250"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l251"></a>
|
||||
<a name="l252"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'\n'</span><span class=cF0>:
|
||||
<a name="l253"></a> </span><span class=cF5>MemSet</span><span class=cF0>(paint.fb, </span><span class=cF3>WHITE32</span><span class=cF0>, </span><span class=cFB>text</span><span class=cF0>.buffer_size);
|
||||
<a name="l254"></a> </span><span class=cF5>MemSet</span><span class=cF0>(</span><span class=cFB>text</span><span class=cF0>.fb_alias, </span><span class=cF3>WHITE32</span><span class=cF0>, </span><span class=cFB>text</span><span class=cF0>.buffer_size);
|
||||
<a name="l255"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l256"></a>
|
||||
<a name="l257"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>CH_CTRLS</span><span class=cF0>:
|
||||
<a name="l258"></a> PaintSaveImage;
|
||||
<a name="l259"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l260"></a>
|
||||
<a name="l261"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>CH_CTRLL</span><span class=cF0>:
|
||||
<a name="l262"></a> PaintLoadImage;
|
||||
<a name="l263"></a> </span><span class=cF1>break</span><span class=cF0>;
|
||||
<a name="l264"></a>
|
||||
<a name="l265"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>CH_SHIFT_ESC</span><span class=cF0>:
|
||||
<a name="l266"></a> </span><span class=cF1>goto</span><span class=cF0> paint_done;
|
||||
<a name="l267"></a> }
|
||||
<a name="l268"></a> </span><span class=cF7>}</span><span class=cF0>
|
||||
<a name="l269"></a>
|
||||
<a name="l270"></a>paint_done:
|
||||
<a name="l271"></a> </span><span class=cFB>text</span><span class=cF0>.is_fb_busy = </span><span class=cF3>FALSE</span><span class=cF0>;
|
||||
<a name="l272"></a> </span><span class=cF5>LFBFlush</span><span class=cF0>;
|
||||
<a name="l273"></a> </span><span class=cF5>SettingsPop</span><span class=cF0>;
|
||||
<a name="l274"></a> </span><span class=cF5>MenuPop</span><span class=cF0>;
|
||||
<a name="l275"></a>}
|
||||
<a name="l276"></a>
|
||||
<a name="l277"></a>PaintGlobalsInit;
|
||||
<a name="l278"></a>Paint32;</span></pre></body>
|
||||
</html>
|
||||
|
|
11545
docs/index.html
11545
docs/index.html
File diff suppressed because it is too large
Load diff
|
@ -83,12 +83,63 @@ I0 DrawScreenBrush(I64 x, I64 y, CBGR24 color, I64 thick)
|
|||
|
||||
}
|
||||
|
||||
U0 PaintSaveImage()
|
||||
{
|
||||
U8 *filename, *tmp;
|
||||
|
||||
text.is_fb_busy = FALSE;
|
||||
LFBFlush;
|
||||
|
||||
tmp = PopUpFileName("~/");
|
||||
filename = ExtChange(tmp, "GR32");// make sure file ends in .GR32
|
||||
Free(tmp);
|
||||
FileWrite(filename, paint.fb, text.buffer_size);
|
||||
Free(filename);
|
||||
|
||||
text.is_fb_busy = TRUE;
|
||||
MemCopy(text.fb_alias, paint.fb, text.buffer_size);
|
||||
|
||||
}
|
||||
|
||||
U0 PaintLoadImage()
|
||||
{
|
||||
U8 ext[STR_LEN],
|
||||
*file,
|
||||
filename[STR_LEN],
|
||||
*file_image;
|
||||
|
||||
text.is_fb_busy = FALSE;
|
||||
LFBFlush;
|
||||
|
||||
PopUpOk("Pick a .GR32 file to load.\n\n"
|
||||
"(Double-click / ESC to pick.)");
|
||||
|
||||
do
|
||||
{
|
||||
file = PopUpPickFile("~/");
|
||||
FileExtRemove(file, ext);
|
||||
}
|
||||
while (StrCompare(ext, "GR32"));
|
||||
|
||||
StrCopy(filename, file);
|
||||
Free(file);
|
||||
file = ExtDefault(filename, "GR32");
|
||||
|
||||
file_image = FileRead(file);
|
||||
Free(file);
|
||||
|
||||
text.is_fb_busy = TRUE;
|
||||
MemCopy(paint.fb, file_image, text.buffer_size);
|
||||
Free(file_image);
|
||||
MemCopy(text.fb_alias, paint.fb, text.buffer_size);
|
||||
}
|
||||
|
||||
I0 Paint32()
|
||||
{
|
||||
I64 sc, ch, i, j;
|
||||
U8 *str_r[STR_LEN],
|
||||
*str_g[STR_LEN],
|
||||
*str_b[STR_LEN];
|
||||
I64 sc, ch, i, j, sc_space = Char2ScanCode(CH_SPACE);
|
||||
U8 str_r[STR_LEN],
|
||||
str_g[STR_LEN],
|
||||
str_b[STR_LEN];
|
||||
|
||||
SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$
|
||||
AutoComplete;
|
||||
|
@ -98,38 +149,52 @@ I0 Paint32()
|
|||
DocClear;
|
||||
MenuPush("");
|
||||
|
||||
PopUpOk("Press $$GREEN$$0-9$$FG$$ to get colors from current palette.\n"
|
||||
"Press $$GREEN$$R, G, or B$$FG$$ to increase color values.\n"
|
||||
"Press $$GREEN$$Ctrl-R, Ctrl-G, or Ctrl-B$$FG$$ to decrease.\n"
|
||||
"Press $$GREEN$$+ or -$$FG$$ to change brush size.\n"
|
||||
"Left-click to draw.");
|
||||
PopUpOk("\n"
|
||||
"$$GREEN$$0-9$$FG$$ to get colors from current palette.\n"
|
||||
"$$GREEN$$R, G, or B$$FG$$ to increase color values.\n"
|
||||
"$$GREEN$$Shift-R, Shift-G, or Shift-B$$FG$$ to decrease.\n"
|
||||
"$$GREEN$$+ or -$$FG$$ to change brush size.\n\n"
|
||||
"$$BLUE$$Ctrl-S$$FG$$ to save image.\n"
|
||||
"$$BLUE$$Ctrl-L$$FG$$ to load image.\n\n"
|
||||
"$$GREEN$$Left-click or SPACE$$FG$$ to draw.\n\n"
|
||||
"$$RED$$ENTER$$FG$$ to clear image.\n"
|
||||
"$$RED$$Shift-Esc or Double Right-Click$$FG$$ to exit.");
|
||||
Sleep(250); // help ensure SPACE press doesn't draw early
|
||||
|
||||
text.is_fb_busy = TRUE;
|
||||
MemSet(text.fb_alias, WHITE32, text.buffer_size);
|
||||
MemSet(paint.fb, WHITE32, text.buffer_size);
|
||||
MemSet(text.fb_alias, WHITE32, text.buffer_size);
|
||||
MemSet(paint.fb, WHITE32, text.buffer_size);
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
// draw the image where the brush was last covering it
|
||||
for (i = paint.last_x; i < paint.last_x + paint.last_thick; i++)
|
||||
for (j = paint.last_y; j < paint.last_y + paint.last_thick; j++)
|
||||
DrawScreenPixel(i, j, paint.fb[i + j * GR_WIDTH]);
|
||||
|
||||
// draw the brush on the screen
|
||||
DrawScreenBrush(mouse.pos.x, mouse.pos.y, paint.color, paint.thick);
|
||||
|
||||
if (mouse.lb)
|
||||
// if clicked, draw brush on the image
|
||||
if (mouse.lb || Bt(kbd.down_bitmap, sc_space))
|
||||
DrawImageBrush(mouse.pos.x, mouse.pos.y, paint.color, paint.thick);
|
||||
|
||||
// build the color strings (U8[], no MAlloc)
|
||||
StrPrint(str_r, "Red: %d", paint.color.r);
|
||||
StrPrint(str_g, "Green: %d", paint.color.g);
|
||||
StrPrint(str_b, "Blue: %d", paint.color.b);
|
||||
|
||||
// draw the image where the color strings where covering it
|
||||
for (i = 0; i < 3 * FONT_HEIGHT; i++)
|
||||
for (j = 0; j < 12 * FONT_WIDTH; j++)
|
||||
DrawScreenPixel(j, i, paint.fb[j + i * GR_WIDTH]);
|
||||
|
||||
// draw the color strings on screen
|
||||
DrawScreenStr(0, 0 * FONT_HEIGHT, str_r);
|
||||
DrawScreenStr(0, 1 * FONT_HEIGHT, str_g);
|
||||
DrawScreenStr(0, 2 * FONT_HEIGHT, str_b);
|
||||
|
||||
// 60fps wait
|
||||
Refresh;
|
||||
|
||||
// Get key, process
|
||||
|
@ -170,13 +235,13 @@ I0 Paint32()
|
|||
paint.color.b++;
|
||||
break;
|
||||
|
||||
case CH_CTRLR:
|
||||
case 'R':
|
||||
paint.color.r--;
|
||||
break;
|
||||
case CH_CTRLG:
|
||||
case 'G':
|
||||
paint.color.g--;
|
||||
break;
|
||||
case CH_CTRLB:
|
||||
case 'B':
|
||||
paint.color.b--;
|
||||
break;
|
||||
|
||||
|
@ -184,14 +249,20 @@ I0 Paint32()
|
|||
paint.color = gr_palette[ch - '0'];
|
||||
break;
|
||||
|
||||
|
||||
case '\n':
|
||||
MemSet(paint.fb, WHITE32, text.buffer_size);
|
||||
MemSet(text.fb_alias, WHITE32, text.buffer_size);
|
||||
MemSet(paint.fb, WHITE32, text.buffer_size);
|
||||
MemSet(text.fb_alias, WHITE32, text.buffer_size);
|
||||
break;
|
||||
|
||||
case CH_CTRLS:
|
||||
PaintSaveImage;
|
||||
break;
|
||||
|
||||
case CH_CTRLL:
|
||||
PaintLoadImage;
|
||||
break;
|
||||
|
||||
case CH_SHIFT_ESC:
|
||||
case CH_ESC:
|
||||
goto paint_done;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue