from __future__ import division import os, math from math import pi , tan, radians, sqrt import pyglet from pyglet.gl import * from pyglet.image.codecs import * class TextureEnableGroup(pyglet.graphics.Group): def set_state(self): glEnable(GL_TEXTURE_2D) def unset_state(self): glDisable(GL_TEXTURE_2D) texture_enable_group = TextureEnableGroup() class TextureBindGroup(pyglet.graphics.Group): def __init__(self, texture): super(TextureBindGroup, self).__init__(parent=texture_enable_group) texture.target = GL_TEXTURE_2D self.texture = texture def set_state(self): glBindTexture(GL_TEXTURE_2D, self.texture.id) # No unset_state method required. def __eq__(self, other): return (self.__class__ is other.__class__ and self.texture == other.__class__) class l_items_vectors: def __init__(self, x, y, z): self.x = x self.y = y self.z = z self.vectors = [x, y, z] class l_items(object): def __init__(self, name, execute,icon, cat_type, x, y, z, w, h , bc, tc, batch): self.name = name self.group = None self.execute = execute self.icon = icon self.cat_type = cat_type self.batch = batch self.x = float(x) self.y = float(y) self.z = float(0) self.w = float(w) self.h = float(h) self.box_verts = [self.x,self.y,self.z,self.x,self.y+self.h,self.z,self.x+self.w,self.y+self.h,self.z,self.x+self.w,self.y,self.z] self.box_verts2d = [self.x,self.y,self.x,self.y+self.h,self.x+self.w,self.y+self.h,self.x+self.w,self.y] self.box_icon = [self.x+(self.w/2)-32, self.y+16, self.x+(self.w/2)+32, self.y+16, self.x+(self.w/2)+32, self.y+80, self.x+(self.w/2)-32, self.y+80] self.lable_x = self.x self.lable_y = self.y self.lable_z = self.z self.color = (255, 255, 255, 255) self.box_color = bc self.highted = False #self.fimg = pyglet.image.load('texture.png') self.fimg = pyglet.image.Texture.create(512, 512, GL_RGBA) if self.icon: try: self.icon_image = pyglet.image.load(self.icon) #self.icon_image = pyglet.image.load(self.icon, decoder=PNGImageDecoder()) except : try: self.icon_image = pyglet.image.load(self.icon, decoder=GdkPixbuf2ImageDecode()) except : self.icon_image = pyglet.resource.image('no_icon.png') else: self.icon_image = pyglet.resource.image('no_icon.png') #itc = self.icon_image.get_texture() #gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER, gl.GL_NEAREST) #itc.width = 64 #itc.height = 64 #self.icon_image.width = 64 #self.icon_image.height = 64 iiw, iih = self.icon_image.width, self.icon_image.height self.fimg_tex = self.fimg.get_texture() print self.fimg #itc.blit_into(self.fimg_tex, 0, 0, 0) #self.icon_image.blit_to_texture(self.fimg_tex.target, 0, int(self.w/2 - iiw/2), 8, 8) #self.icon_image.blit_to_texture(self.fimg_tex.target, 0, 0, 8, 8) self.fimg_tex.width = 200 self.fimg_tex.height = 80 self.fimg = self.fimg.get_region(0, 0, int(self.w), int(self.h)) self.fimg_tex = self.fimg_tex.get_transform(self, rotate=90) self.img_tex = self.icon_image.get_texture() self.img_tex.width = 64 self.img_tex.height = 64 self.img_tex = self.img_tex.get_region(0, 0, 64,64) #self.img_tex = self.img_tex.get_transform(self, rotate=90) #self.group = pyglet.sprite.SpriteGroup(self.fimg_tex,blend_src=GL_SRC_ALPHA, blend_dest=GL_ONE) self.group = TextureBindGroup(self.img_tex) self.text_group = pyglet.graphics.OrderedGroup(1) self.background_group = pyglet.graphics.OrderedGroup(0) self.draw_box() self.draw_title() def draw_box(self): #self.vertex_list = self.batch.add(4, pyglet.gl.GL_QUADS, None , # ('v2f', self.box_verts2d), # ('c4f', self.box_color*4) # ) self.vertex_list = self.batch.add(4, pyglet.gl.GL_QUADS,self.group , #('c4f', self.box_color*4), ('v2f/static', self.box_icon), ('t3f/static', self.img_tex.tex_coords)) self.vertex_list = self.batch.add(4, pyglet.gl.GL_QUADS, None , ('v3f/static', self.box_verts), ('c4f/static', self.box_color*4) ) def draw_title(self): if self.name: self.text_label = pyglet.text.Label(self.name, x=self.x+self.w//2, y=self.y+14, anchor_y='top',anchor_x='center' , color=self.color, bold=True, font_name ='FreeSans', font_size = 8, batch = self.batch, group = self.text_group ) def draw_icon(self): pass def get_xyz(self): return self.x, self.y, self.z def get_box_verts(self): return self.box_verts def draw_all(self): batch.draw() def update(self): self.box_verts = [self.x,self.y,self.z,self.x,self.y+self.h,self.z,self.x+self.w,self.y+self.h,self.z,self.x+self.w,self.y,self.z] self.box_verts2d = [self.x,self.y,self.x,self.y+self.h,self.x+self.w,self.y+self.h,self.x+self.w,self.y] self.vertex_list.vertices = self.box_verts self.vertex_list.colors = self.box_color*4 class top_titles(object): def __init__(self, x, y , n , ww, wh, text, batch): self.x = x self.y = y self.wh = wh self.ww = ww self.text = text self.cx = (n/2)+self.x self.batch = batch self.label = pyglet.text.Label(self.text, font_name='FreeSans', font_size=24, x = self.cx, y= self.wh-(self.y /2), anchor_x='center', anchor_y='center', batch = self.batch) def update(self, x ): self.x = x self.label.x = self.x def get_center_x(self): return self.cx