From 4613faa566f44ba50c2a63285ee21ee6f3e827f8 Mon Sep 17 00:00:00 2001 From: Le_dahut Date: Tue, 10 Jun 2014 00:48:08 +0200 Subject: [PATCH] Ajout de nouveaux curseurs --- WireChem.py | 38 ++++++++++++++++++++++++++++---------- cursor/create.png | Bin 0 -> 2169 bytes cursor/cross.png | Bin 0 -> 1778 bytes cursor/delete.png | Bin 0 -> 3469 bytes cursor/move.png | Bin 0 -> 3539 bytes cursor/pointer.png | Bin 0 -> 3435 bytes cursor/text.png | Bin 0 -> 1460 bytes 7 files changed, 28 insertions(+), 10 deletions(-) create mode 100644 cursor/create.png create mode 100644 cursor/cross.png create mode 100644 cursor/delete.png create mode 100644 cursor/move.png create mode 100644 cursor/pointer.png create mode 100644 cursor/text.png diff --git a/WireChem.py b/WireChem.py index a6b4bd5..41c48b8 100644 --- a/WireChem.py +++ b/WireChem.py @@ -182,27 +182,36 @@ class arect(object): #Classe d'un texte editable class atext(object): - def __init__(self,window,text,x,y,width,color,font,size,align): + def __init__(self,window,text,x,y,width,color,font,size): self.x=x self.y=y + self.loaded='' self.text=text self.color=color self.document = pyglet.text.document.UnformattedDocument(text) - self.document.set_style(0, len(self.document.text),dict(font_name=font,font_size=size,color=color,background_color=(200, 200, 200,0),align=align)) + self.document.set_style(0, len(self.document.text),dict(font_name=font,font_size=size,color=color,background_color=(200, 200, 200,0))) font = self.document.get_font() height = font.ascent - font.descent self.window=window self.layout = pyglet.text.layout.IncrementalTextLayout(self.document, width, height, multiline=False, batch=self.window.batch, group=self.window.p3) + self.layout.register_event_type('self.on_layout_update') self.caret = pyglet.text.caret.Caret(self.layout) self.caret.visible = False self.layout.x = self.x self.layout.y = self.y def update(self): + self.layout.begin_update() self.layout.x = self.x self.layout.y = self.y self.layout.document.text=self.text self.layout.document.set_style(0, len(self.layout.document.text),dict(color=self.color)) + self.layout.end_update() + + def on_layout_update(self): + print "**************************" + if self.loaded!='': + eval(self.loaded+"="+self.text) def hit_test(self, x, y): return (0 < x - self.layout.x < self.layout.width and 0 < y - self.layout.y < self.layout.height) @@ -434,7 +443,8 @@ class menu(pyglet.window.Window): global debug,worlds,world super(menu, self).__init__(width=1024, height=768, resizable=True, fullscreen=False, visible=True, caption="Wirechem: The new chemistry game") self.focus = None - self.text_cursor = self.get_system_mouse_cursor('text') + self.cursors = [pyglet.window.ImageMouseCursor(pyglet.image.load('cursor/pointer.png'), 16, 8),pyglet.window.ImageMouseCursor(pyglet.image.load('cursor/text.png'), 16, 8),pyglet.window.ImageMouseCursor(pyglet.image.load('cursor/move.png'), 16, 8),pyglet.window.ImageMouseCursor(pyglet.image.load('cursor/create.png'), 16, 8),pyglet.window.ImageMouseCursor(pyglet.image.load('cursor/cross.png'), 16, 8),pyglet.window.ImageMouseCursor(pyglet.image.load('cursor/delete.png'), 16, 8)] + self.set_mouse_cursor(self.cursors[0]) self.batch = pyglet.graphics.Batch() self.p0 = pyglet.graphics.OrderedGroup(0) self.p1 = pyglet.graphics.OrderedGroup(1) @@ -470,8 +480,8 @@ class menu(pyglet.window.Window): abutton(self,'level_9',-250, 0, 0, 0 , True, False, True, False, self.images[level], 'test', 'icon', '', ''), abutton(self,'level_10',-250, 0, 0, 0 , True, False, True, False, self.images[level], 'test', 'icon', '', '') ] - self.untitled2=[atext(self,"text",-300,-300,300,(255, 255, 255,255),'Fluoxetine',18,'center') for i in range(10)] - self.untitled=[atext(self,"text",-300,-300,60,(180, 180, 180,255),'Vademecum',23,'center') for i in range(10)] + self.untitled2=[atext(self,"text",-300,-300,300,(255, 255, 255,255),'Fluoxetine',18) for i in range(10)] + self.untitled=[atext(self,"text",-300,-300,60,(180, 180, 180,255),'Vademecum',23) for i in range(10)] self.special=pyglet.sprite.Sprite(pyglet.image.load('picture/boss.png'),batch=self.batch, group=self.p4,x=-300,y=-300) self.lock=[pyglet.sprite.Sprite(pyglet.image.load('picture/locked.png'),batch=self.batch, group=self.p4,x=-300,y=-300) for i in range(10)] self.update() @@ -526,14 +536,15 @@ class menu(pyglet.window.Window): self.levels[l].content=self.images[world] self.levels[l].update(0) self.untitled[l].text=ele['element'] + self.untitled[l].update() self.untitled[l].x=ele['_xx']+(self.images[world].width-self.untitled[l].layout.content_width)/2 self.untitled[l].y=ele['_yy']/768.0*self.height+20 self.untitled[l].color=(int(ele['_xx']/1024.0*150), int(ele['_xx']/1024.0*150), int(ele['_xx']/1024.0*150),255) - self.untitled[l].update() + self.untitled[l].update() self.untitled2[l].text=ele['nom'].decode('utf-8') - self.untitled2[l].update() self.untitled2[l].x=ele['_xx']+(self.images[world].width-self.untitled2[l].layout.content_width)/2 self.untitled2[l].y=ele['_yy']/768.0*self.height-20 + self.untitled2[l].loaded='worlds['+str(world)+']['+str(l)+']["nom"]' if (world,l) in finished or debug==2: self.untitled2[l].color=(255,255,255,255) else: @@ -675,9 +686,11 @@ class menu(pyglet.window.Window): if state['buttons']==2: worlds[world][n]["_xx"]+=state['dx'] worlds[world][n]["_yy"]+=state['dy'] + self.set_mouse_cursor(self.cursors[2]) self.update() elif (state['buttons']==1 or state['buttons']==4) and type(self.selected) is int: self.selected=(world,n) + self.set_mouse_cursor(self.cursors[3]) def on_mouse_release_level(self, n, state): global worlds,world @@ -703,6 +716,7 @@ class menu(pyglet.window.Window): dummy=0 else: self.selected=-1 + self.set_mouse_cursor(self.cursors[0]) def on_mouse_leave_menu(self, n, state): self.buttons[2+n].setselected(False) @@ -802,10 +816,10 @@ class menu(pyglet.window.Window): return for widget in self.untitled2+self.untitled: if widget.hit_test(x, y): - self.set_mouse_cursor(self.text_cursor) + self.set_mouse_cursor(self.cursors[1]) break else: - self.set_mouse_cursor(None) + self.set_mouse_cursor(self.cursors[0]) def on_text(self, text): if debug<2: @@ -827,7 +841,11 @@ class menu(pyglet.window.Window): def on_key_press(self, symbol, modifiers): if debug<2: - return + return + if modifiers & key.MOD_SHIFT: + self.set_mouse_cursor(self.cursors[4]) + elif modifiers & key.MOD_CTRL: + self.set_mouse_cursor(self.cursors[5]) if symbol == pyglet.window.key.TAB: if modifiers & pyglet.window.key.MOD_SHIFT: dir = -1 diff --git a/cursor/create.png b/cursor/create.png new file mode 100644 index 0000000000000000000000000000000000000000..c724438c5611703534dbb57e6761125e745515d7 GIT binary patch literal 2169 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 literal 0 HcmV?d00001 diff --git a/cursor/move.png b/cursor/move.png new file mode 100644 index 0000000000000000000000000000000000000000..b57a093e4f07859313145578a92ec8e5364675d3 GIT binary patch literal 3539 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 literal 0 HcmV?d00001 diff --git a/cursor/pointer.png b/cursor/pointer.png new file mode 100644 index 0000000000000000000000000000000000000000..4301fb4e31b55b38bb008b9d3578398ea4025ef1 GIT binary patch literal 3435 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 literal 0 HcmV?d00001 diff --git a/cursor/text.png b/cursor/text.png new file mode 100644 index 0000000000000000000000000000000000000000..12ef1f8521e9dd97753a79a1ae604e37d68251d6 GIT binary patch literal 1460 zcmV;l1xxygP)B0ax_! z-@vAbyi`iLX}-@)^I?TTAs+<6m%z8c*T6I|0gMA#pi?Lmj>9mF(t4+rCIHuU7l0q~ z`TUJ?xm=o?n*(5bdz)&t`nl(MZ*~; z<#IfbhXf*7!+}BFM0s@Fq z%4jy525>4Oww{j@vbIvnZ#J7*y(UhqSAzoZFA(}Pl~OifCoG)2H@emh%mUKwMhUmH z^sn?7OXeQcuNBfvWbz)XNRRoU$;3(J&a5Ht0AzH@%Ah~ucY%-(92<%#)Ni7cLAsDi zVH4FbxX?v*GS&JkRZ97ZEcD3$sKl@8x{vj#5*az}A*cEUYNfElDxow9MY{ncf%O7D zFaSwqI-01sx`^xOd0&qOXVq&OyWejVO76T8kxn+74HFxa)!a9uuPuOVHXDjar^`wo z4I(W*Kt7+3Mn*;?3_~Z5<3->GFt16x2ed59YLAYNhCnBZA{iDJiUHMbw>z0kW;}|b zYrqQdjqVkpuj43+@~u|uMGyo>BEm2LIIsCdBnvD8-;a!pEYHu+f3~o&5Cd#&ZOy)V z^{UWrw@1P-^hMizwZ+B7>AQFD#E1c3xWAeBnRtX8YiZnu4)1)S|+xv-_9&@B=9u2?LV zOQlj4pwVdf`}_MV2))6;_Q`*XlG;0xfAmOTdk z0A6IX+3j2|=boIL7+UF$J_icG0x%3iOw-JVVK@O?1{^Kh1a@uPKJ0WlUL40~{vQn* zfT5MQ08_{HSSfYZ3p)EBAOJ!=Z|M1s1`ze*La7oOrIeBIYriYo8hYONSY