From: Timm Bäder Date: Tue, 1 May 2018 06:19:48 +0000 (+0200) Subject: gl renderer: Use simple offset for selected offset node children X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~22^2~346 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=3a5a9d9233ca9fefcdfb149bd29b34aeb5be7e0e;p=gtk4.git gl renderer: Use simple offset for selected offset node children --- diff --git a/gsk/gl/gskglrenderer.c b/gsk/gl/gskglrenderer.c index 2a11cb53a5..eca829a18c 100644 --- a/gsk/gl/gskglrenderer.c +++ b/gsk/gl/gskglrenderer.c @@ -625,21 +625,40 @@ render_offset_node (GskGLRenderer *self, RenderOpBuilder *builder) { GskRenderNode *child = gsk_offset_node_get_child (node); - graphene_matrix_t prev_mv; - graphene_matrix_t transform, transformed_mv; + const guint child_type = gsk_render_node_get_node_type (child); + const float dx = gsk_offset_node_get_x_offset (node); + const float dy = gsk_offset_node_get_y_offset (node); - graphene_matrix_init_translate (&transform, - &GRAPHENE_POINT3D_INIT( - gsk_offset_node_get_x_offset (node), - gsk_offset_node_get_y_offset (node), - 1.0 - )); - graphene_matrix_multiply (&transform, &builder->current_modelview, &transformed_mv); - prev_mv = ops_set_modelview (builder, &transformed_mv); + /* TODO: We do this only for selected node type we know handle + * builder->dx/dy correctly. That should be "all nodes" eventually. + */ + switch (child_type) + { + case GSK_TEXT_NODE: + case GSK_TEXTURE_NODE: + case GSK_COLOR_NODE: + { + ops_offset (builder, dx, dy); + gsk_gl_renderer_add_render_ops (self, child, builder); + ops_offset (builder, - dx, - dy); + } + break; - gsk_gl_renderer_add_render_ops (self, child, builder); + default: + { + graphene_matrix_t prev_mv; + graphene_matrix_t transform, transformed_mv; - ops_set_modelview (builder, &prev_mv); + graphene_matrix_init_translate (&transform, + &GRAPHENE_POINT3D_INIT(dx, dy, 1.0)); + graphene_matrix_multiply (&transform, &builder->current_modelview, &transformed_mv); + prev_mv = ops_set_modelview (builder, &transformed_mv); + + gsk_gl_renderer_add_render_ops (self, child, builder); + + ops_set_modelview (builder, &prev_mv); + } + } } static inline void