1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 15:27:35 +00:00

FontEditor: Put glyph width changes on the undo stack

And select the restored glyph on undo/redo.
This commit is contained in:
thankyouverycool 2021-09-21 17:42:25 -04:00 committed by Andreas Kling
parent 1ae4caca4b
commit 0a4640e892
2 changed files with 38 additions and 8 deletions

View file

@ -21,26 +21,34 @@ public:
{
auto state = adopt_ref(*new UndoGlyph(m_code_point, *m_font));
auto glyph = font().glyph(m_code_point).glyph_bitmap();
for (int x = 0; x < glyph.width(); x++)
for (int y = 0; y < glyph.height(); y++)
for (int x = 0; x < font().max_glyph_width(); x++)
for (int y = 0; y < font().glyph_height(); y++)
state->m_bits[x][y] = glyph.bit_at(x, y);
state->m_width = glyph.width();
return state;
}
void restore_state(const UndoGlyph& state) const
{
auto bitmap = font().glyph(state.m_code_point).glyph_bitmap();
for (int x = 0; x < bitmap.width(); x++)
for (int y = 0; y < bitmap.height(); y++)
for (int x = 0; x < font().max_glyph_width(); x++)
for (int y = 0; y < font().glyph_height(); y++)
bitmap.set_bit_at(x, y, state.m_bits[x][y]);
m_restored_width = state.m_width;
m_restored_code_point = state.m_code_point;
}
void set_code_point(size_t point) { m_code_point = point; }
void set_font(Gfx::BitmapFont& font) { m_font = font; }
const Gfx::BitmapFont& font() const { return *m_font; }
u8 restored_width() const { return m_restored_width; }
u32 restored_code_point() const { return m_restored_code_point; }
private:
size_t m_code_point;
RefPtr<Gfx::BitmapFont> m_font;
u8 m_bits[32][36] = {};
u8 m_width { 0 };
mutable u8 m_restored_width { 0 };
mutable u32 m_restored_code_point { 0 };
};
class GlyphUndoCommand : public GUI::Command {