1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-28 17:37:47 +00:00

LibWeb+LibWebView+WebContent: Add support for <input type="color">

This commit introduces 3 things:
- Support for the color type in HTMLInputElement itself
- A mechanism for handling non event loop blocking dialogs in Page
- The associated plumbing up to ViewImplementation

Frontends may add support for the color picker with the
ViewImplementation.on_request_color_picker function
This commit is contained in:
circl 2023-09-04 11:32:40 +02:00 committed by Sam Atkins
parent 759ad905de
commit 2995a2e212
14 changed files with 110 additions and 4 deletions

View file

@ -892,6 +892,11 @@ void ConnectionFromClient::prompt_closed(Optional<String> const& response)
m_page_host->prompt_closed(response);
}
void ConnectionFromClient::color_picker_closed(Optional<Color> const& picked_color)
{
m_page_host->color_picker_closed(picked_color);
}
void ConnectionFromClient::toggle_media_play_state()
{
m_page_host->toggle_media_play_state().release_value_but_fixme_should_propagate_errors();

View file

@ -97,6 +97,7 @@ private:
virtual void alert_closed() override;
virtual void confirm_closed(bool accepted) override;
virtual void prompt_closed(Optional<String> const& response) override;
virtual void color_picker_closed(Optional<Color> const& picked_color) override;
virtual void toggle_media_play_state() override;
virtual void toggle_media_mute_state() override;

View file

@ -358,6 +358,11 @@ void PageHost::prompt_closed(Optional<String> response)
page().prompt_closed(move(response));
}
void PageHost::color_picker_closed(Optional<Color> picked_color)
{
page().color_picker_closed(picked_color);
}
Web::WebIDL::ExceptionOr<void> PageHost::toggle_media_play_state()
{
return page().toggle_media_play_state();
@ -453,4 +458,9 @@ void PageHost::request_file(Web::FileRequest file_request)
m_client.request_file(move(file_request));
}
void PageHost::page_did_request_color_picker(Color current_color)
{
m_client.async_did_request_color_picker(current_color);
}
}

View file

@ -48,6 +48,7 @@ public:
void alert_closed();
void confirm_closed(bool accepted);
void prompt_closed(Optional<String> response);
void color_picker_closed(Optional<Color> picked_color);
Web::WebIDL::ExceptionOr<void> toggle_media_play_state();
void toggle_media_mute_state();
@ -113,6 +114,7 @@ private:
virtual void page_did_request_activate_tab() override;
virtual void page_did_close_browsing_context(Web::HTML::BrowsingContext const&) override;
virtual void request_file(Web::FileRequest) override;
virtual void page_did_request_color_picker(Color current_color) override;
virtual void page_did_finish_text_test() override;
explicit PageHost(ConnectionFromClient&);

View file

@ -59,6 +59,7 @@ endpoint WebContentClient
did_request_minimize_window() => (Gfx::IntRect window_rect)
did_request_fullscreen_window() => (Gfx::IntRect window_rect)
did_request_file(DeprecatedString path, i32 request_id) =|
did_request_color_picker(Color current_color) =|
did_finish_handling_input_event(bool event_was_accepted) =|
did_output_js_console_message(i32 message_index) =|

View file

@ -78,6 +78,7 @@ endpoint WebContentServer
alert_closed() =|
confirm_closed(bool accepted) =|
prompt_closed(Optional<String> response) =|
color_picker_closed(Optional<Color> picked_color) =|
toggle_media_play_state() =|
toggle_media_mute_state() =|