diff --git a/gsk/gl/gskglrenderer.c b/gsk/gl/gskglrenderer.c index b222e2b07a..64ba0b6f69 100644 --- a/gsk/gl/gskglrenderer.c +++ b/gsk/gl/gskglrenderer.c @@ -211,11 +211,12 @@ gsk_gl_renderer_render (GskRenderer *renderer, viewport.size.width = gdk_surface_get_width (surface) * scale_factor; viewport.size.height = gdk_surface_get_height (surface) * scale_factor; - gdk_gl_context_make_current (self->context); gdk_draw_context_begin_frame_full (GDK_DRAW_CONTEXT (self->context), gsk_render_node_prefers_high_depth (root), update_area); + gdk_gl_context_make_current (self->context); + /* Must be called *AFTER* gdk_draw_context_begin_frame() */ render_region = get_render_region (surface, self->context); @@ -229,7 +230,6 @@ gsk_gl_renderer_render (GskRenderer *renderer, gsk_gl_driver_end_frame (self->driver); gsk_gl_render_job_free (job); - gdk_gl_context_make_current (self->context); gdk_draw_context_end_frame (GDK_DRAW_CONTEXT (self->context)); gsk_gl_driver_after_frame (self->driver); @@ -259,6 +259,8 @@ gsk_gl_renderer_render_texture (GskRenderer *renderer, format = gsk_render_node_prefers_high_depth (root) ? GL_RGBA32F : GL_RGBA8; + gdk_gl_context_make_current (self->context); + if (gsk_gl_driver_create_render_target (self->driver, width, height, format, diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 6360fa16c7..7f0ab9faa3 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -3848,7 +3848,11 @@ gtk_widget_adjust_size_allocation (GtkWidget *widget, { gtk_widget_measure (widget, GTK_ORIENTATION_HORIZONTAL, allocation->height + priv->margin.top + priv->margin.bottom, - &min_width, &natural_width, NULL, NULL); + &min_width, NULL, NULL, NULL); + gtk_widget_measure (widget, GTK_ORIENTATION_HORIZONTAL, + -1, + NULL, &natural_width, NULL, NULL); + natural_width = MAX (min_width, natural_width); adjust_for_align (effective_align (priv->halign, _gtk_widget_get_direction (widget)), natural_width - priv->margin.left - priv->margin.right, &allocation->x, @@ -3865,7 +3869,11 @@ gtk_widget_adjust_size_allocation (GtkWidget *widget, { gtk_widget_measure (widget, GTK_ORIENTATION_VERTICAL, allocation->width + priv->margin.left + priv->margin.right, - &min_height, &natural_height, NULL, NULL); + &min_height, NULL, NULL, NULL); + gtk_widget_measure (widget, GTK_ORIENTATION_VERTICAL, + -1, + NULL, &natural_height, NULL, NULL); + natural_height = MAX (min_height, natural_height); adjust_for_align (priv->valign, natural_height - priv->margin.top - priv->margin.bottom, &allocation->y, diff --git a/meson.build b/meson.build index 897de13766..02a2786c5c 100644 --- a/meson.build +++ b/meson.build @@ -712,12 +712,24 @@ if get_option('f16c').enabled() # if !defined(__amd64__) && !defined(__x86_64__) # error "F16C intrinsics are only available on x86_64" # endif +#if !defined __has_attribute +# error "No __has_attribute() support" +#endif +#if !__has_attribute(ifunc) +# error "ifunc not supported" +#endif +static int resolved_ifunc (void) { return 0; } +static void *resolve_ifunc (void) { return resolved_ifunc; } +int ifunc_test (void) __attribute__((ifunc ("resolve_ifunc"))); +#else +int ifunc_test (void) { return 0; } #endif #if defined(__SSE__) || defined(_MSC_VER) # include #else # error "No F16C intrinsics available" #endif + int main () { float f[4] = { 0, }; unsigned short h[4] = { 0, }; @@ -730,7 +742,7 @@ int main () { __builtin_cpu_supports ("f16c"); #endif - return 0; + return ifunc_test (); }''' if cc.get_id() != 'msvc' test_f16c_cflags = [ '-mf16c' ] diff --git a/testsuite/reftests/center-center-100x100-picture-in-100x200.css b/testsuite/reftests/center-center-100x100-picture-in-100x200.css new file mode 100644 index 0000000000..e496fc2d82 --- /dev/null +++ b/testsuite/reftests/center-center-100x100-picture-in-100x200.css @@ -0,0 +1,15 @@ +* { + all: unset; + background-color: mintcream; +} + +picture { + background-color: firebrick; +} + +#reference { + background-image: image(lime); + background-repeat: no-repeat; + background-position: center; + background-size: 100px 100px; +} diff --git a/testsuite/reftests/center-center-100x100-picture-in-100x200.ref.ui b/testsuite/reftests/center-center-100x100-picture-in-100x200.ref.ui new file mode 100644 index 0000000000..9521d560cb --- /dev/null +++ b/testsuite/reftests/center-center-100x100-picture-in-100x200.ref.ui @@ -0,0 +1,9 @@ + + + + 100 + 200 + reference + 0 + + diff --git a/testsuite/reftests/center-center-100x100-picture-in-100x200.ui b/testsuite/reftests/center-center-100x100-picture-in-100x200.ui new file mode 100644 index 0000000000..5826455256 --- /dev/null +++ b/testsuite/reftests/center-center-100x100-picture-in-100x200.ui @@ -0,0 +1,24 @@ + + + + 100 + 200 + 0 + + + + + green-100x100.png + 0 + 1 + center + center + + 0 + + + + + + + diff --git a/testsuite/reftests/center-center-100x100-picture-in-200x100.css b/testsuite/reftests/center-center-100x100-picture-in-200x100.css new file mode 100644 index 0000000000..e496fc2d82 --- /dev/null +++ b/testsuite/reftests/center-center-100x100-picture-in-200x100.css @@ -0,0 +1,15 @@ +* { + all: unset; + background-color: mintcream; +} + +picture { + background-color: firebrick; +} + +#reference { + background-image: image(lime); + background-repeat: no-repeat; + background-position: center; + background-size: 100px 100px; +} diff --git a/testsuite/reftests/center-center-100x100-picture-in-200x100.ref.ui b/testsuite/reftests/center-center-100x100-picture-in-200x100.ref.ui new file mode 100644 index 0000000000..e06f2b02dd --- /dev/null +++ b/testsuite/reftests/center-center-100x100-picture-in-200x100.ref.ui @@ -0,0 +1,9 @@ + + + + 200 + 100 + reference + 0 + + diff --git a/testsuite/reftests/center-center-100x100-picture-in-200x100.ui b/testsuite/reftests/center-center-100x100-picture-in-200x100.ui new file mode 100644 index 0000000000..06a17662a3 --- /dev/null +++ b/testsuite/reftests/center-center-100x100-picture-in-200x100.ui @@ -0,0 +1,24 @@ + + + + 200 + 100 + 0 + + + + + green-100x100.png + 0 + 1 + center + center + + 0 + + + + + + + diff --git a/testsuite/reftests/center-center-150x150-picture-in-100x200.css b/testsuite/reftests/center-center-150x150-picture-in-100x200.css new file mode 100644 index 0000000000..adbc2cbedc --- /dev/null +++ b/testsuite/reftests/center-center-150x150-picture-in-100x200.css @@ -0,0 +1,15 @@ +* { + all: unset; + background-color: mintcream; +} + +picture { + background-color: firebrick; +} + +#reference { + background-image: image(lime); + background-repeat: no-repeat; + background-position: center; + background-size: 150px 150px; +} diff --git a/testsuite/reftests/center-center-150x150-picture-in-100x200.ref.ui b/testsuite/reftests/center-center-150x150-picture-in-100x200.ref.ui new file mode 100644 index 0000000000..9521d560cb --- /dev/null +++ b/testsuite/reftests/center-center-150x150-picture-in-100x200.ref.ui @@ -0,0 +1,9 @@ + + + + 100 + 200 + reference + 0 + + diff --git a/testsuite/reftests/center-center-150x150-picture-in-100x200.ui b/testsuite/reftests/center-center-150x150-picture-in-100x200.ui new file mode 100644 index 0000000000..9f02233bbd --- /dev/null +++ b/testsuite/reftests/center-center-150x150-picture-in-100x200.ui @@ -0,0 +1,24 @@ + + + + 100 + 200 + 0 + + + + + green-150x150.png + 0 + 1 + center + center + + 0 + + + + + + + diff --git a/testsuite/reftests/center-center-150x150-picture-in-200x100.css b/testsuite/reftests/center-center-150x150-picture-in-200x100.css new file mode 100644 index 0000000000..adbc2cbedc --- /dev/null +++ b/testsuite/reftests/center-center-150x150-picture-in-200x100.css @@ -0,0 +1,15 @@ +* { + all: unset; + background-color: mintcream; +} + +picture { + background-color: firebrick; +} + +#reference { + background-image: image(lime); + background-repeat: no-repeat; + background-position: center; + background-size: 150px 150px; +} diff --git a/testsuite/reftests/center-center-150x150-picture-in-200x100.ref.ui b/testsuite/reftests/center-center-150x150-picture-in-200x100.ref.ui new file mode 100644 index 0000000000..e06f2b02dd --- /dev/null +++ b/testsuite/reftests/center-center-150x150-picture-in-200x100.ref.ui @@ -0,0 +1,9 @@ + + + + 200 + 100 + reference + 0 + + diff --git a/testsuite/reftests/center-center-150x150-picture-in-200x100.ui b/testsuite/reftests/center-center-150x150-picture-in-200x100.ui new file mode 100644 index 0000000000..1213e9249e --- /dev/null +++ b/testsuite/reftests/center-center-150x150-picture-in-200x100.ui @@ -0,0 +1,24 @@ + + + + 200 + 100 + 0 + + + + + green-150x150.png + 0 + 1 + center + center + + 0 + + + + + + + diff --git a/testsuite/reftests/center-center-200x200-picture-in-100x200.css b/testsuite/reftests/center-center-200x200-picture-in-100x200.css new file mode 100644 index 0000000000..cb3b17ba09 --- /dev/null +++ b/testsuite/reftests/center-center-200x200-picture-in-100x200.css @@ -0,0 +1,15 @@ +* { + all: unset; + background-color: mintcream; +} + +picture { + background-color: firebrick; +} + +#reference { + background-image: image(lime); + background-repeat: no-repeat; + background-position: center; + background-size: 200px 200px; +} diff --git a/testsuite/reftests/center-center-200x200-picture-in-100x200.ref.ui b/testsuite/reftests/center-center-200x200-picture-in-100x200.ref.ui new file mode 100644 index 0000000000..9521d560cb --- /dev/null +++ b/testsuite/reftests/center-center-200x200-picture-in-100x200.ref.ui @@ -0,0 +1,9 @@ + + + + 100 + 200 + reference + 0 + + diff --git a/testsuite/reftests/center-center-200x200-picture-in-100x200.ui b/testsuite/reftests/center-center-200x200-picture-in-100x200.ui new file mode 100644 index 0000000000..f15b48b5d5 --- /dev/null +++ b/testsuite/reftests/center-center-200x200-picture-in-100x200.ui @@ -0,0 +1,24 @@ + + + + 100 + 200 + 0 + + + + + green-200x200.png + 0 + 1 + center + center + + 0 + + + + + + + diff --git a/testsuite/reftests/center-center-200x200-picture-in-200x100.css b/testsuite/reftests/center-center-200x200-picture-in-200x100.css new file mode 100644 index 0000000000..cb3b17ba09 --- /dev/null +++ b/testsuite/reftests/center-center-200x200-picture-in-200x100.css @@ -0,0 +1,15 @@ +* { + all: unset; + background-color: mintcream; +} + +picture { + background-color: firebrick; +} + +#reference { + background-image: image(lime); + background-repeat: no-repeat; + background-position: center; + background-size: 200px 200px; +} diff --git a/testsuite/reftests/center-center-200x200-picture-in-200x100.ref.ui b/testsuite/reftests/center-center-200x200-picture-in-200x100.ref.ui new file mode 100644 index 0000000000..e06f2b02dd --- /dev/null +++ b/testsuite/reftests/center-center-200x200-picture-in-200x100.ref.ui @@ -0,0 +1,9 @@ + + + + 200 + 100 + reference + 0 + + diff --git a/testsuite/reftests/center-center-200x200-picture-in-200x100.ui b/testsuite/reftests/center-center-200x200-picture-in-200x100.ui new file mode 100644 index 0000000000..6e787008fa --- /dev/null +++ b/testsuite/reftests/center-center-200x200-picture-in-200x100.ui @@ -0,0 +1,24 @@ + + + + 200 + 100 + 0 + + + + + green-200x200.png + 0 + 1 + center + center + + 0 + + + + + + + diff --git a/testsuite/reftests/center-center-20x20-picture-in-100x200.css b/testsuite/reftests/center-center-20x20-picture-in-100x200.css new file mode 100644 index 0000000000..2756ae7d64 --- /dev/null +++ b/testsuite/reftests/center-center-20x20-picture-in-100x200.css @@ -0,0 +1,15 @@ +* { + all: unset; + background-color: mintcream; +} + +picture { + background-color: firebrick; +} + +#reference { + background-image: image(lime); + background-repeat: no-repeat; + background-position: center; + background-size: 20px 20px; +} diff --git a/testsuite/reftests/center-center-20x20-picture-in-100x200.ref.ui b/testsuite/reftests/center-center-20x20-picture-in-100x200.ref.ui new file mode 100644 index 0000000000..9521d560cb --- /dev/null +++ b/testsuite/reftests/center-center-20x20-picture-in-100x200.ref.ui @@ -0,0 +1,9 @@ + + + + 100 + 200 + reference + 0 + + diff --git a/testsuite/reftests/center-center-20x20-picture-in-100x200.ui b/testsuite/reftests/center-center-20x20-picture-in-100x200.ui new file mode 100644 index 0000000000..55177f2749 --- /dev/null +++ b/testsuite/reftests/center-center-20x20-picture-in-100x200.ui @@ -0,0 +1,24 @@ + + + + 100 + 200 + 0 + + + + + green-20x20.png + 0 + 1 + center + center + + 0 + + + + + + + diff --git a/testsuite/reftests/center-center-20x20-picture-in-200x100.css b/testsuite/reftests/center-center-20x20-picture-in-200x100.css new file mode 100644 index 0000000000..2756ae7d64 --- /dev/null +++ b/testsuite/reftests/center-center-20x20-picture-in-200x100.css @@ -0,0 +1,15 @@ +* { + all: unset; + background-color: mintcream; +} + +picture { + background-color: firebrick; +} + +#reference { + background-image: image(lime); + background-repeat: no-repeat; + background-position: center; + background-size: 20px 20px; +} diff --git a/testsuite/reftests/center-center-20x20-picture-in-200x100.ref.ui b/testsuite/reftests/center-center-20x20-picture-in-200x100.ref.ui new file mode 100644 index 0000000000..e06f2b02dd --- /dev/null +++ b/testsuite/reftests/center-center-20x20-picture-in-200x100.ref.ui @@ -0,0 +1,9 @@ + + + + 200 + 100 + reference + 0 + + diff --git a/testsuite/reftests/center-center-20x20-picture-in-200x100.ui b/testsuite/reftests/center-center-20x20-picture-in-200x100.ui new file mode 100644 index 0000000000..e5835423fb --- /dev/null +++ b/testsuite/reftests/center-center-20x20-picture-in-200x100.ui @@ -0,0 +1,24 @@ + + + + 200 + 100 + 0 + + + + + green-20x20.png + 0 + 1 + center + center + + 0 + + + + + + + diff --git a/testsuite/reftests/center-center-300x300-picture-in-100x200.css b/testsuite/reftests/center-center-300x300-picture-in-100x200.css new file mode 100644 index 0000000000..5b067dd562 --- /dev/null +++ b/testsuite/reftests/center-center-300x300-picture-in-100x200.css @@ -0,0 +1,15 @@ +* { + all: unset; + background-color: mintcream; +} + +picture { + background-color: firebrick; +} + +#reference { + background-image: image(lime); + background-repeat: no-repeat; + background-position: center; + background-size: 300px 300px; +} diff --git a/testsuite/reftests/center-center-300x300-picture-in-100x200.ref.ui b/testsuite/reftests/center-center-300x300-picture-in-100x200.ref.ui new file mode 100644 index 0000000000..9521d560cb --- /dev/null +++ b/testsuite/reftests/center-center-300x300-picture-in-100x200.ref.ui @@ -0,0 +1,9 @@ + + + + 100 + 200 + reference + 0 + + diff --git a/testsuite/reftests/center-center-300x300-picture-in-100x200.ui b/testsuite/reftests/center-center-300x300-picture-in-100x200.ui new file mode 100644 index 0000000000..2fff2c91d3 --- /dev/null +++ b/testsuite/reftests/center-center-300x300-picture-in-100x200.ui @@ -0,0 +1,24 @@ + + + + 100 + 200 + 0 + + + + + green-300x300.png + 0 + 1 + center + center + + 0 + + + + + + + diff --git a/testsuite/reftests/center-center-300x300-picture-in-200x100.css b/testsuite/reftests/center-center-300x300-picture-in-200x100.css new file mode 100644 index 0000000000..5b067dd562 --- /dev/null +++ b/testsuite/reftests/center-center-300x300-picture-in-200x100.css @@ -0,0 +1,15 @@ +* { + all: unset; + background-color: mintcream; +} + +picture { + background-color: firebrick; +} + +#reference { + background-image: image(lime); + background-repeat: no-repeat; + background-position: center; + background-size: 300px 300px; +} diff --git a/testsuite/reftests/center-center-300x300-picture-in-200x100.ref.ui b/testsuite/reftests/center-center-300x300-picture-in-200x100.ref.ui new file mode 100644 index 0000000000..e06f2b02dd --- /dev/null +++ b/testsuite/reftests/center-center-300x300-picture-in-200x100.ref.ui @@ -0,0 +1,9 @@ + + + + 200 + 100 + reference + 0 + + diff --git a/testsuite/reftests/center-center-300x300-picture-in-200x100.ui b/testsuite/reftests/center-center-300x300-picture-in-200x100.ui new file mode 100644 index 0000000000..5c2e1735e6 --- /dev/null +++ b/testsuite/reftests/center-center-300x300-picture-in-200x100.ui @@ -0,0 +1,24 @@ + + + + 200 + 100 + 0 + + + + + green-300x300.png + 0 + 1 + center + center + + 0 + + + + + + + diff --git a/testsuite/reftests/green-100x100.png b/testsuite/reftests/green-100x100.png new file mode 100644 index 0000000000..b23bbba154 Binary files /dev/null and b/testsuite/reftests/green-100x100.png differ diff --git a/testsuite/reftests/green-150x150.png b/testsuite/reftests/green-150x150.png new file mode 100644 index 0000000000..c2139e0219 Binary files /dev/null and b/testsuite/reftests/green-150x150.png differ diff --git a/testsuite/reftests/green-200x200.png b/testsuite/reftests/green-200x200.png new file mode 100644 index 0000000000..34baf2abe6 Binary files /dev/null and b/testsuite/reftests/green-200x200.png differ diff --git a/testsuite/reftests/green-300x300.png b/testsuite/reftests/green-300x300.png new file mode 100644 index 0000000000..2151a0b0e7 Binary files /dev/null and b/testsuite/reftests/green-300x300.png differ diff --git a/testsuite/reftests/gtk-reftest.c b/testsuite/reftests/gtk-reftest.c index 2bf3fcc5f8..b3f9774c73 100644 --- a/testsuite/reftests/gtk-reftest.c +++ b/testsuite/reftests/gtk-reftest.c @@ -311,7 +311,10 @@ save_node (GskRenderNode *node, } g_test_message ("Storing test result node at %s", filename); - bytes = gsk_render_node_serialize (node); + if (node) + bytes = gsk_render_node_serialize (node); + else + bytes = g_bytes_new ("", 0); ret = g_file_set_contents (filename, g_bytes_get_data (bytes, NULL), g_bytes_get_size (bytes), diff --git a/testsuite/reftests/meson.build b/testsuite/reftests/meson.build index 4a84e1de72..8e1b8bd501 100644 --- a/testsuite/reftests/meson.build +++ b/testsuite/reftests/meson.build @@ -170,6 +170,36 @@ testdata = [ 'box-shadow-with-blend-mode.ui', 'button-wrapping.ui', 'button-wrapping.ref.ui', + 'center-center-100x100-picture-in-100x200.css', + 'center-center-100x100-picture-in-100x200.ref.ui', + 'center-center-100x100-picture-in-100x200.ui', + 'center-center-100x100-picture-in-200x100.css', + 'center-center-100x100-picture-in-200x100.ref.ui', + 'center-center-100x100-picture-in-200x100.ui', + 'center-center-150x150-picture-in-100x200.css', + 'center-center-150x150-picture-in-100x200.ref.ui', + 'center-center-150x150-picture-in-100x200.ui', + 'center-center-150x150-picture-in-200x100.css', + 'center-center-150x150-picture-in-200x100.ref.ui', + 'center-center-150x150-picture-in-200x100.ui', + 'center-center-200x200-picture-in-100x200.css', + 'center-center-200x200-picture-in-100x200.ref.ui', + 'center-center-200x200-picture-in-100x200.ui', + 'center-center-200x200-picture-in-200x100.css', + 'center-center-200x200-picture-in-200x100.ref.ui', + 'center-center-200x200-picture-in-200x100.ui', + 'center-center-20x20-picture-in-100x200.css', + 'center-center-20x20-picture-in-100x200.ref.ui', + 'center-center-20x20-picture-in-100x200.ui', + 'center-center-20x20-picture-in-200x100.css', + 'center-center-20x20-picture-in-200x100.ref.ui', + 'center-center-20x20-picture-in-200x100.ui', + 'center-center-300x300-picture-in-100x200.css', + 'center-center-300x300-picture-in-100x200.ref.ui', + 'center-center-300x300-picture-in-100x200.ui', + 'center-center-300x300-picture-in-200x100.css', + 'center-center-300x300-picture-in-200x100.ref.ui', + 'center-center-300x300-picture-in-200x100.ui', 'centerlayout-invisible-child.css', 'centerlayout-invisible-child.ref.ui', 'centerlayout-invisible-child.ui',