// // Lol Engine — imGui integration // // Copyright © 2009—2015 Benjamin “Touky” Huet // // Lol Engine is free software. It comes without any warranty, to // the extent permitted by applicable law. You can redistribute it // and/or modify it under the terms of the Do What the Fuck You Want // to Public License, Version 2, as published by the WTFPL Task Force. // See http://www.wtfpl.net/ for more details. // #pragma once #include "imgui.h" namespace lol { //LolImGui -------------------------------------------------------------------- class LolImGui : public Entity { typedef Entity super; //ImGuiKeyBase ------------------------------------------------------------ struct LolImGuiKeyBase : public StructSafeEnum { enum Type { KEY_START, Tab = KEY_START, LeftArrow, RightArrow, UpArrow, DownArrow, Home, End, Delete, Backspace, Enter, Escape, A, C, V, X, Y, Z, LShift, RShift, LCtrl, RCtrl, KEY_END, MOUSE_KEY_START = KEY_END, LeftClick = MOUSE_KEY_START, RightClick, MiddleClick, Focus, MOUSE_KEY_END, MAX = MOUSE_KEY_END, }; protected: virtual bool BuildEnumMap(map& enum_map) { enum_map[Tab] = g_name_key_Tab; enum_map[LeftArrow] = g_name_key_Left; enum_map[RightArrow] = g_name_key_Right; enum_map[UpArrow] = g_name_key_Up; enum_map[DownArrow] = g_name_key_Down; enum_map[Home] = g_name_key_Home; enum_map[End] = g_name_key_End; enum_map[Delete] = g_name_key_Delete; enum_map[Backspace] = g_name_key_Backspace; enum_map[Enter] = g_name_key_Return; enum_map[Escape] = g_name_key_Escape; enum_map[A] = g_name_key_A; enum_map[C] = g_name_key_C; enum_map[V] = g_name_key_V; enum_map[X] = g_name_key_X; enum_map[Y] = g_name_key_Y; enum_map[Z] = g_name_key_Z; enum_map[LShift] = g_name_key_LShift; enum_map[RShift] = g_name_key_RShift; enum_map[LCtrl] = g_name_key_LCtrl; enum_map[RCtrl] = g_name_key_RCtrl; enum_map[LeftClick] = g_name_mouse_key_left; enum_map[RightClick] = g_name_mouse_key_right; enum_map[MiddleClick] = g_name_mouse_key_middle; enum_map[Focus] = g_name_mouse_key_in_screen; return true; } }; typedef SafeEnum LolImGuiKey; //ImGuiKeyBase ------------------------------------------------------------ struct LolImGuiAxisBase : public StructSafeEnum { enum Type { MOUSE_AXIS_START = 0, Scroll = MOUSE_AXIS_START, MOUSE_AXIS_END, MAX = MOUSE_AXIS_END, }; protected: virtual bool BuildEnumMap(map& enum_map) { enum_map[Scroll] = g_name_mouse_axis_scroll; return true; } }; typedef SafeEnum LolImGuiAxis; public: //------------------------------------------------------------------------- LolImGui(); ~LolImGui(); char const *GetName() { return ""; } //------------------------------------------------------------------------- static void Init(); static void Shutdown(); //------------------------------------------------------------------------- static void SetClipboard(const char* text); static const char* GetClipboard(); protected: virtual void TickGame(float seconds); virtual void TickDraw(float seconds, Scene &scene); static void RenderDrawLists(ImDrawList** const cmd_lists, int cmd_lists_count); void RenderDrawListsMethod(ImDrawList** const cmd_lists, int cmd_lists_count); struct Uniform { Uniform() { } Uniform(ShaderVar var) { m_var = var; } operator String() { return m_var; } operator ShaderVar() { return m_var; } operator ShaderUniform() { return m_uniform; } //-- ShaderVar m_var; ShaderUniform m_uniform; }; //------------------------------------------------------------------------- TextureImage* m_font = nullptr; ShaderBuilder m_builder = ShaderBuilder("imgui_shader", "120"); Shader* m_shader = nullptr; Uniform m_ortho; Uniform m_texture; array m_attribs; VertexDeclaration* m_vdecl = nullptr; Controller* m_controller = nullptr; InputDevice* m_mouse = nullptr; InputDevice* m_keyboard = nullptr; InputProfile m_profile; //map m_keys; }; //----------------------------------------------------------------------------- class PrimitiveLolImGui : public PrimitiveRenderer { public: PrimitiveLolImGui() { } virtual void Render(Scene& scene, PrimitiveSource* primitive); }; //bool ImGui_ImplGlfw_Init(GLFWwindow* window, bool install_callbacks); //void ImGui_ImplGlfw_Shutdown(); //void ImGui_ImplGlfw_NewFrame(); // //// Use if you want to reset your rendering device without losing ImGui state. //void ImGui_ImplGlfw_InvalidateDeviceObjects(); //bool ImGui_ImplGlfw_CreateDeviceObjects(); // //// GLFW callbacks (installed by default if you enable 'install_callbacks' during initialization) //// Provided here if you want to chain callbacks. //// You can also handle inputs yourself and use those as a reference. //void ImGui_ImplGlfw_MouseButtonCallback(GLFWwindow* window, int button, int action, int mods); //void ImGui_ImplGlfw_ScrollCallback(GLFWwindow* window, double xoffset, double yoffset); //void ImGui_ImplGlFw_KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods); //void ImGui_ImplGlfw_CharCallback(GLFWwindow* window, unsigned int c); } /* namespace lol */