mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 14:57:35 +00:00
LibGfx: Use ErrorOr<T> for Bitmap::cropped()
This commit is contained in:
parent
5e41c70e83
commit
8262bbf624
6 changed files with 26 additions and 14 deletions
|
@ -66,7 +66,7 @@ void MouseCursorModel::invalidate()
|
||||||
auto cursor_bitmap = Gfx::Bitmap::try_load_from_file(cursor.path);
|
auto cursor_bitmap = Gfx::Bitmap::try_load_from_file(cursor.path);
|
||||||
auto cursor_bitmap_rect = cursor_bitmap->rect();
|
auto cursor_bitmap_rect = cursor_bitmap->rect();
|
||||||
cursor.params = Gfx::CursorParams::parse_from_filename(cursor.name, cursor_bitmap_rect.center()).constrained(*cursor_bitmap);
|
cursor.params = Gfx::CursorParams::parse_from_filename(cursor.name, cursor_bitmap_rect.center()).constrained(*cursor_bitmap);
|
||||||
cursor.bitmap = cursor_bitmap->cropped(Gfx::IntRect(Gfx::FloatRect(cursor_bitmap_rect).scaled(1.0 / cursor.params.frames(), 1.0)));
|
cursor.bitmap = cursor_bitmap->cropped(Gfx::IntRect(Gfx::FloatRect(cursor_bitmap_rect).scaled(1.0 / cursor.params.frames(), 1.0))).release_value_but_fixme_should_propagate_errors();
|
||||||
|
|
||||||
m_cursors.append(move(cursor));
|
m_cursors.append(move(cursor));
|
||||||
}
|
}
|
||||||
|
|
|
@ -187,7 +187,10 @@ RefPtr<Gfx::Bitmap> Image::try_copy_bitmap(Selection const& selection) const
|
||||||
if (!full_bitmap)
|
if (!full_bitmap)
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
return full_bitmap->cropped(selection_rect);
|
auto cropped_bitmap_or_error = full_bitmap->cropped(selection_rect);
|
||||||
|
if (cropped_bitmap_or_error.is_error())
|
||||||
|
return nullptr;
|
||||||
|
return cropped_bitmap_or_error.release_value_but_fixme_should_propagate_errors();
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<void, String> Image::export_bmp_to_fd_and_close(int fd, bool preserve_alpha_channel)
|
Result<void, String> Image::export_bmp_to_fd_and_close(int fd, bool preserve_alpha_channel)
|
||||||
|
@ -529,8 +532,7 @@ void Image::rotate(Gfx::RotationDirection direction)
|
||||||
void Image::crop(Gfx::IntRect const& cropped_rect)
|
void Image::crop(Gfx::IntRect const& cropped_rect)
|
||||||
{
|
{
|
||||||
for (auto& layer : m_layers) {
|
for (auto& layer : m_layers) {
|
||||||
auto cropped = layer.bitmap().cropped(cropped_rect);
|
auto cropped = layer.bitmap().cropped(cropped_rect).release_value_but_fixme_should_propagate_errors();
|
||||||
VERIFY(cropped);
|
|
||||||
layer.set_bitmap(*cropped);
|
layer.set_bitmap(*cropped);
|
||||||
layer.did_modify_bitmap(rect());
|
layer.did_modify_bitmap(rect());
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,7 +77,7 @@ public:
|
||||||
auto cursor_bitmap_rect = cursor_bitmap->rect();
|
auto cursor_bitmap_rect = cursor_bitmap->rect();
|
||||||
|
|
||||||
cursor.params = Gfx::CursorParams::parse_from_filename(cursor.name, cursor_bitmap_rect.center()).constrained(*cursor_bitmap);
|
cursor.params = Gfx::CursorParams::parse_from_filename(cursor.name, cursor_bitmap_rect.center()).constrained(*cursor_bitmap);
|
||||||
cursor.bitmap = cursor_bitmap->cropped(Gfx::IntRect(Gfx::FloatRect(cursor_bitmap_rect).scaled(1.0 / cursor.params.frames(), 1.0)));
|
cursor.bitmap = cursor_bitmap->cropped(Gfx::IntRect(Gfx::FloatRect(cursor_bitmap_rect).scaled(1.0 / cursor.params.frames(), 1.0))).release_value_but_fixme_should_propagate_errors();
|
||||||
|
|
||||||
m_cursors.append(move(cursor));
|
m_cursors.append(move(cursor));
|
||||||
}
|
}
|
||||||
|
|
|
@ -511,11 +511,13 @@ ErrorOr<NonnullRefPtr<Gfx::Bitmap>> Bitmap::scaled(float sx, float sy) const
|
||||||
return new_bitmap.release_nonnull();
|
return new_bitmap.release_nonnull();
|
||||||
}
|
}
|
||||||
|
|
||||||
RefPtr<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 = Gfx::Bitmap::try_create(format(), { crop.width(), crop.height() }, 1);
|
||||||
if (!new_bitmap)
|
if (!new_bitmap) {
|
||||||
return nullptr;
|
// 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) {
|
||||||
|
@ -528,7 +530,7 @@ RefPtr<Gfx::Bitmap> Bitmap::cropped(Gfx::IntRect crop) const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new_bitmap;
|
return new_bitmap.release_nonnull();
|
||||||
}
|
}
|
||||||
|
|
||||||
RefPtr<Bitmap> Bitmap::to_bitmap_backed_by_anonymous_buffer() const
|
RefPtr<Bitmap> Bitmap::to_bitmap_backed_by_anonymous_buffer() const
|
||||||
|
|
|
@ -115,7 +115,7 @@ public:
|
||||||
ErrorOr<NonnullRefPtr<Gfx::Bitmap>> flipped(Gfx::Orientation) const;
|
ErrorOr<NonnullRefPtr<Gfx::Bitmap>> flipped(Gfx::Orientation) const;
|
||||||
ErrorOr<NonnullRefPtr<Gfx::Bitmap>> scaled(int sx, int sy) const;
|
ErrorOr<NonnullRefPtr<Gfx::Bitmap>> scaled(int sx, int sy) const;
|
||||||
ErrorOr<NonnullRefPtr<Gfx::Bitmap>> scaled(float sx, float sy) const;
|
ErrorOr<NonnullRefPtr<Gfx::Bitmap>> scaled(float sx, float sy) const;
|
||||||
[[nodiscard]] RefPtr<Gfx::Bitmap> cropped(Gfx::IntRect) const;
|
ErrorOr<NonnullRefPtr<Gfx::Bitmap>> cropped(Gfx::IntRect) const;
|
||||||
[[nodiscard]] RefPtr<Bitmap> to_bitmap_backed_by_anonymous_buffer() const;
|
[[nodiscard]] RefPtr<Bitmap> to_bitmap_backed_by_anonymous_buffer() const;
|
||||||
[[nodiscard]] ByteBuffer serialize_to_byte_buffer() const;
|
[[nodiscard]] ByteBuffer serialize_to_byte_buffer() const;
|
||||||
|
|
||||||
|
|
|
@ -974,8 +974,12 @@ Messages::WindowServer::GetScreenBitmapResponse ClientConnection::get_screen_bit
|
||||||
return { Gfx::ShareableBitmap() };
|
return { Gfx::ShareableBitmap() };
|
||||||
}
|
}
|
||||||
if (rect.has_value()) {
|
if (rect.has_value()) {
|
||||||
auto bitmap = Compositor::the().front_bitmap_for_screenshot({}, *screen).cropped(rect.value());
|
auto bitmap_or_error = Compositor::the().front_bitmap_for_screenshot({}, *screen).cropped(rect.value());
|
||||||
return bitmap->to_shareable_bitmap();
|
if (bitmap_or_error.is_error()) {
|
||||||
|
dbgln("get_screen_bitmap: Failed to crop screenshot: {}", bitmap_or_error.error());
|
||||||
|
return { Gfx::ShareableBitmap() };
|
||||||
|
}
|
||||||
|
return bitmap_or_error.release_value()->to_shareable_bitmap();
|
||||||
}
|
}
|
||||||
auto& bitmap = Compositor::the().front_bitmap_for_screenshot({}, *screen);
|
auto& bitmap = Compositor::the().front_bitmap_for_screenshot({}, *screen);
|
||||||
return bitmap.to_shareable_bitmap();
|
return bitmap.to_shareable_bitmap();
|
||||||
|
@ -1022,8 +1026,12 @@ Messages::WindowServer::GetScreenBitmapAroundCursorResponse ClientConnection::ge
|
||||||
if (intersecting_with_screens == 1) {
|
if (intersecting_with_screens == 1) {
|
||||||
auto& screen = Screen::closest_to_rect(rect);
|
auto& screen = Screen::closest_to_rect(rect);
|
||||||
auto crop_rect = rect.translated(-screen.rect().location()) * screen_scale_factor;
|
auto crop_rect = rect.translated(-screen.rect().location()) * screen_scale_factor;
|
||||||
auto bitmap = Compositor::the().front_bitmap_for_screenshot({}, screen).cropped(crop_rect);
|
auto bitmap_or_error = Compositor::the().front_bitmap_for_screenshot({}, screen).cropped(crop_rect);
|
||||||
return bitmap->to_shareable_bitmap();
|
if (bitmap_or_error.is_error()) {
|
||||||
|
dbgln("get_screen_bitmap_around_cursor: Failed to crop screenshot: {}", bitmap_or_error.error());
|
||||||
|
return { {} };
|
||||||
|
}
|
||||||
|
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 = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, rect.size(), 1)) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue