HP Prime for All
English
Русский
Name | PrimeFX |
Description | It is a very versatile paint app with many functions like a large canvas, different brushes, geometric shapes, text, filling and much more |
Author | David Traum |
Source code formatted by website engine
BEGIN
B0 := 0;
REL := 1;
LX := 0;
LY := 0;
PS := 4;
MN := 0;
PTS := {};
PC := RGB(0, 255, 0);
SC := 0;
IN := 0;
TT := 0;
TS := 0;
UT := 0;
MC := 0;
POINTER := 50;
MM := CF;
PT := 1;
PX := 0;
PY := 0;
DP := 1;
BAK := 0;
MAP := 0;
END;
CLEAR()
BEGIN
RECT_P(G9, CB);
END;
INVERT_COLOR(TC)
BEGIN
PIXON_P(G7, 0, 0, TC);
INVERT_P(G7);
RETURN GETPIX_P(G7, 0, 0);
END;
VECLENGTH(TX, TY)
BEGIN
RETURN √(TX*TX+TY*TY);
END;
RELEASE(KC)
BEGIN
WHILE ISKEYDOWN(KC) DO END;
END;
MENU_INDEX(TX)
BEGIN
CASE
IF TX < 55 THEN RETURN 0; END;
IF TX > 55 AND TX < 110 THEN RETURN 1; END;
IF TX > 110 AND TX < 165 THEN RETURN 2; END;
IF TX > 165 AND TX < 220 THEN RETURN 3; END;
IF TX > 220 AND TX < 275 THEN RETURN 4; END;
IF TX > 275 AND TX < SW THEN RETURN 5; END;
DEFAULT RETURN -1;
END;
END;
MARKER(TX, TY, GF, TC)
BEGIN
LINE_P(GF, TX-5, TY-5, TX-1, TY-1, TC);
LINE_P(GF, TX+5, TY-5, TX+1, TY-1, TC);
LINE_P(GF, TX-5, TY+5, TX-1, TY+1, TC);
LINE_P(GF, TX+5, TY+5, TX+1, TY+1, TC);
END;
BACKUP()
BEGIN
BLIT_P(G3, G9);
BAK := 1;
END;
RESTORE()
BEGIN
BLIT_P(G9, G3);
BAK := 0;
END;
REQUEST_MENU(S0, S1, S2, S3, S4, S5)
BEGIN
DRAWMENU(S0, S1, S2, S3, S4, S5);
REPEAT
B0 := WAIT(-1);
IF ISKEYDOWN(30) THEN
RETURN -1;
END;
UNTIL TYPE(B0) == 6 AND MOUSE(1) > SH-25;
RETURN MENU_INDEX(MOUSE(0));
END;
HINT(TY, ST, GF, TPE)
BEGIN
RECT_P(GF, 0, TY, SW, TY+20, RGB(0, 0, 0), RGB(200, 220, 200));
CASE
IF TPE == 1 THEN
ARC_P(GF, 10, TY+10, 8, RGB(255, 0, 0));
MARKER(10, TY+10, GF, RGB(255, 0, 0));
TEXTOUT_P(ST, GF, 30, TY+5, 2, RGB(0, 0, 0));
END;
IF TPE == 2 THEN
ARC_P(GF, 10, TY+10, 8, RGB(0, 0, 255));
TEXTOUT_P("i", GF, 9, TY, 4, RGB(0, 0, 255));
TEXTOUT_P(ST, GF, 30, TY+5, 2, RGB(0, 0, 0));
END;
DEFAULT TEXTOUT_P(ST, GF, 10, TY+5, 2, RGB(0, 0, 0));
END;
END;
CONFIRM_DIALOG(ST)
BEGIN
HINT(SH-40, ST+"?", G0, 0);
REPEAT
B0 := REQUEST_MENU("No", "", "", "", "", "Yes");
UNTIL B0 == 0 OR B0 == 5;
IF B0 == 0 THEN
RETURN 0;
ELSE
RETURN 1;
END;
END;
RELEASE_MOUSE()
BEGIN
WHILE MOUSE(0) > 0 OR MOUSE(1) > 0 DO END;
END;
RENDER()
BEGIN
IF SC == 0 THEN
BLIT_P(G1, G9, PX, PY, PX+SW, PY+SH);
ELSE
BLIT_P(G1, 0, 0, SW, SH, G9, PX+SWQ, PY+SHQ, PX+SW-SWQ, PY+SH-SHQ);
END;
IF IN == 1 THEN
HINT(SH-25, INC, G1, 0);
END;
IF TT > 0 THEN
IF UT == 1 THEN
MARKER(PTB(1) - PX-POINTER, PTB(2) - PY, G1, MM);
END;
IF TS > 0 THEN
IF TT < 4 THEN
MARKER(PTS(1) - PX, PTS(2) - PY, G1, MM);
ELSE
CASE
IF TT == 4 THEN
MARKER(PTS(1) - PX, PTS(2) - PY, G1, MM);
IF TS > 1 THEN MARKER(PTS(3) - PX, PTS(4) - PY, G1, MM); END;
END;
IF TT == 5 THEN
MARKER(PTS2(1) - PX, PTS2(2) - PY, G1, RGB(255, 0, 0));
ARC_P(G1, PTS2(1) - PX, PTS2(2) - PY, 30, MM);
MARKER(PTS(1) - PX, PTS(2) - PY, G1, MM);
END;
END;
END;
END;
HINT(5, "Hold ENTER to exit.", G1, 2);
END;
IF MN == 1 THEN
B0 := (PX/PW) * SW;
B1 := (PY/PH) * SH;
RECT_P(G1, SW-16, 0, SW, SH, CAB, CAF);
RECT_P(G1, SW-15, B1, SW-1, B1+20, CAB, BLUE);
RECT_P(G1, 0, 0, SW-16, 16, CAB, CAF);
RECT_P(G1, B0, 1, B0+20, 15, CAB, BLUE);
BLIT_P(G1, 0, SH-20, SW, SH, G8, 0, 0, SW, 20, WHITE);
ELSE
RECT_P(G1, 8, 68, 32, 92, CAB, CAF);
BLIT_P(G1, 10, 70, 30, 90, G2);
IF TT == 0 THEN
RECT_P(G1, 8, 38, 32, 62, CAB, CAF);
ARC_P(G1, 20, 50, 10, CF);
IF SC == 0 THEN
TEXTOUT_P("+", G1, 16, 40, 4, BLACK);
ELSE
TEXTOUT_P("-", G1, 16, 40, 4, BLACK);
END;
IF BAK > 0 THEN
RECT_P(G1, 8, 98, 32, 122, CAB, CAF);
TEXTOUT_P(" < -", G1, 11, 100, 4, BLACK);
END;
BLIT_P(G1, 1, SH-20, G8, 0, 21, 52, 41, WHITE);
END;
END;
IF MAP == 1 THEN
RECT_P(G1, SW-100, 10, SW-8, 60, CAB, CAF);
BLIT_P(G1, SW-98, 12, SW-10, 58, G9);
MARKER((SW-98) + (PX/PW) * 96, 12 + (PY/PH) * 46, G1, MM);
END;
BLIT_P(G0, G1);
END;
BRUSH(TX, TY, TB)
BEGIN
CASE
IF TB == 0 THEN
IF VECLENGTH(TX-LX-PX, TY-LY-PY) < PS*5 THEN
R0 := TX - ((TX - (LX-PX)) * 0.5);
R1 := TY - ((TY - (LY-PY)) * 0.5);
RECT_P(G9, R0+PX, R1+PY, R0+PX+PS, R1+PY+PS, PC);
END;
RECT_P(G9, TX+PX, TY+PY, TX+PS+PX, TY+PS+PY, PC);
END;
IF TB == 1 THEN
IF LX > 0 AND MC > 5 THEN
LINE_P(G9, TX+PX, TY+PY, LX, LY, PC);
END;
END;
IF TB == 2 THEN
FOR B4 FROM 0 TO PS/2 DO
PIXON_P(G9, PX+TX+PS*RANDOM(), PY+TY+PS*RANDOM(), PC);
END;
END;
IF TB == 3 THEN
FOR B4 FROM 0 TO PS DO
R0 := PX+TX+PS*RANDOM();
R1 := PY+TY+PS*RANDOM();
R2 := PX+TX+PS*RANDOM();
R3 := PY+TY+PS*RANDOM();
PIXON_P(G9, R0, R1, GETPIX_P(G9, R2, R3));
PIXON_P(G9, R2, R3, GETPIX_P(G9, R0, R1));
END;
END;
END;
END;
PRINT_TEXT(TXT, TX, TY, TC)
BEGIN
RECT_P(G1, RGB(100, 100, 100));
TEXTOUT_P(TXT, G1, 0, 0, 6, TC);
BLIT_P(G9, TX, TY, TX+SW, TY+20, G1, 0, 0, SW, 20, RGB(100, 100, 100));
END;
PAINT(TX, TY)
BEGIN
BRUSH(TX, TY, PT);
LX := PX+TX;
LY := PY+TY;
END;
TOOLFINISH()
BEGIN
TT := 0;
TS := 0;
IN := 0;
END;
FILL(TX, TY, TC)
BEGIN
IF ISKEYDOWN(30) THEN
RETURN;
END;
IF GETPIX_P(G9, TX, TY) == TC THEN
PIXON_P(G9, TX, TY, PC);
B0 := B0+1;
IF B0 > 50 THEN
B1 := B1+B0;
INC := B1+" pixels filled...";
RENDER();
B0 := 0;
END;
ELSE
RETURN;
END;
FILL(TX-1, TY, TC);
FILL(TX+1, TY, TC);
FILL(TX, TY-1, TC);
FILL(TX, TY+1, TC);
END;
PICKCOLOR()
BEGIN
BLIT_P(G0, G2);
REPEAT
B0 := WAIT(-1);
UNTIL TYPE(B0) == 6 AND MOUSE(0) > 0;
IF MOUSE(0) < 240 THEN
RETURN GETPIX_P(G2, MOUSE(0), MOUSE(1));
ELSE
LOCAL CD := {0, 0, 0};
EDITLIST(CD, {"Custom color", {"Red", "Green", "Blue"}, {"Value (0-255)"}});
RETURN RGB(CD(1), CD(2), CD(3));
END;
END;
STARTSCREEN()
BEGIN
CHOOSE(B0, "Mode", "Finger", "Touch-Pen");
IF B0 == 2 THEN
POINTER := 0;
END;
RECT_P(G1, RGB(100, 100, 100));
TEXTOUT_P("PrimeFX v1.1", G1, 80, 50, 6, RGB(255, 255, 255));
TEXTOUT_P("© David Traum (david-traum.com)", G1, 80, 75, 2, RGB(255, 255, 255));
TEXTOUT_P("Interact: Tochscreen", G1, 10, 120, 2, RGB(0, 255, 0));
TEXTOUT_P("Move canvas: UP/DOWN/RIGHT/LEFT", G1, 10, 135, 2, RGB(0, 255, 0));
TEXTOUT_P("Menu: ENTER", G1, 10, 150, 2, RGB(0, 255, 0));
BLIT_P(G0, 0, 20, SW, SH, G1, 0, 20, SW, SH);
DRAWMENU("", "", "", "", "", "Start");
REPEAT
B0 := WAIT(-1);
UNTIL TYPE(B0) == 6 AND MOUSE(1) > SH-25 AND MENU_INDEX(MOUSE(0)) == 5;
RELEASE_MOUSE();
END;
TOOLINTERACT(TX, TY, TC, TA)
BEGIN
IF TC == 1 THEN
TOOLFINISH();
RENDER();
RETURN;
END;
CASE
IF TT == 1 THEN
IF TS == 1 THEN
IF UT == 1 AND TC == 2 THEN
LINE_P(G9, PTB(1) - POINTER, PTB(2), PTS(1), PTS(2), PC);
TS := 0;
INC := T_FIRSTPOINT;
UT := 0;
RENDER();
RELEASE_MOUSE();
ELSE
IF TX ≠ 0 THEN
RENDER();
LINE_P(G0, TX-POINTER, TY, PTS(1) - PX, PTS(2) - PY, PC);
PTB := {PX+TX, PY+TY};
UT := 1;
WAIT(-1);
END;
END;
ELSE
IF TX ≠ 0 THEN
PTS := {PX+TX, PY+TY};
INC := T_SECONDPOINT;
TS := TS+1;
RENDER();
RELEASE_MOUSE();
END;
END;
END;
IF TT == 2 THEN
IF TS == 1 THEN
IF UT == 1 AND TC == 2 THEN
RECT_P(G9, PTB(1) - POINTER, PTB(2), PTS(1), PTS(2), PC);
TS := 0;
INC := T_FIRSTPOINT;
UT := 0;
RENDER();
RELEASE_MOUSE();
ELSE
IF TX ≠ 0 THEN
RENDER();
RECT_P(G0, TX-POINTER, TY, PTS(1) - PX, PTS(2) - PY, PC);
PTB := {PX+TX, PY+TY};
UT := 1;
WAIT(-1);
END;
END;
ELSE
IF TX ≠ 0 THEN
PTS := {PX+TX, PY+TY};
INC := T_SECONDPOINT;
TS := TS+1;
RENDER();
RELEASE_MOUSE();
END;
END;
END;
IF TT == 3 THEN
IF TS == 1 THEN
IF UT == 1 AND TC == 2 THEN
ARC_P(G9, PTS(1), PTS(2), VECLENGTH((PTB(1) - POINTER) - PTS(1), PTB(2) - PTS(2)), PC);
TS := 0;
UT := 0;
INC := T_CENTER;
RENDER();
RELEASE_MOUSE();
ELSE
IF TX ≠ 0 THEN
RENDER();
PTB := {PX+TX, PY+TY};
ARC_P(G0, PTS(1) - PX, PTS(2) - PY, VECLENGTH(PTB(1) - PTS(1) - POINTER, PTB(2) - PTS(2)), PC);
UT := 1;
WAIT(-1);
END;
END;
ELSE
IF TX ≠ 0 THEN
PTS := {PX+TX, PY+TY};
INC := "Select radius.";
TS := TS+1;
RENDER();
RELEASE_MOUSE();
END;
END;
END;
IF TT == 4 THEN
IF TS == 0 THEN
IF TX ≠ 0 THEN
TS := TS+1;
INC := T_SECONDPOINT;
PTS := {PX+TX, PY+TY};
RENDER();
RELEASE_MOUSE();
END;
ELSE
IF TS == 1 THEN
IF TX ≠ 0 THEN
TS := TS+1;
INC := T_THIRDPOINT;
PTS := {PX+TX, PY+TY, PTS(1), PTS(2)};
RENDER();
RELEASE_MOUSE();
END;
ELSE
IF UT == 1 AND TC == 2 THEN
TRIANGLE_P(G9, PTB(1) - POINTER, PTB(2), PTS(1), PTS(2), PTS(3), PTS(4), PC);
TS := 0;
INC := T_FIRSTPOINT;
UT := 0;
RENDER();
RELEASE_MOUSE();
ELSE
IF TX ≠ 0 THEN
RENDER();
TRIANGLE_P(G0, TX-POINTER, TY, PTS(1) - PX, PTS(2) - PY, PTS(3) - PX, PTS(4) - PY, PC);
PTB := {PX+TX, PY+TY};
UT := 1;
WAIT(-1);
END;
END;
END;
END;
END;
IF TT == 5 THEN
IF TA == 1 THEN
TS := 0;
INC := T_FIRSTPOINT;
RENDER();
RELEASE_MOUSE();
RETURN;
END;
IF TS == 0 THEN
IF TX ≠ 0 THEN
PTS := {PX+TX, PY+TY};
PTS2 := {PX+TX, PY+TY};
INC := "Select next point. "+T_FINISH;
TS := TS+1;
RENDER();
RELEASE_MOUSE();
END;
ELSE
IF VECLENGTH((PTS2(1) - PX) - (TX-POINTER), (PTS2(2) - PY) - TY) < 30 THEN
TX := PTS2(1) - PX+POINTER;
TY := PTS2(2) - PY;
END;
IF UT == 1 AND TC == 2 THEN
LINE_P(G9, PTS(1), PTS(2), PTB(1) - POINTER, PTB(2), PC);
TS := TS+1;
PTS := {PTB(1) - POINTER, PTB(2)};
INC := TS+" points. "+T_FINISH;
UT := 0;
RENDER();
RELEASE_MOUSE();
ELSE
IF TX ≠ 0 THEN
RENDER();
LINE_P(G0, PTS(1) - PX, PTS(2) - PY, TX-POINTER, TY, PC);
PTB := {PX+TX, PY+TY};
UT := 1;
WAIT(-1);
END;
END;
END;
END;
IF TT == 6 THEN
IF UT == 1 AND TC == 2 THEN
B0 := 0;
B1 := 0;
//IF GETPIX_P(G9, PTB(1) - POINTER, PTB(2)) ≠ PC THEN
FILL(PTB(1) - POINTER+0, PTB(2) + 0, GETPIX_P(G9, TX+PX, TY+PY));
//END;
UT := 0;
TS := 0;
INC := T_FILL;
RELEASE_MOUSE();
ELSE
PTB := {PX+TX, PY+TY};
UT := 1;
TS := TS+1;
RENDER();
END;
END;
IF TT == 7 THEN
IF TS == 0 THEN
IF TX ≠ 0 THEN
INPUT(TEXT);
RENDER();
TS := TS+1;
INC := "Select text location.";
RELEASE_MOUSE();
END;
ELSE
IF UT == 1 AND TC == 2 THEN
//TEXTOUT_P(TEXT, G9, PTB(1) - POINTER, PTB(2), 6, PC);
PRINT_TEXT(TEXT, PTB(1) - POINTER, PTB(2), PC);
UT := 0;
TS := 0;
INC := T_TAPTEXT;
RENDER();
ELSE
IF TX ≠ 0 THEN
TEXTOUT_P(TEXT, G0, TX-POINTER, TY, 6, PC);
PTB := {PX+TX, PY+TY};
UT := 1;
RENDER();
END;
END;
END;
END;
END;
END;
MENU(TX)
BEGIN
B2 := MENU_INDEX(TX);
CASE
IF B2 == 0 THEN
MN := 0;
RELEASE_MOUSE();
RENDER();
END;
IF B2 == 1 THEN
SEL := 0;
BACKUP();
CHOOSE(SEL, "Tools"
, "Cancel"
, "Line"
, "Rectangle"
, "Circle"
, "Triangle"
, "Multishape"
, "Fill"
, "Text");
CASE
IF SEL == 2 THEN
TT := 1;
INC := T_FIRSTPOINT;
END;
IF SEL == 3 THEN
TT := 2;
INC := T_FIRSTPOINT;
END;
IF SEL == 4 THEN
TT := 3;
INC := T_CENTER;
END;
IF SEL == 5 THEN
TT := 4;
INC := T_FIRSTPOINT;
END;
IF SEL == 6 THEN
TT := 5;
INC := T_NEWSHAPE;
END;
IF SEL == 7 THEN
TT := 6;
INC := T_FILL;
END;
IF SEL == 8 THEN
TT := 7;
INC := T_TAPTEXT;
END;
DEFAULT TT := 0;
END;
IF TT > 0 THEN
IN := 1;
TS := 0;
END;
END;
IF B2 == 2 THEN
PC := PICKCOLOR();
END;
IF B2 == 3 THEN
B3 := REQUEST_MENU("Type", "Size", "", "", "", "");
CASE
IF B3 == 0 THEN
CHOOSE(PT, "Brush", "Felt pen"
, "Pencil (Default)"
, "Spray"
, "Carver");
PT := PT-1;
END;
IF B3 == 1 THEN
IF PT == 1 THEN
HINT(100, "The selected brush type has a fixed size!", G0, 1);
WAIT(-1);
ELSE
B4 := REQUEST_MENU("1", "2", "3", "4", "5", "6");
B4 := B4+1;
PS := B4*B4;
END;
END;
END;
RELEASE_MOUSE();
END;
IF B2 == 4 THEN
B0 := REQUEST_MENU("Clear", "Fill", "Size", "", "", "");
CASE
IF B0 == 0 THEN
IF CONFIRM_DIALOG("Clear canvas") == 1 THEN
CLEAR();
END;
END;
IF B0 == 1 THEN
IF CONFIRM_DIALOG("Colorize the canvas") == 1 THEN
CB := PICKCOLOR();
MM := INVERT_COLOR(CB);
RECT_P(G9, CB);
END;
END;
IF B0 == 2 THEN
B1 := {PW, PH};
EDITLIST(B1, {"Canvas size", {"Width", "Height"}, {"Pixels"}});
PW := B1(1);
PH := B1(2);
DIMGROB_P(G9, PW, PH);
DIMGROB_P(G3, PW, PH);
HINT(5, "Resized canvas: "+PW+"x"+PH+".", G0, 2);
END;
END;
RELEASE_MOUSE();
END;
END;
MN := 0;
RENDER();
WAIT(-1);
END;
INPUT_W()
BEGIN
WHILE NOT ISKEYDOWN(4) DO
IF MOUSE(0) > 0 AND MOUSE(1) > 0 THEN
IF MOUSE(5) > 0 THEN
IF SC == 1 THEN
PX := PX - (MOUSE(0) - MX) * 0.5;
PY := PY - (MOUSE(1) - MY) * 0.5;
ELSE
PX := PX - (MOUSE(0) - MX);
PY := PY - (MOUSE(1) - MY);
END;
IF PX < 0 THEN PX := 0; END;
IF PY < 0 THEN PY := 0; END;
IF PX+SW > PW THEN PX := PW-SW; END;
IF PY+SH > PH THEN PY := PH-SH; END;
MX := MOUSE(0);
MY := MOUSE(1);
MAP := 1;
RENDER();
MAP := 0;
ELSE
MX := MOUSE(0);
MY := MOUSE(1);
IF TT == 0 THEN
IF MN == 1 THEN
IF MY > SH-25 THEN
MENU(MX);
REL := 0;
END;
IF MY < 30 AND MX < SW-30 THEN
PX := PW * (MX/SW);
MAP := 1;
RENDER();
MAP := 0;
ELSE
IF MX > SW-30 THEN
PY := PH * (MY/SH);
MAP := 1;
RENDER();
MAP := 0;
END;
END;
ELSE
CASE
IF MX < 35 AND MY > 35 AND MY < 65 THEN
IF SC == 0 THEN SC := 1; ELSE SC := 0; END;
RENDER();
RELEASE_MOUSE();
END;
IF MX < 35 AND MY > 65 AND MY < 95 THEN
RELEASE_MOUSE();
PC := PICKCOLOR();
RELEASE_MOUSE();
RENDER();
END;
IF MX < 35 AND MY > 95 AND MY < 125 THEN
RESTORE();
RENDER();
RELEASE_MOUSE();
END;
IF MX < 60 AND MY > SH-25 THEN
MN := 1;
RELEASE_MOUSE();
RENDER();
END;
DEFAULT
IF DP == 2 THEN
BACKUP();
DP := 0;
END;
B0 := MX-POINTER;
B1 := MY;
IF MC > 4 THEN PAINT(B0-PS, B1-PS); DP := 1; END;
RENDER();
MARKER(B0, B1, G0, MM);
END;
END;
ELSE
IF MX < 35 AND MY > 65 AND MY < 95 THEN
RELEASE_MOUSE();
PC := PICKCOLOR();
RELEASE_MOUSE();
RENDER();
ELSE
TOOLINTERACT(MX, MY, 0, 0);
END;
REL := 0;
END;
END;
MC := MC+1;
ELSE
IF REL == 0 THEN
IF TT ≠ 0 THEN
TOOLINTERACT(0, 0, 2, 0);
RENDER();
ELSE
BACKUP();
END;
REL := 1;
END;
IF MC ≠ 0 THEN
MC := 0;
RENDER();
END;
IF DP == 1 THEN DP := 2; END;
END;
CASE
IF TT == 5 AND ISKEYDOWN(50) THEN
TOOLINTERACT(0, 0, 0, 1);
END;
IF ISKEYDOWN(30) THEN
IF TT > 0 THEN
TOOLINTERACT(0, 0, 1, 0);
ELSE
IF MN == 0 THEN
MN := 1;
ELSE
MN := 0;
END;
RENDER();
END;
RELEASE(30);
END;
END;
END;
END;
EXPORT PrimePaint()
BEGIN
IF GROBW_P(G9) ≠ PW THEN
DIMGROB_P(G9, PW, PH);
CLEAR();
END;
DIMGROB_P(G3, PW, PH);
DIMGROB_P(G1, SW, SH);
DIMGROB_P(G2, SW, SH);
RECT_P(G2, 0, 0, 50, SH, RGB(0, 0, 0));
RECT_P(G2, 50, 0, 100, SH, RGB(255, 255, 255));
RECT_P(G2, 100, 0, 150, SH, RGB(255, 0, 0));
RECT_P(G2, 150, 0, 200, SH, RGB(0, 255, 0));
RECT_P(G2, 200, 0, 250, SH, RGB(0, 0, 255));
RECT_P(G2, 250, 0, SW, SH, RGB(50, 50, 50));
TEXTOUT_P("Custom", G2, 255, 100, 3, RGB(255, 255, 255));
TEXTOUT_P("RGB", G2, 255, 120, 3, RGB(255, 255, 255));
DRAWMENU(" < BACK", "Tools", "Color", "Brush", "Canvas", "Reset");
DIMGROB_P(G8, SW, 40);
BLIT_P(G8, G0, 0, SH-20, SW, SH);
DRAWMENU("Menu");
BLIT_P(G8, 0, 21, G0, 0, SH-20, 52, SH);
DIMGROB_P(G7, 1, 1);
RESET();
CB := GETPIX_P(G9, 0, 0);
MM := INVERT_COLOR(CB);
STARTSCREEN();
RENDER();
INPUT_W();
END;