123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- /*******************************************************************************************
- *
- * raylib-extras [ImGui] example - Docking example
- *
- * This is an example of using the ImGui docking features that are part of docking branch
- * You must replace the default imgui with the code from the docking branch for this to work
- * https://github.com/ocornut/imgui/tree/docking
- *
- * Copyright (c) 2024 Jeffery Myers
- *
- ********************************************************************************************/
- #include "raylib.h"
- #include "raymath.h"
- #include "imgui.h"
- #include "rlImGui.h"
- // DPI scaling functions
- float ScaleToDPIF(float value)
- {
- return GetWindowScaleDPI().x * value;
- }
- int ScaleToDPII(int value)
- {
- return int(GetWindowScaleDPI().x * value);
- }
- int main(int argc, char* argv[])
- {
- // Initialization
- //--------------------------------------------------------------------------------------
- int screenWidth = 1280;
- int screenHeight = 800;
- // do not set the FLAG_WINDOW_HIGHDPI flag, that scales a low res framebuffer up to the native resolution.
- // use the native resolution and scale your geometry.
- SetConfigFlags(FLAG_MSAA_4X_HINT | FLAG_VSYNC_HINT | FLAG_WINDOW_RESIZABLE);
- InitWindow(screenWidth, screenHeight, "raylib-Extras [ImGui] example - Docking");
- SetTargetFPS(144);
- rlImGuiSetup(true);
- bool run = true;
- bool showDemoWindow = true;
- // if the linked ImGui has docking, enable it.
- // this will only be true if you use the docking branch of ImGui.
- #ifdef IMGUI_HAS_DOCK
- ImGui::GetIO().ConfigFlags |= ImGuiConfigFlags_DockingEnable;
- #endif
- // Main game loop
- while (!WindowShouldClose() && run) // Detect window close button or ESC key, or a quit from the menu
- {
- BeginDrawing();
- ClearBackground(DARKGRAY);
- // draw something to the raylib window below the GUI.
- DrawCircle(GetScreenWidth() / 2, GetScreenHeight() / 2, GetScreenHeight() * 0.45f, DARKGREEN);
- // start ImGui content
- rlImGuiBegin();
- // if you want windows to dock to the viewport, call this.
- #ifdef IMGUI_HAS_DOCK
- ImGui::DockSpaceOverViewport(0, NULL, ImGuiDockNodeFlags_PassthruCentralNode); // set ImGuiDockNodeFlags_PassthruCentralNode so that we can see the raylib contents behind the dockspace
- #endif
- // show a simple menu bar
- if (ImGui::BeginMainMenuBar())
- {
- if (ImGui::BeginMenu("File"))
- {
- if (ImGui::MenuItem("Quit"))
- run = false;
- ImGui::EndMenu();
- }
- if (ImGui::BeginMenu("Window"))
- {
- if (ImGui::MenuItem("Demo Window", nullptr, showDemoWindow))
- showDemoWindow = !showDemoWindow;
- ImGui::EndMenu();
- }
- ImGui::EndMainMenuBar();
- }
- // show some windows
-
- if (showDemoWindow)
- ImGui::ShowDemoWindow(&showDemoWindow);
- if (ImGui::Begin("Test Window"))
- {
- ImGui::TextUnformatted("Another window");
- }
- ImGui::End();
- // end ImGui Content
- rlImGuiEnd();
- EndDrawing();
- //----------------------------------------------------------------------------------
- }
- rlImGuiShutdown();
- // De-Initialization
- //--------------------------------------------------------------------------------------
- CloseWindow(); // Close window and OpenGL context
- //--------------------------------------------------------------------------------------
- return 0;
- }
|