Skip to content

Commit

Permalink
PixelPaint: Add a toolbar to the main UI :^)
Browse files Browse the repository at this point in the history
  • Loading branch information
awesomekling committed May 15, 2021
1 parent 5b6d879 commit c7c273c
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 24 deletions.
8 changes: 8 additions & 0 deletions Userland/Applications/PixelPaint/PixelPaintWindow.gml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,14 @@
spacing: 2
}

@GUI::ToolbarContainer {
name: "toolbar_container"

@GUI::Toolbar {
name: "toolbar"
}
}

@GUI::Widget {
layout: @GUI::HorizontalBoxLayout {
spacing: 0
Expand Down
65 changes: 41 additions & 24 deletions Userland/Applications/PixelPaint/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,10 +82,21 @@ int main(int argc, char** argv)
tool_properties_widget.set_active_tool(tool);
};

window->show();

auto menubar = GUI::Menubar::construct();
auto& file_menu = menubar->add_menu("&File");
auto new_image_action = GUI::Action::create(
"&New Image...", { Mod_Ctrl, Key_N }, Gfx::Bitmap::load_from_file("/res/icons/16x16/new.png"), [&](auto&) {
auto dialog = PixelPaint::CreateNewImageDialog::construct(window);
if (dialog->exec() == GUI::Dialog::ExecOK) {
auto image = PixelPaint::Image::create_with_size(dialog->image_size());
auto bg_layer = PixelPaint::Layer::create_with_size(*image, image->size(), "Background");
image->add_layer(*bg_layer);
bg_layer->bitmap().fill(Color::White);

image_editor.set_image(image);
layer_list_widget.set_image(image);
image_editor.set_active_layer(bg_layer);
}
},
window);

auto open_image_file = [&](auto& path) {
auto image = PixelPaint::Image::create_from_file(path);
Expand All @@ -97,36 +108,28 @@ int main(int argc, char** argv)
layer_list_widget.set_image(image);
};

file_menu.add_action(
GUI::Action::create(
"&New Image...", { Mod_Ctrl, Key_N }, Gfx::Bitmap::load_from_file("/res/icons/16x16/new.png"), [&](auto&) {
auto dialog = PixelPaint::CreateNewImageDialog::construct(window);
if (dialog->exec() == GUI::Dialog::ExecOK) {
auto image = PixelPaint::Image::create_with_size(dialog->image_size());
auto bg_layer = PixelPaint::Layer::create_with_size(*image, image->size(), "Background");
image->add_layer(*bg_layer);
bg_layer->bitmap().fill(Color::White);

image_editor.set_image(image);
layer_list_widget.set_image(image);
image_editor.set_active_layer(bg_layer);
}
},
window));
file_menu.add_action(GUI::CommonActions::make_open_action([&](auto&) {
auto open_image_action = GUI::CommonActions::make_open_action([&](auto&) {
Optional<String> open_path = GUI::FilePicker::get_open_filepath(window);
if (!open_path.has_value())
return;
open_image_file(open_path.value());
}));
file_menu.add_action(GUI::CommonActions::make_save_as_action([&](auto&) {
});

auto save_image_as_action = GUI::CommonActions::make_save_as_action([&](auto&) {
if (!image_editor.image())
return;
Optional<String> save_path = GUI::FilePicker::get_save_filepath(window, "untitled", "pp");
if (!save_path.has_value())
return;
image_editor.image()->save(save_path.value());
}));
});

auto menubar = GUI::Menubar::construct();
auto& file_menu = menubar->add_menu("&File");

file_menu.add_action(new_image_action);
file_menu.add_action(open_image_action);
file_menu.add_action(save_image_as_action);
auto& export_submenu = file_menu.add_submenu("&Export");
export_submenu.add_action(
GUI::Action::create(
Expand Down Expand Up @@ -369,6 +372,19 @@ int main(int argc, char** argv)

window->set_menubar(move(menubar));

auto& toolbar = *main_widget.find_descendant_of_type_named<GUI::Toolbar>("toolbar");
toolbar.add_action(new_image_action);
toolbar.add_action(open_image_action);
toolbar.add_action(save_image_as_action);
toolbar.add_separator();
toolbar.add_action(paste_action);
toolbar.add_action(undo_action);
toolbar.add_action(redo_action);
toolbar.add_separator();
toolbar.add_action(zoom_in_action);
toolbar.add_action(zoom_out_action);
toolbar.add_action(reset_zoom_action);

image_editor.on_active_layer_change = [&](auto* layer) {
layer_list_widget.set_selected_layer(layer);
layer_properties_widget.set_layer(layer);
Expand Down Expand Up @@ -400,5 +416,6 @@ int main(int argc, char** argv)
image_editor.set_active_layer(bg_layer);
}

window->show();
return app->exec();
}

0 comments on commit c7c273c

Please sign in to comment.