I resolved this after about a month of tinkering with the Api.

Apparently the popup menus are top level windows too. My frame drawing code
was calling AG_WindowDraw() only for windows I explicitely created via
AG_WindowNew. When I changed the window drawing code to:

AG_FOREACH_WINDOW(win, agDriverSw) {
        AG_WindowDraw(win);
}

It just magically included the popups too.

Cheers,

Nenad



On Mon, May 21, 2012 at 4:58 AM, nenad jalsovec <[email protected]>wrote:

> Hello,
>
> I'm considering to use Agar for GUI on top of my SDL/OpenGL
> application. I've been playing around with it for couple of days and
> it looks neat overly but I exeprienced some quirks.
>
> Below is a minimal code example that compiles on windows with VC 2008.
> The problem is that menu sub-item doesn't show up when I click on the
> main menu item. However, the same menu setup works as intended when
> using default event loop via AG_EventLoop() and without any SDL or GL
> code.
>
> I'm not sure I'm doing everything right as there are no code examples
> for the case of custom loop with GL+SDL
> If anybody has had experience with this, please shed some light.
>
>
> Thanks,
>
> Nenad
>
>
>
> #include <windows.h>
> #include <gl/gl.h>
> #include "SDL.h"
> #include <agar/core.h>
> #include <agar/gui.h>
>
> int main(int argc, char **argv){
>
>         // init sdl
>         if( SDL_Init(SDL_INIT_EVERYTHING) < 0 ){
>                 exit(1);
>         }
>         if( ! SDL_SetVideoMode( 640, 480, 32, SDL_HWSURFACE |
> SDL_DOUBLEBUF |
> SDL_OPENGL ) ){
>                 exit(1);
>         }
>
>         // init agar
>         if( AG_InitCore( "SDL+OGL+AGAR", 0) == -1 ){
>                 exit(1);
>         }
>         AG_InitVideoSDL( SDL_GetVideoSurface(), AG_VIDEO_OVERLAY);
>
>         // create agar window
>         AG_Window * win = AG_WindowNew( 0 );
>         AG_LabelNew( win, 0, "Hello, world!");
>         AG_WindowShow( win );
>
>         // crate a menu with one sub-node
>         AG_Menu *menu = AG_MenuNew(win, 0);
>         AG_MenuItem *item = AG_MenuNode(menu->root, "Menu", NULL);
>         AG_MenuNode(item, "Node", NULL);
>
>         // main loop
>         bool loop = true;
>         SDL_Event e;
>         while( loop ){
>                 while( SDL_PollEvent( &e )){
>                         // pass the events to agar
>                         AG_DriverEvent dev;
>                         AG_SDL_TranslateEvent( agDriverSw, & e, &dev );
>                         AG_ProcessEvent(NULL, &dev);
>                 }
>
>                 // some opengl code
>                 glClearColor(0.4, 0.5, 0.4, 1.0);
>                 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
>
>                 // draw the agar window
>                 if (agDriverSw){
>                         AG_BeginRendering(agDriverSw);
>                         AG_WindowDraw(win);
>                         AG_EndRendering(agDriverSw);
>                 }
>
>                 SDL_GL_SwapBuffers();
>         }
>
>         return 0;
> }
>
_______________________________________________
Agar mailing list
[email protected]
http://libagar.org/lists.html

Reply via email to