summaryrefslogtreecommitdiff
path: root/src/interface/Panel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/interface/Panel.cpp')
-rw-r--r--src/interface/Panel.cpp457
1 files changed, 0 insertions, 457 deletions
diff --git a/src/interface/Panel.cpp b/src/interface/Panel.cpp
deleted file mode 100644
index d3bf29b..0000000
--- a/src/interface/Panel.cpp
+++ /dev/null
@@ -1,457 +0,0 @@
-#pragma once
-#include <vector>
-//#include "Platform.h"
-
-#include "interface/Panel.h"
-
-#include "interface/Point.h"
-#include "interface/Window.h"
-#include "interface/Component.h"
-#include "graphics/Graphics.h"
-
-using namespace ui;
-
-Panel::Panel(Point position, Point size):
- Component(position, size),
- InnerSize(size),
- ViewportPosition(0, 0),
- mouseInside(false)
-{
-#ifdef OGLI
- GLint lastVid;
- glGetIntegerv(GL_FRAMEBUFFER_BINDING, &lastVid);
-
- glEnable(GL_TEXTURE_2D);
- glGenTextures(1, &myVidTex);
- glBindTexture(GL_TEXTURE_2D, myVidTex);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, XRES+BARSIZE, YRES+MENUSIZE, 0, GL_RGBA, GL_FLOAT, NULL);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
-
- //FBO
- glGenFramebuffers(1, &myVid);
- glBindFramebuffer(GL_DRAW_FRAMEBUFFER, myVid);
- glEnable(GL_BLEND);
- glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, myVidTex, 0);
- glBindTexture(GL_TEXTURE_2D, 0);
- glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); // Reset framebuffer binding
- glDisable(GL_TEXTURE_2D);
-
- glBindFramebuffer(GL_DRAW_FRAMEBUFFER, lastVid);
-#else
- myVid = new pixel[(XRES+BARSIZE)*(YRES+MENUSIZE)];
-#endif
-}
-
-Panel::~Panel()
-{
- for(unsigned i = 0; i < children.size(); ++i)
- {
- if( children[i] )
- delete children[i];
- }
-#ifdef OGLI
- glDeleteTextures(1, &myVidTex);
- glDeleteFramebuffers(1, &myVid);
-#else
- delete[] myVid;
-#endif
-}
-
-void Panel::AddChild(Component* c)
-{
- c->SetParent(this);
- c->SetParentWindow(this->GetParentWindow());
-}
-
-int Panel::GetChildCount()
-{
- return children.size();
-}
-
-Component* Panel::GetChild(unsigned idx)
-{
- return children[idx];
-}
-
-void Panel::RemoveChild(Component* c)
-{
- for(int i = 0; i < children.size(); ++i)
- {
- if(children[i] == c)
- {
- //remove child from parent. Does not free memory
- children.erase(children.begin() + i);
- if (this->GetParentWindow()->IsFocused(c))
- this->GetParentWindow()->FocusComponent(NULL);
- break;
- }
- }
-}
-
-void Panel::RemoveChild(unsigned idx, bool freeMem)
-{
- if(freeMem)
- delete children[idx];
-
- children.erase(children.begin() + idx);
-}
-
-void Panel::Draw(const Point& screenPos)
-{
-
- // draw ourself first
- XDraw(screenPos);
-#ifdef OGLI
- GLint lastVid;
- glGetIntegerv(GL_FRAMEBUFFER_BINDING, &lastVid);
- glBindFramebuffer(GL_DRAW_FRAMEBUFFER, myVid);
- glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
- glClear(GL_COLOR_BUFFER_BIT);
-#else
- pixel * lastVid = ui::Engine::Ref().g->vid;
- ui::Engine::Ref().g->vid = myVid;
- std::fill(myVid, myVid+((XRES+BARSIZE)*(YRES+MENUSIZE)), 0);
-#endif
-
- // attempt to draw all children
- for(int i = 0; i < children.size(); ++i)
- {
- // the component must be visible
- if(children[i]->Visible)
- {
- //check if the component is in the screen, draw if it is
- if( children[i]->Position.X + ViewportPosition.X + children[i]->Size.X >= 0 &&
- children[i]->Position.Y + ViewportPosition.Y + children[i]->Size.Y >= 0 &&
- children[i]->Position.X + ViewportPosition.X < ui::Engine::Ref().GetWidth() &&
- children[i]->Position.Y + ViewportPosition.Y < ui::Engine::Ref().GetHeight() )
- {
- Point scrpos = /*screenPos + */children[i]->Position + ViewportPosition;
- children[i]->Draw(scrpos);
- }
- }
- }
-
-#ifdef OGLI
- glBindFramebuffer(GL_DRAW_FRAMEBUFFER, lastVid);
-
- glEnable(GL_TEXTURE_2D);
- glBindTexture(GL_TEXTURE_2D, myVidTex);
-
- int x = screenPos.X, y = screenPos.Y;
- int h = Size.Y, w = Size.X;
-
- double texX = double(Size.X)/double(XRES+BARSIZE), texY = 1, texYB = 1-(double(Size.Y)/double(YRES+MENUSIZE));
-
- glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
- glBegin(GL_QUADS);
- glTexCoord2d(0, texYB);
- glVertex2f(x, y+h);
- glTexCoord2d(texX, texYB);
- glVertex2f(x+w, y+h);
- glTexCoord2d(texX, texY);
- glVertex2f(x+w, y);
- glTexCoord2d(0, texY);
- glVertex2f(x, y);
- glEnd();
-
- glBindTexture(GL_TEXTURE_2D, 0);
- glDisable(GL_TEXTURE_2D);
-#else
- ui::Engine::Ref().g->vid = lastVid;
-
- //dst=(pixel *)sdl_scrn->pixels+y*sdl_scrn->pitch/PIXELSIZE+x;
- for (int row = 0; row < Size.Y; row++)
- {
- std::copy(myVid+(row*(XRES+BARSIZE)), myVid+(row*(XRES+BARSIZE))+Size.X, lastVid+((screenPos.Y+row)*(XRES+BARSIZE))+screenPos.X);
- }
-#endif
-}
-
-void Panel::Tick(float dt)
-{
- // tick ourself first
- XTick(dt);
-
- // tick our children
- for(unsigned i = 0; i < children.size(); ++i)
- children[i]->Tick(dt);
-}
-
-void Panel::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt)
-{
- XOnKeyPress(key, character, shift, ctrl, alt);
-}
-
-void Panel::OnKeyRelease(int key, Uint16 character, bool shift, bool ctrl, bool alt)
-{
- XOnKeyRelease(key, character, shift, ctrl, alt);
-}
-
-void Panel::OnMouseClick(int localx, int localy, unsigned button)
-{
- bool childclicked = false;
-
- //check if clicked a child
- for(int i = children.size()-1; i >= 0 ; --i)
- {
- //child must be unlocked
- if(!children[i]->Locked)
- {
- //is mouse inside?
- if( localx >= children[i]->Position.X + ViewportPosition.X &&
- localy >= children[i]->Position.Y + ViewportPosition.Y &&
- localx < children[i]->Position.X + ViewportPosition.X + children[i]->Size.X &&
- localy < children[i]->Position.Y + ViewportPosition.Y + children[i]->Size.Y )
- {
- childclicked = true;
- GetParentWindow()->FocusComponent(children[i]);
- children[i]->OnMouseClick(localx - children[i]->Position.X - ViewportPosition.X, localy - children[i]->Position.Y - ViewportPosition.Y, button);
- break;
- }
- }
- }
-
- //if a child wasn't clicked, send click to ourself
- if(!childclicked)
- {
- XOnMouseClick(localx, localy, button);
- GetParentWindow()->FocusComponent(this);
- }
-}
-
-void Panel::OnMouseDown(int x, int y, unsigned button)
-{
- XOnMouseDown(x, y, button);
- for(int i = 0; i < children.size(); ++i)
- {
- if(!children[i]->Locked)
- children[i]->OnMouseDown(x, y, button);
- }
-}
-
-void Panel::OnMouseHover(int localx, int localy)
-{
- // check if hovering on children
- for(int i = children.size() - 1; i >= 0; --i)
- {
- if(!children[i]->Locked)
- {
- if( localx >= children[i]->Position.X &&
- localy >= children[i]->Position.Y &&
- localx < children[i]->Position.X + children[i]->Size.X &&
- localy < children[i]->Position.Y + children[i]->Size.Y )
- {
- children[i]->OnMouseHover(localx - children[i]->Position.X, localy - children[i]->Position.Y);
- break;
- }
- }
- }
-
- // always allow hover on parent (?)
- XOnMouseHover(localx, localy);
-}
-
-void Panel::OnMouseMoved(int localx, int localy, int dx, int dy)
-{
- XOnMouseMoved(localx, localy, dx, dy);
- for(int i = 0; i < children.size(); ++i)
- {
- if(!children[i]->Locked)
- children[i]->OnMouseMoved(localx - children[i]->Position.X - ViewportPosition.X, localy - children[i]->Position.Y - ViewportPosition.Y, dx, dy);
- }
-}
-
-void Panel::OnMouseMovedInside(int localx, int localy, int dx, int dy)
-{
- mouseInside = true;
- for(int i = 0; i < children.size(); ++i)
- {
- if(!children[i]->Locked)
- {
- Point local (localx - children[i]->Position.X - ViewportPosition.X, localy - children[i]->Position.Y - ViewportPosition.Y)
- , prevlocal (local.X - dx, local.Y - dy);
-
- // mouse currently inside?
- if( local.X >= 0 &&
- local.Y >= 0 &&
- local.X < children[i]->Size.X &&
- local.Y < children[i]->Size.Y )
- {
- children[i]->OnMouseMovedInside(localx - children[i]->Position.X - ViewportPosition.X, localy - children[i]->Position.Y - ViewportPosition.Y, dx, dy);
-
- // was the mouse outside?
- if(!(prevlocal.X >= 0 &&
- prevlocal.Y >= 0 &&
- prevlocal.X < children[i]->Size.X &&
- prevlocal.Y < children[i]->Size.Y ) )
- {
- children[i]->OnMouseEnter(local.X, local.Y);
- }
- }
- // if not currently inside
- else
- {
- // was the mouse inside?
- if( prevlocal.X >= 0 &&
- prevlocal.Y >= 0 &&
- prevlocal.X < children[i]->Size.X &&
- prevlocal.Y < children[i]->Size.Y )
- {
- children[i]->OnMouseLeave(local.X, local.Y);
- }
-
- }
- }
- }
-
- // always allow hover on parent (?)
- XOnMouseMovedInside(localx, localy, dx, dy);
-}
-
-void Panel::OnMouseEnter(int localx, int localy)
-{
- mouseInside = true;
- XOnMouseEnter(localx, localy);
-}
-
-void Panel::OnMouseLeave(int localx, int localy)
-{
- mouseInside = false;
- XOnMouseLeave(localx, localy);
-}
-
-void Panel::OnMouseUnclick(int localx, int localy, unsigned button)
-{
- bool childunclicked = false;
-
- //check if clicked a child
- for(int i = children.size()-1; i >= 0 ; --i)
- {
- //child must be unlocked
- if(!children[i]->Locked)
- {
- //is mouse inside?
- if( localx >= children[i]->Position.X + ViewportPosition.X &&
- localy >= children[i]->Position.Y + ViewportPosition.Y &&
- localx < children[i]->Position.X + ViewportPosition.X + children[i]->Size.X &&
- localy < children[i]->Position.Y + ViewportPosition.Y + children[i]->Size.Y )
- {
- childunclicked = true;
- children[i]->OnMouseUnclick(localx - children[i]->Position.X - ViewportPosition.X, localy - children[i]->Position.Y - ViewportPosition.Y, button);
- break;
- }
- }
- }
-
- //if a child wasn't clicked, send click to ourself
- if(!childunclicked)
- {
- XOnMouseUnclick(localx, localy, button);
- }
-}
-
-void Panel::OnMouseUp(int x, int y, unsigned button)
-{
- XOnMouseUp(x, y, button);
- for(int i = 0; i < children.size(); ++i)
- {
- if(!children[i]->Locked)
- children[i]->OnMouseUp(x, y, button);
- }
-}
-
-void Panel::OnMouseWheel(int localx, int localy, int d)
-{
- XOnMouseWheel(localx, localy, d);
- for(int i = 0; i < children.size(); ++i)
- {
- if(!children[i]->Locked)
- children[i]->OnMouseWheel(localx - children[i]->Position.X - ViewportPosition.X, localy - children[i]->Position.Y - ViewportPosition.Y, d);
- }
-}
-
-void Panel::OnMouseWheelInside(int localx, int localy, int d)
-{
- XOnMouseWheelInside(localx, localy, d);
- //check if clicked a child
- for(int i = children.size()-1; i >= 0 ; --i)
- {
- //child must be unlocked
- if(!children[i]->Locked)
- {
- //is mouse inside?
- if( localx >= children[i]->Position.X + ViewportPosition.X &&
- localy >= children[i]->Position.Y + ViewportPosition.Y &&
- localx < children[i]->Position.X + ViewportPosition.X + children[i]->Size.X &&
- localy < children[i]->Position.Y + ViewportPosition.Y + children[i]->Size.Y )
- {
- children[i]->OnMouseWheelInside(localx - children[i]->Position.X - ViewportPosition.X, localy - children[i]->Position.Y - ViewportPosition.Y, d);
- break;
- }
- }
- }
-}
-
-// ***** OVERRIDEABLES *****
-// Kept empty.
-
-void Panel::XDraw(const Point& screenPos)
-{
-}
-
-void Panel::XTick(float dt)
-{
-}
-
-void Panel::XOnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt)
-{
-}
-
-void Panel::XOnKeyRelease(int key, Uint16 character, bool shift, bool ctrl, bool alt)
-{
-}
-
-void Panel::XOnMouseClick(int localx, int localy, unsigned button)
-{
-}
-
-void Panel::XOnMouseDown(int x, int y, unsigned button)
-{
-}
-
-void Panel::XOnMouseHover(int localx, int localy)
-{
-}
-
-void Panel::XOnMouseMoved(int localx, int localy, int dx, int dy)
-{
-}
-
-void Panel::XOnMouseMovedInside(int localx, int localy, int dx, int dy)
-{
-}
-
-void Panel::XOnMouseEnter(int localx, int localy)
-{
-}
-
-void Panel::XOnMouseLeave(int localx, int localy)
-{
-}
-
-void Panel::XOnMouseUnclick(int localx, int localy, unsigned button)
-{
-}
-
-void Panel::XOnMouseUp(int x, int y, unsigned button)
-{
-}
-
-void Panel::XOnMouseWheel(int localx, int localy, int d)
-{
-}
-
-void Panel::XOnMouseWheelInside(int localx, int localy, int d)
-{
-}