test.py 14 KB

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