2011-10-20 18:24:43 +02:00
|
|
|
/**
|
|
|
|
*******************************************************************************
|
|
|
|
* @file ewolWindows.cpp
|
|
|
|
* @brief ewol window system (sources)
|
|
|
|
* @author Edouard DUPIN
|
|
|
|
* @date 20/10/2011
|
|
|
|
* @par Project
|
|
|
|
* ewol
|
|
|
|
*
|
|
|
|
* @par Copyright
|
|
|
|
* Copyright 2011 Edouard DUPIN, all right reserved
|
|
|
|
*
|
|
|
|
* This software is distributed in the hope that it will be useful, but WITHOUT
|
|
|
|
* ANY WARRANTY.
|
|
|
|
*
|
|
|
|
* Licence summary :
|
|
|
|
* You can modify and redistribute the sources code and binaries.
|
|
|
|
* You can send me the bug-fix
|
|
|
|
*
|
|
|
|
* Term of the licence in in the file licence.txt.
|
|
|
|
*
|
|
|
|
*******************************************************************************
|
|
|
|
*/
|
|
|
|
|
2011-10-21 15:07:56 +02:00
|
|
|
#include <etkTypes.h>
|
|
|
|
#include <etkString.h>
|
|
|
|
#include <ewolWidget.h>
|
|
|
|
#include <ewolWindows.h>
|
2011-10-24 14:52:11 +02:00
|
|
|
#include <ewolOObject.h>
|
2011-10-28 18:19:04 +02:00
|
|
|
#include <ewolTexture.h>
|
2011-10-29 17:32:11 +02:00
|
|
|
#include <ewolFont.h>
|
2011-10-20 18:24:43 +02:00
|
|
|
|
2011-10-24 14:52:11 +02:00
|
|
|
#include <GL/gl.h>
|
2011-10-21 15:07:56 +02:00
|
|
|
|
2011-10-30 14:52:55 +01:00
|
|
|
#undef __class__
|
|
|
|
#define __class__ "ewol::Windows"
|
|
|
|
|
|
|
|
|
2011-10-26 23:28:38 +02:00
|
|
|
//list of local events :
|
2011-10-27 13:38:55 +02:00
|
|
|
const char * ewolEventWindowsClose = "ewol Windows close";
|
|
|
|
const char * ewolEventWindowsMinimize = "ewol Windows minimize";
|
|
|
|
const char * ewolEventWindowsExpend = "ewol Windows expend/unExpend";
|
2011-10-26 23:28:38 +02:00
|
|
|
|
2011-10-21 15:07:56 +02:00
|
|
|
bool ewol::Windows::CalculateSize(double availlableX, double availlableY)
|
|
|
|
{
|
|
|
|
m_size.x = availlableX;
|
|
|
|
m_size.y = availlableY;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2011-10-27 13:38:55 +02:00
|
|
|
|
2011-10-26 18:03:15 +02:00
|
|
|
bool ewol::Windows::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, double x, double y)
|
|
|
|
{
|
2011-10-27 13:38:55 +02:00
|
|
|
/*
|
2011-10-26 18:03:15 +02:00
|
|
|
if( EVENT_INPUT_TYPE_UP == typeEvent
|
|
|
|
&& 1 == IdInput)
|
|
|
|
{
|
2011-10-27 13:38:55 +02:00
|
|
|
EWOL_INFO("Request ???");
|
2011-10-26 18:03:15 +02:00
|
|
|
}
|
|
|
|
return true;
|
2011-10-27 13:38:55 +02:00
|
|
|
*/
|
|
|
|
return false;
|
2011-10-26 18:03:15 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-10-28 18:19:04 +02:00
|
|
|
#include <GL/gl.h>
|
|
|
|
#include <GL/glu.h>
|
|
|
|
#include <GL/glx.h>
|
|
|
|
#include <GL/glut.h>
|
|
|
|
#if defined(EWOL_X11_MODE__XF86V)
|
|
|
|
# include <X11/extensions/xf86vmode.h>
|
|
|
|
#elif defined(EWOL_X11_MODE__XRENDER)
|
|
|
|
# include <X11/extensions/Xrender.h>
|
|
|
|
#endif
|
|
|
|
|
2011-10-26 18:03:15 +02:00
|
|
|
|
2011-10-21 15:07:56 +02:00
|
|
|
void ewol::Windows::SysDraw(void)
|
|
|
|
{
|
2011-10-24 14:52:11 +02:00
|
|
|
|
|
|
|
//EWOL_DEBUG("Drow on (" << m_size.x << "," << m_size.y << ")");
|
2011-10-21 15:07:56 +02:00
|
|
|
// set the size of the open GL system
|
|
|
|
glViewport(0,0,m_size.x,m_size.y);
|
|
|
|
|
|
|
|
// Clear the screen with transparency ...
|
|
|
|
glClearColor(0.750, 0.750, 0.750, 0.5);
|
|
|
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
|
|
|
|
|
|
|
glMatrixMode(GL_PROJECTION);
|
|
|
|
glLoadIdentity();
|
2011-10-24 17:31:03 +02:00
|
|
|
glOrtho(0., m_size.x, 0., -m_size.y, 1., 20.);
|
2011-10-21 15:07:56 +02:00
|
|
|
|
|
|
|
glMatrixMode(GL_MODELVIEW);
|
|
|
|
glLoadIdentity();
|
2011-10-24 17:31:03 +02:00
|
|
|
glTranslatef(0, -m_size.y, -5);
|
2011-10-24 17:30:13 +02:00
|
|
|
|
2011-10-24 17:31:03 +02:00
|
|
|
//http://www.khronos.org/opengles/documentation/opengles1_0/html/glBlendFunc.html
|
2011-10-24 17:30:13 +02:00
|
|
|
glEnable(GL_BLEND);
|
|
|
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
2011-10-24 17:31:03 +02:00
|
|
|
//glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_DST_ALPHA);
|
|
|
|
//glBlendFunc(GL_SRC_ALPHA, GL_SRC_COLOR);
|
2011-10-24 17:30:13 +02:00
|
|
|
|
2011-10-28 18:19:04 +02:00
|
|
|
|
2011-10-24 14:52:11 +02:00
|
|
|
|
|
|
|
|
2011-10-26 18:03:15 +02:00
|
|
|
/*
|
|
|
|
// create one display list
|
|
|
|
indexListe = glGenLists(1);
|
|
|
|
// compile the display list, store a triangle in it
|
|
|
|
glNewList(indexListe, GL_COMPILE);
|
|
|
|
glBegin(GL_QUADS);
|
|
|
|
float plop2 = 0.2;
|
|
|
|
//glVertex3fv(v0);
|
|
|
|
glColor3f(1., 0., 0.); glVertex3f( plop2*m_size.x, plop2*m_size.y, 0.);
|
|
|
|
glColor3f(0., 1., 0.); glVertex3f( (1.0-plop2)*m_size.x, plop2*m_size.y, 0.);
|
|
|
|
glColor3f(0., 0., 1.); glVertex3f( (1.0-plop2)*m_size.x, (1.0-plop2)*m_size.y, 0.);
|
|
|
|
glColor3f(1., 1., 0.); glVertex3f( plop2*m_size.x, (1.0-plop2)*m_size.y, 0.);
|
|
|
|
glEnd();
|
|
|
|
glEndList();
|
|
|
|
*/
|
2011-10-24 14:52:11 +02:00
|
|
|
|
|
|
|
|
2011-10-27 13:38:55 +02:00
|
|
|
static ewol::OObject2DColored myOObject;
|
2011-10-30 18:29:09 +01:00
|
|
|
static ewol::OObject2DTextured myOObjectTex_r5g6b5 ("dataTest/test_16b_r5g6b5.bmp");
|
|
|
|
static ewol::OObject2DTextured myOObjectTex_x1r5g5b5("dataTest/test_16b_x1r5g5b5.bmp");
|
|
|
|
static ewol::OObject2DTextured myOObjectTex_r8g8b8 ("dataTest/test_24b_r8g8b8.bmp");
|
|
|
|
static ewol::OObject2DTextured myOObjectTex_x8r8g8b8("dataTest/test_32b_x8r8g8b8.bmp");
|
|
|
|
static ewol::OObject2DTextured myOObjectTex_a8r8g8b8("dataTest/test_32b_a8r8g8b8.bmp");
|
2011-10-31 11:01:47 +01:00
|
|
|
color_ts textColorFg;
|
|
|
|
textColorFg.red = .0;
|
|
|
|
textColorFg.green = .0;
|
|
|
|
textColorFg.blue = .0;
|
|
|
|
textColorFg.alpha = 1.0;
|
|
|
|
static ewol::OObject2DText myOObjectText(200, 300, "Monospace", 22, FONT_MODE_NORMAL, textColorFg, "Exemple de test ...");
|
2011-10-26 23:28:38 +02:00
|
|
|
static bool isinit = false;
|
2011-10-30 18:29:09 +01:00
|
|
|
static int32_t fontID = 0;
|
2011-10-27 13:38:55 +02:00
|
|
|
|
2011-10-26 23:28:38 +02:00
|
|
|
if (false == isinit) {
|
|
|
|
isinit=true;
|
2011-10-27 13:38:55 +02:00
|
|
|
myOObject.Rectangle( 0, 0, 20, 20, 1.0, 0.0, 0.0, 1.0); // Close
|
|
|
|
myOObject.Rectangle(20, 0, 20, 20, 0.0, 1.0, 0.0, 1.0); // Reduce
|
|
|
|
myOObject.Rectangle(40, 0, 20, 20, 0.0, 0.0, 1.0, 1.0); // Expend - Un-expend
|
|
|
|
|
2011-10-29 17:32:11 +02:00
|
|
|
AddEventArea({ 0.0,0.0}, {20, 20}, FLAG_EVENT_INPUT_1 | FLAG_EVENT_INPUT_CLICKED_ALL, ewolEventWindowsClose);
|
|
|
|
AddEventArea({20.0,0.0}, {20, 20}, FLAG_EVENT_INPUT_1 | FLAG_EVENT_INPUT_CLICKED_ALL, ewolEventWindowsMinimize);
|
|
|
|
AddEventArea({40.0,0.0}, {20, 20}, FLAG_EVENT_INPUT_1 | FLAG_EVENT_INPUT_CLICKED_ALL, ewolEventWindowsExpend);
|
2011-10-27 13:38:55 +02:00
|
|
|
|
|
|
|
// Other ...
|
|
|
|
myOObject.Rectangle(20, 30, 100, 50, 1.0, 0.0, 0.0, 1.0);
|
|
|
|
myOObject.Rectangle(50, 50, 50, 50, 0.0, 1.0, 0.0, 1.0);
|
|
|
|
myOObject.Rectangle(80, 80, 100, 50, 0.0, 0.0, 1.0, 1.0);
|
|
|
|
myOObject.Rectangle(50, 00, 300, 300, 0.2, 0.2, 0.2, 0.5);
|
2011-10-30 18:29:09 +01:00
|
|
|
/*
|
|
|
|
myOObject.Rectangle(200, 300, 900, 54, 0.0, 0.0, 0.0, 1.0);
|
|
|
|
myOObject.Rectangle(200, 300, 900, 13, 0.0, 1.0, 0.0, 1.0);
|
|
|
|
myOObject.Rectangle(200, 343, 900, 11, 1.0, 0.0, 0.0, 1.0);
|
|
|
|
*/
|
2011-10-27 13:38:55 +02:00
|
|
|
|
2011-10-31 11:01:47 +01:00
|
|
|
myOObjectTex_r5g6b5.Rectangle( 300, 0, 100, 100);
|
2011-10-30 18:29:09 +01:00
|
|
|
myOObjectTex_x1r5g5b5.Rectangle(300, 100, 100, 100);
|
|
|
|
myOObjectTex_r8g8b8.Rectangle( 300, 200, 100, 100);
|
2011-10-31 11:01:47 +01:00
|
|
|
myOObjectTex_x8r8g8b8.Rectangle(400, 0, 100, 100);
|
2011-10-30 18:29:09 +01:00
|
|
|
myOObjectTex_a8r8g8b8.Rectangle(400, 100, 100, 100);
|
2011-10-28 18:19:04 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
2011-10-29 17:32:11 +02:00
|
|
|
|
|
|
|
|
2011-10-28 18:19:04 +02:00
|
|
|
}
|
|
|
|
myOObject.Draw();
|
2011-10-30 18:29:09 +01:00
|
|
|
myOObjectTex_r5g6b5.Draw();
|
|
|
|
myOObjectTex_x1r5g5b5.Draw();
|
|
|
|
myOObjectTex_r8g8b8.Draw();
|
|
|
|
myOObjectTex_x8r8g8b8.Draw();
|
|
|
|
myOObjectTex_a8r8g8b8.Draw();
|
2011-10-31 11:01:47 +01:00
|
|
|
myOObjectText.Draw();
|
|
|
|
/*
|
2011-10-30 14:52:55 +01:00
|
|
|
coord3D_ts drawPosition = { 200.0, 300.0, 0.0};
|
|
|
|
color_ts textColorFg = { 1.0, 1.0, 1.0, 1.0};
|
|
|
|
ewol::DrawText(fontID, FONT_MODE_NORMAL, 54, drawPosition, textColorFg,"APet9_$*:/?,>< \"#',;KkgGyYf");
|
|
|
|
|
|
|
|
drawPosition = { 200.0, 350.0, 0.0};
|
|
|
|
textColorFg = { 1.0, 0.0, 0.0, 1.0};
|
2011-10-30 15:09:44 +01:00
|
|
|
ewol::DrawText(fontID, FONT_MODE_BOLD, 25, drawPosition, textColorFg,"APet9_$*:/?,>< \"#',;KkgGyYf");
|
2011-10-30 14:52:55 +01:00
|
|
|
|
|
|
|
drawPosition = { 200.0, 400.0, 0.0};
|
|
|
|
textColorFg = { 0.0, 1.0, 0.0, 1.0};
|
2011-10-30 15:09:44 +01:00
|
|
|
ewol::DrawText(fontID, FONT_MODE_ITALIC, 15, drawPosition, textColorFg,"APet9_$*:/?,>< \"#',;KkgGyYf");
|
2011-10-29 17:32:11 +02:00
|
|
|
|
2011-10-30 14:52:55 +01:00
|
|
|
drawPosition = { 200.0, 450.0, 0.0};
|
|
|
|
textColorFg = { 0.0, 0.0, 1.0, 1.0};
|
2011-10-30 15:09:44 +01:00
|
|
|
ewol::DrawText(fontID, FONT_MODE_BOLD_ITALIC, 105, drawPosition, textColorFg,"APet9_$*:/?,>< \"#',;KkgGyYf");
|
2011-10-31 11:01:47 +01:00
|
|
|
*/
|
2011-10-24 14:52:11 +02:00
|
|
|
|
2011-10-26 23:28:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool ewol::Windows::OnEventArea(const char * generateEventId, double x, double y)
|
|
|
|
{
|
2011-10-27 13:38:55 +02:00
|
|
|
bool eventIsOK = false;
|
|
|
|
//EWOL_DEBUG("Receive event : \"" << generateEventId << "\"");
|
|
|
|
if(ewolEventWindowsClose == generateEventId) {
|
|
|
|
EWOL_INFO("Request close of the windows");
|
|
|
|
eventIsOK = true;
|
|
|
|
} else if(ewolEventWindowsMinimize == generateEventId) {
|
|
|
|
EWOL_INFO("Request Minimize of the windows");
|
|
|
|
eventIsOK = true;
|
|
|
|
} else if(ewolEventWindowsExpend == generateEventId) {
|
|
|
|
EWOL_INFO("Request Expend of the windows");
|
|
|
|
eventIsOK = true;
|
2011-10-26 23:28:38 +02:00
|
|
|
}
|
2011-10-27 13:38:55 +02:00
|
|
|
return eventIsOK;
|
2011-10-26 23:28:38 +02:00
|
|
|
}
|
|
|
|
|