Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
fl_view_renderer.cc
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
6
7typedef struct {
8 // Background color drawn behind the Flutter frame.
10
11 // TRUE if have got the first frame to render.
14
16
18
20 fl_view_renderer,
21 GTK_TYPE_DRAWING_AREA)
22
23// Default implementation for the abstract present_layers method. Subclasses
24// must override this.
25static void fl_view_renderer_present_layers_default(FlViewRenderer* self,
27 size_t layers_count) {
28 g_assert_not_reached();
29}
30
31static void fl_view_renderer_dispose(GObject* object) {
33 fl_view_renderer_get_instance_private(FL_VIEW_RENDERER(object)));
34
35 g_clear_pointer(&priv->background_color, gdk_rgba_free);
36
37 G_OBJECT_CLASS(fl_view_renderer_parent_class)->dispose(object);
38}
39
40static void fl_view_renderer_class_init(FlViewRendererClass* klass) {
41 G_OBJECT_CLASS(klass)->dispose = fl_view_renderer_dispose;
42
43 klass->present_layers = fl_view_renderer_present_layers_default;
44
46 g_signal_new("first-frame", fl_view_renderer_get_type(),
47 G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 0);
48}
49
50static void fl_view_renderer_init(FlViewRenderer* self) {
52 fl_view_renderer_get_instance_private(self));
53
54 GdkRGBA default_background = {
55 .red = 0.0, .green = 0.0, .blue = 0.0, .alpha = 1.0};
56 priv->background_color = gdk_rgba_copy(&default_background);
57}
58
60 const GdkRGBA* color) {
61 g_return_if_fail(FL_IS_VIEW_RENDERER(self));
62
64 fl_view_renderer_get_instance_private(self));
65
66 gdk_rgba_free(priv->background_color);
67 priv->background_color = gdk_rgba_copy(color);
68
69 // Redraw so the new background color is shown.
70 gtk_widget_queue_draw(GTK_WIDGET(self));
71}
72
73void fl_view_renderer_paint_background(FlViewRenderer* self, cairo_t* cr) {
74 g_return_if_fail(FL_IS_VIEW_RENDERER(self));
75
77 fl_view_renderer_get_instance_private(self));
78
79 // Don't bother drawing if fully transparent - the widget above this will
80 // already be drawn by GTK.
81 if (priv->background_color->red == 0 && priv->background_color->green == 0 &&
82 priv->background_color->blue == 0 && priv->background_color->alpha == 0) {
83 return;
84 }
85
86 gdk_cairo_set_source_rgba(cr, priv->background_color);
87 cairo_paint(cr);
88}
89
91 const FlutterLayer** layers,
92 size_t layers_count) {
93 g_return_if_fail(FL_IS_VIEW_RENDERER(self));
94
95 FlViewRendererClass* klass = FL_VIEW_RENDERER_GET_CLASS(self);
96 klass->present_layers(self, layers, layers_count);
97}
98
99void fl_view_renderer_notify_frame(FlViewRenderer* self) {
100 g_return_if_fail(FL_IS_VIEW_RENDERER(self));
101
103 fl_view_renderer_get_instance_private(self));
104
105 if (!priv->have_first_frame) {
106 priv->have_first_frame = TRUE;
108 }
109}
FlAccessibilityHandlerPrivate * priv
const FlutterLayer size_t layers_count
const FlutterLayer ** layers
static void fl_view_renderer_dispose(GObject *object)
void fl_view_renderer_set_background_color(FlViewRenderer *self, const GdkRGBA *color)
G_DEFINE_TYPE_WITH_PRIVATE(FlViewRenderer, fl_view_renderer, GTK_TYPE_DRAWING_AREA) static void fl_view_renderer_present_layers_default(FlViewRenderer *self
static void fl_view_renderer_init(FlViewRenderer *self)
void fl_view_renderer_notify_frame(FlViewRenderer *self)
@ LAST_SIGNAL
@ SIGNAL_FIRST_FRAME
static void fl_view_renderer_class_init(FlViewRendererClass *klass)
void fl_view_renderer_paint_background(FlViewRenderer *self, cairo_t *cr)
void fl_view_renderer_present_layers(FlViewRenderer *self, const FlutterLayer **layers, size_t layers_count)
static guint fl_view_renderer_signals[LAST_SIGNAL]
void gtk_widget_queue_draw(GtkWidget *widget)
Definition mock_gtk.cc:271
void gdk_cairo_set_source_rgba(cairo_t *cr, const GdkRGBA *rgba)
Definition mock_gtk.cc:154