class OpenglScreen(QtOpenGL.QGLWidget): SELECT_SCREEN = 1 INTRO_SCREEN_1 = 2 INTRO_SCREEN_2 = 3 INTRO_SCREEN_3 = 4 BADGE_SCREEN = 5 def __init__(self, width, height): # Base constructor QtOpenGL.QGLWidget.__init__(self) self.setMouseTracking(True) self.width = width self.height = height # Initialize the painter self.painter = QtGui.QPainter() self.printer = Printer() self.gender = -1 self.avatarImg = None self.avatarTex = None # Adding the avatar buttons # Avatar Male self.initMImg = pygame.image.load("../../images/wireframe_m0.png") self.initMTex = 0 # Avatar Female self.initFImg = pygame.image.load("../../images/wireframe_f0.png") self.initFTex = 0 self.welcomeImg = pygame.image.load( "../../images/welcome_intro/welcome_noavatars.png") self.welcomeTex = 0 # self.btnGraph1 = Button(u"\u25c4", 10, 15, 100, 50) # self.btnGraph2 = Button(u"\u25ba", self.width - 110, 15, 100, 50) self.Next1btn = Button(u"\u25ba", self.width - 110, 15, 100, 50) self.Next1btn.disable() self.Next2btn = Button(u"\u25ba", self.width - 110, 15, 100, 50) self.Next2btn.disable() self.Next3btn = Button(u"\u25ba", self.width - 110, 15, 100, 50) self.Next3btn.disable() self.btnOkay = Button("DONE", self.width - 130, 15, 120, 50) self.btnOkay.disable() self.Back1btn = Button(u"\u25c4", 10, 15, 100, 50) self.Back1btn.disable() self.Back2btn = Button(u"\u25c4", 10, 15, 100, 50) self.Back2btn.disable() self.Back3btn = Button(u"\u25c4", 10, 15, 100, 50) self.Back3btn.disable() self.showing = self.SELECT_SCREEN def initializeGL(self): #self.autoBufferSwap(False) # Initialize the context gl.glClearColor(0.94, 0.94, 0.0, 1) gl.glEnable(gl.GL_LINE_STIPPLE) gl.glEnable(gl.GL_TEXTURE_2D) # self.badgeScreen.init("") self.initMTex = gl.glGenTextures(1) gl.glBindTexture(gl.GL_TEXTURE_2D, self.initMTex) gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER, gl.GL_LINEAR) gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER, gl.GL_LINEAR) gl.glTexImage2D(gl.GL_TEXTURE_2D, 0, gl.GL_RGBA, self.initMImg.get_width(), self.initMImg.get_height(), 0, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, pygame.image.tostring(self.initMImg, "RGBA", 1)) # Avatar Female self.initFTex = gl.glGenTextures(1) gl.glBindTexture(gl.GL_TEXTURE_2D, self.initFTex) gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER, gl.GL_LINEAR) gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER, gl.GL_LINEAR) gl.glTexImage2D(gl.GL_TEXTURE_2D, 0, gl.GL_RGBA, self.initFImg.get_width(), self.initFImg.get_height(), 0, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, pygame.image.tostring(self.initFImg, "RGBA", 1)) self.welcomeTex = gl.glGenTextures(1) gl.glBindTexture(gl.GL_TEXTURE_2D, self.welcomeTex) gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER, gl.GL_LINEAR) gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER, gl.GL_LINEAR) gl.glTexImage2D(gl.GL_TEXTURE_2D, 0, gl.GL_RGBA, self.welcomeImg.get_width(), self.welcomeImg.get_height(), 0, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, pygame.image.tostring(self.welcomeImg, "RGBA", 1)) self.buttonM = ImageButton(self.initMImg, self.initMTex, 1090, 535) self.buttonF = ImageButton(self.initFImg, self.initFTex, 444, 535) self.buttonM.enable() self.buttonF.enable() def resizeGL(self, width, height): # Update the attributes self.width = width self.height = height # Set up an orthographic view gl.glMatrixMode(gl.GL_PROJECTION) gl.glLoadIdentity() gl.glOrtho(0, self.width, self.height, 0, -1, 1) gl.glMatrixMode(gl.GL_MODELVIEW) gl.glLoadIdentity() # Set up the viewport gl.glViewport(0, 0, width, height) # Displaying the images for the new screens def displayImage(self, texture, image, x, y): gl.glPushMatrix() gl.glLoadIdentity() gl.glColor3f(0.94, 0.94, 0.94) #gl.glColor4f(1.0, 1.0, 1.0, 0.0) gl.glBindTexture(gl.GL_TEXTURE_2D, texture) gl.glBegin(gl.GL_QUADS) gl.glTexCoord2f(0.0, 1.0) gl.glVertex2f(x, y) gl.glTexCoord2f(1.0, 1.0) gl.glVertex2f(x + image.get_width(), y) gl.glTexCoord2f(1.0, 0.0) gl.glVertex2f(x + image.get_width(), y + image.get_height()) gl.glTexCoord2f(0.0, 0.0) gl.glVertex2f(x, y + image.get_height()) gl.glEnd() gl.glPopMatrix() gl.glBindTexture(gl.GL_TEXTURE_2D, 0) def mouseMoveEvent(self, event): self.buttonM.update(event.x(), event.y()) self.buttonF.update(event.x(), event.y()) self.btnOkay.update(event.x(), event.y()) self.Next1btn.update(event.x(), event.y()) self.Next2btn.update(event.x(), event.y()) self.Next3btn.update(event.x(), event.y()) self.btnOkay.update(event.x(), event.y()) self.Back1btn.update(event.x(), event.y()) self.Back2btn.update(event.x(), event.y()) self.Back3btn.update(event.x(), event.y()) self.repaint() def mousePressEvent(self, event): if (self.buttonM.isMouseOver() == True): self.showing = self.INTRO_SCREEN_1 self.Next1btn.enable() self.buttonF.disable() self.buttonM.disable() self.gender = 0 # Checking if male self.repaint() elif (self.buttonF.isMouseOver() == True): self.showing = self.INTRO_SCREEN_1 self.Next1btn.enable() self.buttonF.disable() self.buttonM.disable() self.gender = 1 # Checking if female self.repaint() if (self.Next1btn.isMouseOver() == True): self.showing = self.INTRO_SCREEN_2 self.Next2btn.enable() self.Back1btn.enable() self.Next1btn.disable() self.repaint() if (self.Next2btn.isMouseOver() == True): self.showing = self.INTRO_SCREEN_3 self.Next3btn.enable() self.Back2btn.enable() self.Next2btn.disable() self.repaint() if (self.Next3btn.isMouseOver() == True): self.showing = self.BADGE_SCREEN self.btnOkay.enable() self.Back3btn.enable() self.Next3btn.disable() self.repaint() if (self.btnOkay.isMouseOver() == True): import subprocess # os.chdir('../') theproc = subprocess.Popen([sys.executable, "index.py"]) theproc.communicate() sys.exit(0) if (self.Back1btn.isMouseOver() == True): self.showing = self.INTRO_SCREEN_1 self.Back1btn.disable() self.Next2btn.disable() self.Next1btn.enable() self.repaint() if (self.Back2btn.isMouseOver() == True): self.showing = self.INTRO_SCREEN_2 self.Back2btn.disable() self.Next3btn.disable() self.Next2btn.enable() self.Back1btn.enable() self.repaint() if (self.Back3btn.isMouseOver() == True): self.showing = self.INTRO_SCREEN_3 self.Back3btn.disable() self.btnOkay.disable() self.Next3btn.enable() self.Back2btn.enable() self.repaint() def paintEvent(self, event): self.painter.begin(self) self.resizeGL(self.width, self.height) gl.glClearColor(0.94, 0.94, 0.94, 1) gl.glClear(gl.GL_COLOR_BUFFER_BIT) gl.glLoadIdentity() if self.showing == self.SELECT_SCREEN: self.displayImage(self.welcomeTex, self.welcomeImg, 0, 0) self.buttonM.drawBackground() self.buttonF.drawBackground() elif self.showing == self.INTRO_SCREEN_1: # Loading the corresponding images based on the gender if self.gender == 0: self.intro1_Img = pygame.image.load( "../../images/welcome_intro/intro_male_1.png") self.intro1_Tex = 0 self.intro2_Img = pygame.image.load( "../../images/welcome_intro/intro_male_2.png") self.intro2_Tex = 0 self.intro3_Img = pygame.image.load( "../../images/welcome_intro/intro_male_3.png") self.intro3_Tex = 0 self.intro4_Img = pygame.image.load( "../../images/welcome_intro/intro_male_4.png") self.intro4_Tex = 0 else: self.intro1_Img = pygame.image.load( "../../images/welcome_intro/intro_female_1.png") self.intro1_Tex = 0 self.intro2_Img = pygame.image.load( "../../images/welcome_intro/intro_female_2.png") self.intro2_Tex = 0 self.intro3_Img = pygame.image.load( "../../images/welcome_intro/intro_female_3.png") self.intro3_Tex = 0 self.intro4_Img = pygame.image.load( "../../images/welcome_intro/intro_female_4.png") self.intro4_Tex = 0 # Getting the images ready to display self.intro1_Tex = gl.glGenTextures(1) gl.glBindTexture(gl.GL_TEXTURE_2D, self.intro1_Tex) gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER, gl.GL_LINEAR) gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER, gl.GL_LINEAR) gl.glTexImage2D(gl.GL_TEXTURE_2D, 0, gl.GL_RGBA, self.intro1_Img.get_width(), self.intro1_Img.get_height(), 0, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, pygame.image.tostring(self.intro1_Img, "RGBA", 1)) # Displaying everything for First intro screen self.displayImage(self.intro1_Tex, self.intro1_Img, 0, 0) self.Next1btn.drawBackground() self.Next1btn.drawText(self.painter, self.printer, self.printer.fontNormal) elif self.showing == self.INTRO_SCREEN_2: # Getting the images ready to display self.intro2_Tex = gl.glGenTextures(1) gl.glBindTexture(gl.GL_TEXTURE_2D, self.intro2_Tex) gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER, gl.GL_LINEAR) gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER, gl.GL_LINEAR) gl.glTexImage2D(gl.GL_TEXTURE_2D, 0, gl.GL_RGBA, self.intro2_Img.get_width(), self.intro2_Img.get_height(), 0, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, pygame.image.tostring(self.intro2_Img, "RGBA", 1)) # Displaying everything for First intro screen self.displayImage(self.intro2_Tex, self.intro2_Img, 0, 0) self.Next2btn.drawBackground() self.Back1btn.drawBackground() self.Next2btn.drawText(self.painter, self.printer, self.printer.fontNormal) self.Back1btn.drawText(self.painter, self.printer, self.printer.fontNormal) elif self.showing == self.INTRO_SCREEN_3: # Getting the images ready to display self.intro3_Tex = gl.glGenTextures(1) gl.glBindTexture(gl.GL_TEXTURE_2D, self.intro3_Tex) gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER, gl.GL_LINEAR) gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER, gl.GL_LINEAR) gl.glTexImage2D(gl.GL_TEXTURE_2D, 0, gl.GL_RGBA, self.intro3_Img.get_width(), self.intro3_Img.get_height(), 0, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, pygame.image.tostring(self.intro3_Img, "RGBA", 1)) # Displaying everything for First intro screen self.displayImage(self.intro3_Tex, self.intro3_Img, 0, 0) self.Next3btn.drawBackground() self.Back2btn.drawBackground() self.Next3btn.drawText(self.painter, self.printer, self.printer.fontNormal) self.Back2btn.drawText(self.painter, self.printer, self.printer.fontNormal) elif self.showing == self.BADGE_SCREEN: # self.badgeScreen.draw() self.intro4_Tex = gl.glGenTextures(1) gl.glBindTexture(gl.GL_TEXTURE_2D, self.intro4_Tex) gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER, gl.GL_LINEAR) gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER, gl.GL_LINEAR) gl.glTexImage2D(gl.GL_TEXTURE_2D, 0, gl.GL_RGBA, self.intro4_Img.get_width(), self.intro4_Img.get_height(), 0, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, pygame.image.tostring(self.intro4_Img, "RGBA", 1)) # Displaying everything for First intro screen self.displayImage(self.intro4_Tex, self.intro3_Img, 0, 0) self.btnOkay.drawBackground() self.Back3btn.drawBackground() self.btnOkay.drawText(self.painter, self.printer, self.printer.fontNormal) self.Back3btn.drawText(self.painter, self.printer, self.printer.fontNormal) self.painter.end() #self.swapBuffers() def paintGL(self): gl.glClear(gl.GL_COLOR_BUFFER_BIT) gl.glLoadIdentity()