Bool ZFrame::MouseButtonRelease(UShort nButton, float Absolute_x, float Absolute_y) { ZListItem * Item; ZFrame * Frame; // Drag and drop if (GuiManager->DragingFrame) { if (GuiManager->DragingFrame == this) {return(true);} DropItem(GuiManager->DragingFrame, nButton); } // if ((Item = SubFrameList.GetFirst())) do { Frame = (ZFrame *)Item->GetObject(); if (Absolute_x >= Frame->EffectivePosition.Position_x) if (Absolute_y >= Frame->EffectivePosition.Position_y) if (Absolute_x <= (Frame->EffectivePosition.Position_x + Frame->EffectivePosition.Width)) if (Absolute_y <= (Frame->EffectivePosition.Position_y + Frame->EffectivePosition.Height)) { Frame->Event_MouseRelease = true; Frame->MouseButtonRelease( nButton, Absolute_x, Absolute_y); } } while ((Item = SubFrameList.GetNext(Item))); return true; }
Bool ZFrame::MouseMove ( float Relative_x, float Relative_y, float Absolute_x, float Absolute_y) { ZListItem * Item; ZFrame * Frame; GuiManager->MouseOverStack_AddToStack(this); if ((Item = SubFrameList.GetFirst())) do { Frame = (ZFrame *)Item->GetObject(); if (Absolute_x >= Frame->EffectivePosition.Position_x) if (Absolute_y >= Frame->EffectivePosition.Position_y) if (Absolute_x <= (Frame->EffectivePosition.Position_x + Frame->EffectivePosition.Width)) if (Absolute_y <= (Frame->EffectivePosition.Position_y + Frame->EffectivePosition.Height)) { if (!Frame->Event_MouseIsActualyOver) { if (Frame->Flag_Enable_Proc_MouseIn) Frame->MouseIn(); Frame->Event_MouseWentIn = true; } Frame->Event_MouseIsActualyOver = true; if (Frame->Flag_Enable_Proc_MouseOver) Frame->MouseOver( ((UShort)Frame->EffectivePosition.Position_x) - Absolute_x, ((UShort)Frame->EffectivePosition.Position_y) - Absolute_y ); Frame->MouseMove( Relative_x, Relative_y , Absolute_x, Absolute_y); } } while ((Item = SubFrameList.GetNext(Item))); return true; }
Bool ZFrame::MouseButtonClick (UShort nButton, float Absolute_x, float Absolute_y) { ZListItem * Item; ZFrame * Frame; GuiManager->FocusStack_AddToStack(this); // Drag and drop if (Flag_Cap_Dragable && nButton == 1 ) { //ZVector2f Dim; //GetSize(Dim.x,Dim.y); Flag_Draging = true; GuiManager->DragingFrame = this; DragAbsolutePosition.x = EffectivePosition.Position_x; DragAbsolutePosition.y = EffectivePosition.Position_y; } // Focus if (this->Flag_Enable_Proc_GetFocus) GetFocus(); // Subframe events propagation if ((Item = SubFrameList.GetFirst())) do { Frame = (ZFrame *)Item->GetObject(); if (Absolute_x >= Frame->EffectivePosition.Position_x) if (Absolute_y >= Frame->EffectivePosition.Position_y) if (Absolute_x <= (Frame->EffectivePosition.Position_x + Frame->EffectivePosition.Width)) if (Absolute_y <= (Frame->EffectivePosition.Position_y + Frame->EffectivePosition.Height)) { Frame->Event_MouseClick = true; Frame->MouseButtonClick( nButton, Absolute_x, Absolute_y); } } while ((Item = SubFrameList.GetNext(Item))); return true; }
void ZPanelTextButton::Render(ZRender_Interface *render, Frame_Dimensions * ParentPosition, uintptr_t psvInit ) { ZVector3f P1,P2,P3,P4; ZVector3f P1m,P2m,P3m,P4m; float SliceWidth; ZListItem * Item; ZFrame * Frame; // Frame Position Computing if (Flag_Show_Master) { EffectivePosition.Position_x = ParentPosition->Position_x + Dimensions.Position_x; EffectivePosition.Position_y = ParentPosition->Position_y + Dimensions.Position_y; EffectivePosition.Position_z = ParentPosition->Position_z + Dimensions.Position_z; EffectivePosition.Width = Dimensions.Width; EffectivePosition.Height= Dimensions.Height; EffectivePosition.Depth = Dimensions.Depth; if (this->Flag_Draging) { EffectivePosition.Position_x = DragAbsolutePosition.x; EffectivePosition.Position_y = DragAbsolutePosition.y; } // Render this frame if (Flag_Show_Frame) { /* P1.x = EffectivePosition.Position_x; P1.y = EffectivePosition.Position_y; P1.z = EffectivePosition.Position_z; P2.x = EffectivePosition.Position_x + EffectivePosition.Width ; P2.y = EffectivePosition.Position_y ; P2.z = EffectivePosition.Position_z + EffectivePosition.Depth; P3.x = EffectivePosition.Position_x + EffectivePosition.Width ; P3.y = EffectivePosition.Position_y + EffectivePosition.Height; P3.z = EffectivePosition.Position_z + EffectivePosition.Depth; P4.x = EffectivePosition.Position_x; P4.y = EffectivePosition.Position_y + EffectivePosition.Height; P4.z = EffectivePosition.Position_z + EffectivePosition.Depth; */ P1.x = EffectivePosition.Position_x; P1.y = EffectivePosition.Position_y; P1.z = EffectivePosition.Position_z; P2.x = EffectivePosition.Position_x + EffectivePosition.Width ; P2.y = EffectivePosition.Position_y ; P2.z = EffectivePosition.Position_z + EffectivePosition.Depth; P3.x = EffectivePosition.Position_x + EffectivePosition.Width ; P3.y = EffectivePosition.Position_y + EffectivePosition.Height; P3.z = EffectivePosition.Position_z + EffectivePosition.Depth; P4.x = EffectivePosition.Position_x; P4.y = EffectivePosition.Position_y + EffectivePosition.Height; P4.z = EffectivePosition.Position_z + EffectivePosition.Depth; ULong TextureRef = GuiManager->TextureManager->GetTextureEntry(this->TextureNum)->OpenGl_TextureRef[psvInit]; glBindTexture(GL_TEXTURE_2D,TextureRef ); SliceWidth = EffectivePosition.Height * 0.25f; // The left slice P1m.x = P1.x; P1m.y = P1.y; P1m.z = P1.z; P2m.x = P1.x + SliceWidth ; P2m.y = P2.y; P2m.z = P2.z; P3m.x = P1.x + SliceWidth ; P3m.y = P3.y; P3m.z = P3.z; P4m.x = P4.x; P4m.y = P4.y; P4m.z = P4.z; glBegin(GL_TRIANGLES); glColor3f(DrawColor.r, DrawColor.v, DrawColor.b); glTexCoord2f(0.0,0.0); glVertex3f(P1m.x, P1m.y , P1m.z); glTexCoord2f(0.25,0.0); glVertex3f(P2m.x, P2m.y , P2m.z); glTexCoord2f(0.25,1.0); glVertex3f(P3m.x, P3m.y , P3m.z); glTexCoord2f(0.25,1.0); glVertex3f(P3m.x, P3m.y , P3m.z); glTexCoord2f(0.0,1.0); glVertex3f(P4m.x, P4m.y , P4m.z); glTexCoord2f(0.0,0.0); glVertex3f(P1m.x, P1m.y , P1m.z); glEnd(); // Right slice P1m.x = P2.x-SliceWidth; P1m.y = P1.y; P1m.z = P1.z; P2m.x = P2.x; P2m.y = P2.y; P2m.z = P2.z; P3m.x = P3.x; P3m.y = P3.y; P3m.z = P3.z; P4m.x = P3.x-SliceWidth; P4m.y = P4.y; P4m.z = P4.z; glBegin(GL_TRIANGLES); //glColor3f(DrawColor.r, DrawColor.v, DrawColor.b); glTexCoord2f(0.75,0.0); glVertex3f(P1m.x, P1m.y , P1m.z); glTexCoord2f(1.0,0.0); glVertex3f(P2m.x, P2m.y , P2m.z); glTexCoord2f(1.0,1.0); glVertex3f(P3m.x, P3m.y , P3m.z); glTexCoord2f(1.0,1.0); glVertex3f(P3m.x, P3m.y , P3m.z); glTexCoord2f(0.75,1.0); glVertex3f(P4m.x, P4m.y , P4m.z); glTexCoord2f(0.75,0.0); glVertex3f(P1m.x, P1m.y , P1m.z); glEnd(); // Middle slice P1m.x = P1.x+SliceWidth; P1m.y = P1.y; P1m.z = P1.z; P2m.x = P2.x-SliceWidth; P2m.y = P2.y; P2m.z = P2.z; P3m.x = P3.x-SliceWidth; P3m.y = P3.y; P3m.z = P3.z; P4m.x = P4.x+SliceWidth; P4m.y = P4.y; P4m.z = P4.z; glBegin(GL_TRIANGLES); //glColor3f(DrawColor.r, DrawColor.v, DrawColor.b); glTexCoord2f(0.25,0.0); glVertex3f(P1m.x, P1m.y , P1m.z); glTexCoord2f(0.75,0.0); glVertex3f(P2m.x, P2m.y , P2m.z); glTexCoord2f(0.75,1.0); glVertex3f(P3m.x, P3m.y , P3m.z); glTexCoord2f(0.75,1.0); glVertex3f(P3m.x, P3m.y , P3m.z); glTexCoord2f(0.25,1.0); glVertex3f(P4m.x, P4m.y , P4m.z); glTexCoord2f(0.25,0.0); glVertex3f(P1m.x, P1m.y , P1m.z); glEnd(); } // Render child frames if (Flag_Show_Childs) { //SubFrameList.Dump(); Item = SubFrameList.GetFirst(); while (Item) { Frame = (ZFrame *)Item->GetObject(); if (Frame) Frame->Render(render, &EffectivePosition, psvInit ); Item = SubFrameList.GetNext(Item); } } } }
void ZFrame::Render(ZRender_Interface *render, Frame_Dimensions * ParentPosition, uintptr_t psvInit) { struct { ZVector3f P1,P2,P3,P4; }P; ZListItem * Item; ZFrame * Frame; // Frame Position Computing if (Flag_Show_Master) { EffectivePosition.Position_x = ParentPosition->Position_x + Dimensions.Position_x; EffectivePosition.Position_y = ParentPosition->Position_y + Dimensions.Position_y; EffectivePosition.Position_z = ParentPosition->Position_z + Dimensions.Position_z; EffectivePosition.Width = Dimensions.Width; EffectivePosition.Height= Dimensions.Height; EffectivePosition.Depth = Dimensions.Depth; if (this->Flag_Draging) { EffectivePosition.Position_x = DragAbsolutePosition.x; EffectivePosition.Position_y = DragAbsolutePosition.y; } // Render this frame if (Flag_Show_Frame) { P.P1.x = EffectivePosition.Position_x; P.P1.y = EffectivePosition.Position_y; P.P1.z = EffectivePosition.Position_z + EffectivePosition.Depth; P.P2.x = EffectivePosition.Position_x + EffectivePosition.Width ; P.P2.y = EffectivePosition.Position_y ; P.P2.z = EffectivePosition.Position_z + EffectivePosition.Depth; P.P3.x = EffectivePosition.Position_x + EffectivePosition.Width ; P.P3.y = EffectivePosition.Position_y + EffectivePosition.Height; P.P3.z = EffectivePosition.Position_z + EffectivePosition.Depth; P.P4.x = EffectivePosition.Position_x; P.P4.y = EffectivePosition.Position_y + EffectivePosition.Height; P.P4.z = EffectivePosition.Position_z + EffectivePosition.Depth; ULong TextureRef = GuiManager->TextureManager->GetTextureEntry(this->TextureNum)->OpenGl_TextureRef[psvInit]; float coords[18]; float tex_coords[12]; tex_coords[0] = 0.0; tex_coords[1] = 0.0; coords[0] = P.P1.x; coords[1] = P.P1.y; coords[2] = P.P1.z; tex_coords[2] = 1.0f; tex_coords[3] = 0.0; coords[3] = P.P2.x; coords[4] = P.P2.y; coords[5] = P.P2.z; tex_coords[4] = 1.0f; tex_coords[5] = 1.0f; coords[6] = P.P3.x; coords[7] = P.P3.y; coords[8] = P.P3.z; tex_coords[6] = 1.0f; tex_coords[7] = 1.0f; coords[9] = P.P3.x; coords[10] = P.P3.y; coords[11] = P.P3.z; tex_coords[8] = 0.0; tex_coords[9] = 1.0f; coords[12] = P.P4.x; coords[13] = P.P4.y; coords[14] = P.P4.z; tex_coords[10] = 0.0; tex_coords[11] = 0.0; coords[15] = P.P1.x; coords[16] = P.P1.y; coords[17] = P.P1.z; //lprintf( "%3d %g,%g,%g %g,%g,%g", TextureRef, P.P1.x, P.P1.y, P.P1.z, P.P3.x, P.P3.y, P.P3.z ); render->gui_shader->Draw( TextureRef, &DrawColor.r, coords, tex_coords ); /* glBindTexture(GL_TEXTURE_2D,TextureRef ); glBegin(GL_TRIANGLES); glColor3f(DrawColor.r, DrawColor.v, DrawColor.b); glTexCoord2f(0.0,0.0); glVertex3f(P1.x, P1.y , P1.z); glTexCoord2f(1.0,0.0); glVertex3f(P2.x, P2.y , P2.z); glTexCoord2f(1.0,1.0); glVertex3f(P3.x, P3.y , P3.z); glTexCoord2f(1.0,1.0);glVertex3f(P3.x, P3.y , P3.z); glTexCoord2f(0.0,1.0);glVertex3f(P4.x, P4.y , P4.z); glTexCoord2f(0.0,0.0);glVertex3f(P1.x, P1.y , P1.z); glEnd(); */ } // Render child frames if (Flag_Show_Childs) { //SubFrameList.Dump(); Item = SubFrameList.GetFirst(); while (Item) { Frame = (ZFrame *)Item->GetObject(); if (Frame) Frame->Render(render, &EffectivePosition, psvInit); Item = SubFrameList.GetNext(Item); } } } }