fix(parsing): make output work for AMazeIng class __init__

Basic main to display ascii print
This commit is contained in:
2026-03-25 17:40:13 +01:00
parent e717bf52e9
commit a408004bd7
21 changed files with 1872 additions and 65 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

+250
View File
@@ -0,0 +1,250 @@
/* XPM */
static char *Dont_panic[] = {
/* columns rows colors chars-per-pixel */
"64 64 180 2 ",
" c #000000",
". c #020D03",
"X c #0D0E0A",
"o c #090906",
"O c #130F02",
"+ c #031505",
"@ c #051B06",
"# c #12120E",
"$ c #181814",
"% c #370D03",
"& c #002304",
"* c #012D06",
"= c #07280B",
"- c #04360A",
"; c #0C3F11",
": c #113F16",
"> c #20201B",
", c #37372D",
"< c #3E3E33",
"1 c #4E1205",
"2 c #5E1706",
"3 c #691A07",
"4 c #73240F",
"5 c #034A0B",
"6 c #005C0B",
"7 c #01640D",
"8 c #006E0D",
"9 c #15670D",
"0 c #00710D",
"q c #096815",
"w c #047512",
"e c #097A16",
"r c #0D7D1A",
"t c #077414",
"y c #107D1C",
"u c #11681B",
"i c #1B4420",
"p c #057E25",
"a c #0A7B22",
"s c #05772A",
"d c #057A2B",
"f c #047723",
"g c #197B24",
"h c #276E2E",
"j c #49580C",
"k c #6A4D0D",
"l c #53601A",
"z c #44443C",
"x c #4B4C3D",
"c c #504F41",
"v c #535345",
"b c #58584D",
"n c #5C5C53",
"m c #5C6153",
"M c #666859",
"N c #7B7B6C",
"B c #767764",
"V c #AE3A0E",
"C c #B9370E",
"Z c #C52F0C",
"A c #C6300D",
"S c #C8320E",
"D c #CB3511",
"F c #CF3A14",
"G c #C93C18",
"H c #D33C16",
"J c #D23E18",
"K c #B65726",
"L c #98662B",
"P c #D3431C",
"I c #DC451C",
"U c #DC491E",
"Y c #D54C1E",
"T c #E14A1F",
"R c #DC4C24",
"E c #D94C26",
"W c #DC5A33",
"Q c #E14D22",
"! c #E05A32",
"~ c #DF6039",
"^ c #E3643D",
"/ c #E56B43",
"( c #E5724A",
") c #05861E",
"_ c #0F801B",
"` c #068A1C",
"' c #068F1A",
"] c #11821E",
"[ c #07921B",
"{ c #08941D",
"} c #058322",
"| c #068922",
" . c #098D24",
".. c #05842C",
"X. c #068B2C",
"o. c #088426",
"O. c #158421",
"+. c #198926",
"@. c #1D8D29",
"#. c #1A8626",
"$. c #0A9224",
"%. c #0D952A",
"&. c #0E9A2C",
"*. c #0A9528",
"=. c #109C2E",
"-. c #068D31",
";. c #068730",
":. c #069433",
">. c #069A35",
",. c #079E38",
"<. c #119D32",
"1. c #22882D",
"2. c #22922E",
"3. c #269532",
"4. c #299435",
"5. c #299936",
"6. c #2D9D39",
"7. c #2B9739",
"8. c #308A3A",
"9. c #07A63B",
"0. c #14A235",
"q. c #15A339",
"w. c #32A23E",
"e. c #36A541",
"r. c #3AA746",
"t. c #3AA946",
"y. c #3EAD49",
"u. c #63985E",
"i. c #40AE4B",
"p. c #43A64E",
"a. c #43B24E",
"s. c #46B451",
"d. c #49B654",
"f. c #4AB956",
"g. c #4EBD59",
"h. c #50BF5B",
"j. c #50B158",
"k. c #6F9266",
"l. c #61A862",
"z. c #63B667",
"x. c #66B76B",
"c. c #52C15E",
"v. c #56C461",
"b. c #58C763",
"n. c #5BC966",
"m. c #5ECD69",
"M. c #61CF6C",
"N. c #64C66C",
"B. c #63D16E",
"V. c #76C57B",
"C. c #66D471",
"Z. c #68D773",
"A. c #6BD976",
"S. c #6EDC79",
"D. c #70DE7B",
"F. c #72E07D",
"G. c #8D927F",
"H. c #7FC381",
"J. c #76E481",
"K. c #79E783",
"L. c #7CEA86",
"P. c #7FEC89",
"I. c #969986",
"U. c #8BBF8C",
"Y. c #9BAF93",
"T. c #A8AA9A",
"R. c #A3B59A",
"E. c #ADB1A2",
"W. c #B5B7A9",
"Q. c #83C286",
"!. c #96C998",
"~. c #81EE8B",
"^. c #84F28F",
"/. c #86F491",
"(. c #8CF996",
"). c #8BF895",
"_. c #ABC9A8",
"`. c #C5C6BB",
"'. c #CACAC0",
"]. c None",
/* pixels */
"].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].].;.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].,.>.].-.;.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].]...].].-.,.].-.,.].]...].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].:.].]...X.].-.-.].:.:.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].o.].].} p p o.p ].>.-.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].p ].} ) ].} p ].p ..].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].) | ) ) ) ) } p p ].].].].].].].].].].@.3.3.4.7.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].]. .&.<.%.` ) ) } p ].].].].].].].+.@.3.3.5.6.6.e.e.e.e.e.].].].].].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].| <.q.<.0.&.) ) | ].].].].].g +.@.2.3.5.6.6.e.t.e.t.t.t.y.y.t.].].].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].]. .<.<.[ $.0.$.) ].].].].].] +.@.@.5.6.6.e.e.y.y.y.a.a.s.s.s.a.a.i.].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].| <.<.' [ =.$.` | >.>.].O.+.@.2.5.5.w.e.t.y.y.y.s.d.f.f.f.f.f.f.s.s.].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].| %.q.<.0.0. .) | o.o.O.+.@.2.5.6.w.e.y.y.s.s.f.g.c.c.c.c.c.c.h.g.g.d.].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].| .&.&.` ` ].].e r O.+.2.3.5.w.e.y.y.s.f.g.c.v.v.b.n.n.n.b.b.v.c.h.f.].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].| | ) ` ].].].].r ] +.@.3.5.6.e.y.y.s.f.g.v.v.n.m.M.B.B.M.M.m.n.b.v.h.d.].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].o.} ].].].].].e _ O.@.2.5.6.e.y.y.s.g.g.v.b.m.B.B.C.Z.A.Z.Z.C.M.m.n.v.h.d.].].].].].].].].].].].].].].].].].].",
"].].].].].].].].X.-.].].].].].].e ] +.@.3.5.w.e.y.y.d.g.v.b.m.B.Z.A.S.D.D.D.S.A.Z.B.m.n.v.g.].].].].].].].].].].].].].].].].].].",
"].].].].].].].].:.].].].].].].t r O.+.2.3.6.w.t.y.s.g.c.b.m.C.Z.S.F.J.J.K.J.J.D.S.Z.B.m.b.c.d.].].].].].].].].].].].].].].].].].",
"].].].].].].].:.-.].].].].].].t _ O.@.2.7.6.e.t.s.d.g.v.b.B.C.A.F.J.L.P.~.P.K.J.F.A.C.M.n.v.g.].].].].].].].].].].].].].].].].].",
"].].].].].].:.:.].].].].].].w e ] O.@.2.7.w.e.y.s.d.c.v.m.C.Z.F.J.L.~././.^.~.L.J.S.Z.B.n.v.g.].].].].].].].].].].].].].].].].].",
"].].].].].;.-.d ].].].].].].w e ] +.@.1.4.w.r.y.s.f.c.v.m.C.A.F.J.P./.).(.).^.P.J.D.A.B.m.v.h.d.].].].].].].].].].].].].].].].].",
"].].].]...-.d ].].].].].].].w e ] u = + @ h r.y.s.f.v.v.m.C.A.F.K.~./.).(./.^.L.J.D.Z.B.n.v.h.d.].].].].].].].].].].].].].].].].",
"].].].].d d d d ;.:.9.9.,.e w e q + o M U.y.s.d.c.v.m.B.Z.F.J.P.^.^./.^.P.K.F.S.Z.M.n.c.g.d.].].].].].].].].].].].].].].].].",
"].].].].d d s d d d ;.-.:.d w e - X B E.l.y.d.c.v.m.B.Z.S.F.J.K.P.~.P.K.J.D.A.C.m.b.c.g.s.].].].].].].].].].].].].].].].].",
"].].].].].].].].].d s d d f w t + $ v I.x.s.g.c.b.m.C.Z.S.F.J.J.J.J.F.D.A.C.M.n.v.h.f.a.].].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].8 w 7 . c `._.f.f.c.v.b.B.B.A.A.S.D.D.D.A.A.C.M.m.v.c.g.s.i.].].].].].].].:.-.].].].].].].].",
"].].].].].].].].].].].].].].w 7 . $ B N u.d.g.c.c.n.B.B.C.C.C.A.C.C.B.m.n.v.c.g.f.s.y.].].].].].].;.9.].].-.].].].].].",
"].].].].].].].].].].].].].].8 8 + o o , E.Q.j.c.c.c.c.n.m.M.M.M.N.V.H.z.h.c.g.f.a.y.e.].].].].].].X.;.].:.,.].].].].].",
"].].].].].].].].].].].].].].0 0 * z `._.u.j.f.c.c.c.b.n.M.U.k.W.`.m i p.f.a.y.t.e.].].].].].p p ]...:.:.].].].].].",
"].].].].].].].].].].].].].].0 0 5 # n b v R.!.l.z.V.x.u.R.T.c M m $ i a.y.t.w.5.o.:.].].p } ].p ....].>.:.].].].",
"].].].].].].].].].].].].].].8 0 8 @ < T.E.M G.`.I., v x X . 8.t.e.6.].].X.X.].) } ) p p ]...:.].].].].",
"].].].].].].].].].].].].].].].0 0 5 X < < # x N x o h w.6.7.].].} } ) ) ) ) ) ].p p p ].].].].",
"].].].].].].].].].].].].].].].8 0 8 * o X o 1.5.5.].].].| | %.%.` ` ) ) } o.].].].].].",
"].].].].].].].].].].].].].].].].0 0 8 & : 3.3.2.].].].| <.0.0.<. .` ) } ].].].].].].",
"].].].].].].].].].].].].].].].].8 8 0 7 @ = g 3.@.].].].]. .0.&.{ =.<.| ) ].| :.-.].].].",
"].].].].].].].].].].].].].].].].].8 0 0 7 & = g 2.#.].].].].].$.0.*.' [ 0.&.) } X.>.].].].].",
"].].].].].].].].].].].].].].].].].].8 0 0 8 - + o 5 g +.O.O.].].].].]. .&.$.' ' =.<.| } ].].].].].].",
"].].].].].].].].].].].].].].].].].].].0 0 0 0 6 * O 1 3 3 3 3 % . = u O.] ] y ].].].].].].| ) ) ' ' ` .].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].8 0 0 0 0 9 k C P E J G 4 O * 5 q y _ a a a ].].].].].].].| | ) ` ` ].].].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].].].8 0 0 0 8 j G / ^ R ~ l w e e e t f d ;.].].].].].].X.o.].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].].].].].8 0 0 9 V W / R ^ L 0 w 0 0 ].].d -.:.].].].].:...].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].].].].].].].0 9 V J Q U E K 9 ].].].].].d ..,.].].].>.;.].].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].].].].].].].].].S H I T Y I ].].].].].].].d :.,.].].;.d ].].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].].].].].].].].].A S I T Y I ].].].].].].].s d -.]...d ].].].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].].].].].].].].].Z S J Q E U ].].].].].].].].s d d d d ].].].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].].].].].].].].].Z Z H I U U I ].].].].].].].].d d d ].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].].].].].].].].].Z Z S J I T R P ].].].].].].].d s s ].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].].].].].].].].].Z Z Z H R R ! ! G ].].].].].].].d ].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].].].].].].].].].].Z Z D E ^ ( W D ].].].].].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].Z Z A F J D Z ].].].].].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].Z Z S ].].].].].].].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].",
"].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].]."
};
+276
View File
@@ -0,0 +1,276 @@
# Mlx large test
import sys
from mlx import Mlx # Import Mlx class
class ImgData:
"""Structure for image data"""
def __init__(self):
self.img = None
self.width = 0
self.height = 0
self.data = None
self.sl = 0 # size line
self.bpp = 0 # bits per pixel
self.iformat = 0
class XVar:
"""Structure for main vars"""
def __init__(self):
self.mlx = None
self.mlx_ptr = None
self.screen_w = 0
self.screen_h = 0
self.win_1 = None
self.win_2 = None
self.img_1 = ImgData()
self.img_2 = ImgData()
self.img_png = ImgData()
self.img_xpm = ImgData()
self.imgidx = 0
def draw_colormap(xvar):
"""Draw the colormap"""
print("Drawing colormap...")
for i in range(400):
for j in range(400):
r = int((0xFF * i) / 400)
g = int((0xFF * j) / 400)
b = int((0xFF * (400 - (i + j) // 2)) / 400)
col = 0xFF000000 | (r << 16) | (g << 8) | b
xvar.mlx.mlx_pixel_put(xvar.mlx_ptr, xvar.win_1, i, j, col)
def gere_key_press(key, xvar):
print(f"Pressed key {key}")
def gere_key(key, xvar):
print(f"Got key {key}: ", end="")
if key == 113: # 'q'
xvar.mlx.mlx_do_key_autorepeatoff(xvar.mlx_ptr)
print("key repeat off")
return 0
elif key == 119: # 'w'
xvar.mlx.mlx_do_key_autorepeaton(xvar.mlx_ptr)
print("key repeat on")
return 0
elif key == 101: # 'e'
draw_colormap(xvar)
print("colormap")
return 0
elif key == 114: # 'r'
xvar.mlx.mlx_mouse_hide(xvar.mlx_ptr)
print("mouse hide")
return 0
elif key == 116: # 't'
xvar.mlx.mlx_mouse_show(xvar.mlx_ptr)
print("mouse show")
return 0
elif key == 121: # 'y'
xvar.mlx.mlx_mouse_move(xvar.win_1, 200, 200)
print("mouse move")
return 0
elif key == 117: # 'u'
ret, x, y = xvar.mlx.mlx_mouse_get_pos(xvar.win_1)
print(f"current mouse pos is {x} x {y}")
return 0
elif key == 105: # 'i'
xvar.mlx.mlx_sync(xvar.mlx_ptr, Mlx.SYNC_IMAGE_WRITABLE, xvar.img_2.img)
# fill image in white
for offset in range(0, xvar.img_2.sl * 100, 4):
xvar.img_2.data[offset:offset+4] = (0xFFFFFFFF).to_bytes(4, 'little')
xvar.mlx.mlx_put_image_to_window(xvar.mlx_ptr, xvar.win_1, xvar.img_2.img, 50, 50)
# update in red
for offset in range(0, xvar.img_2.sl * 100, 4):
xvar.img_2.data[offset:offset+4] = (0xFFFF0000).to_bytes(4, 'little')
xvar.mlx.mlx_put_image_to_window(xvar.mlx_ptr, xvar.win_1, xvar.img_2.img, 250, 250)
print("update image without sync - most likely 2 red squares")
return 0
elif key == 111: # 'o'
xvar.mlx.mlx_sync(xvar.mlx_ptr, Mlx.SYNC_IMAGE_WRITABLE, xvar.img_2.img)
# fill image in white
for offset in range(0, xvar.img_2.sl * 100, 4):
xvar.img_2.data[offset:offset+4] = (0xFFFFFFFF).to_bytes(4, 'little')
xvar.mlx.mlx_put_image_to_window(xvar.mlx_ptr, xvar.win_1, xvar.img_2.img, 50, 50)
xvar.mlx.mlx_sync(xvar.mlx_ptr, Mlx.SYNC_IMAGE_WRITABLE, xvar.img_2.img)
# update in red
for offset in range(0, xvar.img_2.sl * 100, 4):
xvar.img_2.data[offset:offset+4] = (0xFFFF0000).to_bytes(4, 'little')
xvar.mlx.mlx_put_image_to_window(xvar.mlx_ptr, xvar.win_1, xvar.img_2.img, 250, 250)
print("update image with sync - white and red squares")
return 0
# Default
print("clear and string put")
xvar.mlx.mlx_clear_window(xvar.mlx_ptr, xvar.win_1)
xvar.mlx.mlx_string_put(xvar.mlx_ptr, xvar.win_1, 20, 20, 0xFFFF00FF, "Hello MLX!")
def gere_expose(xvar):
print("Expose !")
xvar.mlx.mlx_put_image_to_window(xvar.mlx_ptr, xvar.win_1, xvar.img_1.img, 0, 0)
xvar.mlx.mlx_put_image_to_window(xvar.mlx_ptr, xvar.win_1, xvar.img_1.img, 201, 201)
def gere_mouse(button, x, y, xvar, win):
print(f"Got mouse : {button} at {x}x{y}")
if button == 1:
xvar.mlx.mlx_put_image_to_window(xvar.mlx_ptr, win, xvar.img_1.img, 100, 100)
return 0
if button == 3: # right click
if xvar.imgidx % 2:
xvar.mlx.mlx_put_image_to_window(xvar.mlx_ptr, win, xvar.img_png.img, x, y)
else:
xvar.mlx.mlx_put_image_to_window(xvar.mlx_ptr, win, xvar.img_xpm.img, x, y)
xvar.imgidx += 1
def gere_mouse_1(button, x, y, xvar):
gere_mouse(button, x, y, xvar, xvar.win_1)
def gere_mouse_2(button, x, y, xvar):
gere_mouse(button, x, y, xvar, xvar.win_2)
def gere_close_1(xvar):
xvar.mlx.mlx_loop_exit(xvar.mlx_ptr)
def gere_close_2(xvar):
xvar.mlx.mlx_destroy_window(xvar.mlx_ptr, xvar.win_2)
xvar.win_2 = None
def main():
xvar = XVar()
# Mlx Initialisation
try:
xvar.mlx = Mlx()
except Exception as e:
print(f"Error: Can't initialize MLX: {e}", file=sys.stderr)
sys.exit(1)
xvar.mlx_ptr = xvar.mlx.mlx_init()
ret, xvar.screen_w, xvar.screen_h = xvar.mlx.mlx_get_screen_size(xvar.mlx_ptr)
print(f"Screen size: {xvar.screen_w} x {xvar.screen_h}")
# Windows creation
try:
xvar.win_1 = xvar.mlx.mlx_new_window(xvar.mlx_ptr, 400, 400, "MLX main win")
if not xvar.win_1:
raise Exception("Can't create main window")
xvar.win_2 = xvar.mlx.mlx_new_window(xvar.mlx_ptr, 150, 150, "Secondary window")
if not xvar.win_2:
raise Exception("Can't create secondary window")
except Exception as e:
print(f"Error Win create: {e}", file=sys.stderr)
sys.exit(1)
# Image #1
xvar.img_1.img = xvar.mlx.mlx_new_image(xvar.mlx_ptr, 200, 200)
if not xvar.img_1.img:
raise Exception("Can't create image 1")
xvar.img_1.width = 200
xvar.img_1.height = 200
xvar.img_1.data, xvar.img_1.bpp, xvar.img_1.sl, xvar.img_1.iformat = \
xvar.mlx.mlx_get_data_addr(xvar.img_1.img)
# Fill image #1
for i in range(xvar.img_1.sl * 200):
xvar.img_1.data[i] = 0x80
for i in range(xvar.img_1.sl * 100):
xvar.img_1.data[i] = 0xFF
try:
# Add some red pixels
pixel_positions = [
0 * 200 * 4, # top left
(1 * 200 + 1) * 4, # top left + 1
(199 * 200 + 199) * 4, # bottom right
(198 * 200 + 198) * 4 # bottom right - 1
]
for pos in pixel_positions:
if pos < len(xvar.img_1.data) - 3:
xvar.img_1.data[pos:pos+4] = (0xFFFF0000).to_bytes(4, 'little')
except Exception as e:
print(f"Error img1: {e}", file=sys.stderr)
sys.exit(1)
# Image #2
try:
xvar.img_2.img = xvar.mlx.mlx_new_image(xvar.mlx_ptr, 100, 100)
if not xvar.img_2.img:
raise Exception("Can't create image 2")
xvar.img_2.width = 100
xvar.img_2.height = 100
xvar.img_2.data, xvar.img_2.bpp, xvar.img_2.sl, xvar.img_2.iformat = \
xvar.mlx.mlx_get_data_addr(xvar.img_2.img)
except Exception as e:
print(f"Error img2: {e}", file=sys.stderr)
sys.exit(1)
# Load PNG & XPM
result = xvar.mlx.mlx_png_file_to_image(xvar.mlx_ptr, "puffy_small.png")
if not result:
raise Exception("Can't load PNG")
xvar.img_png.img, xvar.img_png.width, xvar.img_png.height = result
if not xvar.img_png.img:
raise Exception("Can't create png")
xvar.img_png.data, xvar.img_png.bpp, xvar.img_png.sl, xvar.img_png.iformat = \
xvar.mlx.mlx_get_data_addr(xvar.img_png.img)
result = xvar.mlx.mlx_xpm_file_to_image(xvar.mlx_ptr, "Dont_panic.xpm")
if not result:
raise Exception("Can't load XPM")
xvar.img_xpm.img, xvar.img_xpm.width, xvar.img_xpm.height = result
xvar.img_xpm.data, xvar.img_xpm.bpp, xvar.img_xpm.sl, xvar.img_xpm.iformat = \
xvar.mlx.mlx_get_data_addr(xvar.img_xpm.img)
# event hooks
xvar.mlx.mlx_key_hook(xvar.win_1, gere_key, xvar)
xvar.mlx.mlx_hook(xvar.win_2, 2, 1, gere_key_press, xvar) # KeyPress event
xvar.mlx.mlx_expose_hook(xvar.win_1, gere_expose, xvar)
xvar.mlx.mlx_mouse_hook(xvar.win_1, gere_mouse_1, xvar)
xvar.mlx.mlx_mouse_hook(xvar.win_2, gere_mouse_2, xvar)
xvar.mlx.mlx_hook(xvar.win_1, 33, 0, gere_close_1, xvar) # WM_DELETE_WINDOW
xvar.mlx.mlx_hook(xvar.win_2, 33, 0, gere_close_2, xvar) # WM_DELETE_WINDOW
# User Instructions
print("On main window:")
print(" mouse button 1: place white/gray image in 0x0 and 200x200")
print(" mouse button 2: place png image and xpm image, alternatively")
print(" try keys QWERTYUIO and others")
print(" click window's X button to end the program")
print("On secondary window (smaller):")
print(" show key pressed for auto repeat")
print(" click window's X button to close it")
# Main loop
xvar.mlx.mlx_loop(xvar.mlx_ptr)
# Cleaning resources
print("destroy xpm")
xvar.mlx.mlx_destroy_image(xvar.mlx_ptr, xvar.img_xpm.img)
print("destroy png")
xvar.mlx.mlx_destroy_image(xvar.mlx_ptr, xvar.img_png.img)
print("destroy imgs")
xvar.mlx.mlx_destroy_image(xvar.mlx_ptr, xvar.img_1.img)
xvar.mlx.mlx_destroy_image(xvar.mlx_ptr, xvar.img_2.img)
print("destroy win(s)")
xvar.mlx.mlx_destroy_window(xvar.mlx_ptr, xvar.win_1)
if xvar.win_2:
xvar.mlx.mlx_destroy_window(xvar.mlx_ptr, xvar.win_2)
print("destroy mlx")
xvar.mlx.mlx_release(xvar.mlx_ptr)
if __name__ == "__main__":
main()
Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

+29
View File
@@ -0,0 +1,29 @@
from mlx import Mlx
def mymouse(button, x, y, mystuff):
print(f"Got mouse event! button {button} at {x},{y}.")
def mykey(keynum, mystuff):
print(f"Got key {keynum}, and got my stuff back:")
print(mystuff)
if keynum == 32:
m.mlx_mouse_hook(win_ptr, None, None)
def gere_close(dummy):
m.mlx_loop_exit(mlx_ptr)
m = Mlx()
mlx_ptr = m.mlx_init()
win_ptr = m.mlx_new_window(mlx_ptr, 200, 200, "win title")
m.mlx_clear_window(mlx_ptr, win_ptr)
m.mlx_string_put(mlx_ptr, win_ptr, 20, 20, 255, "Hello PyMlx!")
(ret, w, h) = m.mlx_get_screen_size(mlx_ptr)
print(f"Got screen size: {w} x {h} .")
stuff = [1, 2]
m.mlx_mouse_hook(win_ptr, mymouse, None)
m.mlx_key_hook(win_ptr, mykey, stuff)
m.mlx_hook(win_ptr, 33, 0, gere_close, None)
m.mlx_loop(mlx_ptr)