mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 13:11:05 +01:00 
			
		
		
		
	Removed ImFont::DisplayOffset in favor of ImFontConfig::GlyphOffset. (#1619)
+ Fonts: AddFontDefault() adjust its vertical offset based on floor(size/13) instead of always +1.
This commit is contained in:
		| @@ -35,6 +35,14 @@ HOW TO UPDATE? | |||||||
|  VERSION 1.79 WIP (In Progress) |  VERSION 1.79 WIP (In Progress) | ||||||
| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ||||||
|  |  | ||||||
|  | Breaking Changes: | ||||||
|  |  | ||||||
|  | - Fonts: Removed ImFont::DisplayOffset in favor of ImFontConfig::GlyphOffset. DisplayOffset was applied | ||||||
|  |   after scaling and not very meaningful/useful outside of being needed by the default ProggyClean font. | ||||||
|  |   It was also getting in the way of better font scaling, so let's get rid of it now!  | ||||||
|  |   If you used DisplayOffset it was probably in association to rasterizing a font at a specific size, | ||||||
|  |   in which case the corresponding offset may be reported into GlyphOffset. (#1619) | ||||||
|  |  | ||||||
| Other Changes: | Other Changes: | ||||||
|  |  | ||||||
| - Window: Fixed using non-zero pivot in SetNextWindowPos() when the window is collapsed. (#3433) | - Window: Fixed using non-zero pivot in SetNextWindowPos() when the window is collapsed. (#3433) | ||||||
| @@ -72,6 +80,7 @@ Other Changes: | |||||||
|   a fully clipped column. (#3475) [@szreder] |   a fully clipped column. (#3475) [@szreder] | ||||||
| - Popups, Tooltips: Fix edge cases issues with positionning popups and tooltips when they are larger than | - Popups, Tooltips: Fix edge cases issues with positionning popups and tooltips when they are larger than | ||||||
|   viewport on either or both axises. [@Rokups] |   viewport on either or both axises. [@Rokups] | ||||||
|  | - Fonts: AddFontDefault() adjust its vertical offset based on floor(size/13) instead of always +1. | ||||||
| - Metrics: Various tweaks, listing windows front-to-back, greying inactive items when possible. | - Metrics: Various tweaks, listing windows front-to-back, greying inactive items when possible. | ||||||
| - Demo: Add simple InputText() callbacks demo (aside from the more elaborate ones in 'Examples->Console'). | - Demo: Add simple InputText() callbacks demo (aside from the more elaborate ones in 'Examples->Console'). | ||||||
| - Backends: OpenGL3: Fix to avoid compiling/calling glBindSampler() on ES or pre 3.3 contexts which have  | - Backends: OpenGL3: Fix to avoid compiling/calling glBindSampler() on ES or pre 3.3 contexts which have  | ||||||
| @@ -1481,7 +1490,7 @@ Breaking Changes: | |||||||
|   - removed the default global context and font atlas instance, which were confusing for users of DLL reloading and users of multiple contexts. |   - removed the default global context and font atlas instance, which were confusing for users of DLL reloading and users of multiple contexts. | ||||||
| - Renamed ImGuiStyleVar_Count_ to ImGuiStyleVar_COUNT and ImGuiMouseCursor_Count_ to ImGuiMouseCursor_COUNT for consistency with other public enums. | - Renamed ImGuiStyleVar_Count_ to ImGuiStyleVar_COUNT and ImGuiMouseCursor_Count_ to ImGuiMouseCursor_COUNT for consistency with other public enums. | ||||||
| - Fonts: Moved sample TTF files from extra_fonts/ to misc/fonts/. If you loaded files directly from the imgui repo you may need to update your paths. | - Fonts: Moved sample TTF files from extra_fonts/ to misc/fonts/. If you loaded files directly from the imgui repo you may need to update your paths. | ||||||
| - Fonts: changed ImFont::DisplayOffset.y to defaults to 0 instead of +1. Fixed vertical rounding of Ascent/Descent to match TrueType renderer. | - Fonts: Changed ImFont::DisplayOffset.y to defaults to 0 instead of +1. Fixed vertical rounding of Ascent/Descent to match TrueType renderer. | ||||||
|   If you were adding or subtracting (not assigning) to ImFont::DisplayOffset check if your fonts are correctly aligned vertically. (#1619) |   If you were adding or subtracting (not assigning) to ImFont::DisplayOffset check if your fonts are correctly aligned vertically. (#1619) | ||||||
| - BeginDragDropSource(): temporarily removed the optional mouse_button=0 parameter because it is not really usable in many situations at the moment. | - BeginDragDropSource(): temporarily removed the optional mouse_button=0 parameter because it is not really usable in many situations at the moment. | ||||||
| - Obsoleted IsAnyWindowHovered() in favor of IsWindowHovered(ImGuiHoveredFlags_AnyWindow). Kept redirection function (will obsolete). | - Obsoleted IsAnyWindowHovered() in favor of IsWindowHovered(ImGuiHoveredFlags_AnyWindow). Kept redirection function (will obsolete). | ||||||
|   | |||||||
| @@ -142,13 +142,6 @@ ImGui::SliderFloat("float", &f, 0.0f, 1.0f); | |||||||
|  |  | ||||||
| <br>_(settings: Dark style (left), Light style (right) / Font: NotoSansCJKjp-Medium, 20px / Rounding: 5)_ | <br>_(settings: Dark style (left), Light style (right) / Font: NotoSansCJKjp-Medium, 20px / Rounding: 5)_ | ||||||
|  |  | ||||||
|  |  | ||||||
| **Offset font vertically by altering the `io.Font->DisplayOffset` value:** |  | ||||||
| ```cpp |  | ||||||
| ImFont* font = io.Fonts->AddFontFromFileTTF("font.ttf", size_pixels); |  | ||||||
| font->DisplayOffset.y = 1;   // Render 1 pixel down |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| **Font Atlas too large?** | **Font Atlas too large?** | ||||||
|  |  | ||||||
| - If you have very large number of glyphs or multiple fonts, the texture may become too big for your graphics API. The typical result of failing to upload a texture is if every glyphs appears as white rectangles. | - If you have very large number of glyphs or multiple fonts, the texture may become too big for your graphics API. The typical result of failing to upload a texture is if every glyphs appears as white rectangles. | ||||||
| @@ -337,13 +330,13 @@ DroidSans.ttf | |||||||
| ProggyClean.ttf | ProggyClean.ttf | ||||||
|   Copyright (c) 2004, 2005 Tristan Grimmer |   Copyright (c) 2004, 2005 Tristan Grimmer | ||||||
|   MIT License |   MIT License | ||||||
|   recommended loading setting: Size = 13.0, DisplayOffset.Y = +1 |   recommended loading setting: Size = 13.0, GlyphOffset.y = +1 | ||||||
|   http://www.proggyfonts.net/ |   http://www.proggyfonts.net/ | ||||||
|  |  | ||||||
| ProggyTiny.ttf | ProggyTiny.ttf | ||||||
|   Copyright (c) 2004, 2005 Tristan Grimmer |   Copyright (c) 2004, 2005 Tristan Grimmer | ||||||
|   MIT License |   MIT License | ||||||
|   recommended loading setting: Size = 10.0, DisplayOffset.Y = +1 |   recommended loading setting: Size = 10.0, GlyphOffset.y = +1 | ||||||
|   http://www.proggyfonts.net/ |   http://www.proggyfonts.net/ | ||||||
|  |  | ||||||
| Karla-Regular.ttf | Karla-Regular.ttf | ||||||
|   | |||||||
| @@ -114,7 +114,7 @@ Officially maintained bindings (in repository): | |||||||
| - Frameworks: Emscripten, Allegro5, Marmalade. | - Frameworks: Emscripten, Allegro5, Marmalade. | ||||||
|  |  | ||||||
| Third-party bindings (see [Bindings](https://github.com/ocornut/imgui/wiki/Bindings/) page): | Third-party bindings (see [Bindings](https://github.com/ocornut/imgui/wiki/Bindings/) page): | ||||||
| - Languages: C, C# and: Beef, ChaiScript, D, Go, Haskell, Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lua, Odin, Pascal, PureBasic, Python, Ruby, Rust, Swift... | - Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell, Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lua, Odin, Pascal, PureBasic, Python, Ruby, Rust, Swift... | ||||||
| - Frameworks: AGS/Adventure Game Studio, Amethyst, bsf, Cinder, Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, Godot, GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, NanoRT, nCine, Nim Game Lib, Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SFML, Sokol, Unity, Unreal Engine 4, vtk, Win32 GDI, WxWidgets. | - Frameworks: AGS/Adventure Game Studio, Amethyst, bsf, Cinder, Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, Godot, GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, NanoRT, nCine, Nim Game Lib, Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SFML, Sokol, Unity, Unreal Engine 4, vtk, Win32 GDI, WxWidgets. | ||||||
| - Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are auto-generated, you can use its json/lua output to generate bindings for other languages. | - Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are auto-generated, you can use its json/lua output to generate bindings for other languages. | ||||||
|  |  | ||||||
|   | |||||||
| @@ -372,6 +372,7 @@ CODE | |||||||
|  When you are not sure about a old symbol or function name, try using the Search/Find function of your IDE to look for comments or references in all imgui files. |  When you are not sure about a old symbol or function name, try using the Search/Find function of your IDE to look for comments or references in all imgui files. | ||||||
|  You can read releases logs https://github.com/ocornut/imgui/releases for more details. |  You can read releases logs https://github.com/ocornut/imgui/releases for more details. | ||||||
|  |  | ||||||
|  |  - 2020/09/17 (1.79) - removed ImFont::DisplayOffset in favor of ImFontConfig::GlyphOffset. DisplayOffset was applied after scaling and not very meaningful/useful outside of being needed by the default ProggyClean font. It was also getting in the way of better font scaling, so let's get rid of it now! | ||||||
|  - 2020/08/17 (1.78) - obsoleted use of the trailing 'float power=1.0f' parameter for DragFloat(), DragFloat2(), DragFloat3(), DragFloat4(), DragFloatRange2(), DragScalar(), DragScalarN(), SliderFloat(), SliderFloat2(), SliderFloat3(), SliderFloat4(), SliderScalar(), SliderScalarN(), VSliderFloat() and VSliderScalar(). |  - 2020/08/17 (1.78) - obsoleted use of the trailing 'float power=1.0f' parameter for DragFloat(), DragFloat2(), DragFloat3(), DragFloat4(), DragFloatRange2(), DragScalar(), DragScalarN(), SliderFloat(), SliderFloat2(), SliderFloat3(), SliderFloat4(), SliderScalar(), SliderScalarN(), VSliderFloat() and VSliderScalar(). | ||||||
|                        replaced the 'float power=1.0f' argument with integer-based flags defaulting to 0 (as with all our flags). |                        replaced the 'float power=1.0f' argument with integer-based flags defaulting to 0 (as with all our flags). | ||||||
|                        worked out a backward-compatibility scheme so hopefully most C++ codebase should not be affected. in short, when calling those functions: |                        worked out a backward-compatibility scheme so hopefully most C++ codebase should not be affected. in short, when calling those functions: | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								imgui.h
									
									
									
									
									
								
							| @@ -2406,11 +2406,10 @@ struct ImFont | |||||||
|     float                       FallbackAdvanceX;   // 4     // out // = FallbackGlyph->AdvanceX |     float                       FallbackAdvanceX;   // 4     // out // = FallbackGlyph->AdvanceX | ||||||
|     float                       FontSize;           // 4     // in  //            // Height of characters/line, set during loading (don't change after loading) |     float                       FontSize;           // 4     // in  //            // Height of characters/line, set during loading (don't change after loading) | ||||||
|  |  | ||||||
|     // Members: Hot ~36/48 bytes (for CalcTextSize + render loop) |     // Members: Hot ~28/40 bytes (for CalcTextSize + render loop) | ||||||
|     ImVector<ImWchar>           IndexLookup;        // 12-16 // out //            // Sparse. Index glyphs by Unicode code-point. |     ImVector<ImWchar>           IndexLookup;        // 12-16 // out //            // Sparse. Index glyphs by Unicode code-point. | ||||||
|     ImVector<ImFontGlyph>       Glyphs;             // 12-16 // out //            // All glyphs. |     ImVector<ImFontGlyph>       Glyphs;             // 12-16 // out //            // All glyphs. | ||||||
|     const ImFontGlyph*          FallbackGlyph;      // 4-8   // out // = FindGlyph(FontFallbackChar) |     const ImFontGlyph*          FallbackGlyph;      // 4-8   // out // = FindGlyph(FontFallbackChar) | ||||||
|     ImVec2                      DisplayOffset;      // 8     // in  // = (0,0)    // Offset font rendering by xx pixels |  | ||||||
|  |  | ||||||
|     // Members: Cold ~32/40 bytes |     // Members: Cold ~32/40 bytes | ||||||
|     ImFontAtlas*                ContainerAtlas;     // 4-8   // out //            // What we has been loaded into |     ImFontAtlas*                ContainerAtlas;     // 4-8   // out //            // What we has been loaded into | ||||||
|   | |||||||
| @@ -3715,7 +3715,6 @@ static void NodeFont(ImFont* font) | |||||||
|         "You may oversample them to get some flexibility with scaling. " |         "You may oversample them to get some flexibility with scaling. " | ||||||
|         "You can also render at multiple sizes and select which one to use at runtime.\n\n" |         "You can also render at multiple sizes and select which one to use at runtime.\n\n" | ||||||
|         "(Glimmer of hope: the atlas system will be rewritten in the future to make scaling more flexible.)"); |         "(Glimmer of hope: the atlas system will be rewritten in the future to make scaling more flexible.)"); | ||||||
|     ImGui::InputFloat("Font offset", &font->DisplayOffset.y, 1, 1, "%.0f"); |  | ||||||
|     ImGui::Text("Ascent: %f, Descent: %f, Height: %f", font->Ascent, font->Descent, font->Ascent - font->Descent); |     ImGui::Text("Ascent: %f, Descent: %f, Height: %f", font->Ascent, font->Descent, font->Ascent - font->Descent); | ||||||
|     ImGui::Text("Fallback character: '%c' (U+%04X)", font->FallbackChar, font->FallbackChar); |     ImGui::Text("Fallback character: '%c' (U+%04X)", font->FallbackChar, font->FallbackChar); | ||||||
|     ImGui::Text("Ellipsis character: '%c' (U+%04X)", font->EllipsisChar, font->EllipsisChar); |     ImGui::Text("Ellipsis character: '%c' (U+%04X)", font->EllipsisChar, font->EllipsisChar); | ||||||
| @@ -3724,8 +3723,8 @@ static void NodeFont(ImFont* font) | |||||||
|     for (int config_i = 0; config_i < font->ConfigDataCount; config_i++) |     for (int config_i = 0; config_i < font->ConfigDataCount; config_i++) | ||||||
|         if (font->ConfigData) |         if (font->ConfigData) | ||||||
|             if (const ImFontConfig* cfg = &font->ConfigData[config_i]) |             if (const ImFontConfig* cfg = &font->ConfigData[config_i]) | ||||||
|                 ImGui::BulletText("Input %d: \'%s\', Oversample: (%d,%d), PixelSnapH: %d", |                 ImGui::BulletText("Input %d: \'%s\', Oversample: (%d,%d), PixelSnapH: %d, Offset: (%.1f,%.1f)", | ||||||
|                     config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH); |                     config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH, cfg->GlyphOffset.x, cfg->GlyphOffset.y); | ||||||
|     if (ImGui::TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size)) |     if (ImGui::TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size)) | ||||||
|     { |     { | ||||||
|         // Display all glyphs of the fonts in separate pages of 256 characters |         // Display all glyphs of the fonts in separate pages of 256 characters | ||||||
|   | |||||||
| @@ -1891,11 +1891,11 @@ ImFont* ImFontAtlas::AddFontDefault(const ImFontConfig* font_cfg_template) | |||||||
|     if (font_cfg.Name[0] == '\0') |     if (font_cfg.Name[0] == '\0') | ||||||
|         ImFormatString(font_cfg.Name, IM_ARRAYSIZE(font_cfg.Name), "ProggyClean.ttf, %dpx", (int)font_cfg.SizePixels); |         ImFormatString(font_cfg.Name, IM_ARRAYSIZE(font_cfg.Name), "ProggyClean.ttf, %dpx", (int)font_cfg.SizePixels); | ||||||
|     font_cfg.EllipsisChar = (ImWchar)0x0085; |     font_cfg.EllipsisChar = (ImWchar)0x0085; | ||||||
|  |     font_cfg.GlyphOffset.y = 1.0f * IM_FLOOR(font_cfg.SizePixels / 13.0f);  // Add +1 offset per 13 units | ||||||
|  |  | ||||||
|     const char* ttf_compressed_base85 = GetDefaultCompressedFontDataTTFBase85(); |     const char* ttf_compressed_base85 = GetDefaultCompressedFontDataTTFBase85(); | ||||||
|     const ImWchar* glyph_ranges = font_cfg.GlyphRanges != NULL ? font_cfg.GlyphRanges : GetGlyphRangesDefault(); |     const ImWchar* glyph_ranges = font_cfg.GlyphRanges != NULL ? font_cfg.GlyphRanges : GetGlyphRangesDefault(); | ||||||
|     ImFont* font = AddFontFromMemoryCompressedBase85TTF(ttf_compressed_base85, font_cfg.SizePixels, &font_cfg, glyph_ranges); |     ImFont* font = AddFontFromMemoryCompressedBase85TTF(ttf_compressed_base85, font_cfg.SizePixels, &font_cfg, glyph_ranges); | ||||||
|     font->DisplayOffset.y = 1.0f; |  | ||||||
|     return font; |     return font; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -2768,7 +2768,6 @@ ImFont::ImFont() | |||||||
|     FallbackAdvanceX = 0.0f; |     FallbackAdvanceX = 0.0f; | ||||||
|     FallbackChar = (ImWchar)'?'; |     FallbackChar = (ImWchar)'?'; | ||||||
|     EllipsisChar = (ImWchar)-1; |     EllipsisChar = (ImWchar)-1; | ||||||
|     DisplayOffset = ImVec2(0.0f, 0.0f); |  | ||||||
|     FallbackGlyph = NULL; |     FallbackGlyph = NULL; | ||||||
|     ContainerAtlas = NULL; |     ContainerAtlas = NULL; | ||||||
|     ConfigData = NULL; |     ConfigData = NULL; | ||||||
| @@ -3163,8 +3162,8 @@ void ImFont::RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col | |||||||
|     if (!glyph || !glyph->Visible) |     if (!glyph || !glyph->Visible) | ||||||
|         return; |         return; | ||||||
|     float scale = (size >= 0.0f) ? (size / FontSize) : 1.0f; |     float scale = (size >= 0.0f) ? (size / FontSize) : 1.0f; | ||||||
|     pos.x = IM_FLOOR(pos.x + DisplayOffset.x); |     pos.x = IM_FLOOR(pos.x); | ||||||
|     pos.y = IM_FLOOR(pos.y + DisplayOffset.y); |     pos.y = IM_FLOOR(pos.y); | ||||||
|     draw_list->PrimReserve(6, 4); |     draw_list->PrimReserve(6, 4); | ||||||
|     draw_list->PrimRectUV(ImVec2(pos.x + glyph->X0 * scale, pos.y + glyph->Y0 * scale), ImVec2(pos.x + glyph->X1 * scale, pos.y + glyph->Y1 * scale), ImVec2(glyph->U0, glyph->V0), ImVec2(glyph->U1, glyph->V1), col); |     draw_list->PrimRectUV(ImVec2(pos.x + glyph->X0 * scale, pos.y + glyph->Y0 * scale), ImVec2(pos.x + glyph->X1 * scale, pos.y + glyph->Y1 * scale), ImVec2(glyph->U0, glyph->V0), ImVec2(glyph->U1, glyph->V1), col); | ||||||
| } | } | ||||||
| @@ -3175,8 +3174,8 @@ void ImFont::RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col | |||||||
|         text_end = text_begin + strlen(text_begin); // ImGui:: functions generally already provides a valid text_end, so this is merely to handle direct calls. |         text_end = text_begin + strlen(text_begin); // ImGui:: functions generally already provides a valid text_end, so this is merely to handle direct calls. | ||||||
|  |  | ||||||
|     // Align to be pixel perfect |     // Align to be pixel perfect | ||||||
|     pos.x = IM_FLOOR(pos.x + DisplayOffset.x); |     pos.x = IM_FLOOR(pos.x); | ||||||
|     pos.y = IM_FLOOR(pos.y + DisplayOffset.y); |     pos.y = IM_FLOOR(pos.y); | ||||||
|     float x = pos.x; |     float x = pos.x; | ||||||
|     float y = pos.y; |     float y = pos.y; | ||||||
|     if (y > clip_rect.w) |     if (y > clip_rect.w) | ||||||
|   | |||||||
| @@ -3958,7 +3958,6 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ | |||||||
|         ImFont* password_font = &g.InputTextPasswordFont; |         ImFont* password_font = &g.InputTextPasswordFont; | ||||||
|         password_font->FontSize = g.Font->FontSize; |         password_font->FontSize = g.Font->FontSize; | ||||||
|         password_font->Scale = g.Font->Scale; |         password_font->Scale = g.Font->Scale; | ||||||
|         password_font->DisplayOffset = g.Font->DisplayOffset; |  | ||||||
|         password_font->Ascent = g.Font->Ascent; |         password_font->Ascent = g.Font->Ascent; | ||||||
|         password_font->Descent = g.Font->Descent; |         password_font->Descent = g.Font->Descent; | ||||||
|         password_font->ContainerAtlas = g.Font->ContainerAtlas; |         password_font->ContainerAtlas = g.Font->ContainerAtlas; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user