fix.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438
  1. import math
  2. import random
  3. import time
  4. import os
  5. import sys
  6. START = time.time()
  7. _START = time.time()
  8. from optparse import OptionParser
  9. ...
  10. parser = OptionParser()
  11. parser.add_option("-m", "--mode", dest="mode",
  12. help="pixel mode") #, metavar="FILE")
  13. parser.add_option("-X", "--XX", dest="XX", #default=1,
  14. help="x-split") #, metavar="FILE")
  15. parser.add_option("-x", "--xx", dest="xsplit", #default=1,
  16. help="x-split") #, metavar="FILE")
  17. parser.add_option("-y", "--yy", dest="ysplit",#default=1,
  18. help="y-split") #, metavar="FILE")
  19. parser.add_option("-s", "--start-univ", dest="start_univ",#default=1,
  20. help="set start-univers default=2") #, metavar="FILE")
  21. parser.add_option("-g", "--gobo-ch", dest="gobo_ch",#default=1,
  22. help="gobo ch univ on 1") #, metavar="FILE")
  23. #parser.add_option("-f", "--file", dest="filename",
  24. # help="write report to FILE", metavar="FILE")
  25. #parser.add_option("-q", "--quiet",
  26. # action="store_false", dest="verbose", default=True,
  27. # help="don't print status messages to stdout")
  28. (options, args) = parser.parse_args()
  29. # ===== GUI =========
  30. import pygame
  31. import pygame.gfxdraw
  32. import pygame.font
  33. os.environ['SDL_VIDEO_WINDOW_POS'] = '%i,%i' % (200,55)
  34. os.environ['SDL_VIDEO_CENTERED'] = '0'
  35. pg = pygame
  36. pygame.init()
  37. pygame.mixer.quit()
  38. f = pygame.font.get_fonts()
  39. f = list(f)
  40. f.sort()
  41. for i in f:
  42. if 1:# "mono" in i.lower():
  43. print(i)
  44. font0 = pygame.font.SysFont("freesans",10)
  45. font0b = pygame.font.SysFont("freesansbold",10)
  46. font = pygame.font.SysFont("freemonobold",22)
  47. font10 = pygame.font.SysFont("freemonobold",10)
  48. font12 = pygame.font.SysFont("freemonobold",12)
  49. font15 = pygame.font.SysFont("freemonobold",15)
  50. font22 = pygame.font.SysFont("FreeSans",22)
  51. #font = pygame.font.SysFont(None,30)
  52. fr = font.render("hallo" ,1, (200,0,255))
  53. class Layout():
  54. def __init__(self,master):
  55. self.master = master
  56. def pack(self,**args):
  57. pass
  58. def grid(self,**args):
  59. pass
  60. def bind(self,**args):
  61. pass
  62. class Button():
  63. def __init__(self,window,pos):
  64. self.window = window
  65. self.event_pos = [0,0]
  66. self.w = 20
  67. self.h = 10
  68. self.pos = pos
  69. self.on = 0
  70. self.bd = [0,255,0]
  71. self.on_bg = [255,255,0]
  72. self.rgb = (0xaa,0xaa,0xaa,127)
  73. self.__layout = Layout(self)
  74. self.pack = self.__layout.pack
  75. self.grid = self.__layout.grid
  76. self.bind = self.__layout.bind
  77. self.text = "line1\nline2"
  78. self.motion = 0
  79. def draw(self,text="GOBO1"):
  80. #pos = [160,100,70,60]
  81. #rgb = (0xdd,0xdd,0xdd,0)
  82. #rgb = (0xaa,0xaa,0xaa,0)
  83. pos = self.pos
  84. rgb = self.rgb
  85. window.set_alpha(128)
  86. if self.on:
  87. rgb = self.on_bg
  88. pygame.draw.rect(self.window,rgb,pos)
  89. r = pos[1]+6
  90. for i in self.text.split("\n"):
  91. fr = font0.render(i ,1, (0,0,0))
  92. #fr = font.render("You win!", True, BLACK)
  93. #text_rect = fr.get_rect(center=(SCREEN_WIDTH/2, SCREEN_HEIGHT/2))
  94. self.window.blit(fr,(pos[0]+4,r))
  95. r += 10
  96. self._check_event()
  97. self._draw_bd(color=(0xaa,0xaa,0xaa))
  98. self._draw_bd(delta=-1)
  99. self._draw_bd(delta=-2,highlight=1,color=self.bd)
  100. def _check_event(self):
  101. self.bd = [125,125,125]
  102. self.motion = 0
  103. if self.event_pos[0] < self.pos[0]+1:
  104. return #continue
  105. if self.event_pos[0] > self.pos[0]+self.pos[2]-1:
  106. return #continue
  107. if self.event_pos[1] < self.pos[1]+1:
  108. return #continue
  109. if self.event_pos[1] > self.pos[1]+self.pos[3]-1:
  110. return #continue
  111. #print(">>",self.event_pos)
  112. self.bd = [200,200,200]
  113. self.motion = 1
  114. def _draw_bd(self,delta=0,highlight=0,color=[0,0,0]):
  115. pos = self.pos
  116. d = delta
  117. xpos = (
  118. (pos[0]-d ,pos[1]-d),
  119. (pos[0]+pos[2]+d-1 ,pos[1]-d),
  120. (pos[0]+pos[2]+d-1 ,pos[1]+pos[3]+d-1),
  121. (pos[0]-d ,pos[1]+pos[3]+d-1)
  122. )
  123. i_old = None
  124. ypos = []
  125. for i in xpos:
  126. if i_old:
  127. ypos.append( (i_old,i) )
  128. i_old = i
  129. ypos.append( (i_old,xpos[0]) )
  130. for i in ypos:
  131. #print("ypos",i)
  132. pygame.draw.aaline(window,color,i[0],i[1],1)
  133. def event(self,event=None):
  134. #print(self.pos)
  135. if "pos" in event.dict:
  136. self.event_pos = event.pos
  137. self._check_event()
  138. if self.motion:
  139. #print(self,"Motion.event",event)
  140. if "button" in event.dict:
  141. print("-",self,"Button.event",event.dict)
  142. print(type(event))
  143. if event.type == 5:
  144. if event.button == 1:
  145. if self.on:
  146. self.on = 0
  147. else:
  148. self.on = 1
  149. def draw_box(pos1,pos2,color=[128,128,128],text=1):
  150. color = [200,0,0,127]
  151. if text:
  152. fr = font15.render("A" ,1, (200,200,200))
  153. window.blit(fr,pos1)
  154. fr = font15.render("B" ,1, (200,200,200))
  155. window.blit(fr,[pos2[0]-10,pos2[1]-10])
  156. # h unten
  157. _pos1 = [pos1[0],pos2[1]]
  158. _pos2 = [pos2[0],pos2[1]]
  159. pygame.draw.aaline(window,color,_pos1,_pos2,1)
  160. color = [255,255,0,127]
  161. # h rechts
  162. _pos1 = [pos2[0],pos1[1]]
  163. _pos2 = [pos2[0],pos2[1]]
  164. pygame.draw.aaline(window,color,_pos1,_pos2,1)
  165. color = [0,200,0,127]
  166. # h links
  167. _pos1 = [pos1[0],pos1[1]]
  168. _pos2 = [pos1[0],pos2[1]]
  169. pygame.draw.aaline(window,color,_pos1,_pos2,1)
  170. color = [0,0,200,127]
  171. # h oben
  172. _pos1 = [pos1[0],pos1[1]]
  173. _pos2 = [pos2[0],pos1[1]]
  174. pygame.draw.aaline(window,color,_pos1,_pos2,1)
  175. main_size=(500,500)
  176. window = pygame.display.set_mode(main_size,pg.RESIZABLE,32)#,32)#,pygame.FULLSCREEN) #x left->right ,y top-> bottom
  177. #pygame.mouse.set_cursor(pygame.SYSTEM_CURSOR_ARROW)
  178. pg.display.set_caption('NEXTGEN GUI')
  179. class Gevent():
  180. def __init__(self):
  181. self.drag = 0
  182. self.pos1 = [0,0]
  183. self.pos2 = [0,0]
  184. self.event_pos = [0,0]
  185. self.gain = 0
  186. def check_in(self,elem):
  187. print(self.event_pos)
  188. print(self.pos1)
  189. print(self.pos2)
  190. print(elem.pos)
  191. def draw(self,delta=0,highlight=0,color=[0,255,0]):
  192. if self.pos1 == [0,0]:
  193. return
  194. if self.pos2 == [0,0]:
  195. return
  196. #if not self.drag:
  197. # return
  198. pos1 = [self.pos1[0],self.pos1[1]]
  199. pos2 = [self.pos2[0],self.pos2[1]]
  200. #pygame.draw.aaline(window,color,pos1,pos2,1)
  201. color = [200,0,0,127]
  202. draw_box(self.pos1,self.pos2)
  203. return 0
  204. fr = font15.render("A" ,1, (200,200,200))
  205. window.blit(fr,self.pos1)
  206. fr = font15.render("B" ,1, (200,200,200))
  207. window.blit(fr,[self.pos2[0]-10,self.pos2[1]-10])
  208. # h unten
  209. pos1 = [self.pos1[0],self.pos2[1]]
  210. pos2 = [self.pos2[0],self.pos2[1]]
  211. pygame.draw.aaline(window,color,pos1,pos2,1)
  212. color = [255,255,0,127]
  213. # h rechts
  214. pos1 = [self.pos2[0],self.pos1[1]]
  215. pos2 = [self.pos2[0],self.pos2[1]]
  216. pygame.draw.aaline(window,color,pos1,pos2,1)
  217. color = [0,200,0,127]
  218. # h links
  219. pos1 = [self.pos1[0],self.pos1[1]]
  220. pos2 = [self.pos1[0],self.pos2[1]]
  221. pygame.draw.aaline(window,color,pos1,pos2,1)
  222. color = [0,0,200,127]
  223. # h oben
  224. pos1 = [self.pos1[0],self.pos1[1]]
  225. pos2 = [self.pos2[0],self.pos1[1]]
  226. pygame.draw.aaline(window,color,pos1,pos2,1)
  227. def event(self,event):
  228. print("GLOBAL",self,self.event_pos,event,event.type)
  229. if event.type == pygame.QUIT:
  230. pygame.quit()
  231. sys.exit(0)
  232. elif event.type == pygame.VIDEORESIZE:
  233. scrsize = event.size
  234. width = event.w
  235. hight = event.h
  236. screen = pygame.display.set_mode(scrsize,pg.RESIZABLE)
  237. changed = True
  238. if "pos" in event.dict:
  239. self.event_pos = event.pos
  240. #self._check_event()
  241. if "button" in event.dict:
  242. if event.button == 1 and event.type == 5: # and self.drag:
  243. self.pos1 = self.event_pos
  244. self.drag = 0
  245. if "buttons" in event.dict:
  246. if event.buttons[0] == 1:
  247. self.pos2 = self.event_pos
  248. self.drag = 1
  249. else:
  250. self.drag = 0
  251. if "gain" in event.dict:
  252. self.gain = event.gain
  253. global_event = Gevent()
  254. def main():
  255. START = time.time()
  256. running = 1
  257. frame = 0
  258. fps = 0
  259. b0 = Button(window,pos=[80,80,50,40])
  260. b1 = Button(window,pos=[100,100,60,40])
  261. b2 = Button(window,pos=[200,200,60,40])
  262. b2a = Button(window,pos=[260,200,60,40])
  263. b3 = Button(window,pos=[1500,800,60,40])
  264. table = []
  265. r = 0
  266. for i in range(20):
  267. bx = Button(window,pos=[20,150+r,60,20])
  268. bx.text = "FIX:{}".format(i+1)
  269. bx.on_bg = [255,0,255]
  270. table.append(bx)
  271. r+=20
  272. while running:
  273. pygame.display.flip()
  274. #event()
  275. pos = [160,10,70,60]
  276. rgb = (0xdd,0xdd,0xdd,0)
  277. rgb = (0xaa,0xaa,0xaa,0)
  278. window.fill((0,0,0))
  279. fr = font22.render("DEMO / TEST - MODE !" ,1, (200,200,200))
  280. window.blit(fr,(10,30 ))
  281. fr = font15.render("{}".format(pos[1]) ,1, (200,200,200))
  282. window.blit(fr,(10,pos[1] ))
  283. fr = font15.render("{}".format(fps) ,1, (200,200,200))
  284. window.blit(fr,(30,pos[1] ))
  285. fr = font15.render("{}".format(frame) ,1, (200,200,200))
  286. window.blit(fr,(60,pos[1] ))
  287. fr = font15.render("{:03}".format(int((START+1-time.time())*100)) ,1, (200,200,200))
  288. window.blit(fr,(80,pos[1] ))
  289. #print(window,rgb,pos)
  290. #pygame.draw.rect(window,rgb,pos)
  291. #pygame.draw.rect(window,(255,0,0),(15,15,20,10))
  292. for event in pygame.event.get():
  293. global_event.event(event)
  294. b0.event(event)
  295. b1.event(event)
  296. b2.event(event)
  297. b2a.event(event)
  298. b3.event(event)
  299. for t in table:
  300. t.event(event)
  301. b0.draw()
  302. b1.draw()
  303. b2.draw()
  304. b2a.draw()
  305. b3.draw()
  306. c = (200,200,200)
  307. #for t in table:
  308. # global_event.check_in(t)
  309. for t in table:
  310. t.draw()
  311. global_event.check_in(t)
  312. fr = font15.render("A:{}".format(str(global_event.pos1)) ,1, c)
  313. window.blit(fr,(200,pos[1] ))
  314. fr = font15.render("B:{}".format(str(global_event.pos2)) ,1, c)
  315. window.blit(fr,(200,pos[1]+10 ))
  316. if global_event.gain:
  317. c = (0,255,0)
  318. #blue box
  319. if global_event.pos1[0] > global_event.event_pos[0] and global_event.pos2[0] < global_event.event_pos[0]:
  320. #c = (0,0,255)
  321. if global_event.pos1[1] > global_event.event_pos[1] and global_event.pos2[1] < global_event.event_pos[1]:
  322. c = (0,0,255)
  323. # red box
  324. if global_event.pos1[0] < global_event.event_pos[0] and global_event.pos2[0] > global_event.event_pos[0]:
  325. #c = (0,0,255)
  326. if global_event.pos1[1] < global_event.event_pos[1] and global_event.pos2[1] > global_event.event_pos[1]:
  327. c = (255,0,0)
  328. fr = font15.render("{:03}/{:03}".format(global_event.event_pos[0],global_event.event_pos[1]) ,1, c)
  329. window.blit(fr,(120,pos[1] ))
  330. global_event.draw()
  331. pygame.display.flip()
  332. pg.time.wait(30)
  333. pg.time.wait(30)
  334. #pg.time.wait(30)
  335. frame += 1
  336. if START+1 < time.time():
  337. fps = frame
  338. frame = 0
  339. START = time.time()
  340. if __name__ == "__main__":
  341. main()