diff options
author | David Walter Seikel | 2014-05-06 23:32:57 +1000 |
---|---|---|
committer | David Walter Seikel | 2014-05-06 23:32:57 +1000 |
commit | 9c6ebe2bf088bbe1404e8210876c58d743ab199a (patch) | |
tree | 281986ac427eb34de47d7053cbf72b058af02217 /src/extantz | |
parent | Scenri figures out it's own evas, and size. Clean up an unneeded obj variabl... (diff) | |
download | SledjHamr-9c6ebe2bf088bbe1404e8210876c58d743ab199a.zip SledjHamr-9c6ebe2bf088bbe1404e8210876c58d743ab199a.tar.gz SledjHamr-9c6ebe2bf088bbe1404e8210876c58d743ab199a.tar.bz2 SledjHamr-9c6ebe2bf088bbe1404e8210876c58d743ab199a.tar.xz |
Much clean up and commentary in extantz.c following that last commit.
No longer using the box, despite it now being a freebie. Don't need to create the box either now.
Ephysics is inited early.
Added comments about the layers.
Instead of creating our own background image, just change the texture of the winFang one.
Rearrange the bits for better stacking..
Diffstat (limited to 'src/extantz')
-rw-r--r-- | src/extantz/extantz.c | 234 | ||||
-rw-r--r-- | src/extantz/extantz.h | 7 |
2 files changed, 125 insertions, 116 deletions
diff --git a/src/extantz/extantz.c b/src/extantz/extantz.c index 9f8eaef..7e3e227 100644 --- a/src/extantz/extantz.c +++ b/src/extantz/extantz.c | |||
@@ -241,8 +241,8 @@ static void init_evas_gl(globals *ourGlobals) | |||
241 | elm_glview_resize_func_set(gld->elmGl, _resize_gl); | 241 | elm_glview_resize_func_set(gld->elmGl, _resize_gl); |
242 | elm_glview_render_func_set(gld->elmGl, (Elm_GLView_Func_Cb) _draw_gl); | 242 | elm_glview_render_func_set(gld->elmGl, (Elm_GLView_Func_Cb) _draw_gl); |
243 | 243 | ||
244 | elm_win_resize_object_add(ourGlobals->win, gld->elmGl); | ||
244 | evas_object_show(gld->elmGl); | 245 | evas_object_show(gld->elmGl); |
245 | elm_box_pack_end(ourGlobals->bx, gld->elmGl); | ||
246 | } | 246 | } |
247 | 247 | ||
248 | // TODO - apparently the proper way to deal with the new async rendering is to have this animator do the dirty thing, and call the Irrlicht rendering stuff in the _draw_gl call set above. | 248 | // TODO - apparently the proper way to deal with the new async rendering is to have this animator do the dirty thing, and call the Irrlicht rendering stuff in the _draw_gl call set above. |
@@ -385,50 +385,53 @@ void overlay_add(globals *ourGlobals) | |||
385 | 385 | ||
386 | EAPI_MAIN int elm_main(int argc, char **argv) | 386 | EAPI_MAIN int elm_main(int argc, char **argv) |
387 | { | 387 | { |
388 | Evas_Object *obj; | 388 | EPhysics_World *world; |
389 | EPhysics_World *world; | 389 | GLData *gld = NULL; |
390 | GLData *gld = NULL; | 390 | char buf[PATH_MAX]; |
391 | char buf[PATH_MAX]; | 391 | // Eina_Bool gotWebKit = elm_need_web(); // Initialise ewebkit if it exists, or return EINA_FALSE if it don't. |
392 | // Eina_Bool gotWebKit = elm_need_web(); // Initialise ewebkit if it exists, or return EINA_FALSE if it don't. | 392 | |
393 | 393 | /* Set the locale according to the system pref. | |
394 | /* Set the locale according to the system pref. | 394 | * If you don't do so the file selector will order the files list in |
395 | * If you don't do so the file selector will order the files list in | 395 | * a case sensitive manner |
396 | * a case sensitive manner | 396 | */ |
397 | */ | 397 | setlocale(LC_ALL, ""); |
398 | setlocale(LC_ALL, ""); | 398 | |
399 | 399 | elm_need_ethumb(); | |
400 | elm_need_ethumb(); | 400 | elm_need_efreet(); |
401 | elm_need_efreet(); | 401 | |
402 | 402 | HamrTime(elm_main, "extantz"); | |
403 | HamrTime(elm_main, "extantz"); | 403 | fprintf(stdout, "prefix was set to: %s\n", elm_app_prefix_dir_get()); |
404 | fprintf(stdout, "prefix was set to: %s\n", elm_app_prefix_dir_get()); | 404 | fprintf(stdout, "data directory is: %s\n", elm_app_data_dir_get()); |
405 | fprintf(stdout, "data directory is: %s\n", elm_app_data_dir_get()); | 405 | fprintf(stdout, "library directory is: %s\n", elm_app_lib_dir_get()); |
406 | fprintf(stdout, "library directory is: %s\n", elm_app_lib_dir_get()); | 406 | fprintf(stdout, "locale directory is: %s\n", elm_app_locale_dir_get()); |
407 | fprintf(stdout, "locale directory is: %s\n", elm_app_locale_dir_get()); | 407 | |
408 | 408 | logDom = loggingStartup("extantz", logDom); | |
409 | logDom = loggingStartup("extantz", logDom); | 409 | |
410 | 410 | // Don't do this, we need to clean up other stuff to, so set a clean up function below. | |
411 | // Don't do this, we need to clean up other stuff to, so set a clean up function below. | 411 | //elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); |
412 | //elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); | 412 | elm_policy_set(ELM_POLICY_EXIT, ELM_POLICY_EXIT_NONE); |
413 | elm_policy_set(ELM_POLICY_EXIT, ELM_POLICY_EXIT_NONE); | 413 | elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_NONE); |
414 | elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_NONE); | 414 | elm_policy_set(ELM_POLICY_THROTTLE, ELM_POLICY_THROTTLE_HIDDEN_ALWAYS); |
415 | elm_policy_set(ELM_POLICY_THROTTLE, ELM_POLICY_THROTTLE_HIDDEN_ALWAYS); | 415 | |
416 | 416 | // These are set via the elementary_config tool, which is hard to find. | |
417 | // These are set via the elementary_config tool, which is hard to find. | 417 | elm_config_finger_size_set(0); |
418 | elm_config_finger_size_set(0); | 418 | elm_config_scale_set(1.0); |
419 | elm_config_scale_set(1.0); | ||
420 | |||
421 | gld = &ourGlobals.gld; | ||
422 | gldata_init(gld); | ||
423 | |||
424 | // Set the engine to opengl_x11, then open our window. | ||
425 | elm_config_preferred_engine_set("opengl_x11"); | ||
426 | |||
427 | ourGlobals.mainWindow = winFangAdd(NULL, 0, 0, 50, 20, "extantz virtual world viewer", "extantz"); | ||
428 | ourGlobals.win = ourGlobals.mainWindow->win; | ||
429 | // Set preferred engine back to default from config | ||
430 | elm_config_preferred_engine_set(NULL); | ||
431 | 419 | ||
420 | #if USE_PHYSICS | ||
421 | if (!ephysics_init()) | ||
422 | return 1; | ||
423 | #endif | ||
424 | |||
425 | gld = &ourGlobals.gld; | ||
426 | gldata_init(gld); | ||
427 | |||
428 | // Set the engine to opengl_x11, then open our window. | ||
429 | elm_config_preferred_engine_set("opengl_x11"); | ||
430 | ourGlobals.mainWindow = winFangAdd(NULL, 0, 0, 50, 20, "extantz virtual world viewer", "extantz"); | ||
431 | // Set preferred engine back to default from config | ||
432 | elm_config_preferred_engine_set(NULL); | ||
433 | |||
434 | ourGlobals.win = ourGlobals.mainWindow->win; | ||
432 | // TODO, or not TODO - I keep getting rid of these, but keep bringing them back. | 435 | // TODO, or not TODO - I keep getting rid of these, but keep bringing them back. |
433 | // Get the Evas / canvas from the elm window (that the Evas_Object "lives on"), which is itself an Evas_Object created by Elm, so not sure if it was created internally with Ecore_Evas. | 436 | // Get the Evas / canvas from the elm window (that the Evas_Object "lives on"), which is itself an Evas_Object created by Elm, so not sure if it was created internally with Ecore_Evas. |
434 | ourGlobals.evas = evas_object_evas_get(ourGlobals.win); | 437 | ourGlobals.evas = evas_object_evas_get(ourGlobals.win); |
@@ -438,92 +441,99 @@ EAPI_MAIN int elm_main(int argc, char **argv) | |||
438 | ourGlobals.ee = ecore_evas_ecore_evas_get(ourGlobals.evas); // Only use this on Evas that was created with Ecore_Evas. | 441 | ourGlobals.ee = ecore_evas_ecore_evas_get(ourGlobals.evas); // Only use this on Evas that was created with Ecore_Evas. |
439 | #endif | 442 | #endif |
440 | 443 | ||
441 | #if USE_PHYSICS | 444 | evas_object_event_callback_add(ourGlobals.win, EVAS_CALLBACK_RESIZE, _on_resize, &ourGlobals); |
442 | if (!ephysics_init()) | ||
443 | return 1; | ||
444 | #endif | ||
445 | 445 | ||
446 | evas_object_event_callback_add(ourGlobals.win, EVAS_CALLBACK_RESIZE, _on_resize, &ourGlobals); | 446 | // Get the screen size. |
447 | 447 | elm_win_screen_size_get(ourGlobals.win, &ourGlobals.win_x, &ourGlobals.win_y, &ourGlobals.scr_w, &ourGlobals.scr_h); | |
448 | // Get the screen size. | 448 | ourGlobals.win_x = ourGlobals.win_x + (ourGlobals.scr_w / 3); |
449 | elm_win_screen_size_get(ourGlobals.win, &ourGlobals.win_x, &ourGlobals.win_y, &ourGlobals.scr_w, &ourGlobals.scr_h); | 449 | ourGlobals.win_w = ourGlobals.scr_w / 2; |
450 | ourGlobals.win_x = ourGlobals.win_x + (ourGlobals.scr_w / 3); | 450 | ourGlobals.win_h = ourGlobals.scr_h - 30; |
451 | ourGlobals.win_w = ourGlobals.scr_w / 2; | 451 | evas_object_move(ourGlobals.win, ourGlobals.win_x, ourGlobals.win_y); |
452 | ourGlobals.win_h = ourGlobals.scr_h - 30; | 452 | evas_object_resize(ourGlobals.win, ourGlobals.win_w, ourGlobals.win_h); |
453 | |||
454 | // Add a background image object. | ||
455 | snprintf(buf, sizeof(buf), "%s/sky_03.jpg", elm_app_data_dir_get()); | ||
456 | obj = eo_add(ELM_OBJ_IMAGE_CLASS, ourGlobals.win, | ||
457 | evas_obj_size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND), | ||
458 | elm_obj_image_fill_outside_set(EINA_TRUE), | ||
459 | elm_obj_image_file_set(buf, NULL), | ||
460 | evas_obj_visibility_set(EINA_TRUE) | ||
461 | ); | ||
462 | elm_win_resize_object_add(ourGlobals.win, obj); | ||
463 | eo_unref(obj); | ||
464 | 453 | ||
465 | ourGlobals.bx = eo_add(ELM_OBJ_BOX_CLASS, ourGlobals.win, | 454 | /* Our "layers". |
466 | evas_obj_size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND), | 455 | |
467 | evas_obj_size_hint_align_set(EVAS_HINT_FILL, EVAS_HINT_FILL), | 456 | Elm win - our real main window |
468 | evas_obj_visibility_set(EINA_TRUE) | 457 | These have some sort of inlined image if they are internal. |
469 | ); | 458 | Elm image - purple shaded sky image |
470 | elm_win_resize_object_add(ourGlobals.win, ourGlobals.bx); | 459 | Elm box - so everyone gets a freebie |
460 | |||
461 | Elm glview - added by init_evas_gl() if this is Irrlicht | ||
471 | 462 | ||
472 | // overlay_add(&ourGlobals); | 463 | Elm image - added by Evas_3D_Demo_add() -> scenriAdd() |
473 | woMan_add(&ourGlobals); | 464 | Evas image is extracted to pass to Evas_3d functions, |
474 | chat_add(&ourGlobals); | 465 | to catch hovers and clicks |
475 | ourGlobals.files = filesAdd(&ourGlobals, (char *) elm_app_data_dir_get(), EINA_TRUE, EINA_FALSE); | 466 | and to catch input for the camera |
476 | char *args[] = {"extantz", "-l", "test", "-foo", "COMBINED!", NULL}; | ||
477 | GuiLuaDo(5, args, ourGlobals.mainWindow); | ||
478 | 467 | ||
479 | // Gotta do this after adding the windows, otherwise the menu renders under the window. | 468 | // Elm win - added by overlay_add() |
480 | // This sucks, gotta redefine this menu each time we create a new window? | 469 | // Evas rectangle added, a fully transparent one to catch clicks |
481 | // Also, GL focus gets lost when any menu is used. sigh | 470 | // added to evas_object_evas_get(gld->winwin) |
482 | makeMainMenu(&ourGlobals); | ||
483 | 471 | ||
484 | // This does elm_box_pack_end(), so needs to be after the others. | 472 | The various internal windows. |
485 | init_evas_gl(&ourGlobals); | ||
486 | 473 | ||
487 | Evas_3D_Demo_add(&ourGlobals); | 474 | Elm toolbar |
488 | // TODO - Just a temporary hack so Irrlicht and Evas_3D can share the camera move. | 475 | |
489 | ourGlobals.gld.move = ourGlobals.scene->move; | 476 | Ephysics objects |
490 | evas_object_data_set(elm_image_object_get(ourGlobals.scene->image), "glob", &ourGlobals); | 477 | */ |
491 | evas_object_image_pixels_get_callback_set(elm_image_object_get(ourGlobals.scene->image), on_pixels, &ourGlobals); | 478 | |
479 | // Override the background image | ||
480 | snprintf(buf, sizeof(buf), "%s/sky_03.jpg", elm_app_data_dir_get()); | ||
481 | eo_do(ourGlobals.mainWindow->bg, | ||
482 | elm_obj_image_file_set(buf, NULL), | ||
483 | evas_obj_color_set(255, 255, 255, 255) | ||
484 | ); | ||
485 | |||
486 | init_evas_gl(&ourGlobals); | ||
487 | // elm_box_pack_end(ourGlobals.mainWindow->box, gld->elmGl); | ||
488 | |||
489 | Evas_3D_Demo_add(&ourGlobals); | ||
490 | // TODO - Just a temporary hack so Irrlicht and Evas_3D can share the camera move. | ||
491 | ourGlobals.gld.move = ourGlobals.scene->move; | ||
492 | evas_object_data_set(elm_image_object_get(ourGlobals.scene->image), "glob", &ourGlobals); | ||
493 | evas_object_image_pixels_get_callback_set(elm_image_object_get(ourGlobals.scene->image), on_pixels, &ourGlobals); | ||
494 | |||
495 | // overlay_add(&ourGlobals); | ||
496 | woMan_add(&ourGlobals); | ||
497 | chat_add(&ourGlobals); | ||
498 | ourGlobals.files = filesAdd(&ourGlobals, (char *) elm_app_data_dir_get(), EINA_TRUE, EINA_FALSE); | ||
499 | char *args[] = {"extantz", "-l", "test", "-foo", "COMBINED!", NULL}; | ||
500 | GuiLuaDo(5, args, ourGlobals.mainWindow); | ||
501 | |||
502 | // Gotta do this after adding the windows, otherwise the menu renders under the window. | ||
503 | // This sucks, gotta redefine this menu each time we create a new window? | ||
504 | // Also, GL focus gets lost when any menu is used. sigh | ||
505 | makeMainMenu(&ourGlobals); | ||
492 | 506 | ||
493 | #if USE_PHYSICS | 507 | #if USE_PHYSICS |
494 | world = ephysicsAdd(&ourGlobals); | 508 | world = ephysicsAdd(&ourGlobals); |
495 | #endif | 509 | #endif |
496 | 510 | ||
497 | evas_object_move(ourGlobals.win, ourGlobals.win_x, ourGlobals.win_y); | 511 | evas_object_show(ourGlobals.mainWindow->box); |
498 | evas_object_resize(ourGlobals.win, ourGlobals.win_w, ourGlobals.win_h); | 512 | _resize_winwin(gld); |
499 | evas_object_show(ourGlobals.win); | ||
500 | 513 | ||
501 | _resize_winwin(gld); | 514 | elm_run(); |
502 | |||
503 | elm_run(); | ||
504 | 515 | ||
505 | #if USE_PHYSICS | 516 | #if USE_PHYSICS |
506 | ephysics_world_del(world); | 517 | ephysics_world_del(world); |
507 | ephysics_shutdown(); | 518 | ephysics_shutdown(); |
508 | #endif | 519 | #endif |
509 | 520 | ||
510 | if (ourGlobals.win) | 521 | if (ourGlobals.win) |
511 | { | 522 | { |
512 | Evas_3D_Demo_fini(&ourGlobals); | 523 | Evas_3D_Demo_fini(&ourGlobals); |
513 | eo_unref(ourGlobals.tb); | 524 | eo_unref(ourGlobals.tb); |
514 | eo_unref(ourGlobals.bx); | 525 | winFangDel(ourGlobals.mainWindow); |
515 | winFangDel(ourGlobals.mainWindow); | 526 | } |
516 | } | ||
517 | 527 | ||
518 | if (logDom >= 0) | 528 | if (logDom >= 0) |
519 | { | 529 | { |
520 | eina_log_domain_unregister(logDom); | 530 | eina_log_domain_unregister(logDom); |
521 | logDom = -1; | 531 | logDom = -1; |
522 | } | 532 | } |
523 | 533 | ||
524 | elm_shutdown(); | 534 | elm_shutdown(); |
525 | 535 | ||
526 | return 0; | 536 | return 0; |
527 | } | 537 | } |
528 | ELM_MAIN() | 538 | ELM_MAIN() |
529 | 539 | ||
diff --git a/src/extantz/extantz.h b/src/extantz/extantz.h index 502420b..4a12a06 100644 --- a/src/extantz/extantz.h +++ b/src/extantz/extantz.h | |||
@@ -2,8 +2,8 @@ | |||
2 | #define _EXTANTZ_H_ | 2 | #define _EXTANTZ_H_ |
3 | 3 | ||
4 | #define USE_PHYSICS 1 | 4 | #define USE_PHYSICS 1 |
5 | #define USE_IRR 0 | 5 | #define USE_IRR 1 |
6 | #define USE_DEMO 0 | 6 | #define USE_DEMO 1 |
7 | #define DO_GEARS 0 | 7 | #define DO_GEARS 0 |
8 | 8 | ||
9 | 9 | ||
@@ -213,7 +213,6 @@ typedef struct _globals | |||
213 | Evas *evas; | 213 | Evas *evas; |
214 | Evas_Object *win; // Our Elm window. | 214 | Evas_Object *win; // Our Elm window. |
215 | Evas_Object *tb; // Our Elm toolbar. | 215 | Evas_Object *tb; // Our Elm toolbar. |
216 | Evas_Object *bx; // Our box. | ||
217 | int logDom; // Our logging domain. | 216 | int logDom; // Our logging domain. |
218 | 217 | ||
219 | winFang *mainWindow; | 218 | winFang *mainWindow; |
@@ -253,7 +252,7 @@ EAPI void Evas_3D_Demo_add(globals *ourGlobals); | |||
253 | Eina_Bool _animate_scene(globals *ourGlobals); | 252 | Eina_Bool _animate_scene(globals *ourGlobals); |
254 | void Evas_3D_Demo_fini(globals *ourGlobals); | 253 | void Evas_3D_Demo_fini(globals *ourGlobals); |
255 | 254 | ||
256 | Scene_Data *scenriAdd(Evas *evas, Evas_Object *win); | 255 | Scene_Data *scenriAdd(Evas_Object *win); |
257 | Evas_3D_Node *cameraAdd(Evas *evas, Scene_Data *scene, Evas_Object *win); | 256 | Evas_3D_Node *cameraAdd(Evas *evas, Scene_Data *scene, Evas_Object *win); |
258 | Eina_Bool animateCamera(Scene_Data *scene); | 257 | Eina_Bool animateCamera(Scene_Data *scene); |
259 | 258 | ||