Files
assaultcube-/source/mesgui/test/test.cpp
T
driAn c6e385ea38 This commit was generated by cvs2svn to compensate for changes in r13,
which included commits to RCS files with non-trunk default branches.


git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@14 e016b1c5-ed68-44aa-a2f7-31cac88cffde
2005-06-23 21:57:56 +00:00

223 lines
6.0 KiB
C++
Executable File

/*
* Test program for the MESGUI library
* Copyright (C) 2002 Eric Maxey <[email protected]>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <SDL.h>
#ifdef WIN32
#include <windows.h>
#endif
#include <GL/gl.h>
#include <stdlib.h>
#include "mesgui.h"
#include "misc.h"
#include "scancodes.h"
#include <string>
using namespace std;
int xres=800,yres=600,bpp=32;
bool fullscreen=false;
float progress=0,inc=0.001f;
float slide=0;
string text;
void CallbackFunc(int a,int b,int c,int d,int e)
{
char s[64];
sprintf(s,"CallbackFunc: %d %d %d %d %d\n",a,b,c,d,e);
text += s;
printf(s);
}
void CallbackFunc2(bool a)
{
char s[64];
sprintf(s,"CallbackFunc: %s\n",a?"true":"false");
text += s;
printf(s);
}
void CreateTestControls()
{
ggFrame *f = new ggFrame("Drag me");
mainframe->AddControl(f,10,10,400,370);
int pos=0;
ggMenu *m = new ggMenu("Menu",80,100);
m->AddMenuOption("option 1",CallbackFunc,1,0,0,0,0);
ggMenu *sub = m->AddSubMenu("SubMenu",90);
sub->AddMenuOption("option 2",CallbackFunc,2,0,0,0,0);
sub->AddMenuOption("option 3",CallbackFunc,3,0,0,0,0);
f->AddControl(m,4,pos);
ggMenu *m2 = new ggMenu("Attached Menu",160,150);
m2->AddMenuOption("option 4",CallbackFunc,4,0,0,0,0);
f->AddControl(m2,4+80,pos);
m->Attach(m2);
pos += COL_HEIGHT+4;
f->AddControl(new ggButton("Click Me!",CallbackFunc,0,0,0,0,0) ,4,pos,120);
pos += COL_HEIGHT+4;
f->AddControl(new ggText("type here"),4,pos,120);
ggText *t = new ggText("or type here");
t->RemoveFlags(GGFLAG_DONT_DRAW_BORDER);
f->AddControl(t,200,pos,120);
pos += COL_HEIGHT+4;
ggDDMenu *dm = new ggDDMenu("DDMenu",90,90);
dm->AddMenuOption("stuff",NULL);
dm->AddMenuOption("thing",NULL);
f->AddControl(dm,4,pos);
pos += COL_HEIGHT+4;
f->AddControl(new ggCheckBox("CheckBox",CallbackFunc2),4,pos,120);
pos += COL_HEIGHT+4;
ggRadioBox *rb1 = new ggRadioBox("RadioBox 1",CallbackFunc2);
ggRadioBox *rb2 = new ggRadioBox("RadioBox 2",CallbackFunc2);
rb1->Attach(rb2);
f->AddControl(rb1,4,pos,140);
f->AddControl(rb2,4+140+4,pos,140);
pos += COL_HEIGHT+4;
ggProgressBar *p = new ggProgressBar("ProgressBar");
p->SetProgressPointer(&progress);
f->AddControl(p,4,pos,150);
pos += COL_HEIGHT+4;
f->AddControl(new ggSpinner(&slide),4,pos,80);
pos += COL_HEIGHT+4;
static float vals[100];
for (int i=0; i<100; i++) vals[i]=(i/100.0f)*(i/100.0f);
f->AddControl(new ggTable(vals,100,0,1),4,pos,100);
pos += COL_HEIGHT*2+4;
ggText *t2 = new ggText("Controls can be any color\nand have any alpha value\nThis is a multiline text control\nTry drawing in the graph above");
t2->SetFlags(GGFLAG_MULTILINE);
t2->RemoveFlags(GGFLAG_DONT_DRAW_BORDER | GGFLAG_SIZETOCONTENT);
t2->SetColor(0.2f,0.1f,0.4f);
f->AddControl(t2,4,pos,400-4-4,370-pos-4-COL_HEIGHT);
pos += COL_HEIGHT*5+4;
ggFrame *f2 = new ggFrame("Another Window");
mainframe->AddControl(f2,430,80,320,490);
f2->SetFrameColor(0,0,0,0);
f2->AddCloseButton();
ggText *t3 = new ggText();
t3->AttachString(&text);
t3->SetFlags(GGFLAG_MULTILINE);
t3->RemoveFlags(GGFLAG_DONT_DRAW_BORDER | GGFLAG_SIZETOCONTENT | GGFLAG_FOCUSABLE);
f2->AddControl(t3,10,10,320-10-10,490-10-10-COL_HEIGHT);
}
int main(int argc, char *argv[])
{
if ( SDL_Init(SDL_INIT_AUDIO | SDL_INIT_VIDEO) < 0 ) {
printf("Unable to init SDL: %s\n", SDL_GetError());
exit(1);
}
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
SDL_Surface *screen = SDL_SetVideoMode(
xres,yres,fullscreen?bpp:0,
SDL_HWSURFACE | (fullscreen?SDL_FULLSCREEN:0) | SDL_OPENGL);
if (!screen) {
printf("Unable to set video mode to %dx%dx%d%s: %s\n",xres,yres,bpp,
fullscreen?" fullscreen":"",
SDL_GetError());
exit(1);
}
glViewport(0,0,xres,yres);
InitMESGUI(&xres,&yres,"Arial.ttf",7,15);
// InitMESGUI(&xres,&yres,"Impact.ttf",12,20);
// SetCursorTexture("Images/cursor.bmp");
CreateTestControls();
SDL_Event event;
bool quitapp=false;
while (!quitapp) {
while (SDL_PollEvent(&event)) {
switch(event.type)
{
case SDL_QUIT:
quitapp=true;
break;
case SDL_ACTIVEEVENT:
// active=event.active.gain?true:false;
break;
case SDL_VIDEORESIZE:
xres = event.resize.w;
yres = event.resize.h;
if (yres==0) yres=1;
glViewport(0,0,xres,yres);
break;
case SDL_KEYDOWN:
case SDL_KEYUP:
if (event.key.keysym.sym < 128) {
char c = event.key.keysym.sym;
if (event.key.keysym.mod & KMOD_LSHIFT || event.key.keysym.mod & KMOD_RSHIFT)
c = shiftize(c);
GG_KeyboardEvent(c, event.key.state);
} else {
switch (event.key.keysym.sym) {
case SDLK_RIGHT:
GG_SKeyboardEvent(SC_RIGHT, event.key.state);
break;
case SDLK_LEFT:
GG_SKeyboardEvent(SC_LEFT, event.key.state);
break;
}
}
break;
case SDL_MOUSEBUTTONDOWN:
case SDL_MOUSEBUTTONUP:
GG_MouseButton(event.button.button,event.button.state);
break;
}
}
// update the progress bar
progress += inc;
if (progress>1) inc=-0.001f;
if (progress<0) inc=0.001f;
// tell MESGUI the mouse position
int tx,ty;
SDL_GetMouseState(&tx, &ty);
GG_SetMouseState(tx,ty);
glClear(GL_COLOR_BUFFER_BIT);
DrawMESGUI();
SDL_GL_SwapBuffers();
}
SDL_Quit();
return 0;
}