mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 07:01:04 +01:00 
			
		
		
		
	ImFont: storing offsets as X0/Y0/X1/Y1 analoguous to examples for stb_truetype
This commit is contained in:
		
							
								
								
									
										20
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -9968,15 +9968,15 @@ bool    ImFontAtlas::Build()
 | 
			
		||||
                data.OutFont->Glyphs.resize(data.OutFont->Glyphs.Size + 1);
 | 
			
		||||
                ImFont::Glyph& glyph = data.OutFont->Glyphs.back();
 | 
			
		||||
                glyph.Codepoint = (ImWchar)(range.first_unicode_char_in_range + char_idx);
 | 
			
		||||
                glyph.Width = (signed short)pc.x1 - pc.x0 + 1;
 | 
			
		||||
                glyph.Height = (signed short)pc.y1 - pc.y0 + 1;
 | 
			
		||||
                glyph.XOffset = (signed short)(pc.xoff);
 | 
			
		||||
                glyph.YOffset = (signed short)(pc.yoff + (int)(font_ascent * font_scale));
 | 
			
		||||
                glyph.X0 = (signed short)(pc.xoff);
 | 
			
		||||
                glyph.Y0 = (signed short)(pc.yoff + (int)(font_ascent * font_scale));
 | 
			
		||||
                glyph.X1 = glyph.X0 + ((signed short)pc.x1 - pc.x0 + 1);
 | 
			
		||||
                glyph.Y1 = glyph.Y0 + ((signed short)pc.y1 - pc.y0 + 1);
 | 
			
		||||
                glyph.XAdvance = (signed short)(pc.xadvance + character_spacing_x);  // Bake spacing into XAdvance
 | 
			
		||||
                glyph.U0 = ((float)pc.x0 - 0.5f) * uv_scale_x;
 | 
			
		||||
                glyph.V0 = ((float)pc.y0 - 0.5f) * uv_scale_y;
 | 
			
		||||
                glyph.U1 = ((float)pc.x0 - 0.5f + glyph.Width) * uv_scale_x;
 | 
			
		||||
                glyph.V1 = ((float)pc.y0 - 0.5f + glyph.Height) * uv_scale_y;
 | 
			
		||||
                glyph.U1 = ((float)pc.x0 - 0.5f + (glyph.X1 - glyph.X0)) * uv_scale_x;
 | 
			
		||||
                glyph.V1 = ((float)pc.y0 - 0.5f + (glyph.Y1 - glyph.Y0)) * uv_scale_y;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -10735,11 +10735,11 @@ void ImFont::RenderText(float size, ImVec2 pos, ImU32 col, const ImVec4& clip_re
 | 
			
		||||
            if (c != ' ' && c != '\t')
 | 
			
		||||
            {
 | 
			
		||||
                // We don't do a second finer clipping test on the Y axis (todo: do some measurement see if it is worth it, probably not)
 | 
			
		||||
                float y1 = (float)(y + glyph->YOffset * scale);
 | 
			
		||||
                float y2 = (float)(y1 + glyph->Height * scale);
 | 
			
		||||
                float y1 = (float)(y + glyph->Y0 * scale);
 | 
			
		||||
                float y2 = (float)(y + glyph->Y1 * scale);
 | 
			
		||||
 | 
			
		||||
                float x1 = (float)(x + glyph->XOffset * scale);
 | 
			
		||||
                float x2 = (float)(x1 + glyph->Width * scale);
 | 
			
		||||
                float x1 = (float)(x + glyph->X0 * scale);
 | 
			
		||||
                float x2 = (float)(x + glyph->X1 * scale);
 | 
			
		||||
                if (x1 <= clip_rect.z && x2 >= clip_rect.x)
 | 
			
		||||
                {
 | 
			
		||||
                    // Render a character
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								imgui.h
									
									
									
									
									
								
							@@ -1185,8 +1185,7 @@ struct ImFont
 | 
			
		||||
    {
 | 
			
		||||
        ImWchar         Codepoint;
 | 
			
		||||
        signed short    XAdvance;
 | 
			
		||||
        signed short    Width, Height;
 | 
			
		||||
        signed short    XOffset, YOffset;
 | 
			
		||||
        signed short    X0, Y0, X1, Y1;
 | 
			
		||||
        float           U0, V0, U1, V1;     // Texture coordinates
 | 
			
		||||
    };
 | 
			
		||||
    float               Ascent;             // Distance from top to bottom of e.g. 'A' [0..FontSize]
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user