83 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
		
		
			
		
	
	
			83 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
|  | // Copyright (C) 2019 Nomango
 | ||
|  | 
 | ||
|  | #include "easy2d-imgui.h"
 | ||
|  | #include "imgui_impl_dx11.h"
 | ||
|  | 
 | ||
|  | namespace easy2d | ||
|  | { | ||
|  | 	void ImGuiView::SetupComponent(Application* app) | ||
|  | 	{ | ||
|  | 		// Setup Dear ImGui context
 | ||
|  | 		IMGUI_CHECKVERSION(); | ||
|  | 		ImGui::CreateContext(); | ||
|  | 		ImGuiIO& io = ImGui::GetIO(); (void)io; | ||
|  | 		//io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;  // Enable Keyboard Controls
 | ||
|  | 
 | ||
|  | 		// Setup Dear ImGui style
 | ||
|  | 		ImGui::StyleColorsDark(); | ||
|  | 		//ImGui::StyleColorsClassic();
 | ||
|  | 
 | ||
|  | 		// Setup Platform/Renderer bindings
 | ||
|  | 		Init(app->GetWindow()->GetHandle()); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	void ImGuiView::DestroyComponent() | ||
|  | 	{ | ||
|  | 		ImGui_ImplDX11_Shutdown(); | ||
|  | 		ImGui::DestroyContext(); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	void ImGuiView::Init(HWND hwnd) | ||
|  | 	{ | ||
|  | 		ImGuiIO& io = ImGui::GetIO(); | ||
|  | 		io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors;         // We can honor GetMouseCursor() values (optional)
 | ||
|  | 		io.BackendFlags |= ImGuiBackendFlags_HasSetMousePos;          // We can honor io.WantSetMousePos requests (optional, rarely used)
 | ||
|  | 		io.BackendPlatformName = "imgui_impl_win32"; | ||
|  | 		io.ImeWindowHandle = hwnd; | ||
|  | 
 | ||
|  | 		// Keyboard mapping. ImGui will use those indices to peek into the io.KeysDown[] array that we will update during the application lifetime.
 | ||
|  | 		io.KeyMap[ImGuiKey_Tab] = KeyCode::Tab; | ||
|  | 		io.KeyMap[ImGuiKey_LeftArrow] = KeyCode::Left; | ||
|  | 		io.KeyMap[ImGuiKey_RightArrow] = KeyCode::Right; | ||
|  | 		io.KeyMap[ImGuiKey_UpArrow] = KeyCode::Up; | ||
|  | 		io.KeyMap[ImGuiKey_DownArrow] = KeyCode::Down; | ||
|  | 		io.KeyMap[ImGuiKey_Delete] = KeyCode::Delete; | ||
|  | 		io.KeyMap[ImGuiKey_Backspace] = KeyCode::Back; | ||
|  | 		io.KeyMap[ImGuiKey_Space] = KeyCode::Space; | ||
|  | 		io.KeyMap[ImGuiKey_Enter] = KeyCode::Enter; | ||
|  | 		io.KeyMap[ImGuiKey_Escape] = KeyCode::Esc; | ||
|  | 		io.KeyMap[ImGuiKey_A] = KeyCode::A; | ||
|  | 		io.KeyMap[ImGuiKey_C] = KeyCode::C; | ||
|  | 		io.KeyMap[ImGuiKey_V] = KeyCode::V; | ||
|  | 		io.KeyMap[ImGuiKey_X] = KeyCode::X; | ||
|  | 		io.KeyMap[ImGuiKey_Y] = KeyCode::Y; | ||
|  | 		io.KeyMap[ImGuiKey_Z] = KeyCode::Z; | ||
|  | 
 | ||
|  | 		ImGui_ImplDX11_Init( | ||
|  | 			Renderer::Instance().GetDeviceResources()->GetD3DDevice(), | ||
|  | 			Renderer::Instance().GetDeviceResources()->GetD3DDeviceContext() | ||
|  | 		); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	void ImGuiView::NewFrame() | ||
|  | 	{ | ||
|  | 		ImGui_ImplDX11_NewFrame(); | ||
|  | 
 | ||
|  | 		ImGuiIO& io = ImGui::GetIO(); | ||
|  | 		E2D_ASSERT(io.Fonts->IsBuilt() && "Font atlas not built!"); | ||
|  | 
 | ||
|  | 		// Setup display size (every frame to accommodate for window resizing)
 | ||
|  | 		Size display_size = Renderer::Instance().GetOutputSize(); | ||
|  | 		io.DisplaySize = ImVec2(display_size.x, display_size.y); | ||
|  | 
 | ||
|  | 		ImGui::NewFrame(); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	void ImGuiView::Render() | ||
|  | 	{ | ||
|  | 		ImGui::Render(); | ||
|  | 
 | ||
|  | 		ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData()); | ||
|  | 	} | ||
|  | 
 | ||
|  | } |