boot_config.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /*
  2. * Copyright (c) 2012-2018 Daniele Bartolini and individual contributors.
  3. * License: https://github.com/dbartolini/crown/blob/master/LICENSE
  4. */
  5. #include "config.h"
  6. #include "core/json/json_object.h"
  7. #include "core/json/sjson.h"
  8. #include "core/memory/temp_allocator.h"
  9. #include "core/platform.h"
  10. #include "core/strings/dynamic_string.h"
  11. #include "device/boot_config.h"
  12. namespace crown
  13. {
  14. BootConfig::BootConfig(Allocator& a)
  15. : boot_script_name(u64(0))
  16. , boot_package_name(u64(0))
  17. , window_title(a)
  18. , window_w(CROWN_DEFAULT_WINDOW_WIDTH)
  19. , window_h(CROWN_DEFAULT_WINDOW_HEIGHT)
  20. , aspect_ratio(-1.0f)
  21. , vsync(true)
  22. , fullscreen(false)
  23. {
  24. }
  25. bool BootConfig::parse(const char* json)
  26. {
  27. TempAllocator4096 ta;
  28. JsonObject cfg(ta);
  29. sjson::parse(json, cfg);
  30. // General configs
  31. boot_script_name = sjson::parse_resource_id(cfg["boot_script"]);
  32. boot_package_name = sjson::parse_resource_id(cfg["boot_package"]);
  33. if (json_object::has(cfg, "window_title"))
  34. sjson::parse_string(cfg["window_title"], window_title);
  35. // Platform-specific configs
  36. if (json_object::has(cfg, CROWN_PLATFORM_NAME))
  37. {
  38. JsonObject platform(ta);
  39. sjson::parse(cfg[CROWN_PLATFORM_NAME], platform);
  40. if (json_object::has(platform, "renderer"))
  41. {
  42. JsonObject renderer(ta);
  43. sjson::parse(platform["renderer"], renderer);
  44. if (json_object::has(renderer, "resolution"))
  45. {
  46. JsonArray resolution(ta);
  47. sjson::parse_array(renderer["resolution"], resolution);
  48. window_w = sjson::parse_int(resolution[0]);
  49. window_h = sjson::parse_int(resolution[1]);
  50. }
  51. if (json_object::has(renderer, "aspect_ratio"))
  52. aspect_ratio = sjson::parse_float(renderer["aspect_ratio"]);
  53. if (json_object::has(renderer, "vsync"))
  54. vsync = sjson::parse_bool(renderer["vsync"]);
  55. if (json_object::has(renderer, "fullscreen"))
  56. fullscreen = sjson::parse_bool(renderer["fullscreen"]);
  57. }
  58. }
  59. return true;
  60. }
  61. } // namespace crown