mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-09-17 06:52:23 +00:00
LibGfx: Remove unused GlyphBitmap class
This commit is contained in:
parent
1670eda095
commit
a4a3703fb4
Notes:
sideshowbarker
2024-07-17 10:31:19 +09:00
Author: https://github.com/awesomekling
Commit: a4a3703fb4
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/42
5 changed files with 4 additions and 92 deletions
|
@ -19,50 +19,9 @@
|
||||||
|
|
||||||
namespace Gfx {
|
namespace Gfx {
|
||||||
|
|
||||||
// FIXME: Make a MutableGlyphBitmap buddy class for FontEditor instead?
|
|
||||||
class GlyphBitmap {
|
|
||||||
public:
|
|
||||||
GlyphBitmap() = default;
|
|
||||||
GlyphBitmap(Bytes rows, IntSize size)
|
|
||||||
: m_rows(rows)
|
|
||||||
, m_size(size)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned row(unsigned index) const { return ByteReader::load32(bitmap(index).data()); }
|
|
||||||
|
|
||||||
bool bit_at(int x, int y) const { return bitmap(y).get(x); }
|
|
||||||
void set_bit_at(int x, int y, bool b) { bitmap(y).set(x, b); }
|
|
||||||
|
|
||||||
IntSize size() const { return m_size; }
|
|
||||||
int width() const { return m_size.width(); }
|
|
||||||
int height() const { return m_size.height(); }
|
|
||||||
|
|
||||||
static constexpr size_t bytes_per_row() { return sizeof(u32); }
|
|
||||||
static constexpr int max_width() { return bytes_per_row() * 8; }
|
|
||||||
static constexpr int max_height() { return max_width() + bytes_per_row(); }
|
|
||||||
|
|
||||||
private:
|
|
||||||
AK::Bitmap bitmap(size_t y) const
|
|
||||||
{
|
|
||||||
return { const_cast<u8*>(m_rows.offset_pointer(bytes_per_row() * y)), bytes_per_row() * 8 };
|
|
||||||
}
|
|
||||||
|
|
||||||
Bytes m_rows;
|
|
||||||
IntSize m_size { 0, 0 };
|
|
||||||
};
|
|
||||||
|
|
||||||
class Glyph {
|
class Glyph {
|
||||||
public:
|
public:
|
||||||
Glyph(GlyphBitmap const& glyph_bitmap, float left_bearing, float advance, float ascent)
|
Glyph(NonnullRefPtr<Bitmap> bitmap, float left_bearing, float advance, float ascent, bool is_color_bitmap)
|
||||||
: m_glyph_bitmap(glyph_bitmap)
|
|
||||||
, m_left_bearing(left_bearing)
|
|
||||||
, m_advance(advance)
|
|
||||||
, m_ascent(ascent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
Glyph(RefPtr<Bitmap> bitmap, float left_bearing, float advance, float ascent, bool is_color_bitmap)
|
|
||||||
: m_bitmap(bitmap)
|
: m_bitmap(bitmap)
|
||||||
, m_left_bearing(left_bearing)
|
, m_left_bearing(left_bearing)
|
||||||
, m_advance(advance)
|
, m_advance(advance)
|
||||||
|
@ -73,16 +32,13 @@ public:
|
||||||
|
|
||||||
bool is_color_bitmap() const { return m_color_bitmap; }
|
bool is_color_bitmap() const { return m_color_bitmap; }
|
||||||
|
|
||||||
bool is_glyph_bitmap() const { return !m_bitmap; }
|
|
||||||
GlyphBitmap glyph_bitmap() const { return m_glyph_bitmap; }
|
|
||||||
RefPtr<Bitmap> bitmap() const { return m_bitmap; }
|
RefPtr<Bitmap> bitmap() const { return m_bitmap; }
|
||||||
float left_bearing() const { return m_left_bearing; }
|
float left_bearing() const { return m_left_bearing; }
|
||||||
float advance() const { return m_advance; }
|
float advance() const { return m_advance; }
|
||||||
float ascent() const { return m_ascent; }
|
float ascent() const { return m_ascent; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
GlyphBitmap m_glyph_bitmap;
|
NonnullRefPtr<Bitmap> m_bitmap;
|
||||||
RefPtr<Bitmap> m_bitmap;
|
|
||||||
float m_left_bearing;
|
float m_left_bearing;
|
||||||
float m_advance;
|
float m_advance;
|
||||||
float m_ascent;
|
float m_ascent;
|
||||||
|
|
|
@ -90,7 +90,7 @@ Gfx::Glyph ScaledFont::glyph(u32 code_point, GlyphSubpixelOffset subpixel_offset
|
||||||
auto id = glyph_id_for_code_point(code_point);
|
auto id = glyph_id_for_code_point(code_point);
|
||||||
auto bitmap = rasterize_glyph(id, subpixel_offset);
|
auto bitmap = rasterize_glyph(id, subpixel_offset);
|
||||||
auto metrics = glyph_metrics(id);
|
auto metrics = glyph_metrics(id);
|
||||||
return Gfx::Glyph(bitmap, metrics.left_side_bearing, metrics.advance_width, metrics.ascender, m_font->has_color_bitmaps());
|
return Gfx::Glyph(*bitmap, metrics.left_side_bearing, metrics.advance_width, metrics.ascender, m_font->has_color_bitmaps());
|
||||||
}
|
}
|
||||||
|
|
||||||
float ScaledFont::glyph_left_bearing(u32 code_point) const
|
float ScaledFont::glyph_left_bearing(u32 code_point) const
|
||||||
|
|
|
@ -19,7 +19,6 @@ class DisjointRectSet;
|
||||||
|
|
||||||
class Emoji;
|
class Emoji;
|
||||||
class Font;
|
class Font;
|
||||||
class GlyphBitmap;
|
|
||||||
class ImageDecoder;
|
class ImageDecoder;
|
||||||
struct FontPixelMetrics;
|
struct FontPixelMetrics;
|
||||||
class ScaledFont;
|
class ScaledFont;
|
||||||
|
|
|
@ -433,46 +433,6 @@ void Painter::draw_rect(IntRect const& a_rect, Color color, bool rough)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Painter::draw_bitmap(IntPoint p, GlyphBitmap const& bitmap, Color color)
|
|
||||||
{
|
|
||||||
auto dst_rect = IntRect(p, bitmap.size()).translated(translation());
|
|
||||||
auto clipped_rect = dst_rect.intersected(clip_rect());
|
|
||||||
if (clipped_rect.is_empty())
|
|
||||||
return;
|
|
||||||
int const first_row = clipped_rect.top() - dst_rect.top();
|
|
||||||
int const last_row = clipped_rect.bottom() - dst_rect.top();
|
|
||||||
int const first_column = clipped_rect.left() - dst_rect.left();
|
|
||||||
int const last_column = clipped_rect.right() - dst_rect.left();
|
|
||||||
|
|
||||||
int scale = this->scale();
|
|
||||||
ARGB32* dst = m_target->scanline(clipped_rect.y() * scale) + clipped_rect.x() * scale;
|
|
||||||
auto dst_format = target()->format();
|
|
||||||
size_t const dst_skip = m_target->pitch() / sizeof(ARGB32);
|
|
||||||
|
|
||||||
if (scale == 1) {
|
|
||||||
for (int row = first_row; row < last_row; ++row) {
|
|
||||||
for (int j = 0; j < (last_column - first_column); ++j) {
|
|
||||||
if (bitmap.bit_at(j + first_column, row))
|
|
||||||
dst[j] = color_for_format(dst_format, dst[j]).blend(color).value();
|
|
||||||
}
|
|
||||||
dst += dst_skip;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (int row = first_row; row < last_row; ++row) {
|
|
||||||
for (int j = 0; j < (last_column - first_column); ++j) {
|
|
||||||
if (bitmap.bit_at((j + first_column), row)) {
|
|
||||||
for (int iy = 0; iy < scale; ++iy)
|
|
||||||
for (int ix = 0; ix < scale; ++ix) {
|
|
||||||
auto pixel_index = j * scale + ix + iy * dst_skip;
|
|
||||||
dst[pixel_index] = color_for_format(dst_format, dst[pixel_index]).blend(color).value();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dst += dst_skip * scale;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct BlitState {
|
struct BlitState {
|
||||||
enum AlphaState {
|
enum AlphaState {
|
||||||
NoAlpha = 0,
|
NoAlpha = 0,
|
||||||
|
@ -955,9 +915,7 @@ FLATTEN void Painter::draw_glyph(FloatPoint point, u32 code_point, Font const& f
|
||||||
auto glyph_position = Gfx::GlyphRasterPosition::get_nearest_fit_for(top_left);
|
auto glyph_position = Gfx::GlyphRasterPosition::get_nearest_fit_for(top_left);
|
||||||
auto glyph = font.glyph(code_point, glyph_position.subpixel_offset);
|
auto glyph = font.glyph(code_point, glyph_position.subpixel_offset);
|
||||||
|
|
||||||
if (glyph.is_glyph_bitmap()) {
|
if (glyph.is_color_bitmap()) {
|
||||||
draw_bitmap(top_left.to_type<int>(), glyph.glyph_bitmap(), color);
|
|
||||||
} else if (glyph.is_color_bitmap()) {
|
|
||||||
float scaled_width = glyph.advance();
|
float scaled_width = glyph.advance();
|
||||||
float ratio = static_cast<float>(glyph.bitmap()->height()) / static_cast<float>(glyph.bitmap()->width());
|
float ratio = static_cast<float>(glyph.bitmap()->height()) / static_cast<float>(glyph.bitmap()->width());
|
||||||
float scaled_height = scaled_width * ratio;
|
float scaled_height = scaled_width * ratio;
|
||||||
|
|
|
@ -73,7 +73,6 @@ public:
|
||||||
void fill_rect_with_rounded_corners(IntRect const&, Color, int top_left_radius, int top_right_radius, int bottom_right_radius, int bottom_left_radius);
|
void fill_rect_with_rounded_corners(IntRect const&, Color, int top_left_radius, int top_right_radius, int bottom_right_radius, int bottom_left_radius);
|
||||||
void fill_ellipse(IntRect const&, Color);
|
void fill_ellipse(IntRect const&, Color);
|
||||||
void draw_rect(IntRect const&, Color, bool rough = false);
|
void draw_rect(IntRect const&, Color, bool rough = false);
|
||||||
void draw_bitmap(IntPoint, GlyphBitmap const&, Color = Color());
|
|
||||||
void draw_scaled_bitmap(IntRect const& dst_rect, Gfx::Bitmap const&, IntRect const& src_rect, float opacity = 1.0f, ScalingMode = ScalingMode::NearestNeighbor);
|
void draw_scaled_bitmap(IntRect const& dst_rect, Gfx::Bitmap const&, IntRect const& src_rect, float opacity = 1.0f, ScalingMode = ScalingMode::NearestNeighbor);
|
||||||
void draw_scaled_bitmap(IntRect const& dst_rect, Gfx::Bitmap const&, FloatRect const& src_rect, float opacity = 1.0f, ScalingMode = ScalingMode::NearestNeighbor);
|
void draw_scaled_bitmap(IntRect const& dst_rect, Gfx::Bitmap const&, FloatRect const& src_rect, float opacity = 1.0f, ScalingMode = ScalingMode::NearestNeighbor);
|
||||||
void draw_scaled_bitmap_with_transform(IntRect const& dst_rect, Gfx::Bitmap const&, FloatRect const& src_rect, Gfx::AffineTransform const&, float opacity = 1.0f, ScalingMode = ScalingMode::NearestNeighbor);
|
void draw_scaled_bitmap_with_transform(IntRect const& dst_rect, Gfx::Bitmap const&, FloatRect const& src_rect, Gfx::AffineTransform const&, float opacity = 1.0f, ScalingMode = ScalingMode::NearestNeighbor);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue