test.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564
  1. #/usr/bin/python3
  2. import time
  3. from pyray import *
  4. import pyray
  5. for i in dir(pyray):
  6. if "path" in i.lower():
  7. print(i)
  8. print()
  9. print(pyray.FilePathList)
  10. print(pyray.get_directory_path)
  11. input()
  12. ConfigFlags(FLAG_MSAA_4X_HINT) #|FLAG_WINDOW_RESIZABLE )
  13. ConfigFlags(FLAG_WINDOW_HIGHDPI )
  14. init_window(800, 450, "TITLE",10,10,10,10)
  15. import sys
  16. sys.path.insert(0,"/opt/LibreLight/Xdesk/")
  17. import tool.tk_elm as tk_elm
  18. img = "/opt/LibreLight/Xdesk/icon/scribble.png"
  19. IMG = load_image(img)
  20. print(set_window_icon(IMG))
  21. a = "/usr/share/fonts/truetype/liberation/LiberationMono-Regular.ttf"
  22. a = "/usr/share/fonts/truetype/liberation/LiberationMono-Bold.ttf"
  23. #a = "/usr/share/fonts/truetype/freefont/FreeSans.ttf"
  24. #a = "/usr/share/fonts/truetype/freefont/FreeMonoBold.ttf"
  25. k=200
  26. i= 40
  27. i= 140
  28. i= 40
  29. #font1 = load_font_ex(a, i, None, 0);
  30. font1 = load_font_ex(a, i, None, 0);
  31. input()
  32. start = time.time()
  33. frame_count = 0
  34. fps_count = 0
  35. GRAY = [127,127,127,255]
  36. RED = [255,0,0,255]
  37. YELLOW = [255,255,0,255]
  38. WHITHE = [255,255,255,255]
  39. def get_font_hight(x):
  40. return 10
  41. class Layout():
  42. def __init__(self,master):
  43. self.master = master
  44. def pack(self,**args):
  45. pass
  46. def grid(self,**args):
  47. pass
  48. def bind(self,**args):
  49. pass
  50. class CALLBACK():
  51. def __init__(self):
  52. self._cb = self.dummy
  53. self.ok = 0
  54. def cb(self,*args):
  55. if self.ok:
  56. print("CALLBACK.cb",args)
  57. #try:
  58. self._cb(args)
  59. #except Exception as e:
  60. # print(" Exception CALLBACK.cb",args)
  61. def dummy(self,arg):
  62. print("CALLBACK.dummy",arg)
  63. def set(self,cb):
  64. self._cb = cb
  65. self.ok = 1
  66. print("CALLBACK",cb)
  67. def check_rgb(rgb):
  68. rgb_out = [127,127,127,127]
  69. try:
  70. for i,v in enumerate(rgb):
  71. if v > 255:
  72. v = 255
  73. if v < 0:
  74. v = 0
  75. rgb_out[i] = v
  76. except Exception as e:
  77. print("rgb exception ",e)
  78. return rgb_out
  79. class ELEM_BUF():
  80. def __init__(self,kill=None,name="ELEM_BUF"):
  81. self.val = VALUE() #0
  82. self.increment = 10
  83. self.name = name
  84. self.cb_on = CALLBACK()
  85. self.cb_off = CALLBACK()
  86. self.nr_on = [0]
  87. self.nr_off = [0]
  88. self.color = [0,255,0]
  89. self.color_on = [255,255,0]
  90. self.type="flash" #"toggle" #"flash",fade
  91. self.killgroup = kill
  92. self.events = []
  93. def _rep__(self):
  94. x="<ELEM_BUF name:{} val:{} id:{}>".format(self.name,self.val.get(), id(self))
  95. def get_event(self):
  96. out = self.events[:]
  97. self.events = []
  98. return out
  99. def get(self):
  100. return self.val.get()
  101. def get_color(self):
  102. if self.val.get():
  103. return self.color_on
  104. return self.color
  105. def clean(self):
  106. self.val.set(0)
  107. def press(self):
  108. #print("ELEM_BUF.press",[self.name,self.type,self.val.get()])
  109. if self.type == "fader":
  110. self.inc(self.increment)
  111. if self.type == "toggle":
  112. if self.val.get():
  113. self.val.set(0)
  114. else:
  115. self.val.set(1)
  116. if self.type == "flash":
  117. self.val.set(1)
  118. self.events.append("press")
  119. self.cb_on.cb("ho")
  120. def release(self):
  121. if self.type == "fader":
  122. self.inc(-self.increment)
  123. if self.type == "flash":
  124. self.val.set(0)
  125. self.events.append("release")
  126. def inc(self,v):
  127. self.val.inc(v)
  128. class VALUE():
  129. def __init__(self,v=0,_min=0,_max=255):
  130. self._val = v
  131. self._max = _max
  132. self._min = _min
  133. def _check(self):
  134. if self._val > self._max:
  135. self._val = self._max
  136. if self._val < self._min:
  137. self._val = self._min
  138. def get(self):
  139. self._check()
  140. return self._val
  141. def set(self,val):
  142. if val <= self._max and val >= self._min:
  143. self._val = val
  144. def inc(self,v):
  145. self._val += v
  146. self._check()
  147. def draw_rect(rgb,pos):
  148. #pygame.draw.rect(self.window,rgb,pos2)
  149. xpos = pos[:]
  150. xpos = [pos[0],pos[0],pos[0],pos[0]]
  151. xpos = pos[:]
  152. xpos = [pos[0],pos[0],pos[0],pos[0]]
  153. x1 = pos[0]
  154. y1 = pos[1]
  155. w = pos[2]
  156. h = pos[3]
  157. x2 = pos[0]+w
  158. y2 = pos[1]+h
  159. #draw_line(x1, y1, x1+200, x2+200, rgb)
  160. #draw_line(30, 300, 30, 900, [255,255,255])
  161. #draw_line(pos[0], pos[1], pos[2], pos[3], rgb)
  162. #draw_line(pos[0], pos[1], pos[2], pos[3], rgb)
  163. #draw_line(pos[0], pos[1], pos[2], pos[3], rgb)
  164. class Button():
  165. def __init__(self,window,pos):
  166. self.window = window
  167. self.event_pos = [0,0]
  168. self.font0 = font1 #pygame.font.SysFont("freesans-bold",16)
  169. self.w = 20
  170. self.h = 10
  171. self.pos = pos
  172. self.rel_pos = [0,0]
  173. self.fader = "h" #v
  174. self.ATTR = "XX"
  175. self.ID = "0"
  176. self.btn1 = ELEM_BUF()
  177. self.btn1.name = "BUTTON"
  178. self.btn1.nr_on = [1,3]
  179. self.btn1.nr_off = [1,3]
  180. #self.btn1.color = LIGHTGRAY
  181. self.btn1.color = GRAY
  182. self.btn1.color_on = RED
  183. self.btn2 = ELEM_BUF() # sel elem
  184. self.btn2.name = "SELECT BUF"
  185. self.btn2.nr_on = [2]
  186. self.btn2.nr_off = [0]
  187. self.btn2.color = GRAY
  188. self.btn2.color_on = YELLOW
  189. self.btn2.type = "toggle"
  190. self.btn3 = ELEM_BUF()
  191. self.btn3.name = "MOUSE FOCUS"
  192. self.btn3.color = GRAY
  193. self.btn3.color_on = WHITHE
  194. self.btn4 = ELEM_BUF()
  195. self.btn4.name = "MOUSE ENCODER"
  196. self.btn4.increment = 4.4
  197. self.btn4.type = "fader"
  198. self.btn4.nr_on = [4]
  199. self.btn4.nr_off = [5]
  200. self.btn4.color = GRAY
  201. self.btn4.color_on = WHITHE
  202. self.btns = []
  203. self.btns.append(self.btn1)
  204. self.btns.append(self.btn2)
  205. self.btns.append(self.btn3)
  206. self.btns.append(self.btn4)
  207. self.__layout = Layout(self)
  208. self.pack = self.__layout.pack
  209. self.grid = self.__layout.grid
  210. self.bind = self.__layout.bind
  211. self.text = "line1\nline2"
  212. self.type = "toggle" # flash, kill
  213. self.dbg = 0
  214. self.text2 = []
  215. def __repr__(self):
  216. x="<sdl.BUTTON name:{} ID:{}-{:8} btn1:{:03} val2:{:03} id at {}>"
  217. x=x.format(self.btn1.name,self.ID,self.ATTR,self.btn1.val.get(),self.btn4.val.get(), id(self))
  218. return x
  219. def check(self):
  220. if self.dbg:
  221. self.text2 = []
  222. #self.text2.append(self.val)
  223. b = []
  224. for btn in self.btns:
  225. b.append(btn.get())
  226. self.text2.append(b)
  227. self.text2.append(self.btn1.type)
  228. self._check_event()
  229. self._check_min_hight()
  230. def draw(self,text="GOBO1"):
  231. self.check()
  232. #self.window.set_alpha(128)
  233. self._draw_bg()
  234. self._draw_fader()
  235. self._draw_font(text="")
  236. #rgb = self.btn2.get_color()
  237. #self._draw_bd(color=rgb)
  238. #self._draw_bd(delta=-1)
  239. #rgb = self.btn3.get_color()
  240. #self._draw_bd(delta=-2,color=rgb)
  241. def get_rect(self):
  242. self.check()
  243. return self.pos[:]
  244. def _check_min_hight(self):
  245. c = 1+ self.text.count("\n") #+1
  246. c += len(self.text2)
  247. fh = get_font_hight(self.font0)
  248. h = (fh+1)*c +6#8 #+8
  249. if self.pos[3] < h:
  250. self.pos[3] = h #ah+20
  251. def _draw_bg(self):
  252. pos = self.pos
  253. rgb = self.btn1.get_color()
  254. rgb = check_rgb(rgb)
  255. #pygame.draw.rect(self.window,rgb,pos)
  256. #draw_line(pos[0], pos[1], pos[0]+pos[2], pos[1]+pos[3], (255,225,0,220))
  257. draw_rectangle(int(pos[0]),int(pos[1]),pos[2],pos[3],rgb)
  258. def _draw_fader(self):
  259. rgb = [0,200,0]
  260. rgb = self.btn4.color_on
  261. pos2 = self.pos[:]
  262. hight = pos2[3]
  263. v = self.btn4.val.get() #self.val.get()
  264. fh = get_font_hight(self.font0)
  265. _max_val = self.btn4.val._max
  266. if self.fader == "h":
  267. pos2[1] += 2 #fh+2
  268. pos2[3] = 4 #fh+2
  269. if v > 0:
  270. pos2[2] = int(pos2[2]* v/_max_val)
  271. else:
  272. pos2[2] = 4
  273. #pygame.draw.rect(self.window,rgb,pos2)
  274. draw_line(pos2[0], pos2[1], pos2[0]+pos2[2], pos2[1], rgb)
  275. elif self.fader == "v":
  276. if v > 0:
  277. pos2[1] += int((hight-20)* v/_max_val)
  278. pos2[3] = 20
  279. else:
  280. pos2[3] = 20
  281. pos2[0] += 6
  282. pos2[2] -= 12
  283. # pygame.draw.rect(self.window,rgb,pos2)
  284. draw_line(pos2[0], pos2[1], pos2[0]+pos2[2], pos2[1], rgb)
  285. def _draw_font(self,text=""):
  286. pos = self.pos
  287. a = pos[0]+4
  288. r = pos[1]+2
  289. v = "{:4.02f}".format(self.btn4.val.get())
  290. lines = self.text.split("\n")
  291. lines.extend(self.text2)
  292. draw_rect([255,0,0],pos)
  293. for i in lines:
  294. i = str(i)
  295. if "<ival%>" in i:
  296. v=float(v)
  297. v=v/self.btn4.val._max*100
  298. v=int(v)
  299. i = i.replace("<ival%>",str(v))
  300. if "<ival>" in i:
  301. i = i.replace("<ival>",str(int(float(v))))
  302. if "<val>" in i:
  303. i = i.replace("<val>",v)
  304. #fr = self.font0.render(i ,1, (0,0,0))
  305. draw_text_ex(self.font0,i, [a,r], font_size, 0, YELLOW)
  306. #draw_rectangle(int(pos[0]+1),int(pos[1]+1),pos[2]-2,pos[3]-2,[250,0,255])
  307. #draw_rect([255,0,0],pos)
  308. #fr_r=fr.get_rect()
  309. #p2 = [pos[0]+4,r,fr_r[2],fr_r[3]]
  310. #if 0:# dbg # bg highlight
  311. # pygame.draw.rect(self.window,[0,0,255],p2)
  312. #self.window.blit(fr,(a,r))
  313. #r+=fr_r[3]+1
  314. r+=int(pos[3]/2)
  315. def _set_mouse_focus(self,state):
  316. if state:
  317. self.btn3.press() # mouse focus on
  318. else:
  319. self.btn3.release()
  320. def _check_event(self):
  321. pass
  322. def _draw_bd(self,delta=0,color=GRAY):#BLACK):
  323. l_pos = draw_bd(pos=self.pos,delta=delta)
  324. for i in l_pos:
  325. pygame.draw.aaline(self.window,color,i[0],i[1],1)
  326. def event(self,event=None):
  327. r_event = {}
  328. if "pos" in event.dict:
  329. self.event_pos = event.pos[:]
  330. update_rel_pos = 0
  331. if "buttons" in event.dict:
  332. if event.dict["buttons"][0]:
  333. update_rel_pos = 1
  334. if "button" in event.dict:
  335. if event.dict["button"] == 1:
  336. update_rel_pos = 1
  337. if update_rel_pos:
  338. rel = [0,0]
  339. rel[0] = self.event_pos[0] -self.pos[0]-4
  340. rel[0] = rel[0]/(self.pos[2]-8)
  341. rel[1] = self.event_pos[1] -self.pos[1]-4
  342. rel[1] = rel[1]/(self.pos[3]-8)
  343. if rel[0] < 0:
  344. rel[0] = 0
  345. if rel[0] > 1:
  346. rel[0] = 1
  347. if rel[1] < 0:
  348. rel[1] = 0
  349. if rel[1] > 1:
  350. rel[1] = 1
  351. #print("RELPOS",rel)
  352. self.rel_pos = rel
  353. self._check_event()
  354. self._set_mouse_focus(0)
  355. if check_area(self.pos,self.event_pos):
  356. self._set_mouse_focus(1)
  357. if "button" in event.dict:
  358. mode = ""
  359. if event.type == 5:
  360. mode = "press"
  361. if event.type == 6:
  362. mode = "release"
  363. e = [event.button,mode]
  364. #print("e",e)
  365. for btn in self.btns:
  366. if e[0] in btn.nr_on and e[1] == "press":
  367. btn.press()
  368. if e[0] in btn.nr_off and e[1] == "release":
  369. btn.release()
  370. re = btn.get_event()
  371. if re and btn.name not in ['MOUSE FOCUS']:
  372. #print("----------------",btn.name,re)
  373. r_event[btn.name] = re
  374. return r_event
  375. pyray.TextureFilter(3)
  376. old_x =10 # m.x
  377. old_y =10 # m.y
  378. c=0
  379. cd = 1
  380. cc=0
  381. import string
  382. while not window_should_close():
  383. begin_drawing()
  384. clear_background(BLACK)
  385. Color(255,0,0,0)
  386. rl_enable_smooth_lines()
  387. font_size = 14
  388. try:
  389. GREY = [122,122,122,255]
  390. p=0
  391. txt=string.printable
  392. v=10
  393. x2 = 10
  394. y2 = 10
  395. txt2 = str(c)
  396. draw_text_ex(font1,txt, [20,320], 22, 0, [255,120,0,123]) #YELLOW)
  397. draw_text_ex(font1,txt2, [140,60], font_size, 0, YELLOW)
  398. draw_text("free fonts included with raylib", 250, 20, 20, GRAY);
  399. draw_text_ex(font1,"free fonts included with raylib", 250, 20, 20, GRAY);
  400. draw_rectangle(x2-1, y2,24,13,[255,255,255,int(v)])
  401. #draw_text("FPS:{}".format(fps_count), 3, 3, 3, VIOLET)
  402. #draw_text("FPS:{}".format(fps_count), 9, 9, 3, VIOLET)
  403. fonts = [None]*10
  404. #fonts[0] = load_font("resources/fonts/alagard.png");
  405. #fonts[0] = load_font("alagard.png");
  406. font2 = load_font("alagard.ttf");
  407. draw_text_ex(font2,"asdlkjaskjdalksjd", [140,160], font_size, 0, YELLOW)
  408. m=get_mouse_position()
  409. if m.x != old_x or m.y != old_y:
  410. old_x = m.x
  411. old_y = m.y
  412. print(m.x,m.y)
  413. draw_text("X:"+str(m.x), 50, 120, 20, GRAY);
  414. draw_text("Y:"+str(m.y), 50, 140, 20, GRAY);
  415. draw_rectangle(int(old_x-10),int(old_y-1),20,2,[255,0,255,255])
  416. draw_rectangle(int(old_x-1),int(old_y-10),2,20,[255,0,255,255])
  417. draw_line(5, 16, 40, 16, (255,225,0,220))
  418. btn = Button(None,[200,200,80,30])
  419. btn.text = "a\n{}".format(c)
  420. btn.btn4.val.set(c) #self.val.get()
  421. if c % 10 == 0:
  422. if cc:
  423. cc=0
  424. else:
  425. cc=1
  426. if cc: #=0
  427. pass#btn.btn1.color = [255,0,0]
  428. else:
  429. pass #btn.btn1.color = [220,221,220]
  430. btn.draw()
  431. #draw_fps(30,10)
  432. end_drawing()
  433. #time.sleep(1/11) # FPS RATE
  434. time.sleep(1/31) # FPS RATE
  435. frame_count += 1
  436. if time.time()-start > 1:
  437. start = time.time()
  438. fps_count = frame_count
  439. frame_count = 0
  440. if cd:
  441. c+=1
  442. else:
  443. c-=1
  444. if c<0:
  445. cd = 1
  446. if c >= 255:
  447. cd = 0
  448. except KeyboardInterrupt as e:
  449. raise e
  450. except Exception as e:# KeyInterupt
  451. print("err",e)
  452. raise e
  453. time.sleep(1)
  454. close_window()