diff options
Diffstat (limited to 'Userland/Applications/PixelPaint')
-rw-r--r-- | Userland/Applications/PixelPaint/Image.cpp | 19 | ||||
-rw-r--r-- | Userland/Applications/PixelPaint/Image.h | 7 | ||||
-rw-r--r-- | Userland/Applications/PixelPaint/ImageEditor.cpp | 19 | ||||
-rw-r--r-- | Userland/Applications/PixelPaint/ImageEditor.h | 2 | ||||
-rw-r--r-- | Userland/Applications/PixelPaint/MainWidget.cpp | 37 | ||||
-rw-r--r-- | Userland/Applications/PixelPaint/MainWidget.h | 3 | ||||
-rw-r--r-- | Userland/Applications/PixelPaint/PaletteWidget.cpp | 28 | ||||
-rw-r--r-- | Userland/Applications/PixelPaint/PaletteWidget.h | 7 | ||||
-rw-r--r-- | Userland/Applications/PixelPaint/ProjectLoader.cpp | 5 | ||||
-rw-r--r-- | Userland/Applications/PixelPaint/ProjectLoader.h | 2 | ||||
-rw-r--r-- | Userland/Applications/PixelPaint/main.cpp | 4 |
11 files changed, 59 insertions, 74 deletions
diff --git a/Userland/Applications/PixelPaint/Image.cpp b/Userland/Applications/PixelPaint/Image.cpp index 15d572d71c..a6abb8df08 100644 --- a/Userland/Applications/PixelPaint/Image.cpp +++ b/Userland/Applications/PixelPaint/Image.cpp @@ -171,40 +171,33 @@ RefPtr<Gfx::Bitmap> Image::try_copy_bitmap(Selection const& selection) const return cropped_bitmap_or_error.release_value_but_fixme_should_propagate_errors(); } -ErrorOr<void> Image::export_bmp_to_file(Core::File& file, bool preserve_alpha_channel) const +ErrorOr<void> Image::export_bmp_to_file(NonnullOwnPtr<Core::Stream::Stream> stream, bool preserve_alpha_channel) const { auto bitmap_format = preserve_alpha_channel ? Gfx::BitmapFormat::BGRA8888 : Gfx::BitmapFormat::BGRx8888; auto bitmap = TRY(try_compose_bitmap(bitmap_format)); Gfx::BMPWriter dumper; auto encoded_data = dumper.dump(bitmap); - - if (!file.write(encoded_data.data(), encoded_data.size())) - return Error::from_errno(file.error()); - + TRY(stream->write_entire_buffer(encoded_data)); return {}; } -ErrorOr<void> Image::export_png_to_file(Core::File& file, bool preserve_alpha_channel) const +ErrorOr<void> Image::export_png_to_file(NonnullOwnPtr<Core::Stream::Stream> stream, bool preserve_alpha_channel) const { auto bitmap_format = preserve_alpha_channel ? Gfx::BitmapFormat::BGRA8888 : Gfx::BitmapFormat::BGRx8888; auto bitmap = TRY(try_compose_bitmap(bitmap_format)); auto encoded_data = TRY(Gfx::PNGWriter::encode(*bitmap)); - if (!file.write(encoded_data.data(), encoded_data.size())) - return Error::from_errno(file.error()); - + TRY(stream->write_entire_buffer(encoded_data)); return {}; } -ErrorOr<void> Image::export_qoi_to_file(Core::File& file) const +ErrorOr<void> Image::export_qoi_to_file(NonnullOwnPtr<Core::Stream::Stream> stream) const { auto bitmap = TRY(try_compose_bitmap(Gfx::BitmapFormat::BGRA8888)); auto encoded_data = Gfx::QOIWriter::encode(bitmap); - if (!file.write(encoded_data.data(), encoded_data.size())) - return Error::from_errno(file.error()); - + TRY(stream->write_entire_buffer(encoded_data)); return {}; } diff --git a/Userland/Applications/PixelPaint/Image.h b/Userland/Applications/PixelPaint/Image.h index 7ae7b0c7dd..b029056d22 100644 --- a/Userland/Applications/PixelPaint/Image.h +++ b/Userland/Applications/PixelPaint/Image.h @@ -15,7 +15,6 @@ #include <AK/RefCounted.h> #include <AK/RefPtr.h> #include <AK/Result.h> -#include <LibCore/File.h> #include <LibGUI/Command.h> #include <LibGUI/Forward.h> #include <LibGfx/Bitmap.h> @@ -73,9 +72,9 @@ public: void paint_into(GUI::Painter&, Gfx::IntRect const& dest_rect) const; ErrorOr<void> serialize_as_json(JsonObjectSerializer<StringBuilder>& json) const; - ErrorOr<void> export_bmp_to_file(Core::File&, bool preserve_alpha_channel) const; - ErrorOr<void> export_png_to_file(Core::File&, bool preserve_alpha_channel) const; - ErrorOr<void> export_qoi_to_file(Core::File&) const; + ErrorOr<void> export_bmp_to_file(NonnullOwnPtr<Core::Stream::Stream>, bool preserve_alpha_channel) const; + ErrorOr<void> export_png_to_file(NonnullOwnPtr<Core::Stream::Stream>, bool preserve_alpha_channel) const; + ErrorOr<void> export_qoi_to_file(NonnullOwnPtr<Core::Stream::Stream>) const; void move_layer_to_front(Layer&); void move_layer_to_back(Layer&); diff --git a/Userland/Applications/PixelPaint/ImageEditor.cpp b/Userland/Applications/PixelPaint/ImageEditor.cpp index dca4dbeb4f..6a61f7b23b 100644 --- a/Userland/Applications/PixelPaint/ImageEditor.cpp +++ b/Userland/Applications/PixelPaint/ImageEditor.cpp @@ -710,10 +710,10 @@ void ImageEditor::save_project() save_project_as(); return; } - auto response = FileSystemAccessClient::Client::the().try_request_file_deprecated(window(), path(), Core::OpenMode::Truncate | Core::OpenMode::WriteOnly); + auto response = FileSystemAccessClient::Client::the().request_file(window(), path(), Core::Stream::OpenMode::Truncate | Core::Stream::OpenMode::Write); if (response.is_error()) return; - auto result = save_project_to_file(*response.value()); + auto result = save_project_to_file(response.value().release_stream()); if (result.is_error()) { GUI::MessageBox::show_error(window(), DeprecatedString::formatted("Could not save {}: {}", path(), result.error())); return; @@ -723,21 +723,21 @@ void ImageEditor::save_project() void ImageEditor::save_project_as() { - auto response = FileSystemAccessClient::Client::the().try_save_file_deprecated(window(), m_title, "pp"); + auto response = FileSystemAccessClient::Client::the().save_file(window(), m_title, "pp"); if (response.is_error()) return; - auto file = response.value(); - auto result = save_project_to_file(*file); + auto file = response.release_value(); + auto result = save_project_to_file(file.release_stream()); if (result.is_error()) { - GUI::MessageBox::show_error(window(), DeprecatedString::formatted("Could not save {}: {}", file->filename(), result.error())); + GUI::MessageBox::show_error(window(), DeprecatedString::formatted("Could not save {}: {}", file.filename(), result.error())); return; } - set_path(file->filename()); + set_path(file.filename().to_deprecated_string()); set_loaded_from_image(false); set_unmodified(); } -ErrorOr<void> ImageEditor::save_project_to_file(Core::File& file) const +ErrorOr<void> ImageEditor::save_project_to_file(NonnullOwnPtr<Core::Stream::File> file) const { StringBuilder builder; auto json = TRY(JsonObjectSerializer<>::try_create(builder)); @@ -755,8 +755,7 @@ ErrorOr<void> ImageEditor::save_project_to_file(Core::File& file) const TRY(json_guides.finish()); TRY(json.finish()); - if (!file.write(builder.string_view())) - return Error::from_errno(file.error()); + TRY(file->write_entire_buffer(builder.string_view().bytes())); return {}; } diff --git a/Userland/Applications/PixelPaint/ImageEditor.h b/Userland/Applications/PixelPaint/ImageEditor.h index 694a068c84..97da298482 100644 --- a/Userland/Applications/PixelPaint/ImageEditor.h +++ b/Userland/Applications/PixelPaint/ImageEditor.h @@ -151,7 +151,7 @@ private: GUI::MouseEvent event_adjusted_for_layer(GUI::MouseEvent const&, Layer const&) const; GUI::MouseEvent event_with_pan_and_scale_applied(GUI::MouseEvent const&) const; - ErrorOr<void> save_project_to_file(Core::File&) const; + ErrorOr<void> save_project_to_file(NonnullOwnPtr<Core::Stream::File>) const; int calculate_ruler_step_size() const; Gfx::IntRect mouse_indicator_rect_x() const; diff --git a/Userland/Applications/PixelPaint/MainWidget.cpp b/Userland/Applications/PixelPaint/MainWidget.cpp index f09f0ccfec..5aa7f3bde7 100644 --- a/Userland/Applications/PixelPaint/MainWidget.cpp +++ b/Userland/Applications/PixelPaint/MainWidget.cpp @@ -19,9 +19,7 @@ #include <Applications/PixelPaint/PixelPaintWindowGML.h> #include <LibConfig/Client.h> #include <LibCore/Debounce.h> -#include <LibCore/File.h> #include <LibCore/MimeData.h> -#include <LibFileSystemAccessClient/Client.h> #include <LibGUI/Application.h> #include <LibGUI/Clipboard.h> #include <LibGUI/Icon.h> @@ -192,10 +190,10 @@ ErrorOr<void> MainWidget::initialize_menubar(GUI::Window& window) }); m_open_image_action = GUI::CommonActions::make_open_action([&](auto&) { - auto response = FileSystemAccessClient::Client::the().try_open_file_deprecated(&window); + auto response = FileSystemAccessClient::Client::the().open_file(&window); if (response.is_error()) return; - open_image(response.value()); + open_image(response.release_value()); }); m_save_image_as_action = GUI::CommonActions::make_save_as_action([&](auto&) { @@ -223,11 +221,11 @@ ErrorOr<void> MainWidget::initialize_menubar(GUI::Window& window) "As &BMP", [&](auto&) { auto* editor = current_image_editor(); VERIFY(editor); - auto response = FileSystemAccessClient::Client::the().try_save_file_deprecated(&window, editor->title(), "bmp"); + auto response = FileSystemAccessClient::Client::the().save_file(&window, editor->title(), "bmp"); if (response.is_error()) return; auto preserve_alpha_channel = GUI::MessageBox::show(&window, "Do you wish to preserve transparency?"sv, "Preserve transparency?"sv, GUI::MessageBox::Type::Question, GUI::MessageBox::InputType::YesNo); - auto result = editor->image().export_bmp_to_file(response.value(), preserve_alpha_channel == GUI::MessageBox::ExecResult::Yes); + auto result = editor->image().export_bmp_to_file(response.value().release_stream(), preserve_alpha_channel == GUI::MessageBox::ExecResult::Yes); if (result.is_error()) GUI::MessageBox::show_error(&window, DeprecatedString::formatted("Export to BMP failed: {}", result.error())); })); @@ -238,11 +236,11 @@ ErrorOr<void> MainWidget::initialize_menubar(GUI::Window& window) auto* editor = current_image_editor(); VERIFY(editor); // TODO: fix bmp on line below? - auto response = FileSystemAccessClient::Client::the().try_save_file_deprecated(&window, editor->title(), "png"); + auto response = FileSystemAccessClient::Client::the().save_file(&window, editor->title(), "png"); if (response.is_error()) return; auto preserve_alpha_channel = GUI::MessageBox::show(&window, "Do you wish to preserve transparency?"sv, "Preserve transparency?"sv, GUI::MessageBox::Type::Question, GUI::MessageBox::InputType::YesNo); - auto result = editor->image().export_png_to_file(response.value(), preserve_alpha_channel == GUI::MessageBox::ExecResult::Yes); + auto result = editor->image().export_png_to_file(response.value().release_stream(), preserve_alpha_channel == GUI::MessageBox::ExecResult::Yes); if (result.is_error()) GUI::MessageBox::show_error(&window, DeprecatedString::formatted("Export to PNG failed: {}", result.error())); })); @@ -252,10 +250,10 @@ ErrorOr<void> MainWidget::initialize_menubar(GUI::Window& window) "As &QOI", [&](auto&) { auto* editor = current_image_editor(); VERIFY(editor); - auto response = FileSystemAccessClient::Client::the().try_save_file_deprecated(&window, editor->title(), "qoi"); + auto response = FileSystemAccessClient::Client::the().save_file(&window, editor->title(), "qoi"); if (response.is_error()) return; - auto result = editor->image().export_qoi_to_file(response.value()); + auto result = editor->image().export_qoi_to_file(response.value().release_stream()); if (result.is_error()) GUI::MessageBox::show_error(&window, DeprecatedString::formatted("Export to QOI failed: {}", result.error())); })); @@ -415,11 +413,11 @@ ErrorOr<void> MainWidget::initialize_menubar(GUI::Window& window) })); m_edit_menu->add_action(GUI::Action::create( "&Load Color Palette", g_icon_bag.load_color_palette, [&](auto&) { - auto response = FileSystemAccessClient::Client::the().try_open_file_deprecated(&window, "Load Color Palette"); + auto response = FileSystemAccessClient::Client::the().open_file(&window, "Load Color Palette"); if (response.is_error()) return; - auto result = PixelPaint::PaletteWidget::load_palette_file(*response.value()); + auto result = PixelPaint::PaletteWidget::load_palette_file(response.release_value().release_stream()); if (result.is_error()) { GUI::MessageBox::show_error(&window, DeprecatedString::formatted("Loading color palette failed: {}", result.error())); return; @@ -429,11 +427,11 @@ ErrorOr<void> MainWidget::initialize_menubar(GUI::Window& window) })); m_edit_menu->add_action(GUI::Action::create( "Sa&ve Color Palette", g_icon_bag.save_color_palette, [&](auto&) { - auto response = FileSystemAccessClient::Client::the().try_save_file_deprecated(&window, "untitled", "palette"); + auto response = FileSystemAccessClient::Client::the().save_file(&window, "untitled", "palette"); if (response.is_error()) return; - auto result = PixelPaint::PaletteWidget::save_palette_file(m_palette_widget->colors(), *response.value()); + auto result = PixelPaint::PaletteWidget::save_palette_file(m_palette_widget->colors(), response.release_value().release_stream()); if (result.is_error()) GUI::MessageBox::show_error(&window, DeprecatedString::formatted("Writing color palette failed: {}", result.error())); })); @@ -1070,10 +1068,9 @@ void MainWidget::set_actions_enabled(bool enabled) m_zoom_combobox->set_enabled(enabled); } -void MainWidget::open_image(Core::File& file) +void MainWidget::open_image(FileSystemAccessClient::File file) { - auto try_load = m_loader.try_load_from_file(file); - + auto try_load = m_loader.try_load_from_file(file.release_stream()); if (try_load.is_error()) { GUI::MessageBox::show_error(window(), DeprecatedString::formatted("Unable to open file: {}, {}", file.filename(), try_load.error())); return; @@ -1082,7 +1079,7 @@ void MainWidget::open_image(Core::File& file) auto& image = *m_loader.release_image(); auto& editor = create_new_editor(image); editor.set_loaded_from_image(m_loader.is_raw_image()); - editor.set_path(file.filename()); + editor.set_path(file.filename().to_deprecated_string()); editor.set_unmodified(); m_layer_list_widget->set_image(&image); } @@ -1264,10 +1261,10 @@ void MainWidget::drop_event(GUI::DropEvent& event) if (url.scheme() != "file") continue; - auto response = FileSystemAccessClient::Client::the().try_request_file_deprecated(window(), url.path(), Core::OpenMode::ReadOnly); + auto response = FileSystemAccessClient::Client::the().request_file(window(), url.path(), Core::Stream::OpenMode::Read); if (response.is_error()) return; - open_image(response.value()); + open_image(response.release_value()); } } diff --git a/Userland/Applications/PixelPaint/MainWidget.h b/Userland/Applications/PixelPaint/MainWidget.h index 8ffb548da3..b30bc5b222 100644 --- a/Userland/Applications/PixelPaint/MainWidget.h +++ b/Userland/Applications/PixelPaint/MainWidget.h @@ -20,6 +20,7 @@ #include "ToolboxWidget.h" #include "Tools/Tool.h" #include "VectorscopeWidget.h" +#include <LibFileSystemAccessClient/Client.h> #include <LibGUI/Action.h> #include <LibGUI/ComboBox.h> #include <LibGUI/Forward.h> @@ -40,7 +41,7 @@ public: ErrorOr<void> initialize_menubar(GUI::Window&); - void open_image(Core::File&); + void open_image(FileSystemAccessClient::File); ErrorOr<void> create_default_image(); bool request_close(); diff --git a/Userland/Applications/PixelPaint/PaletteWidget.cpp b/Userland/Applications/PixelPaint/PaletteWidget.cpp index a5a3fd836a..96fb38965a 100644 --- a/Userland/Applications/PixelPaint/PaletteWidget.cpp +++ b/Userland/Applications/PixelPaint/PaletteWidget.cpp @@ -11,7 +11,6 @@ #include "ImageEditor.h" #include <AK/Result.h> #include <AK/Vector.h> -#include <LibCore/File.h> #include <LibGUI/BoxLayout.h> #include <LibGUI/ColorPicker.h> #include <LibGUI/MessageBox.h> @@ -225,11 +224,14 @@ Vector<Color> PaletteWidget::colors() return colors; } -Result<Vector<Color>, DeprecatedString> PaletteWidget::load_palette_file(Core::File& file) +ErrorOr<Vector<Color>> PaletteWidget::load_palette_file(NonnullOwnPtr<Core::Stream::File> file) { Vector<Color> palette; + Array<u8, PAGE_SIZE> buffer; + auto buffered_file = TRY(Core::Stream::BufferedFile::create(move(file))); - for (auto line : file.lines()) { + while (TRY(buffered_file->can_read_line())) { + auto line = TRY(buffered_file->read_line(buffer)); if (line.is_whitespace()) continue; @@ -242,29 +244,23 @@ Result<Vector<Color>, DeprecatedString> PaletteWidget::load_palette_file(Core::F palette.append(color.value()); } - file.close(); - if (palette.is_empty()) - return DeprecatedString { "The palette file did not contain any usable colors"sv }; + return Error::from_string_literal("The palette file did not contain any usable colors"); return palette; } -Result<Vector<Color>, DeprecatedString> PaletteWidget::load_palette_path(DeprecatedString const& file_path) +ErrorOr<Vector<Color>> PaletteWidget::load_palette_path(DeprecatedString const& file_path) { - auto file_or_error = Core::File::open(file_path, Core::OpenMode::ReadOnly); - if (file_or_error.is_error()) - return DeprecatedString { strerror(file_or_error.error().code()) }; - - auto& file = *file_or_error.value(); - return load_palette_file(file); + auto file = TRY(Core::Stream::File::open(file_path, Core::Stream::OpenMode::Read)); + return load_palette_file(move(file)); } -Result<void, DeprecatedString> PaletteWidget::save_palette_file(Vector<Color> palette, Core::File& file) +ErrorOr<void> PaletteWidget::save_palette_file(Vector<Color> palette, NonnullOwnPtr<Core::Stream::File> file) { for (auto& color : palette) { - file.write(color.to_deprecated_string_without_alpha()); - file.write("\n"sv); + TRY(file->write_entire_buffer(color.to_deprecated_string_without_alpha().bytes())); + TRY(file->write_entire_buffer({ "\n", 1 })); } return {}; } diff --git a/Userland/Applications/PixelPaint/PaletteWidget.h b/Userland/Applications/PixelPaint/PaletteWidget.h index c2914bcc73..aedfce3438 100644 --- a/Userland/Applications/PixelPaint/PaletteWidget.h +++ b/Userland/Applications/PixelPaint/PaletteWidget.h @@ -31,9 +31,10 @@ public: Vector<Color> colors(); - static Result<Vector<Color>, DeprecatedString> load_palette_file(Core::File&); - static Result<Vector<Color>, DeprecatedString> load_palette_path(DeprecatedString const&); - static Result<void, DeprecatedString> save_palette_file(Vector<Color>, Core::File&); + static ErrorOr<Vector<Color>> load_palette_file(NonnullOwnPtr<Core::Stream::File>); + static ErrorOr<Vector<Color>> load_palette_path(DeprecatedString const&); + static ErrorOr<void> save_palette_file(Vector<Color>, NonnullOwnPtr<Core::Stream::File>); + static Vector<Color> fallback_colors(); void set_image_editor(ImageEditor*); diff --git a/Userland/Applications/PixelPaint/ProjectLoader.cpp b/Userland/Applications/PixelPaint/ProjectLoader.cpp index 6acc8d963b..fd9077cc16 100644 --- a/Userland/Applications/PixelPaint/ProjectLoader.cpp +++ b/Userland/Applications/PixelPaint/ProjectLoader.cpp @@ -10,15 +10,14 @@ #include <AK/DeprecatedString.h> #include <AK/JsonObject.h> #include <AK/Result.h> -#include <LibCore/File.h> #include <LibCore/MappedFile.h> #include <LibImageDecoderClient/Client.h> namespace PixelPaint { -ErrorOr<void> ProjectLoader::try_load_from_file(Core::File& file) +ErrorOr<void> ProjectLoader::try_load_from_file(NonnullOwnPtr<Core::Stream::File> file) { - auto contents = file.read_all(); + auto contents = TRY(file->read_until_eof()); auto json_or_error = JsonValue::from_string(contents); if (json_or_error.is_error()) { diff --git a/Userland/Applications/PixelPaint/ProjectLoader.h b/Userland/Applications/PixelPaint/ProjectLoader.h index 0fc7a059d8..3acf3f0cdd 100644 --- a/Userland/Applications/PixelPaint/ProjectLoader.h +++ b/Userland/Applications/PixelPaint/ProjectLoader.h @@ -18,7 +18,7 @@ public: ProjectLoader() = default; ~ProjectLoader() = default; - ErrorOr<void> try_load_from_file(Core::File&); + ErrorOr<void> try_load_from_file(NonnullOwnPtr<Core::Stream::File>); bool is_raw_image() const { return m_is_raw_image; } bool has_image() const { return !m_image.is_null(); } diff --git a/Userland/Applications/PixelPaint/main.cpp b/Userland/Applications/PixelPaint/main.cpp index 05aa370b24..7f3cf01acf 100644 --- a/Userland/Applications/PixelPaint/main.cpp +++ b/Userland/Applications/PixelPaint/main.cpp @@ -74,10 +74,10 @@ ErrorOr<int> serenity_main(Main::Arguments arguments) window->show(); if (image_file) { - auto response = FileSystemAccessClient::Client::the().try_request_file_read_only_approved_deprecated(window, image_file); + auto response = FileSystemAccessClient::Client::the().request_file_read_only_approved(window, image_file); if (response.is_error()) return 1; - main_widget->open_image(response.value()); + main_widget->open_image(response.release_value()); } else { TRY(main_widget->create_default_image()); } |