소스 검색

LibGfx: Add a way to construct an empty Font with arbitrary metrics

Andreas Kling 5 년 전
부모
커밋
98fd6b8767
2개의 변경된 파일16개의 추가작업 그리고 3개의 파일을 삭제
  1. 14 2
      Libraries/LibGfx/Font.cpp
  2. 2 1
      Libraries/LibGfx/Font.h

+ 14 - 2
Libraries/LibGfx/Font.cpp

@@ -37,6 +37,7 @@
 #include <stdio.h>
 #include <sys/mman.h>
 #include <unistd.h>
+#include <stdlib.h>
 
 namespace Gfx {
 
@@ -96,7 +97,7 @@ Font& Font::default_bold_font()
     return *s_default_bold_font;
 }
 
-RefPtr<Font> Font::clone() const
+NonnullRefPtr<Font> Font::clone() const
 {
     size_t bytes_per_glyph = sizeof(u32) * glyph_height();
     // FIXME: This is leaked!
@@ -107,7 +108,18 @@ RefPtr<Font> Font::clone() const
         memcpy(new_widths, m_glyph_widths, 256);
     else
         memset(new_widths, m_glyph_width, 256);
-    return adopt(*new Font(m_name, new_rows, new_widths, m_fixed_width, m_glyph_width, m_glyph_height, m_glyph_spacing));
+    return adopt(*new Font(m_name, new_rows, new_widths, m_fixed_width, m_glyph_width, 12, m_glyph_spacing));
+}
+
+NonnullRefPtr<Font> Font::create(u8 glyph_height, u8 glyph_width, bool fixed)
+{
+    size_t bytes_per_glyph = sizeof(u32) * glyph_height;
+    // FIXME: This is leaked!
+    auto* new_rows = static_cast<unsigned*>(malloc(bytes_per_glyph * 256));
+    memset(new_rows, 0, bytes_per_glyph * 256);
+    auto* new_widths = static_cast<u8*>(malloc(256));
+    memset(new_widths, glyph_width, 256);
+    return adopt(*new Font("Untitled", new_rows, new_widths, fixed, glyph_width, glyph_height, 1));
 }
 
 Font::Font(const StringView& name, unsigned* rows, u8* widths, bool is_fixed_width, u8 glyph_width, u8 glyph_height, u8 glyph_spacing)

+ 2 - 1
Libraries/LibGfx/Font.h

@@ -76,7 +76,8 @@ public:
     static Font& default_fixed_width_font();
     static Font& default_bold_fixed_width_font();
 
-    RefPtr<Font> clone() const;
+    NonnullRefPtr<Font> clone() const;
+    static NonnullRefPtr<Font> create(u8 glyph_height, u8 glyph_width, bool fixed);
 
     static RefPtr<Font> load_from_file(const StringView& path);
     bool write_to_file(const StringView& path);