LadybirdWebViewBridge.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. * Copyright (c) 2023-2024, Tim Flynn <trflynn89@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Vector.h>
  8. #include <LibGfx/Point.h>
  9. #include <LibGfx/Rect.h>
  10. #include <LibGfx/Size.h>
  11. #include <LibGfx/StandardCursor.h>
  12. #include <LibWeb/CSS/PreferredColorScheme.h>
  13. #include <LibWeb/CSS/PreferredContrast.h>
  14. #include <LibWeb/CSS/PreferredMotion.h>
  15. #include <LibWeb/Page/InputEvent.h>
  16. #include <LibWebView/ViewImplementation.h>
  17. namespace Ladybird {
  18. class WebViewBridge final : public WebView::ViewImplementation {
  19. public:
  20. static ErrorOr<NonnullOwnPtr<WebViewBridge>> create(Vector<Web::DevicePixelRect> screen_rects, float device_pixel_ratio, Web::CSS::PreferredColorScheme, Web::CSS::PreferredContrast, Web::CSS::PreferredMotion);
  21. virtual ~WebViewBridge() override;
  22. virtual void initialize_client(CreateNewClient = CreateNewClient::Yes) override;
  23. void initialize_client_as_child(WebViewBridge const& parent, u64 page_index);
  24. float device_pixel_ratio() const { return m_device_pixel_ratio; }
  25. void set_device_pixel_ratio(float device_pixel_ratio);
  26. float inverse_device_pixel_ratio() const { return 1.0f / m_device_pixel_ratio; }
  27. void set_system_visibility_state(bool is_visible);
  28. void set_viewport_rect(Gfx::IntRect);
  29. void update_palette();
  30. void set_preferred_color_scheme(Web::CSS::PreferredColorScheme);
  31. void set_preferred_contrast(Web::CSS::PreferredContrast);
  32. void set_preferred_motion(Web::CSS::PreferredMotion);
  33. void enqueue_input_event(Web::MouseEvent);
  34. void enqueue_input_event(Web::DragEvent);
  35. void enqueue_input_event(Web::KeyEvent);
  36. void set_enable_autoplay(bool enabled);
  37. struct Paintable {
  38. Gfx::Bitmap& bitmap;
  39. Gfx::IntSize bitmap_size;
  40. };
  41. Optional<Paintable> paintable();
  42. Function<NonnullRefPtr<WebView::WebContentClient>()> on_request_web_content;
  43. Function<void()> on_zoom_level_changed;
  44. private:
  45. WebViewBridge(Vector<Web::DevicePixelRect> screen_rects, float device_pixel_ratio, Web::CSS::PreferredColorScheme, Web::CSS::PreferredContrast, Web::CSS::PreferredMotion);
  46. virtual void update_zoom() override;
  47. virtual Web::DevicePixelSize viewport_size() const override;
  48. virtual Gfx::IntPoint to_content_position(Gfx::IntPoint widget_position) const override;
  49. virtual Gfx::IntPoint to_widget_position(Gfx::IntPoint content_position) const override;
  50. Vector<Web::DevicePixelRect> m_screen_rects;
  51. Gfx::IntSize m_viewport_size;
  52. Web::CSS::PreferredColorScheme m_preferred_color_scheme { Web::CSS::PreferredColorScheme::Auto };
  53. Web::CSS::PreferredContrast m_preferred_contrast { Web::CSS::PreferredContrast::Auto };
  54. Web::CSS::PreferredMotion m_preferred_motion { Web::CSS::PreferredMotion::Auto };
  55. };
  56. }