HP Prime для всех

English  Русский 
PrimeFX graphics-app screenshot}}
Название PrimeFX
Описание It is a very versatile paint app with many functions like a large canvas, different brushes, geometric shapes, text, filling and much more
Автор David Traum

Исходный код (скачать):

Исходный код отформатирован программными средствами сайта

//© David Traum //david-traum.com LOCAL SC, PX, PY; LOCAL SW := GROBW_P(G0), SH := GROBH_P(G0); LOCAL SWQ := SW*0.25, SHQ := SH*0.25; LOCAL CB := RGB(255, 255, 255), CF := RGB(0, 0, 0), BLUE := RGB(100, 100, 200), CAF := RGB(200, 220, 200), CAB := RGB(0, 0, 0), WHITE := RGB(255, 255, 255), BLACK := RGB(0, 0, 0); LOCAL PS, PC, PW := SW*5, PH := SH*5; LOCAL LX, LY, B0, B1, MN, SEL, REL, MC; LOCAL IN, INC, TT, TS, PTS, PTB, PTS2, UT; LOCAL TEXT := "Your text."; LOCAL POINTER, MM, MX, MY, B2, B3, B4, PT; LOCAL R1, R2, R3, R4, BAK, DP, MAP; LOCAL T_FIRSTPOINT := "Select first point."; LOCAL T_SECONDPOINT := "Select second point."; LOCAL T_THIRDPOINT := "Select third point."; LOCAL T_CENTER := "Select center point"; LOCAL T_NEWSHAPE := "Select start point."; LOCAL T_TAPTEXT := "Tap to create text."; LOCAL T_FILL := "Select fill location."; LOCAL T_FINISH := "Press + to finish the current shape."; RESET() 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;

Комментарии