mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-10-26 12:27:30 +00:00 
			
		
		
		
	Examples: Allegro5: Added support for ImGuiConfigFlags_NoMouseCursorChange flag. Added clipboard support. Unindexing buffers ourselves as Allegro indexed drawing primitives are buggy in the DirectX9 back-end.
This commit is contained in:
		| @@ -82,7 +82,8 @@ Other Changes: | ||||
|  - Examples: GLFW: Made it possible to Shutdown/Init the backend again (by reseting the time storage properly). (#1827) [@ice1000] | ||||
|  - Examples: Win32: Fixed handling of mouse wheel messages to support sub-unit scrolling messages (typically sent by track-pads). (#1874) [@zx64]   | ||||
|  - Examples: Added SDL+Vulkan example. | ||||
|  - Examples: Allegro5: Added support for ImGuiConfigFlags_NoMouseCursorChange flag. | ||||
|  - Examples: Allegro5: Added support for ImGuiConfigFlags_NoMouseCursorChange flag. Added clipboard support.  | ||||
|  - Examples: Allegro5: Unindexing buffers ourselves as Allegro indexed drawing primitives are buggy in the DirectX9 back-end. | ||||
|  - Examples: FreeGLUT: Added FreeGLUT bindings. Added FreeGLUT+OpenGL2 example. (#801) | ||||
|  - Misc: Updated stb_textedit from 1.09 + patches to 1.12 + minor patches. | ||||
|  - Internals: PushItemFlag() flags are inherited by BeginChild(). | ||||
|   | ||||
							
								
								
									
										1
									
								
								examples/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								examples/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -10,6 +10,7 @@ build/* | ||||
| *.o | ||||
| *.obj | ||||
| *.exe | ||||
| *.log | ||||
| *.pdb | ||||
| *.ilk | ||||
| *.VC.db | ||||
|   | ||||
| @@ -12,12 +12,12 @@ Note that the back-end supports _BOTH_ 16-bit and 32-bit indices, but 32-bit ind | ||||
| - On Ubuntu 14.04+ | ||||
|  | ||||
| ```bash | ||||
| g++ -DIMGUI_USER_CONFIG=\"examples/example_allegro5/imconfig_allegro5.h\" -I .. -I ../.. main.cpp imgui_impl_allegro5.cpp ../../imgui*.cpp -lallegro -lallegro_primitives -o allegro5_example | ||||
| g++ -DIMGUI_USER_CONFIG=\"examples/example_allegro5/imconfig_allegro5.h\" -I .. -I ../.. main.cpp ..\imgui_impl_allegro5.cpp ../../imgui*.cpp -lallegro -lallegro_primitives -o allegro5_example | ||||
| ``` | ||||
|  | ||||
| - On Windows with Visual Studio's CLI | ||||
|  | ||||
| ``` | ||||
| set ALLEGRODIR=path_to_your_allegro5_folder | ||||
| cl /Zi /MD /I %ALLEGRODIR%\include /DIMGUI_USER_CONFIG=\"examples/example_allegro5/imconfig_allegro5.h\" /I .. /I ..\.. main.cpp imgui_impl_allegro5.cpp ..\..\imgui*.cpp /link /LIBPATH:%ALLEGRODIR%\lib allegro-5.0.10-monolith-md.lib user32.lib | ||||
| cl /Zi /MD /I %ALLEGRODIR%\include /DIMGUI_USER_CONFIG=\"examples/example_allegro5/imconfig_allegro5.h\" /I .. /I ..\.. main.cpp ..\imgui_impl_allegro5.cpp ..\..\imgui*.cpp /link /LIBPATH:%ALLEGRODIR%\lib allegro-5.0.10-monolith-md.lib user32.lib | ||||
| ``` | ||||
|   | ||||
							
								
								
									
										173
									
								
								examples/example_allegro5/example_allegro5.vcxproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										173
									
								
								examples/example_allegro5/example_allegro5.vcxproj
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,173 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||
|   <ItemGroup Label="ProjectConfigurations"> | ||||
|     <ProjectConfiguration Include="Debug|Win32"> | ||||
|       <Configuration>Debug</Configuration> | ||||
|       <Platform>Win32</Platform> | ||||
|     </ProjectConfiguration> | ||||
|     <ProjectConfiguration Include="Debug|x64"> | ||||
|       <Configuration>Debug</Configuration> | ||||
|       <Platform>x64</Platform> | ||||
|     </ProjectConfiguration> | ||||
|     <ProjectConfiguration Include="Release|Win32"> | ||||
|       <Configuration>Release</Configuration> | ||||
|       <Platform>Win32</Platform> | ||||
|     </ProjectConfiguration> | ||||
|     <ProjectConfiguration Include="Release|x64"> | ||||
|       <Configuration>Release</Configuration> | ||||
|       <Platform>x64</Platform> | ||||
|     </ProjectConfiguration> | ||||
|   </ItemGroup> | ||||
|   <PropertyGroup Label="Globals"> | ||||
|     <ProjectGuid>{2AE17FDE-F7F3-4CAC-ADAB-0710EDA4F741}</ProjectGuid> | ||||
|     <RootNamespace>example_allegro5</RootNamespace> | ||||
|   </PropertyGroup> | ||||
|   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> | ||||
|     <ConfigurationType>Application</ConfigurationType> | ||||
|     <UseDebugLibraries>true</UseDebugLibraries> | ||||
|     <CharacterSet>MultiByte</CharacterSet> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> | ||||
|     <ConfigurationType>Application</ConfigurationType> | ||||
|     <UseDebugLibraries>true</UseDebugLibraries> | ||||
|     <CharacterSet>MultiByte</CharacterSet> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> | ||||
|     <ConfigurationType>Application</ConfigurationType> | ||||
|     <UseDebugLibraries>false</UseDebugLibraries> | ||||
|     <WholeProgramOptimization>true</WholeProgramOptimization> | ||||
|     <CharacterSet>MultiByte</CharacterSet> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> | ||||
|     <ConfigurationType>Application</ConfigurationType> | ||||
|     <UseDebugLibraries>false</UseDebugLibraries> | ||||
|     <WholeProgramOptimization>true</WholeProgramOptimization> | ||||
|     <CharacterSet>MultiByte</CharacterSet> | ||||
|   </PropertyGroup> | ||||
|   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> | ||||
|   <ImportGroup Label="ExtensionSettings"> | ||||
|   </ImportGroup> | ||||
|   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||
|     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||
|   </ImportGroup> | ||||
|   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> | ||||
|     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||
|   </ImportGroup> | ||||
|   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||
|     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||
|   </ImportGroup> | ||||
|   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> | ||||
|     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||
|   </ImportGroup> | ||||
|   <PropertyGroup Label="UserMacros" /> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||
|     <OutDir>$(ProjectDir)$(Configuration)\</OutDir> | ||||
|     <IntDir>$(ProjectDir)$(Configuration)\</IntDir> | ||||
|     <IncludePath>$(IncludePath)</IncludePath> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> | ||||
|     <OutDir>$(ProjectDir)$(Configuration)\</OutDir> | ||||
|     <IntDir>$(ProjectDir)$(Configuration)\</IntDir> | ||||
|     <IncludePath>$(IncludePath)</IncludePath> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||
|     <OutDir>$(ProjectDir)$(Configuration)\</OutDir> | ||||
|     <IntDir>$(ProjectDir)$(Configuration)\</IntDir> | ||||
|     <IncludePath>$(IncludePath)</IncludePath> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> | ||||
|     <OutDir>$(ProjectDir)$(Configuration)\</OutDir> | ||||
|     <IntDir>$(ProjectDir)$(Configuration)\</IntDir> | ||||
|     <IncludePath>$(IncludePath)</IncludePath> | ||||
|   </PropertyGroup> | ||||
|   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||
|     <ClCompile> | ||||
|       <WarningLevel>Level4</WarningLevel> | ||||
|       <Optimization>Disabled</Optimization> | ||||
|       <AdditionalIncludeDirectories>..\..;..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | ||||
|     </ClCompile> | ||||
|     <Link> | ||||
|       <GenerateDebugInformation>true</GenerateDebugInformation> | ||||
|       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> | ||||
|       <AdditionalDependencies>opengl32.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
|       <SubSystem>Console</SubSystem> | ||||
|       <IgnoreSpecificDefaultLibraries>msvcrt.lib</IgnoreSpecificDefaultLibraries> | ||||
|     </Link> | ||||
|   </ItemDefinitionGroup> | ||||
|   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> | ||||
|     <ClCompile> | ||||
|       <WarningLevel>Level4</WarningLevel> | ||||
|       <Optimization>Disabled</Optimization> | ||||
|       <AdditionalIncludeDirectories>..\..;..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | ||||
|     </ClCompile> | ||||
|     <Link> | ||||
|       <GenerateDebugInformation>true</GenerateDebugInformation> | ||||
|       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> | ||||
|       <AdditionalDependencies>opengl32.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
|       <SubSystem>Console</SubSystem> | ||||
|       <IgnoreSpecificDefaultLibraries>msvcrt.lib</IgnoreSpecificDefaultLibraries> | ||||
|     </Link> | ||||
|   </ItemDefinitionGroup> | ||||
|   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||
|     <ClCompile> | ||||
|       <WarningLevel>Level4</WarningLevel> | ||||
|       <Optimization>MaxSpeed</Optimization> | ||||
|       <FunctionLevelLinking>true</FunctionLevelLinking> | ||||
|       <IntrinsicFunctions>true</IntrinsicFunctions> | ||||
|       <AdditionalIncludeDirectories>..\..;..;$(SolutionDir)\libs\gl3w;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | ||||
|       <BufferSecurityCheck>false</BufferSecurityCheck> | ||||
|     </ClCompile> | ||||
|     <Link> | ||||
|       <GenerateDebugInformation>true</GenerateDebugInformation> | ||||
|       <EnableCOMDATFolding>true</EnableCOMDATFolding> | ||||
|       <OptimizeReferences>true</OptimizeReferences> | ||||
|       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> | ||||
|       <AdditionalDependencies>opengl32.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
|       <SubSystem>Console</SubSystem> | ||||
|       <IgnoreSpecificDefaultLibraries> | ||||
|       </IgnoreSpecificDefaultLibraries> | ||||
|     </Link> | ||||
|   </ItemDefinitionGroup> | ||||
|   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> | ||||
|     <ClCompile> | ||||
|       <WarningLevel>Level4</WarningLevel> | ||||
|       <Optimization>MaxSpeed</Optimization> | ||||
|       <FunctionLevelLinking>true</FunctionLevelLinking> | ||||
|       <IntrinsicFunctions>true</IntrinsicFunctions> | ||||
|       <AdditionalIncludeDirectories>..\..;..;$(SolutionDir)\libs\gl3w;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | ||||
|       <BufferSecurityCheck>false</BufferSecurityCheck> | ||||
|     </ClCompile> | ||||
|     <Link> | ||||
|       <GenerateDebugInformation>true</GenerateDebugInformation> | ||||
|       <EnableCOMDATFolding>true</EnableCOMDATFolding> | ||||
|       <OptimizeReferences>true</OptimizeReferences> | ||||
|       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> | ||||
|       <AdditionalDependencies>opengl32.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
|       <SubSystem>Console</SubSystem> | ||||
|       <IgnoreSpecificDefaultLibraries> | ||||
|       </IgnoreSpecificDefaultLibraries> | ||||
|     </Link> | ||||
|   </ItemDefinitionGroup> | ||||
|   <ItemGroup> | ||||
|     <ClCompile Include="..\..\imgui.cpp" /> | ||||
|     <ClCompile Include="..\..\imgui_demo.cpp" /> | ||||
|     <ClCompile Include="..\..\imgui_draw.cpp" /> | ||||
|     <ClCompile Include="..\imgui_impl_allegro5.cpp" /> | ||||
|     <ClCompile Include="imconfig_allegro5.h" /> | ||||
|     <ClCompile Include="main.cpp" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ClInclude Include="..\..\imconfig.h" /> | ||||
|     <ClInclude Include="..\..\imgui.h" /> | ||||
|     <ClInclude Include="..\..\imgui_internal.h" /> | ||||
|     <ClInclude Include="..\imgui_impl_allegro5.h" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <None Include="..\..\misc\natvis\imgui.natvis" /> | ||||
|     <None Include="..\README.txt" /> | ||||
|   </ItemGroup> | ||||
|   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> | ||||
|   <ImportGroup Label="ExtensionTargets"> | ||||
|   </ImportGroup> | ||||
| </Project> | ||||
							
								
								
									
										52
									
								
								examples/example_allegro5/example_allegro5.vcxproj.filters
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								examples/example_allegro5/example_allegro5.vcxproj.filters
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||
|   <ItemGroup> | ||||
|     <Filter Include="imgui"> | ||||
|       <UniqueIdentifier>{20b90ce4-7fcb-4731-b9a0-075f875de82d}</UniqueIdentifier> | ||||
|     </Filter> | ||||
|     <Filter Include="sources"> | ||||
|       <UniqueIdentifier>{f18ab499-84e1-499f-8eff-9754361e0e52}</UniqueIdentifier> | ||||
|       <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> | ||||
|     </Filter> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ClCompile Include="..\..\imgui.cpp"> | ||||
|       <Filter>imgui</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="..\..\imgui_demo.cpp"> | ||||
|       <Filter>imgui</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="..\..\imgui_draw.cpp"> | ||||
|       <Filter>imgui</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="main.cpp"> | ||||
|       <Filter>sources</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="..\imgui_impl_allegro5.cpp"> | ||||
|       <Filter>sources</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="imconfig_allegro5.h"> | ||||
|       <Filter>sources</Filter> | ||||
|     </ClCompile> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ClInclude Include="..\..\imconfig.h"> | ||||
|       <Filter>imgui</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="..\..\imgui.h"> | ||||
|       <Filter>imgui</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="..\..\imgui_internal.h"> | ||||
|       <Filter>imgui</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="..\imgui_impl_allegro5.h"> | ||||
|       <Filter>sources</Filter> | ||||
|     </ClInclude> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <None Include="..\README.txt" /> | ||||
|     <None Include="..\..\misc\natvis\imgui.natvis"> | ||||
|       <Filter>sources</Filter> | ||||
|     </None> | ||||
|   </ItemGroup> | ||||
| </Project> | ||||
| @@ -3,10 +3,11 @@ | ||||
|  | ||||
| // Implemented features: | ||||
| //  [X] Renderer: User texture binding. Use 'ALLEGRO_BITMAP*' as ImTextureID. Read the FAQ about ImTextureID in imgui.cpp. | ||||
| //  [X] Platform: Clipboard support (from Allegro 5.1.12) | ||||
| //  [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. | ||||
|  | ||||
| // Issues: | ||||
| //  [ ] Renderer: The renderer is suboptimal as we need to convert vertices. | ||||
| //  [ ] Platform: Clipboard support via al_set_clipboard_text/al_clipboard_has_text. | ||||
| //  [ ] Renderer: The renderer is suboptimal as we need to unindex our buffers and convert the format of vertices. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. | ||||
| // If you use this binding you'll need to call 4 functions: ImGui_ImplXXXX_Init(), ImGui_ImplXXXX_NewFrame(), ImGui::Render() and ImGui_ImplXXXX_Shutdown(). | ||||
| @@ -15,6 +16,9 @@ | ||||
|  | ||||
| // CHANGELOG | ||||
| // (minor and older changes stripped away, please see git history for details) | ||||
| //  2018-06-13: Platform: Added clipboard support (from Allegro 5.1.12). | ||||
| //  2018-06-13: Renderer: Use draw_data->DisplayPos and draw_data->DisplaySize to setup projection matrix and clipping rectangle. | ||||
| //  2018-06-13: Renderer: Backup/restore transform and clipping rectangle. | ||||
| //  2018-06-11: Misc: Setup io.BackendFlags ImGuiBackendFlags_HasMouseCursors flag + honor ImGuiConfigFlags_NoMouseCursorChange flag. | ||||
| //  2018-04-18: Misc: Renamed file from imgui_impl_a5.cpp to imgui_impl_allegro5.cpp. | ||||
| //  2018-04-18: Misc: Added support for 32-bits vertex indices to avoid conversion at runtime. Added imconfig_allegro5.h to enforce 32-bit indices when included from imgui.h. | ||||
| @@ -26,12 +30,19 @@ | ||||
| #include <cstring>      // memcpy | ||||
| #include "imgui.h" | ||||
| #include "imgui_impl_allegro5.h" | ||||
|  | ||||
| // Allegro | ||||
| #include <allegro5/allegro.h> | ||||
| #include <allegro5/allegro_primitives.h> | ||||
|  | ||||
| #ifdef _WIN32 | ||||
| #include <allegro5/allegro_windows.h> | ||||
| #endif | ||||
| #define ALLEGRO_HAS_CLIPBOARD   (ALLEGRO_VERSION_INT >= ((5 << 24) | (1 << 16) | (12 << 8)))    // Clipboard only supported from Allegro 5.1.12 | ||||
|  | ||||
| // Visual Studio warnings | ||||
| #ifdef _MSC_VER | ||||
| #pragma warning (disable: 4127) // condition expression is constant | ||||
| #endif | ||||
|  | ||||
| // Data | ||||
| static ALLEGRO_DISPLAY*         g_Display = NULL; | ||||
| @@ -39,6 +50,7 @@ static ALLEGRO_BITMAP*          g_Texture = NULL; | ||||
| static double                   g_Time = 0.0; | ||||
| static ALLEGRO_MOUSE_CURSOR*    g_MouseCursorInvisible = NULL; | ||||
| static ALLEGRO_VERTEX_DECL*     g_VertexDecl = NULL; | ||||
| static char*                    g_ClipboardTextData = NULL; | ||||
|  | ||||
| struct ImDrawVertAllegro | ||||
| { | ||||
| @@ -51,32 +63,53 @@ struct ImDrawVertAllegro | ||||
| // (this used to be set in io.RenderDrawListsFn and called by ImGui::Render(), but you can now call this directly from your main loop) | ||||
| void ImGui_ImplAllegro5_RenderDrawData(ImDrawData* draw_data) | ||||
| { | ||||
|     int op, src, dst; | ||||
|     al_get_blender(&op, &src, &dst); | ||||
|     // Backup Allegro state that will be modified | ||||
|     ALLEGRO_TRANSFORM last_transform = *al_get_current_transform(); | ||||
|     ALLEGRO_TRANSFORM last_projection_transform = *al_get_current_projection_transform(); | ||||
|     int last_clip_x, last_clip_y, last_clip_w, last_clip_h; | ||||
|     al_get_clipping_rectangle(&last_clip_x, &last_clip_y, &last_clip_w, &last_clip_h); | ||||
|     int last_blender_op, last_blender_src, last_blender_dst; | ||||
|     al_get_blender(&last_blender_op, &last_blender_src, &last_blender_dst); | ||||
|  | ||||
|     // Setup render state | ||||
|     al_set_blender(ALLEGRO_ADD, ALLEGRO_ALPHA, ALLEGRO_INVERSE_ALPHA); | ||||
|  | ||||
|     // Setup orthographic projection matrix | ||||
|     // Our visible imgui space lies from draw_data->DisplayPps (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). | ||||
|     { | ||||
|         float L = draw_data->DisplayPos.x; | ||||
|         float R = draw_data->DisplayPos.x + draw_data->DisplaySize.x; | ||||
|         float T = draw_data->DisplayPos.y; | ||||
|         float B = draw_data->DisplayPos.y + draw_data->DisplaySize.y; | ||||
|         ALLEGRO_TRANSFORM transform; | ||||
|         al_identity_transform(&transform); | ||||
|         al_use_transform(&transform); | ||||
|         al_orthographic_transform(&transform, L, T, 1.0f, R, B, -1.0f); | ||||
|         al_use_projection_transform(&transform); | ||||
|     } | ||||
|  | ||||
|     for (int n = 0; n < draw_data->CmdListsCount; n++) | ||||
|     { | ||||
|         const ImDrawList* cmd_list = draw_data->CmdLists[n]; | ||||
|  | ||||
|         // FIXME-OPT: Unfortunately Allegro doesn't support 32-bits packed colors so we have to convert them to 4 floats | ||||
|         // Allegro's implementation of al_draw_indexed_prim() for DX9 is completely broken. Unindex our buffers ourselves. | ||||
|         // FIXME-OPT: Unfortunately Allegro doesn't support 32-bits packed colors so we have to convert them to 4 float as well.. | ||||
|         static ImVector<ImDrawVertAllegro> vertices; | ||||
|         vertices.resize(cmd_list->VtxBuffer.Size); | ||||
|         for (int i = 0; i < cmd_list->VtxBuffer.Size; ++i) | ||||
|         vertices.resize(cmd_list->IdxBuffer.Size); | ||||
|         for (int i = 0; i < cmd_list->IdxBuffer.Size; i++) | ||||
|         { | ||||
|             const ImDrawVert &dv = cmd_list->VtxBuffer[i]; | ||||
|             ImDrawVertAllegro v; | ||||
|             v.pos = dv.pos; | ||||
|             v.uv = dv.uv; | ||||
|             unsigned char *c = (unsigned char*)&dv.col; | ||||
|             v.col = al_map_rgba(c[0], c[1], c[2], c[3]); | ||||
|             vertices[i] = v; | ||||
|             const ImDrawVert* src_v = &cmd_list->VtxBuffer[cmd_list->IdxBuffer[i]]; | ||||
|             ImDrawVertAllegro* dst_v = &vertices[i]; | ||||
|             dst_v->pos = src_v->pos; | ||||
|             dst_v->uv = src_v->uv; | ||||
|             unsigned char* c = (unsigned char*)&src_v->col; | ||||
|             dst_v->col = al_map_rgba(c[0], c[1], c[2], c[3]); | ||||
|         } | ||||
|  | ||||
|         const int* indices = NULL; | ||||
|         if (sizeof(ImDrawIdx) == 2) | ||||
|         { | ||||
|             // FIXME-OPT: Unfortunately Allegro doesn't support 16-bit indices.. You can '#define ImDrawIdx  int' in imconfig.h to request ImGui to output 32-bit indices. | ||||
|             // FIXME-OPT: Unfortunately Allegro doesn't support 16-bit indices.. You can '#define ImDrawIdx int' in imconfig.h to request ImGui to output 32-bit indices. | ||||
|             // Otherwise, we convert them from 16-bit to 32-bit at runtime here, which works perfectly but is a little wasteful. | ||||
|             static ImVector<int> indices_converted; | ||||
|             indices_converted.resize(cmd_list->IdxBuffer.Size); | ||||
| @@ -90,6 +123,7 @@ void ImGui_ImplAllegro5_RenderDrawData(ImDrawData* draw_data) | ||||
|         } | ||||
|  | ||||
|         int idx_offset = 0; | ||||
|         ImVec2 pos = draw_data->DisplayPos; | ||||
|         for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++) | ||||
|         { | ||||
|             const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i]; | ||||
| @@ -100,16 +134,18 @@ void ImGui_ImplAllegro5_RenderDrawData(ImDrawData* draw_data) | ||||
|             else | ||||
|             { | ||||
|                 ALLEGRO_BITMAP* texture = (ALLEGRO_BITMAP*)pcmd->TextureId; | ||||
|                 al_set_clipping_rectangle(pcmd->ClipRect.x, pcmd->ClipRect.y, pcmd->ClipRect.z-pcmd->ClipRect.x, pcmd->ClipRect.w-pcmd->ClipRect.y); | ||||
|                 al_draw_indexed_prim(&vertices[0], g_VertexDecl, texture, &indices[idx_offset], pcmd->ElemCount, ALLEGRO_PRIM_TRIANGLE_LIST); | ||||
|                 al_set_clipping_rectangle(pcmd->ClipRect.x - pos.x, pcmd->ClipRect.y - pos.y, pcmd->ClipRect.z - pcmd->ClipRect.x, pcmd->ClipRect.w - pcmd->ClipRect.y); | ||||
|                 al_draw_prim(&vertices[0], g_VertexDecl, texture, idx_offset, idx_offset + pcmd->ElemCount, ALLEGRO_PRIM_TRIANGLE_LIST); | ||||
|             } | ||||
|             idx_offset += pcmd->ElemCount; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     // Restore modified state | ||||
|     al_set_blender(op, src, dst); | ||||
|     al_set_clipping_rectangle(0, 0, al_get_display_width(g_Display), al_get_display_height(g_Display)); | ||||
|     // Restore modified Allegro state | ||||
|     al_set_blender(last_blender_op, last_blender_src, last_blender_dst); | ||||
|     al_set_clipping_rectangle(last_clip_x, last_clip_y, last_clip_w, last_clip_h); | ||||
|     al_use_transform(&last_transform); | ||||
|     al_use_projection_transform(&last_projection_transform); | ||||
| } | ||||
|  | ||||
| bool ImGui_ImplAllegro5_CreateDeviceObjects() | ||||
| @@ -174,6 +210,21 @@ void ImGui_ImplAllegro5_InvalidateDeviceObjects() | ||||
|     } | ||||
| } | ||||
|  | ||||
| #if ALLEGRO_HAS_CLIPBOARD | ||||
| static const char* ImGui_ImplAllegro5_GetClipboardText(void*) | ||||
| { | ||||
|     if (g_ClipboardTextData) | ||||
|         al_free(g_ClipboardTextData); | ||||
|     g_ClipboardTextData = al_get_clipboard_text(g_Display); | ||||
|     return g_ClipboardTextData; | ||||
| } | ||||
|  | ||||
| static void ImGui_ImplAllegro5_SetClipboardText(void*, const char* text) | ||||
| { | ||||
|     al_set_clipboard_text(g_Display, text); | ||||
| } | ||||
| #endif | ||||
|  | ||||
| bool ImGui_ImplAllegro5_Init(ALLEGRO_DISPLAY* display) | ||||
| { | ||||
|     g_Display = display; | ||||
| @@ -216,12 +267,24 @@ bool ImGui_ImplAllegro5_Init(ALLEGRO_DISPLAY* display) | ||||
|     io.KeyMap[ImGuiKey_Y] = ALLEGRO_KEY_Y; | ||||
|     io.KeyMap[ImGuiKey_Z] = ALLEGRO_KEY_Z; | ||||
|  | ||||
| #if ALLEGRO_HAS_CLIPBOARD | ||||
|     io.SetClipboardTextFn = ImGui_ImplAllegro5_SetClipboardText; | ||||
|     io.GetClipboardTextFn = ImGui_ImplAllegro5_GetClipboardText; | ||||
|     io.ClipboardUserData = NULL; | ||||
| #endif | ||||
|  | ||||
|     return true; | ||||
| } | ||||
|  | ||||
| void ImGui_ImplAllegro5_Shutdown() | ||||
| { | ||||
|     ImGui_ImplAllegro5_InvalidateDeviceObjects(); | ||||
|     g_Display = NULL; | ||||
|  | ||||
|     // Destroy last known clipboard data | ||||
|     if (g_ClipboardTextData) | ||||
|         al_free(g_ClipboardTextData); | ||||
|     g_ClipboardTextData = NULL; | ||||
| } | ||||
|  | ||||
| // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. | ||||
|   | ||||
| @@ -190,6 +190,7 @@ void ImGui_ImplSDL2_Shutdown() | ||||
|     // Destroy last known clipboard data | ||||
|     if (g_ClipboardTextData) | ||||
|         SDL_free(g_ClipboardTextData); | ||||
|     g_ClipboardTextData = NULL; | ||||
|  | ||||
|     // Destroy SDL mouse cursors | ||||
|     for (ImGuiMouseCursor cursor_n = 0; cursor_n < ImGuiMouseCursor_Count_; cursor_n++) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 omar
					omar