
removed footer date for the time being (to prevent too much changes in documentation) implemented cleaning of GLUT bitmap font lists removed unused function in uicontext class renamed chm file added missing documentation back in nvcontext.xml git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2254 8e941d3f-bd1b-0410-a28a-d453659cc2b4
228 lines
6.0 KiB
ObjectPascal
228 lines
6.0 KiB
ObjectPascal
program widget_test;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
uses
|
|
Classes, SysUtils, GLut, GL, GLu, nvGLPainter, nvGlutContext, GLFreeTypeFont,
|
|
GLFreeType, GLUTBitmapFont, nvTypes, nvPainter, nvContext;
|
|
|
|
var
|
|
ui: GlutUIContext;
|
|
win_w: integer = 512;
|
|
win_h: integer = 512;
|
|
texture: GLuint = 0;
|
|
|
|
procedure closeapp;
|
|
begin
|
|
FreeAndNil(ui);
|
|
halt(0);
|
|
end;
|
|
|
|
procedure idle; cdecl;
|
|
begin
|
|
glutPostRedisplay;
|
|
end;
|
|
|
|
procedure key(k: byte; x: integer; y: integer); cdecl;
|
|
begin
|
|
ui.keyboard(k, x, y);
|
|
|
|
case k of
|
|
27, Ord('q'):
|
|
closeapp;
|
|
end;
|
|
end;
|
|
|
|
procedure special(key: integer; x: integer; y: integer); cdecl;
|
|
begin
|
|
ui.specialKeyboard(key, x, y);
|
|
end;
|
|
|
|
procedure resize(w: integer; h: integer); cdecl;
|
|
begin
|
|
ui.reshape(w, h);
|
|
glViewport(0, 0, w, h);
|
|
|
|
win_w := w;
|
|
win_h := h;
|
|
end;
|
|
|
|
procedure mouse(button: integer; state: integer; x: integer; y: integer); cdecl;
|
|
begin
|
|
ui.mouse(button, state, x, y);
|
|
end;
|
|
|
|
procedure motion(x: integer; y: integer); cdecl;
|
|
begin
|
|
ui.mouseMotion(x, y);
|
|
end;
|
|
|
|
procedure doUI;
|
|
const
|
|
formatLabel: array [0..1] of string = ('Combobox item 1', 'Combobox item 2');
|
|
lbOptions: array [0..2] of string = ('Listbox item 1', 'Listbox item 2', 'Listbox item 2');
|
|
var
|
|
none: Rect;
|
|
formatIdx: integer = 1;
|
|
Text: string = 'line edit widget';
|
|
textureRect: Rect;
|
|
state_false: boolean = false;
|
|
state_true: boolean = true;
|
|
val: integer = 1;
|
|
dval: double = 75;
|
|
begin
|
|
none.Rect(0, 0);
|
|
|
|
ui._begin;
|
|
|
|
//here follows the UI widget test code
|
|
//each of these tests, will demonstrate the visual of a widget
|
|
|
|
ui.beginGroup(GroupFlags_GrowDownFromLeft);
|
|
|
|
//label
|
|
ui.doLabel(none, 'Simple label (style=0)', 0);
|
|
ui.doLabel(none, 'Simple label (style=1)', 1);
|
|
|
|
//button
|
|
ui.beginGroup(GroupFlags_GrowRightFromTop);
|
|
ui.doButton(none, 'button up', state_false);
|
|
ui.doButton(none, 'button down', state_true);
|
|
ui.endGroup;
|
|
|
|
//checkbutton
|
|
ui.beginGroup(GroupFlags_GrowRightFromTop);
|
|
ui.doCheckButton(none, 'checkbutton up (style=0)', state_false, 0);
|
|
ui.doCheckButton(none, 'checkbutton down (style=0)', state_true, 0);
|
|
ui.endGroup;
|
|
ui.beginGroup(GroupFlags_GrowRightFromTop);
|
|
ui.doCheckButton(none, 'checkbutton up (style=1)', state_false, 1);
|
|
ui.doCheckButton(none, 'checkbutton down (style=1)', state_true, 1);
|
|
ui.endGroup;
|
|
|
|
//radio button
|
|
ui.beginGroup(GroupFlags_GrowRightFromTop);
|
|
ui.doRadioButton(2, none, 'radiobutton up (style=0)', val, 0);
|
|
ui.doRadioButton(1, none, 'radiobutton down (style=0)', val, 0);
|
|
ui.endGroup;
|
|
ui.beginGroup(GroupFlags_GrowRightFromTop);
|
|
ui.doRadioButton(2, none, 'radiobutton up (style=1)', val, 1);
|
|
ui.doRadioButton(1, none, 'radiobutton down (style=1)', val, 1);
|
|
ui.endGroup;
|
|
|
|
//horizontal slider
|
|
ui.doHorizontalSlider(none, 0, 100, dval, 0);
|
|
|
|
ui.beginGroup(GroupFlags_GrowRightFromTop);
|
|
//listbox
|
|
val := 1;
|
|
ui.doListBox(none, 3, lbOptions, val);
|
|
|
|
//combobox
|
|
ui.doComboBox(none, 2, formatLabel, formatIdx);
|
|
ui.endGroup;
|
|
|
|
//line edit
|
|
val := 1;
|
|
ui.beginGroup(GroupFlags_GrowRightFromTop);
|
|
ui.doLineEdit(none, Text, 100, val);
|
|
ui.doLineEdit(none, Text, 100, val);
|
|
ui.endGroup;
|
|
|
|
//panel
|
|
ui.beginGroup(GroupFlags_GrowRightFromTop);
|
|
ui.beginPanel(none, 'A folding panel', state_true);
|
|
ui.beginGroup(GroupFlags_GrowRightFromTop);
|
|
Text := './nvidia-widgets/trunk/src';
|
|
ui.doLineEdit(none, Text, 100, val);
|
|
ui.doButton(none, 'Browse', state_false);
|
|
ui.endGroup;
|
|
ui.endPanel;
|
|
|
|
//ui.beginPanel(none, 'Same panel but now folded', state_false);
|
|
// ui.beginGroup(GroupFlags_GrowRightFromTop);
|
|
// ui.doLabel(none, './nvidia-widgets/trunk/src', 1);
|
|
// ui.doButton(none, 'Browse', state_true, 0);
|
|
// ui.endGroup;
|
|
//ui.endPanel;
|
|
ui.endGroup;
|
|
|
|
//frame
|
|
ui.beginGroup(GroupFlags_GrowDownFromLeft);
|
|
ui.doLabel(none, 'This is a frame');
|
|
ui.beginFrame(GroupFlags_GrowRightFromTop, none);
|
|
ui.beginGroup(GroupFlags_GrowRightFromTop);
|
|
Text := './nvidia-widgets/trunk/src';
|
|
ui.doLineEdit(none, Text, 100, val);
|
|
ui.doButton(none, 'Browse', state_false);
|
|
ui.endGroup;
|
|
ui.endFrame;
|
|
ui.endGroup;
|
|
|
|
//listitem
|
|
ui.doListItem(1, none, 'List item 1', 1, 0);
|
|
ui.doListItem(2, none, 'List item 2', 1, 1);
|
|
ui.doListItem(3, none, 'List item 3', 1, 0);
|
|
ui.doListItem(4, none, 'List item 4', 1, 0);
|
|
|
|
//textureview
|
|
textureRect.Rect(0, 0, 100, 100);
|
|
ui.doTextureView(textureRect, texture, textureRect);
|
|
|
|
ui.endGroup;
|
|
|
|
ui._end;
|
|
end;
|
|
|
|
procedure display; cdecl;
|
|
begin
|
|
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
|
|
glMatrixMode(GL_MODELVIEW);
|
|
|
|
glLoadIdentity;
|
|
doUI;
|
|
glutSwapBuffers;
|
|
end;
|
|
|
|
var
|
|
texture_data: array [0..3] of cardinal = ($FFFF0000, $FF0000FF, $FF00FF00, $FF00FF00);
|
|
|
|
{$R *.res}
|
|
|
|
begin
|
|
glutInit(@argc, argv);
|
|
glutInitWindowSize(win_w, win_h);
|
|
glutInitDisplayMode(GLUT_DOUBLE or GLUT_DEPTH or GLUT_RGB);
|
|
glutCreateWindow('UI example');
|
|
|
|
ui := GlutUIContext.Create;
|
|
ui.Painter := GLUIPainter.Create;
|
|
ui.Painter.Font := TGLFreeTypeFont.Create('Ubuntu-R.ttf', 10);
|
|
//ui.Painter.Font := TGLUTBitmapFont.Create('fixed', 15);
|
|
|
|
if not ui.init(win_w, win_h) then
|
|
begin
|
|
writeln('UI initialization failed');
|
|
closeapp;
|
|
end;
|
|
|
|
glutReportErrors;
|
|
|
|
glGenTextures(1, @texture);
|
|
glBindTexture(GL_TEXTURE_2D, texture);
|
|
gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, 2, 2, GL_RGBA, GL_UNSIGNED_BYTE, @texture_data);
|
|
glEnable(GL_DEPTH_TEST);
|
|
glClearColor(0, 0, 0, 1);
|
|
glutDisplayFunc(@display);
|
|
|
|
glutMouseFunc(@mouse);
|
|
glutMotionFunc(@motion);
|
|
glutPassiveMotionFunc(@motion);
|
|
glutIdleFunc(@idle);
|
|
glutKeyboardFunc(@key);
|
|
glutSpecialFunc(@special);
|
|
glutReshapeFunc(@resize);
|
|
glutMainLoop;
|
|
end.
|
|
|