mirror of
https://github.com/RGBCube/serenity
synced 2025-07-24 22:17:42 +00:00
LibGfx: Use ErrorOr<T> for Bitmap::try_create()
Another one that was used in a fajillion places.
This commit is contained in:
parent
235f39e449
commit
0de33b3d6c
43 changed files with 157 additions and 141 deletions
|
@ -25,8 +25,8 @@ BENCHMARK_CASE(diagonal_lines)
|
||||||
const int run_count = 50;
|
const int run_count = 50;
|
||||||
const int bitmap_size = 2000;
|
const int bitmap_size = 2000;
|
||||||
|
|
||||||
auto bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { bitmap_size, bitmap_size });
|
auto bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { bitmap_size, bitmap_size }).release_value_but_fixme_should_propagate_errors();
|
||||||
Gfx::Painter painter(*bitmap);
|
Gfx::Painter painter(bitmap);
|
||||||
|
|
||||||
for (int run = 0; run < run_count; run++) {
|
for (int run = 0; run < run_count; run++) {
|
||||||
for (int i = 0; i < bitmap_size; i++) {
|
for (int i = 0; i < bitmap_size; i++) {
|
||||||
|
@ -41,8 +41,8 @@ BENCHMARK_CASE(fill)
|
||||||
const int run_count = 1000;
|
const int run_count = 1000;
|
||||||
const int bitmap_size = 2000;
|
const int bitmap_size = 2000;
|
||||||
|
|
||||||
auto bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { bitmap_size, bitmap_size });
|
auto bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { bitmap_size, bitmap_size }).release_value_but_fixme_should_propagate_errors();
|
||||||
Gfx::Painter painter(*bitmap);
|
Gfx::Painter painter(bitmap);
|
||||||
|
|
||||||
for (int run = 0; run < run_count; run++) {
|
for (int run = 0; run < run_count; run++) {
|
||||||
painter.fill_rect(bitmap->rect(), Color::Blue);
|
painter.fill_rect(bitmap->rect(), Color::Blue);
|
||||||
|
@ -54,8 +54,8 @@ BENCHMARK_CASE(fill_with_gradient)
|
||||||
const int run_count = 50;
|
const int run_count = 50;
|
||||||
const int bitmap_size = 2000;
|
const int bitmap_size = 2000;
|
||||||
|
|
||||||
auto bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { bitmap_size, bitmap_size });
|
auto bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { bitmap_size, bitmap_size }).release_value_but_fixme_should_propagate_errors();
|
||||||
Gfx::Painter painter(*bitmap);
|
Gfx::Painter painter(bitmap);
|
||||||
|
|
||||||
for (int run = 0; run < run_count; run++) {
|
for (int run = 0; run < run_count; run++) {
|
||||||
painter.fill_rect_with_gradient(bitmap->rect(), Color::Blue, Color::Red);
|
painter.fill_rect_with_gradient(bitmap->rect(), Color::Blue, Color::Red);
|
||||||
|
|
|
@ -57,7 +57,7 @@ private:
|
||||||
GLContextWidget()
|
GLContextWidget()
|
||||||
: m_mesh_loader(adopt_own(*new WavefrontOBJLoader()))
|
: m_mesh_loader(adopt_own(*new WavefrontOBJLoader()))
|
||||||
{
|
{
|
||||||
m_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { RENDER_WIDTH, RENDER_HEIGHT });
|
m_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { RENDER_WIDTH, RENDER_HEIGHT }).release_value_but_fixme_should_propagate_errors();
|
||||||
m_context = GL::create_context(*m_bitmap);
|
m_context = GL::create_context(*m_bitmap);
|
||||||
|
|
||||||
start_timer(20);
|
start_timer(20);
|
||||||
|
|
|
@ -20,7 +20,7 @@ MonitorWidget::MonitorWidget()
|
||||||
{
|
{
|
||||||
m_desktop_resolution = GUI::Desktop::the().rect().size();
|
m_desktop_resolution = GUI::Desktop::the().rect().size();
|
||||||
m_monitor_bitmap = Gfx::Bitmap::try_load_from_file("/res/graphics/monitor.png").release_value_but_fixme_should_propagate_errors();
|
m_monitor_bitmap = Gfx::Bitmap::try_load_from_file("/res/graphics/monitor.png").release_value_but_fixme_should_propagate_errors();
|
||||||
m_desktop_bitmap = Gfx::Bitmap::try_create(m_monitor_bitmap->format(), { 280, 158 });
|
m_desktop_bitmap = Gfx::Bitmap::try_create(m_monitor_bitmap->format(), { 280, 158 }).release_value_but_fixme_should_propagate_errors();
|
||||||
m_monitor_rect = { { 12, 13 }, m_desktop_bitmap->size() };
|
m_monitor_rect = { { 12, 13 }, m_desktop_bitmap->size() };
|
||||||
set_fixed_size(304, 201);
|
set_fixed_size(304, 201);
|
||||||
}
|
}
|
||||||
|
|
|
@ -145,7 +145,7 @@ RefPtr<Gfx::Bitmap> PDFViewer::render_page(const PDF::Page& page)
|
||||||
|
|
||||||
auto height = static_cast<float>(this->height() - 2 * frame_thickness() - PAGE_PADDING * 2) * zoom_scale_factor;
|
auto height = static_cast<float>(this->height() - 2 * frame_thickness() - PAGE_PADDING * 2) * zoom_scale_factor;
|
||||||
auto width = height / page_scale_factor;
|
auto width = height / page_scale_factor;
|
||||||
auto bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, { width, height });
|
auto bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, { width, height }).release_value_but_fixme_should_propagate_errors();
|
||||||
|
|
||||||
PDF::Renderer::render(*m_document, page, bitmap);
|
PDF::Renderer::render(*m_document, page, bitmap);
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,7 @@ void RollWidget::paint_event(GUI::PaintEvent& event)
|
||||||
|
|
||||||
// Draw the background, if necessary.
|
// Draw the background, if necessary.
|
||||||
if (viewport_changed() || paint_area != m_background->height()) {
|
if (viewport_changed() || paint_area != m_background->height()) {
|
||||||
m_background = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, Gfx::IntSize(m_roll_width, paint_area));
|
m_background = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, Gfx::IntSize(m_roll_width, paint_area)).release_value_but_fixme_should_propagate_errors();
|
||||||
Gfx::Painter background_painter(*m_background);
|
Gfx::Painter background_painter(*m_background);
|
||||||
|
|
||||||
background_painter.translate(frame_thickness(), frame_thickness());
|
background_painter.translate(frame_thickness(), frame_thickness());
|
||||||
|
|
|
@ -168,10 +168,11 @@ Result<void, String> Image::write_to_file(const String& file_path) const
|
||||||
|
|
||||||
RefPtr<Gfx::Bitmap> Image::try_compose_bitmap(Gfx::BitmapFormat format) const
|
RefPtr<Gfx::Bitmap> Image::try_compose_bitmap(Gfx::BitmapFormat format) const
|
||||||
{
|
{
|
||||||
auto bitmap = Gfx::Bitmap::try_create(format, m_size);
|
auto bitmap_or_error = Gfx::Bitmap::try_create(format, m_size);
|
||||||
if (!bitmap)
|
if (bitmap_or_error.is_error())
|
||||||
return nullptr;
|
return nullptr;
|
||||||
GUI::Painter painter(*bitmap);
|
auto bitmap = bitmap_or_error.release_value_but_fixme_should_propagate_errors();
|
||||||
|
GUI::Painter painter(bitmap);
|
||||||
paint_into(painter, { 0, 0, m_size.width(), m_size.height() });
|
paint_into(painter, { 0, 0, m_size.width(), m_size.height() });
|
||||||
return bitmap;
|
return bitmap;
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,11 +19,11 @@ RefPtr<Layer> Layer::try_create_with_size(Image& image, Gfx::IntSize const& size
|
||||||
if (size.width() > 16384 || size.height() > 16384)
|
if (size.width() > 16384 || size.height() > 16384)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
auto bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, size);
|
auto bitmap_or_error = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, size);
|
||||||
if (!bitmap)
|
if (bitmap_or_error.is_error())
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
return adopt_ref(*new Layer(image, *bitmap, move(name)));
|
return adopt_ref(*new Layer(image, bitmap_or_error.release_value_but_fixme_should_propagate_errors(), move(name)));
|
||||||
}
|
}
|
||||||
|
|
||||||
RefPtr<Layer> Layer::try_create_with_bitmap(Image& image, NonnullRefPtr<Gfx::Bitmap> bitmap, String name)
|
RefPtr<Layer> Layer::try_create_with_bitmap(Image& image, NonnullRefPtr<Gfx::Bitmap> bitmap, String name)
|
||||||
|
@ -101,7 +101,10 @@ RefPtr<Gfx::Bitmap> Layer::try_copy_bitmap(Selection const& selection) const
|
||||||
}
|
}
|
||||||
auto selection_rect = selection.bounding_rect();
|
auto selection_rect = selection.bounding_rect();
|
||||||
|
|
||||||
auto result = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, selection_rect.size());
|
auto bitmap_or_error = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, selection_rect.size());
|
||||||
|
if (bitmap_or_error.is_error())
|
||||||
|
return nullptr;
|
||||||
|
auto result = bitmap_or_error.release_value_but_fixme_should_propagate_errors();
|
||||||
VERIFY(result->has_alpha_channel());
|
VERIFY(result->has_alpha_channel());
|
||||||
|
|
||||||
for (int y = selection_rect.top(); y <= selection_rect.bottom(); y++) {
|
for (int y = selection_rect.top(); y <= selection_rect.bottom(); y++) {
|
||||||
|
|
|
@ -22,7 +22,7 @@ NetworkStatisticsWidget::NetworkStatisticsWidget()
|
||||||
m_network_connected_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/network-connected.png").release_value_but_fixme_should_propagate_errors();
|
m_network_connected_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/network-connected.png").release_value_but_fixme_should_propagate_errors();
|
||||||
m_network_disconnected_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/network-disconnected.png").release_value_but_fixme_should_propagate_errors();
|
m_network_disconnected_bitmap = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/network-disconnected.png").release_value_but_fixme_should_propagate_errors();
|
||||||
|
|
||||||
m_network_link_down_bitmap = Gfx::Bitmap::try_create(m_network_connected_bitmap->format(), m_network_connected_bitmap->size());
|
m_network_link_down_bitmap = Gfx::Bitmap::try_create(m_network_connected_bitmap->format(), m_network_connected_bitmap->size()).release_value_but_fixme_should_propagate_errors();
|
||||||
{
|
{
|
||||||
Gfx::Painter painter(*m_network_link_down_bitmap);
|
Gfx::Painter painter(*m_network_link_down_bitmap);
|
||||||
painter.blit_filtered({}, *m_network_connected_bitmap, m_network_connected_bitmap->rect(), [](Color color) {
|
painter.blit_filtered({}, *m_network_connected_bitmap, m_network_connected_bitmap->rect(), [](Color color) {
|
||||||
|
|
|
@ -25,7 +25,7 @@ int main(int argc, char** argv)
|
||||||
auto const& track = optional_track.value();
|
auto const& track = optional_track.value();
|
||||||
auto const video_track = track.video_track().value();
|
auto const video_track = track.video_track().value();
|
||||||
|
|
||||||
auto image = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, Gfx::IntSize(video_track.pixel_height, video_track.pixel_width));
|
auto image = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, Gfx::IntSize(video_track.pixel_height, video_track.pixel_width)).release_value_but_fixme_should_propagate_errors();
|
||||||
auto& main_widget = window->set_main_widget<GUI::Widget>();
|
auto& main_widget = window->set_main_widget<GUI::Widget>();
|
||||||
main_widget.set_fill_with_background_color(true);
|
main_widget.set_fill_with_background_color(true);
|
||||||
main_widget.set_layout<GUI::VerticalBoxLayout>();
|
main_widget.set_layout<GUI::VerticalBoxLayout>();
|
||||||
|
|
|
@ -60,7 +60,7 @@ private:
|
||||||
|
|
||||||
Cube::Cube()
|
Cube::Cube()
|
||||||
{
|
{
|
||||||
m_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { WIDTH, HEIGHT });
|
m_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { WIDTH, HEIGHT }).release_value_but_fixme_should_propagate_errors();
|
||||||
|
|
||||||
m_accumulated_time = 0;
|
m_accumulated_time = 0;
|
||||||
m_cycles = 0;
|
m_cycles = 0;
|
||||||
|
|
|
@ -81,7 +81,7 @@ private:
|
||||||
|
|
||||||
Fire::Fire()
|
Fire::Fire()
|
||||||
{
|
{
|
||||||
bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::Indexed8, { FIRE_WIDTH, FIRE_HEIGHT });
|
bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::Indexed8, { FIRE_WIDTH, FIRE_HEIGHT }).release_value_but_fixme_should_propagate_errors();
|
||||||
|
|
||||||
/* Initialize fire palette */
|
/* Initialize fire palette */
|
||||||
for (int i = 0; i < 30; i++)
|
for (int i = 0; i < 30; i++)
|
||||||
|
|
|
@ -36,7 +36,7 @@ private:
|
||||||
|
|
||||||
Canvas::Canvas()
|
Canvas::Canvas()
|
||||||
{
|
{
|
||||||
m_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { WIDTH, HEIGHT });
|
m_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { WIDTH, HEIGHT }).release_value_but_fixme_should_propagate_errors();
|
||||||
draw();
|
draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,8 +41,8 @@ private:
|
||||||
|
|
||||||
Canvas::Canvas()
|
Canvas::Canvas()
|
||||||
{
|
{
|
||||||
m_bitmap_1x = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { WIDTH, HEIGHT }, 1);
|
m_bitmap_1x = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { WIDTH, HEIGHT }, 1).release_value_but_fixme_should_propagate_errors();
|
||||||
m_bitmap_2x = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { WIDTH, HEIGHT }, 2);
|
m_bitmap_2x = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { WIDTH, HEIGHT }, 2).release_value_but_fixme_should_propagate_errors();
|
||||||
|
|
||||||
// m_bitmap_1x and m_bitmap_2x have the same logical size, so LibGfx will try to draw them at the same physical size:
|
// m_bitmap_1x and m_bitmap_2x have the same logical size, so LibGfx will try to draw them at the same physical size:
|
||||||
// When drawing on a 2x backing store it'd scale m_bitmap_1x up 2x and paint m_bitmap_2x at its physical size.
|
// When drawing on a 2x backing store it'd scale m_bitmap_1x up 2x and paint m_bitmap_2x at its physical size.
|
||||||
|
|
|
@ -35,7 +35,7 @@ public:
|
||||||
|
|
||||||
void resize(Gfx::IntSize const& size)
|
void resize(Gfx::IntSize const& size)
|
||||||
{
|
{
|
||||||
m_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, size);
|
m_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, size).release_value_but_fixme_should_propagate_errors();
|
||||||
correct_aspect();
|
correct_aspect();
|
||||||
calculate();
|
calculate();
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ private:
|
||||||
|
|
||||||
Screensaver::Screensaver(int width, int height, int interval)
|
Screensaver::Screensaver(int width, int height, int interval)
|
||||||
{
|
{
|
||||||
m_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { width, height });
|
m_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { width, height }).release_value_but_fixme_should_propagate_errors();
|
||||||
srand(time(nullptr));
|
srand(time(nullptr));
|
||||||
stop_timer();
|
stop_timer();
|
||||||
start_timer(interval);
|
start_timer(interval);
|
||||||
|
|
|
@ -58,7 +58,7 @@ Starfield::Starfield(int interval)
|
||||||
|
|
||||||
void Starfield::create_stars(int width, int height, int stars)
|
void Starfield::create_stars(int width, int height, int stars)
|
||||||
{
|
{
|
||||||
m_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { width, height });
|
m_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { width, height }).release_value_but_fixme_should_propagate_errors();
|
||||||
|
|
||||||
m_stars.grow_capacity(stars);
|
m_stars.grow_capacity(stars);
|
||||||
for (int i = 0; i < stars; i++) {
|
for (int i = 0; i < stars; i++) {
|
||||||
|
|
|
@ -21,7 +21,7 @@ static const Gfx::Bitmap& heat_gradient()
|
||||||
{
|
{
|
||||||
static RefPtr<Gfx::Bitmap> bitmap;
|
static RefPtr<Gfx::Bitmap> bitmap;
|
||||||
if (!bitmap) {
|
if (!bitmap) {
|
||||||
bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { 101, 1 });
|
bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { 101, 1 }).release_value_but_fixme_should_propagate_errors();
|
||||||
GUI::Painter painter(*bitmap);
|
GUI::Painter painter(*bitmap);
|
||||||
painter.fill_rect_with_gradient(Orientation::Horizontal, bitmap->rect(), Color::from_rgb(0xffc080), Color::from_rgb(0xff3000));
|
painter.fill_rect_with_gradient(Orientation::Horizontal, bitmap->rect(), Color::from_rgb(0xffc080), Color::from_rgb(0xff3000));
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,7 @@ static RefPtr<Gfx::Bitmap> s_background_inverted;
|
||||||
|
|
||||||
Card::Card(Type type, uint8_t value)
|
Card::Card(Type type, uint8_t value)
|
||||||
: m_rect(Gfx::IntRect({}, { width, height }))
|
: m_rect(Gfx::IntRect({}, { width, height }))
|
||||||
, m_front(*Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, { width, height }))
|
, m_front(Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, { width, height }).release_value_but_fixme_should_propagate_errors())
|
||||||
, m_type(type)
|
, m_type(type)
|
||||||
, m_value(value)
|
, m_value(value)
|
||||||
{
|
{
|
||||||
|
@ -72,7 +72,7 @@ Card::Card(Type type, uint8_t value)
|
||||||
Gfx::IntRect paint_rect({ 0, 0 }, { width, height });
|
Gfx::IntRect paint_rect({ 0, 0 }, { width, height });
|
||||||
|
|
||||||
if (s_background.is_null()) {
|
if (s_background.is_null()) {
|
||||||
s_background = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, { width, height });
|
s_background = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, { width, height }).release_value_but_fixme_should_propagate_errors();
|
||||||
Gfx::Painter bg_painter(*s_background);
|
Gfx::Painter bg_painter(*s_background);
|
||||||
|
|
||||||
auto image = Gfx::Bitmap::try_load_from_file("/res/icons/cards/buggie-deck.png").release_value_but_fixme_should_propagate_errors();
|
auto image = Gfx::Bitmap::try_load_from_file("/res/icons/cards/buggie-deck.png").release_value_but_fixme_should_propagate_errors();
|
||||||
|
|
|
@ -478,7 +478,7 @@ static Gfx::IntSize closest_multiple(const Gfx::IntSize& min_size, size_t step)
|
||||||
}
|
}
|
||||||
|
|
||||||
SoftwareRasterizer::SoftwareRasterizer(const Gfx::IntSize& min_size)
|
SoftwareRasterizer::SoftwareRasterizer(const Gfx::IntSize& min_size)
|
||||||
: m_render_target { Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, closest_multiple(min_size, RASTERIZER_BLOCK_SIZE)) }
|
: m_render_target { Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, closest_multiple(min_size, RASTERIZER_BLOCK_SIZE)).release_value_but_fixme_should_propagate_errors() }
|
||||||
, m_depth_buffer { adopt_own(*new DepthBuffer(closest_multiple(min_size, RASTERIZER_BLOCK_SIZE))) }
|
, m_depth_buffer { adopt_own(*new DepthBuffer(closest_multiple(min_size, RASTERIZER_BLOCK_SIZE))) }
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -547,7 +547,7 @@ void SoftwareRasterizer::resize(const Gfx::IntSize& min_size)
|
||||||
{
|
{
|
||||||
wait_for_all_threads();
|
wait_for_all_threads();
|
||||||
|
|
||||||
m_render_target = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, closest_multiple(min_size, RASTERIZER_BLOCK_SIZE));
|
m_render_target = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, closest_multiple(min_size, RASTERIZER_BLOCK_SIZE)).release_value_but_fixme_should_propagate_errors();
|
||||||
m_depth_buffer = adopt_own(*new DepthBuffer(m_render_target->size()));
|
m_depth_buffer = adopt_own(*new DepthBuffer(m_render_target->size()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -94,9 +94,12 @@ RefPtr<Gfx::Bitmap> Clipboard::bitmap() const
|
||||||
auto clipping_bitmap_or_error = Gfx::Bitmap::try_create_wrapper((Gfx::BitmapFormat)format.value(), { (int)width.value(), (int)height.value() }, scale.value(), pitch.value(), clipping.data.data());
|
auto clipping_bitmap_or_error = Gfx::Bitmap::try_create_wrapper((Gfx::BitmapFormat)format.value(), { (int)width.value(), (int)height.value() }, scale.value(), pitch.value(), clipping.data.data());
|
||||||
if (clipping_bitmap_or_error.is_error())
|
if (clipping_bitmap_or_error.is_error())
|
||||||
return nullptr;
|
return nullptr;
|
||||||
auto clipping_bitmap = clipping_bitmap_or_error.release_value();
|
auto clipping_bitmap = clipping_bitmap_or_error.release_value_but_fixme_should_propagate_errors();
|
||||||
|
|
||||||
auto bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, { (int)width.value(), (int)height.value() }, scale.value());
|
auto bitmap_or_error = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, { (int)width.value(), (int)height.value() }, scale.value());
|
||||||
|
if (bitmap_or_error.is_error())
|
||||||
|
return nullptr;
|
||||||
|
auto bitmap = bitmap_or_error.release_value_but_fixme_should_propagate_errors();
|
||||||
|
|
||||||
for (int y = 0; y < clipping_bitmap->physical_height(); ++y) {
|
for (int y = 0; y < clipping_bitmap->physical_height(); ++y) {
|
||||||
for (int x = 0; x < clipping_bitmap->physical_width(); ++x) {
|
for (int x = 0; x < clipping_bitmap->physical_width(); ++x) {
|
||||||
|
|
|
@ -532,7 +532,7 @@ ColorField::ColorField(Color color)
|
||||||
|
|
||||||
void ColorField::create_color_bitmap()
|
void ColorField::create_color_bitmap()
|
||||||
{
|
{
|
||||||
m_color_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { 256, 256 });
|
m_color_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { 256, 256 }).release_value_but_fixme_should_propagate_errors();
|
||||||
auto painter = Gfx::Painter(*m_color_bitmap);
|
auto painter = Gfx::Painter(*m_color_bitmap);
|
||||||
|
|
||||||
Gfx::HSV hsv;
|
Gfx::HSV hsv;
|
||||||
|
@ -658,7 +658,7 @@ void ColorField::resize_event(ResizeEvent&)
|
||||||
ColorSlider::ColorSlider(double value)
|
ColorSlider::ColorSlider(double value)
|
||||||
: m_value(value)
|
: m_value(value)
|
||||||
{
|
{
|
||||||
m_color_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { 32, 360 });
|
m_color_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { 32, 360 }).release_value_but_fixme_should_propagate_errors();
|
||||||
auto painter = Gfx::Painter(*m_color_bitmap);
|
auto painter = Gfx::Painter(*m_color_bitmap);
|
||||||
|
|
||||||
for (int h = 0; h < 360; h++) {
|
for (int h = 0; h < 360; h++) {
|
||||||
|
|
|
@ -624,10 +624,14 @@ static RefPtr<Gfx::Bitmap> render_thumbnail(StringView const& path)
|
||||||
|
|
||||||
double scale = min(32 / (double)bitmap->width(), 32 / (double)bitmap->height());
|
double scale = min(32 / (double)bitmap->width(), 32 / (double)bitmap->height());
|
||||||
|
|
||||||
auto thumbnail = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, { 32, 32 });
|
auto thumbnail_or_error = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, { 32, 32 });
|
||||||
|
if (thumbnail_or_error.is_error())
|
||||||
|
return nullptr;
|
||||||
|
auto thumbnail = thumbnail_or_error.release_value_but_fixme_should_propagate_errors();
|
||||||
|
|
||||||
auto destination = Gfx::IntRect(0, 0, (int)(bitmap->width() * scale), (int)(bitmap->height() * scale)).centered_within(thumbnail->rect());
|
auto destination = Gfx::IntRect(0, 0, (int)(bitmap->width() * scale), (int)(bitmap->height() * scale)).centered_within(thumbnail->rect());
|
||||||
|
|
||||||
Painter painter(*thumbnail);
|
Painter painter(thumbnail);
|
||||||
painter.draw_scaled_bitmap(destination, *bitmap, bitmap->rect());
|
painter.draw_scaled_bitmap(destination, *bitmap, bitmap->rect());
|
||||||
return thumbnail;
|
return thumbnail;
|
||||||
}
|
}
|
||||||
|
|
|
@ -903,8 +903,7 @@ void Window::set_icon(const Gfx::Bitmap* icon)
|
||||||
|
|
||||||
Gfx::IntSize icon_size = icon ? icon->size() : Gfx::IntSize(16, 16);
|
Gfx::IntSize icon_size = icon ? icon->size() : Gfx::IntSize(16, 16);
|
||||||
|
|
||||||
m_icon = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, icon_size);
|
m_icon = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, icon_size).release_value_but_fixme_should_propagate_errors();
|
||||||
VERIFY(m_icon);
|
|
||||||
if (icon) {
|
if (icon) {
|
||||||
Painter painter(*m_icon);
|
Painter painter(*m_icon);
|
||||||
painter.blit({ 0, 0 }, *icon, icon->rect());
|
painter.blit({ 0, 0 }, *icon, icon->rect());
|
||||||
|
|
|
@ -1187,12 +1187,15 @@ static bool decode_bmp_pixel_data(BMPLoadingContext& context)
|
||||||
|
|
||||||
const u32 width = abs(context.dib.core.width);
|
const u32 width = abs(context.dib.core.width);
|
||||||
const u32 height = abs(context.dib.core.height);
|
const u32 height = abs(context.dib.core.height);
|
||||||
context.bitmap = Bitmap::try_create(format, { static_cast<int>(width), static_cast<int>(height) });
|
|
||||||
if (!context.bitmap) {
|
auto bitmap_or_error = Bitmap::try_create(format, { static_cast<int>(width), static_cast<int>(height) });
|
||||||
dbgln("BMP appears to have overly large dimensions");
|
if (bitmap_or_error.is_error()) {
|
||||||
|
// FIXME: Propagate the *real* error.
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
context.bitmap = bitmap_or_error.release_value_but_fixme_should_propagate_errors();
|
||||||
|
|
||||||
ByteBuffer rle_buffer;
|
ByteBuffer rle_buffer;
|
||||||
ReadonlyBytes bytes { context.file_bytes + context.data_offset, context.file_size - context.data_offset };
|
ReadonlyBytes bytes { context.file_bytes + context.data_offset, context.file_size - context.data_offset };
|
||||||
|
|
||||||
|
|
|
@ -67,12 +67,10 @@ static bool size_would_overflow(BitmapFormat format, IntSize const& size, int sc
|
||||||
return Checked<size_t>::multiplication_would_overflow(pitch, size.height() * scale_factor);
|
return Checked<size_t>::multiplication_would_overflow(pitch, size.height() * scale_factor);
|
||||||
}
|
}
|
||||||
|
|
||||||
RefPtr<Bitmap> Bitmap::try_create(BitmapFormat format, IntSize const& size, int scale_factor)
|
ErrorOr<NonnullRefPtr<Bitmap>> Bitmap::try_create(BitmapFormat format, IntSize const& size, int scale_factor)
|
||||||
{
|
{
|
||||||
auto backing_store_or_error = Bitmap::allocate_backing_store(format, size, scale_factor);
|
auto backing_store = TRY(Bitmap::allocate_backing_store(format, size, scale_factor));
|
||||||
if (backing_store_or_error.is_error())
|
return AK::adopt_nonnull_ref_or_enomem(new (nothrow) Bitmap(format, size, scale_factor, backing_store));
|
||||||
return nullptr;
|
|
||||||
return adopt_ref(*new Bitmap(format, size, scale_factor, backing_store_or_error.release_value()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<NonnullRefPtr<Bitmap>> Bitmap::try_create_shareable(BitmapFormat format, IntSize const& size, int scale_factor)
|
ErrorOr<NonnullRefPtr<Bitmap>> Bitmap::try_create_shareable(BitmapFormat format, IntSize const& size, int scale_factor)
|
||||||
|
@ -250,9 +248,10 @@ RefPtr<Bitmap> Bitmap::try_create_from_serialized_byte_buffer(ByteBuffer&& buffe
|
||||||
|
|
||||||
auto data = stream.bytes().slice(stream.offset(), actual_size);
|
auto data = stream.bytes().slice(stream.offset(), actual_size);
|
||||||
|
|
||||||
auto bitmap = Bitmap::try_create(format, { width, height }, scale_factor);
|
auto bitmap_or_error = Bitmap::try_create(format, { width, height }, scale_factor);
|
||||||
if (!bitmap)
|
if (bitmap_or_error.is_error())
|
||||||
return {};
|
return {};
|
||||||
|
auto bitmap = bitmap_or_error.release_value_but_fixme_should_propagate_errors();
|
||||||
|
|
||||||
bitmap->m_palette = new RGBA32[palette_size];
|
bitmap->m_palette = new RGBA32[palette_size];
|
||||||
memcpy(bitmap->m_palette, palette.data(), palette_size * sizeof(RGBA32));
|
memcpy(bitmap->m_palette, palette.data(), palette_size * sizeof(RGBA32));
|
||||||
|
@ -309,26 +308,17 @@ Bitmap::Bitmap(BitmapFormat format, Core::AnonymousBuffer buffer, IntSize const&
|
||||||
|
|
||||||
ErrorOr<NonnullRefPtr<Gfx::Bitmap>> Bitmap::clone() const
|
ErrorOr<NonnullRefPtr<Gfx::Bitmap>> Bitmap::clone() const
|
||||||
{
|
{
|
||||||
auto new_bitmap = Bitmap::try_create(format(), size(), scale());
|
auto new_bitmap = TRY(Bitmap::try_create(format(), size(), scale()));
|
||||||
|
|
||||||
if (!new_bitmap) {
|
|
||||||
// FIXME: Propagate the *real* error, once we have it.
|
|
||||||
return Error::from_errno(ENOMEM);
|
|
||||||
}
|
|
||||||
|
|
||||||
VERIFY(size_in_bytes() == new_bitmap->size_in_bytes());
|
VERIFY(size_in_bytes() == new_bitmap->size_in_bytes());
|
||||||
memcpy(new_bitmap->scanline(0), scanline(0), size_in_bytes());
|
memcpy(new_bitmap->scanline(0), scanline(0), size_in_bytes());
|
||||||
|
|
||||||
return new_bitmap.release_nonnull();
|
return new_bitmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<NonnullRefPtr<Gfx::Bitmap>> Bitmap::rotated(Gfx::RotationDirection rotation_direction) const
|
ErrorOr<NonnullRefPtr<Gfx::Bitmap>> Bitmap::rotated(Gfx::RotationDirection rotation_direction) const
|
||||||
{
|
{
|
||||||
auto new_bitmap = Gfx::Bitmap::try_create(this->format(), { height(), width() }, scale());
|
auto new_bitmap = TRY(Gfx::Bitmap::try_create(this->format(), { height(), width() }, scale()));
|
||||||
if (!new_bitmap) {
|
|
||||||
// FIXME: Propagate the *real* error, once we have it.
|
|
||||||
return Error::from_errno(ENOMEM);
|
|
||||||
}
|
|
||||||
|
|
||||||
auto w = this->physical_width();
|
auto w = this->physical_width();
|
||||||
auto h = this->physical_height();
|
auto h = this->physical_height();
|
||||||
|
@ -344,16 +334,12 @@ ErrorOr<NonnullRefPtr<Gfx::Bitmap>> Bitmap::rotated(Gfx::RotationDirection rotat
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return new_bitmap.release_nonnull();
|
return new_bitmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<NonnullRefPtr<Gfx::Bitmap>> Bitmap::flipped(Gfx::Orientation orientation) const
|
ErrorOr<NonnullRefPtr<Gfx::Bitmap>> Bitmap::flipped(Gfx::Orientation orientation) const
|
||||||
{
|
{
|
||||||
auto new_bitmap = Gfx::Bitmap::try_create(this->format(), { width(), height() }, scale());
|
auto new_bitmap = TRY(Gfx::Bitmap::try_create(this->format(), { width(), height() }, scale()));
|
||||||
if (!new_bitmap) {
|
|
||||||
// FIXME: Propagate the *real* error, once we have it.
|
|
||||||
return Error::from_errno(ENOMEM);
|
|
||||||
}
|
|
||||||
|
|
||||||
auto w = this->physical_width();
|
auto w = this->physical_width();
|
||||||
auto h = this->physical_height();
|
auto h = this->physical_height();
|
||||||
|
@ -367,7 +353,7 @@ ErrorOr<NonnullRefPtr<Gfx::Bitmap>> Bitmap::flipped(Gfx::Orientation orientation
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return new_bitmap.release_nonnull();
|
return new_bitmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<NonnullRefPtr<Gfx::Bitmap>> Bitmap::scaled(int sx, int sy) const
|
ErrorOr<NonnullRefPtr<Gfx::Bitmap>> Bitmap::scaled(int sx, int sy) const
|
||||||
|
@ -376,11 +362,7 @@ ErrorOr<NonnullRefPtr<Gfx::Bitmap>> Bitmap::scaled(int sx, int sy) const
|
||||||
if (sx == 1 && sy == 1)
|
if (sx == 1 && sy == 1)
|
||||||
return NonnullRefPtr { *this };
|
return NonnullRefPtr { *this };
|
||||||
|
|
||||||
auto new_bitmap = Gfx::Bitmap::try_create(format(), { width() * sx, height() * sy }, scale());
|
auto new_bitmap = TRY(Gfx::Bitmap::try_create(format(), { width() * sx, height() * sy }, scale()));
|
||||||
if (!new_bitmap) {
|
|
||||||
// FIXME: Propagate the *real* error, once we have it.
|
|
||||||
return Error::from_errno(ENOMEM);
|
|
||||||
}
|
|
||||||
|
|
||||||
auto old_width = physical_width();
|
auto old_width = physical_width();
|
||||||
auto old_height = physical_height();
|
auto old_height = physical_height();
|
||||||
|
@ -399,7 +381,7 @@ ErrorOr<NonnullRefPtr<Gfx::Bitmap>> Bitmap::scaled(int sx, int sy) const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return new_bitmap.release_nonnull();
|
return new_bitmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
// http://fourier.eng.hmc.edu/e161/lectures/resize/node3.html
|
// http://fourier.eng.hmc.edu/e161/lectures/resize/node3.html
|
||||||
|
@ -412,11 +394,7 @@ ErrorOr<NonnullRefPtr<Gfx::Bitmap>> Bitmap::scaled(float sx, float sy) const
|
||||||
int scaled_width = (int)ceilf(sx * (float)width());
|
int scaled_width = (int)ceilf(sx * (float)width());
|
||||||
int scaled_height = (int)ceilf(sy * (float)height());
|
int scaled_height = (int)ceilf(sy * (float)height());
|
||||||
|
|
||||||
auto new_bitmap = Gfx::Bitmap::try_create(format(), { scaled_width, scaled_height }, scale());
|
auto new_bitmap = TRY(Gfx::Bitmap::try_create(format(), { scaled_width, scaled_height }, scale()));
|
||||||
if (!new_bitmap) {
|
|
||||||
// FIXME: Propagate the *real* error, once we have it.
|
|
||||||
return Error::from_errno(ENOMEM);
|
|
||||||
}
|
|
||||||
|
|
||||||
auto old_width = physical_width();
|
auto old_width = physical_width();
|
||||||
auto old_height = physical_height();
|
auto old_height = physical_height();
|
||||||
|
@ -483,16 +461,12 @@ ErrorOr<NonnullRefPtr<Gfx::Bitmap>> Bitmap::scaled(float sx, float sy) const
|
||||||
// Bottom-right pixel
|
// Bottom-right pixel
|
||||||
new_bitmap->set_pixel(new_width - 1, new_height - 1, get_pixel(physical_width() - 1, physical_height() - 1));
|
new_bitmap->set_pixel(new_width - 1, new_height - 1, get_pixel(physical_width() - 1, physical_height() - 1));
|
||||||
|
|
||||||
return new_bitmap.release_nonnull();
|
return new_bitmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<NonnullRefPtr<Gfx::Bitmap>> Bitmap::cropped(Gfx::IntRect crop) const
|
ErrorOr<NonnullRefPtr<Gfx::Bitmap>> Bitmap::cropped(Gfx::IntRect crop) const
|
||||||
{
|
{
|
||||||
auto new_bitmap = Gfx::Bitmap::try_create(format(), { crop.width(), crop.height() }, 1);
|
auto new_bitmap = TRY(Gfx::Bitmap::try_create(format(), { crop.width(), crop.height() }, 1));
|
||||||
if (!new_bitmap) {
|
|
||||||
// FIXME: Propagate the *real* error, once we have it.
|
|
||||||
return Error::from_errno(ENOMEM);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int y = 0; y < crop.height(); ++y) {
|
for (int y = 0; y < crop.height(); ++y) {
|
||||||
for (int x = 0; x < crop.width(); ++x) {
|
for (int x = 0; x < crop.width(); ++x) {
|
||||||
|
@ -505,7 +479,7 @@ ErrorOr<NonnullRefPtr<Gfx::Bitmap>> Bitmap::cropped(Gfx::IntRect crop) const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new_bitmap.release_nonnull();
|
return new_bitmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<NonnullRefPtr<Bitmap>> Bitmap::to_bitmap_backed_by_anonymous_buffer() const
|
ErrorOr<NonnullRefPtr<Bitmap>> Bitmap::to_bitmap_backed_by_anonymous_buffer() const
|
||||||
|
|
|
@ -90,7 +90,7 @@ enum RotationDirection {
|
||||||
|
|
||||||
class Bitmap : public RefCounted<Bitmap> {
|
class Bitmap : public RefCounted<Bitmap> {
|
||||||
public:
|
public:
|
||||||
[[nodiscard]] static RefPtr<Bitmap> try_create(BitmapFormat, IntSize const&, int intrinsic_scale = 1);
|
[[nodiscard]] static ErrorOr<NonnullRefPtr<Bitmap>> try_create(BitmapFormat, IntSize const&, int intrinsic_scale = 1);
|
||||||
[[nodiscard]] static ErrorOr<NonnullRefPtr<Bitmap>> try_create_shareable(BitmapFormat, IntSize const&, int intrinsic_scale = 1);
|
[[nodiscard]] static ErrorOr<NonnullRefPtr<Bitmap>> try_create_shareable(BitmapFormat, IntSize const&, int intrinsic_scale = 1);
|
||||||
[[nodiscard]] static ErrorOr<NonnullRefPtr<Bitmap>> try_create_wrapper(BitmapFormat, IntSize const&, int intrinsic_scale, size_t pitch, void*);
|
[[nodiscard]] static ErrorOr<NonnullRefPtr<Bitmap>> try_create_wrapper(BitmapFormat, IntSize const&, int intrinsic_scale, size_t pitch, void*);
|
||||||
[[nodiscard]] static ErrorOr<NonnullRefPtr<Bitmap>> try_load_from_file(String const& path, int scale_factor = 1);
|
[[nodiscard]] static ErrorOr<NonnullRefPtr<Bitmap>> try_load_from_file(String const& path, int scale_factor = 1);
|
||||||
|
|
|
@ -793,7 +793,7 @@ static bool decode_dds(DDSLoadingContext& context)
|
||||||
dbgln_if(DDS_DEBUG, "There are {} bytes remaining, we need {} for mipmap level {} of the image", stream.remaining(), needed_bytes, mipmap_level);
|
dbgln_if(DDS_DEBUG, "There are {} bytes remaining, we need {} for mipmap level {} of the image", stream.remaining(), needed_bytes, mipmap_level);
|
||||||
VERIFY(stream.remaining() >= needed_bytes);
|
VERIFY(stream.remaining() >= needed_bytes);
|
||||||
|
|
||||||
context.bitmap = Bitmap::try_create(BitmapFormat::BGRA8888, { width, height });
|
context.bitmap = Bitmap::try_create(BitmapFormat::BGRA8888, { width, height }).release_value_but_fixme_should_propagate_errors();
|
||||||
|
|
||||||
decode_bitmap(stream, context, format, width, height);
|
decode_bitmap(stream, context, format, width, height);
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,7 +94,7 @@ public:
|
||||||
if (&target == &source && (!apply_cache.m_target || !apply_cache.m_target->size().contains(source_rect.size()))) {
|
if (&target == &source && (!apply_cache.m_target || !apply_cache.m_target->size().contains(source_rect.size()))) {
|
||||||
// TODO: We probably don't need the entire source_rect, we could inflate
|
// TODO: We probably don't need the entire source_rect, we could inflate
|
||||||
// the target_rect appropriately
|
// the target_rect appropriately
|
||||||
apply_cache.m_target = Gfx::Bitmap::try_create(source.format(), source_rect.size());
|
apply_cache.m_target = Gfx::Bitmap::try_create(source.format(), source_rect.size()).release_value_but_fixme_should_propagate_errors();
|
||||||
target_rect.translate_by(-target_rect.location());
|
target_rect.translate_by(-target_rect.location());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -292,12 +292,18 @@ static bool decode_frame(GIFLoadingContext& context, size_t frame_index)
|
||||||
size_t start_frame = context.current_frame + 1;
|
size_t start_frame = context.current_frame + 1;
|
||||||
if (context.state < GIFLoadingContext::State::FrameComplete) {
|
if (context.state < GIFLoadingContext::State::FrameComplete) {
|
||||||
start_frame = 0;
|
start_frame = 0;
|
||||||
context.frame_buffer = Bitmap::try_create(BitmapFormat::BGRA8888, { context.logical_screen.width, context.logical_screen.height });
|
{
|
||||||
if (!context.frame_buffer)
|
auto bitmap_or_error = Bitmap::try_create(BitmapFormat::BGRA8888, { context.logical_screen.width, context.logical_screen.height });
|
||||||
return false;
|
if (bitmap_or_error.is_error())
|
||||||
context.prev_frame_buffer = Bitmap::try_create(BitmapFormat::BGRA8888, { context.logical_screen.width, context.logical_screen.height });
|
return false;
|
||||||
if (!context.prev_frame_buffer)
|
context.frame_buffer = bitmap_or_error.release_value_but_fixme_should_propagate_errors();
|
||||||
return false;
|
}
|
||||||
|
{
|
||||||
|
auto bitmap_or_error = Bitmap::try_create(BitmapFormat::BGRA8888, { context.logical_screen.width, context.logical_screen.height });
|
||||||
|
if (bitmap_or_error.is_error())
|
||||||
|
return false;
|
||||||
|
context.prev_frame_buffer = bitmap_or_error.release_value_but_fixme_should_propagate_errors();
|
||||||
|
}
|
||||||
} else if (frame_index < context.current_frame) {
|
} else if (frame_index < context.current_frame) {
|
||||||
start_frame = 0;
|
start_frame = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -241,9 +241,10 @@ static bool load_ico_bmp(ICOLoadingContext& context, ICOImageDescriptor& desc)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
desc.bitmap = Bitmap::try_create(BitmapFormat::BGRA8888, { desc.width, desc.height });
|
auto bitmap_or_error = Bitmap::try_create(BitmapFormat::BGRA8888, { desc.width, desc.height });
|
||||||
if (!desc.bitmap)
|
if (bitmap_or_error.is_error())
|
||||||
return false;
|
return false;
|
||||||
|
desc.bitmap = bitmap_or_error.release_value_but_fixme_should_propagate_errors();
|
||||||
Bitmap& bitmap = *desc.bitmap;
|
Bitmap& bitmap = *desc.bitmap;
|
||||||
const u8* image_base = context.data + desc.offset + sizeof(info);
|
const u8* image_base = context.data + desc.offset + sizeof(info);
|
||||||
const BMP_ARGB* data_base = (const BMP_ARGB*)image_base;
|
const BMP_ARGB* data_base = (const BMP_ARGB*)image_base;
|
||||||
|
|
|
@ -1063,8 +1063,11 @@ static void ycbcr_to_rgb(const JPGLoadingContext& context, Vector<Macroblock>& m
|
||||||
|
|
||||||
static bool compose_bitmap(JPGLoadingContext& context, const Vector<Macroblock>& macroblocks)
|
static bool compose_bitmap(JPGLoadingContext& context, const Vector<Macroblock>& macroblocks)
|
||||||
{
|
{
|
||||||
context.bitmap = Bitmap::try_create(BitmapFormat::BGRx8888, { context.frame.width, context.frame.height });
|
auto bitmap_or_error = Bitmap::try_create(BitmapFormat::BGRx8888, { context.frame.width, context.frame.height });
|
||||||
if (!context.bitmap)
|
if (bitmap_or_error.is_error())
|
||||||
|
return false;
|
||||||
|
context.bitmap = bitmap_or_error.release_value_but_fixme_should_propagate_errors();
|
||||||
|
if (bitmap_or_error.is_error())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
for (u32 y = context.frame.height - 1; y < context.frame.height; y--) {
|
for (u32 y = context.frame.height - 1; y < context.frame.height; y--) {
|
||||||
|
|
|
@ -47,7 +47,7 @@ struct [[gnu::packed]] PaletteEntry {
|
||||||
u8 r;
|
u8 r;
|
||||||
u8 g;
|
u8 g;
|
||||||
u8 b;
|
u8 b;
|
||||||
//u8 a;
|
// u8 a;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
@ -603,13 +603,13 @@ static bool decode_png_bitmap_simple(PNGLoadingContext& context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
context.bitmap = Bitmap::try_create(context.has_alpha() ? BitmapFormat::BGRA8888 : BitmapFormat::BGRx8888, { context.width, context.height });
|
auto bitmap_or_error = Bitmap::try_create(context.has_alpha() ? BitmapFormat::BGRA8888 : BitmapFormat::BGRx8888, { context.width, context.height });
|
||||||
|
if (bitmap_or_error.is_error()) {
|
||||||
if (!context.bitmap) {
|
|
||||||
context.state = PNGLoadingContext::State::Error;
|
context.state = PNGLoadingContext::State::Error;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
context.bitmap = bitmap_or_error.release_value();
|
||||||
return unfilter(context);
|
return unfilter(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -705,7 +705,11 @@ static bool decode_adam7_pass(PNGLoadingContext& context, Streamer& streamer, in
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
subimage_context.bitmap = Bitmap::try_create(context.bitmap->format(), { subimage_context.width, subimage_context.height });
|
auto bitmap_or_error = Bitmap::try_create(context.bitmap->format(), { subimage_context.width, subimage_context.height });
|
||||||
|
if (bitmap_or_error.is_error())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
subimage_context.bitmap = bitmap_or_error.release_value_but_fixme_should_propagate_errors();
|
||||||
if (!unfilter(subimage_context)) {
|
if (!unfilter(subimage_context)) {
|
||||||
subimage_context.bitmap = nullptr;
|
subimage_context.bitmap = nullptr;
|
||||||
return false;
|
return false;
|
||||||
|
@ -723,9 +727,10 @@ static bool decode_adam7_pass(PNGLoadingContext& context, Streamer& streamer, in
|
||||||
static bool decode_png_adam7(PNGLoadingContext& context)
|
static bool decode_png_adam7(PNGLoadingContext& context)
|
||||||
{
|
{
|
||||||
Streamer streamer(context.decompression_buffer->data(), context.decompression_buffer->size());
|
Streamer streamer(context.decompression_buffer->data(), context.decompression_buffer->size());
|
||||||
context.bitmap = Bitmap::try_create(context.has_alpha() ? BitmapFormat::BGRA8888 : BitmapFormat::BGRx8888, { context.width, context.height });
|
auto bitmap_or_error = Bitmap::try_create(context.has_alpha() ? BitmapFormat::BGRA8888 : BitmapFormat::BGRx8888, { context.width, context.height });
|
||||||
if (!context.bitmap)
|
if (bitmap_or_error.is_error())
|
||||||
return false;
|
return false;
|
||||||
|
context.bitmap = bitmap_or_error.release_value_but_fixme_should_propagate_errors();
|
||||||
|
|
||||||
for (int pass = 1; pass <= 7; ++pass) {
|
for (int pass = 1; pass <= 7; ++pass) {
|
||||||
if (!decode_adam7_pass(context, streamer, pass))
|
if (!decode_adam7_pass(context, streamer, pass))
|
||||||
|
|
|
@ -178,11 +178,12 @@ static bool read_max_val(TContext& context, Streamer& streamer)
|
||||||
template<typename TContext>
|
template<typename TContext>
|
||||||
static bool create_bitmap(TContext& context)
|
static bool create_bitmap(TContext& context)
|
||||||
{
|
{
|
||||||
context.bitmap = Bitmap::try_create(BitmapFormat::BGRx8888, { context.width, context.height });
|
auto bitmap_or_error = Bitmap::try_create(BitmapFormat::BGRx8888, { context.width, context.height });
|
||||||
if (!context.bitmap) {
|
if (bitmap_or_error.is_error()) {
|
||||||
context.state = TContext::State::Error;
|
context.state = TContext::State::Error;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
context.bitmap = bitmap_or_error.release_value_but_fixme_should_propagate_errors();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -207,9 +207,10 @@ void Rasterizer::draw_path(Gfx::Path& path)
|
||||||
|
|
||||||
RefPtr<Gfx::Bitmap> Rasterizer::accumulate()
|
RefPtr<Gfx::Bitmap> Rasterizer::accumulate()
|
||||||
{
|
{
|
||||||
auto bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, m_size);
|
auto bitmap_or_error = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, m_size);
|
||||||
if (!bitmap)
|
if (bitmap_or_error.is_error())
|
||||||
return {};
|
return {};
|
||||||
|
auto bitmap = bitmap_or_error.release_value_but_fixme_should_propagate_errors();
|
||||||
Color base_color = Color::from_rgb(0xffffff);
|
Color base_color = Color::from_rgb(0xffffff);
|
||||||
for (int y = 0; y < m_size.height(); y++) {
|
for (int y = 0; y < m_size.height(); y++) {
|
||||||
float accumulator = 0.0;
|
float accumulator = 0.0;
|
||||||
|
|
|
@ -80,8 +80,12 @@ bool HTMLCanvasElement::create_bitmap()
|
||||||
m_bitmap = nullptr;
|
m_bitmap = nullptr;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!m_bitmap || m_bitmap->size() != size)
|
if (!m_bitmap || m_bitmap->size() != size) {
|
||||||
m_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, size);
|
auto bitmap_or_error = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, size);
|
||||||
|
if (bitmap_or_error.is_error())
|
||||||
|
return false;
|
||||||
|
m_bitmap = bitmap_or_error.release_value_but_fixme_should_propagate_errors();
|
||||||
|
}
|
||||||
return m_bitmap;
|
return m_bitmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,11 +30,12 @@ void paint_box_shadow(PaintContext& context, Gfx::IntRect const& content_rect, B
|
||||||
if (bitmap_rect.is_empty())
|
if (bitmap_rect.is_empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
auto new_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, bitmap_rect.size());
|
auto bitmap_or_error = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, bitmap_rect.size());
|
||||||
if (!new_bitmap) {
|
if (bitmap_or_error.is_error()) {
|
||||||
dbgln("Unable to allocate temporary bitmap for box-shadow rendering");
|
dbgln("Unable to allocate temporary bitmap for box-shadow rendering: {}", bitmap_or_error.error());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
auto new_bitmap = bitmap_or_error.release_value_but_fixme_should_propagate_errors();
|
||||||
|
|
||||||
Gfx::Painter painter(*new_bitmap);
|
Gfx::Painter painter(*new_bitmap);
|
||||||
painter.fill_rect({ { 2 * box_shadow_data.blur_radius, 2 * box_shadow_data.blur_radius }, content_rect.size() }, box_shadow_data.color);
|
painter.fill_rect({ { 2 * box_shadow_data.blur_radius, 2 * box_shadow_data.blur_radius }, content_rect.size() }, box_shadow_data.color);
|
||||||
|
|
|
@ -117,14 +117,14 @@ void StackingContext::paint(PaintContext& context)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (opacity < 1.0f) {
|
if (opacity < 1.0f) {
|
||||||
auto bitmap = context.painter().target();
|
auto bitmap_or_error = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, context.painter().target()->size());
|
||||||
auto new_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, bitmap->size());
|
if (bitmap_or_error.is_error())
|
||||||
if (!new_bitmap)
|
|
||||||
return;
|
return;
|
||||||
Gfx::Painter painter(*new_bitmap);
|
auto bitmap = bitmap_or_error.release_value_but_fixme_should_propagate_errors();
|
||||||
|
Gfx::Painter painter(bitmap);
|
||||||
PaintContext paint_context(painter, context.palette(), context.scroll_offset());
|
PaintContext paint_context(painter, context.palette(), context.scroll_offset());
|
||||||
paint_internal(paint_context);
|
paint_internal(paint_context);
|
||||||
context.painter().blit(Gfx::IntPoint(m_box.absolute_position()), *new_bitmap, Gfx::IntRect(m_box.absolute_rect()), opacity);
|
context.painter().blit(Gfx::IntPoint(m_box.absolute_position()), bitmap, Gfx::IntRect(m_box.absolute_rect()), opacity);
|
||||||
} else {
|
} else {
|
||||||
paint_internal(context);
|
paint_internal(context);
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,8 +43,10 @@ RefPtr<Gfx::Bitmap> ClipboardServerConnection::get_bitmap()
|
||||||
if (clipping_bitmap_or_error.is_error())
|
if (clipping_bitmap_or_error.is_error())
|
||||||
return nullptr;
|
return nullptr;
|
||||||
auto clipping_bitmap = clipping_bitmap_or_error.release_value();
|
auto clipping_bitmap = clipping_bitmap_or_error.release_value();
|
||||||
auto bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, { (int)width.value(), (int)height.value() }, scale.value());
|
auto bitmap_or_error = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, { (int)width.value(), (int)height.value() }, scale.value());
|
||||||
|
if (bitmap_or_error.is_error())
|
||||||
|
return nullptr;
|
||||||
|
auto bitmap = bitmap_or_error.release_value_but_fixme_should_propagate_errors();
|
||||||
for (int y = 0; y < clipping_bitmap->physical_height(); ++y) {
|
for (int y = 0; y < clipping_bitmap->physical_height(); ++y) {
|
||||||
for (int x = 0; x < clipping_bitmap->physical_width(); ++x) {
|
for (int x = 0; x < clipping_bitmap->physical_width(); ++x) {
|
||||||
auto pixel = clipping_bitmap->get_pixel(x, y);
|
auto pixel = clipping_bitmap->get_pixel(x, y);
|
||||||
|
|
|
@ -986,7 +986,8 @@ Messages::WindowServer::GetScreenBitmapResponse ClientConnection::get_screen_bit
|
||||||
}
|
}
|
||||||
// TODO: Mixed scale setups at what scale? Lowest? Highest? Configurable?
|
// TODO: Mixed scale setups at what scale? Lowest? Highest? Configurable?
|
||||||
auto bitmap_size = rect.value_or(Screen::bounding_rect()).size();
|
auto bitmap_size = rect.value_or(Screen::bounding_rect()).size();
|
||||||
if (auto bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, bitmap_size, 1)) {
|
if (auto bitmap_or_error = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, bitmap_size, 1); !bitmap_or_error.is_error()) {
|
||||||
|
auto bitmap = bitmap_or_error.release_value_but_fixme_should_propagate_errors();
|
||||||
Gfx::Painter painter(*bitmap);
|
Gfx::Painter painter(*bitmap);
|
||||||
Screen::for_each([&](auto& screen) {
|
Screen::for_each([&](auto& screen) {
|
||||||
auto screen_rect = screen.rect();
|
auto screen_rect = screen.rect();
|
||||||
|
@ -1034,7 +1035,8 @@ Messages::WindowServer::GetScreenBitmapAroundCursorResponse ClientConnection::ge
|
||||||
return bitmap_or_error.release_value()->to_shareable_bitmap();
|
return bitmap_or_error.release_value()->to_shareable_bitmap();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (auto bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, rect.size(), 1)) {
|
if (auto bitmap_or_error = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, rect.size(), 1); !bitmap_or_error.is_error()) {
|
||||||
|
auto bitmap = bitmap_or_error.release_value_but_fixme_should_propagate_errors();
|
||||||
auto bounding_screen_src_rect = Screen::bounding_rect().intersected(rect);
|
auto bounding_screen_src_rect = Screen::bounding_rect().intersected(rect);
|
||||||
Gfx::Painter painter(*bitmap);
|
Gfx::Painter painter(*bitmap);
|
||||||
auto& screen_with_cursor = ScreenInput::the().cursor_location_screen();
|
auto& screen_with_cursor = ScreenInput::the().cursor_location_screen();
|
||||||
|
|
|
@ -112,12 +112,12 @@ void CompositorScreenData::init_bitmaps(Compositor& compositor, Screen& screen)
|
||||||
if (m_screen_can_set_buffer)
|
if (m_screen_can_set_buffer)
|
||||||
m_back_bitmap = Gfx::Bitmap::try_create_wrapper(Gfx::BitmapFormat::BGRx8888, size, screen.scale_factor(), screen.pitch(), screen.scanline(1, 0)).release_value_but_fixme_should_propagate_errors();
|
m_back_bitmap = Gfx::Bitmap::try_create_wrapper(Gfx::BitmapFormat::BGRx8888, size, screen.scale_factor(), screen.pitch(), screen.scanline(1, 0)).release_value_but_fixme_should_propagate_errors();
|
||||||
else
|
else
|
||||||
m_back_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, size, screen.scale_factor());
|
m_back_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, size, screen.scale_factor()).release_value_but_fixme_should_propagate_errors();
|
||||||
m_back_painter = make<Gfx::Painter>(*m_back_bitmap);
|
m_back_painter = make<Gfx::Painter>(*m_back_bitmap);
|
||||||
m_back_painter->translate(-screen.rect().location());
|
m_back_painter->translate(-screen.rect().location());
|
||||||
|
|
||||||
m_temp_bitmap = nullptr;
|
m_temp_bitmap = nullptr;
|
||||||
m_temp_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, size, screen.scale_factor());
|
m_temp_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, size, screen.scale_factor()).release_value_but_fixme_should_propagate_errors();
|
||||||
m_temp_painter = make<Gfx::Painter>(*m_temp_bitmap);
|
m_temp_painter = make<Gfx::Painter>(*m_temp_bitmap);
|
||||||
m_temp_painter->translate(-screen.rect().location());
|
m_temp_painter->translate(-screen.rect().location());
|
||||||
}
|
}
|
||||||
|
@ -949,7 +949,7 @@ void CompositorScreenData::draw_cursor(Screen& screen, const Gfx::IntRect& curso
|
||||||
auto& wm = WindowManager::the();
|
auto& wm = WindowManager::the();
|
||||||
|
|
||||||
if (!m_cursor_back_bitmap || m_cursor_back_bitmap->size() != cursor_rect.size() || m_cursor_back_bitmap->scale() != screen.scale_factor()) {
|
if (!m_cursor_back_bitmap || m_cursor_back_bitmap->size() != cursor_rect.size() || m_cursor_back_bitmap->scale() != screen.scale_factor()) {
|
||||||
m_cursor_back_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, cursor_rect.size(), screen.scale_factor());
|
m_cursor_back_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, cursor_rect.size(), screen.scale_factor()).release_value_but_fixme_should_propagate_errors();
|
||||||
m_cursor_back_painter = make<Gfx::Painter>(*m_cursor_back_bitmap);
|
m_cursor_back_painter = make<Gfx::Painter>(*m_cursor_back_bitmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -107,9 +107,10 @@ void RectangularOverlay::render(Gfx::Painter& painter, Screen const& screen)
|
||||||
auto scale_factor = screen.scale_factor();
|
auto scale_factor = screen.scale_factor();
|
||||||
auto* bitmap = m_rendered_bitmaps->find_bitmap(scale_factor);
|
auto* bitmap = m_rendered_bitmaps->find_bitmap(scale_factor);
|
||||||
if (!bitmap) {
|
if (!bitmap) {
|
||||||
auto new_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, rect().size(), scale_factor);
|
auto bitmap_or_error = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, rect().size(), scale_factor);
|
||||||
if (!new_bitmap)
|
if (bitmap_or_error.is_error())
|
||||||
return;
|
return;
|
||||||
|
auto new_bitmap = bitmap_or_error.release_value_but_fixme_should_propagate_errors();
|
||||||
bitmap = new_bitmap.ptr();
|
bitmap = new_bitmap.ptr();
|
||||||
|
|
||||||
Gfx::Painter bitmap_painter(*new_bitmap);
|
Gfx::Painter bitmap_painter(*new_bitmap);
|
||||||
|
@ -119,7 +120,7 @@ void RectangularOverlay::render(Gfx::Painter& painter, Screen const& screen)
|
||||||
bitmap_painter.fill_rect(new_bitmap->rect(), Color(Color::Black).with_alpha(0xcc));
|
bitmap_painter.fill_rect(new_bitmap->rect(), Color(Color::Black).with_alpha(0xcc));
|
||||||
}
|
}
|
||||||
render_overlay_bitmap(bitmap_painter);
|
render_overlay_bitmap(bitmap_painter);
|
||||||
m_rendered_bitmaps->add_bitmap(scale_factor, new_bitmap.release_nonnull());
|
m_rendered_bitmaps->add_bitmap(scale_factor, move(new_bitmap));
|
||||||
}
|
}
|
||||||
|
|
||||||
painter.blit({}, *bitmap, bitmap->rect());
|
painter.blit({}, *bitmap, bitmap->rect());
|
||||||
|
@ -291,9 +292,10 @@ void DndOverlay::update_rect()
|
||||||
|
|
||||||
RefPtr<Gfx::Bitmap> DndOverlay::create_bitmap(int scale_factor)
|
RefPtr<Gfx::Bitmap> DndOverlay::create_bitmap(int scale_factor)
|
||||||
{
|
{
|
||||||
auto new_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, rect().size(), scale_factor);
|
auto bitmap_or_error = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, rect().size(), scale_factor);
|
||||||
if (!new_bitmap)
|
if (bitmap_or_error.is_error())
|
||||||
return {};
|
return {};
|
||||||
|
auto new_bitmap = bitmap_or_error.release_value_but_fixme_should_propagate_errors();
|
||||||
|
|
||||||
auto& wm = WindowManager::the();
|
auto& wm = WindowManager::the();
|
||||||
Gfx::Painter bitmap_painter(*new_bitmap);
|
Gfx::Painter bitmap_painter(*new_bitmap);
|
||||||
|
|
|
@ -147,7 +147,7 @@ void Window::set_rect(const Gfx::IntRect& rect)
|
||||||
if (rect.is_empty()) {
|
if (rect.is_empty()) {
|
||||||
m_backing_store = nullptr;
|
m_backing_store = nullptr;
|
||||||
} else if (!m_client && (!m_backing_store || old_rect.size() != rect.size())) {
|
} else if (!m_client && (!m_backing_store || old_rect.size() != rect.size())) {
|
||||||
m_backing_store = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, m_rect.size());
|
m_backing_store = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, m_rect.size()).release_value_but_fixme_should_propagate_errors();
|
||||||
}
|
}
|
||||||
|
|
||||||
invalidate(true, old_rect.size() != rect.size());
|
invalidate(true, old_rect.size() != rect.size());
|
||||||
|
|
|
@ -409,17 +409,18 @@ void WindowFrame::PerScaleRenderedCache::render(WindowFrame& frame, Screen& scre
|
||||||
if (tmp_it != s_tmp_bitmap_cache.end())
|
if (tmp_it != s_tmp_bitmap_cache.end())
|
||||||
tmp_it->value = nullptr;
|
tmp_it->value = nullptr;
|
||||||
|
|
||||||
auto bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, frame_rect_including_shadow.size(), scale);
|
auto bitmap_or_error = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, frame_rect_including_shadow.size(), scale);
|
||||||
if (!bitmap) {
|
if (bitmap_or_error.is_error()) {
|
||||||
s_tmp_bitmap_cache.remove(scale);
|
s_tmp_bitmap_cache.remove(scale);
|
||||||
dbgln("Could not create bitmap of size {}", frame_rect_including_shadow.size());
|
dbgln("Could not create bitmap of size {}: {}", frame_rect_including_shadow.size(), bitmap_or_error.error());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
auto bitmap = bitmap_or_error.release_value();
|
||||||
tmp_bitmap = bitmap.ptr();
|
tmp_bitmap = bitmap.ptr();
|
||||||
if (tmp_it != s_tmp_bitmap_cache.end())
|
if (tmp_it != s_tmp_bitmap_cache.end())
|
||||||
tmp_it->value = bitmap.release_nonnull();
|
tmp_it->value = move(bitmap);
|
||||||
else
|
else
|
||||||
s_tmp_bitmap_cache.set(scale, bitmap.release_nonnull());
|
s_tmp_bitmap_cache.set(scale, move(bitmap));
|
||||||
} else {
|
} else {
|
||||||
tmp_bitmap = tmp_it->value.ptr();
|
tmp_bitmap = tmp_it->value.ptr();
|
||||||
}
|
}
|
||||||
|
@ -432,14 +433,14 @@ void WindowFrame::PerScaleRenderedCache::render(WindowFrame& frame, Screen& scre
|
||||||
|
|
||||||
if (!m_top_bottom || m_top_bottom->width() != frame_rect_including_shadow.width() || m_top_bottom->height() != top_bottom_height || m_top_bottom->scale() != scale) {
|
if (!m_top_bottom || m_top_bottom->width() != frame_rect_including_shadow.width() || m_top_bottom->height() != top_bottom_height || m_top_bottom->scale() != scale) {
|
||||||
if (top_bottom_height > 0)
|
if (top_bottom_height > 0)
|
||||||
m_top_bottom = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, { frame_rect_including_shadow.width(), top_bottom_height }, scale);
|
m_top_bottom = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, { frame_rect_including_shadow.width(), top_bottom_height }, scale).release_value_but_fixme_should_propagate_errors();
|
||||||
else
|
else
|
||||||
m_top_bottom = nullptr;
|
m_top_bottom = nullptr;
|
||||||
m_shadow_dirty = true;
|
m_shadow_dirty = true;
|
||||||
}
|
}
|
||||||
if (!m_left_right || m_left_right->height() != frame_rect_including_shadow.height() || m_left_right->width() != left_right_width || m_left_right->scale() != scale) {
|
if (!m_left_right || m_left_right->height() != frame_rect_including_shadow.height() || m_left_right->width() != left_right_width || m_left_right->scale() != scale) {
|
||||||
if (left_right_width > 0)
|
if (left_right_width > 0)
|
||||||
m_left_right = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, { left_right_width, frame_rect_including_shadow.height() }, scale);
|
m_left_right = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, { left_right_width, frame_rect_including_shadow.height() }, scale).release_value_but_fixme_should_propagate_errors();
|
||||||
else
|
else
|
||||||
m_left_right = nullptr;
|
m_left_right = nullptr;
|
||||||
m_shadow_dirty = true;
|
m_shadow_dirty = true;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue