Compare commits

...

11 Commits

Author SHA1 Message Date
Matthias Clasen
e64947662a 3.89.2 2016-12-21 14:12:31 -05:00
Matthias Clasen
a2f0c860ee Fix distcheck 2016-12-21 14:12:31 -05:00
Matthias Clasen
924efd988d Fixes for the gdk docs 2016-12-21 13:57:16 -05:00
Matthias Clasen
961286b7cd Make gsk docs build 2016-12-21 13:57:16 -05:00
Rico Tzschichholz
a571e53491 snapshot: Fix some annoations 2016-12-21 18:16:34 +01:00
Rico Tzschichholz
2b4dfeec7c gsk: Fix build of 22110ef5a4 2016-12-21 18:15:50 +01:00
Alexander Larsson
230d27b079 GskRenderNode: Use C99 flexible arrays to avoid extra allocation
Instead of a separate allocation for any arrays in the render node
we allocate these as part of the render node itself, using C99
flexible arrays.

This leads to less allocations, which is nice, but the major reason
for this is that it allows us to change the allocation scheme further
in the future. For instance, we want to do stack-like allocation so
that all the render-nodes for an entire frame are allocated in one
(or a few) chunks.
2016-12-21 14:01:34 +01:00
Alexander Larsson
22110ef5a4 gsk: Add bounds member to RenderNode
Instead of constantly recalculating this (especially recursively for
parents!) we do it only on construction, because everything is
immutable anyway. Also, most nodes had a bounds already and can
use the new parent member instead.

We also do direct access to the node bounds rather than calling
gsk_render_node_get_bounds in various places, which means
we do less copying.
2016-12-21 14:01:34 +01:00
Alexander Larsson
2d4b46f4f9 gsk: Drop gsk_render_node_make_immutable, nodes are always immutable 2016-12-21 14:01:34 +01:00
Alexander Larsson
4ee45b76ca gsk docs: gsk_render_node_iter_get_type doesn't exist anymore 2016-12-21 14:01:34 +01:00
Baurzhan Muftakhidinov
cfade39459 Update Kazakh translation 2016-12-21 10:56:38 +00:00
16 changed files with 1142 additions and 1466 deletions

80
NEWS
View File

@@ -1,3 +1,83 @@
Overview of Changes in GTK+ 3.89.2
==================================
* gtk4-icon-browser works again
* gtk-encode symbolic works for icons with names containing dots
* GtkFlowBox and GtkListBox have been changed to no longer emit
the ::selected-children-changed signal during destruction
* gtk-demo has gained an example for using PangoTabArray with GtkTextView
* We now support CSS border-spacing in GtkGrid, GtkBox and in gadgets
* The rendering in GDK and GSK has been further refactored. We now
only draw toplevel windows, and we always redraw the whole window.
* A Vulkan implementation has been added in parallel to the GL one
* Dropped APIs:
gdk_window_process_updates
gdk_window_process_all_updates
gdk_window_reparent
support for native and foreign subwindows
gsk_render_node_{append/prepend/insert} variations
gsk_render_node_make_immutable
gtk_cairo_should_draw_window
gtk_snapshot_append
GtkJunctionSides
* New APIs:
gdk_rgba_is_clear
gdk_rgba_is_opaque
GdkDrawContext: A base class for vulkan and gl contexts
Render node subclasses
GskRoundedRect
gtk_container_snapshot_child
* The GSK_USE_SOFTWARE environment variable has been generalized as GSK_RENDERER.
Use GSK_RENDERER=help to learn about possible values. Other environment variables
that have gained new possible values in clude GSK_DEBUG=vulkan and GTK_DEBUG=snapshot.
* Bugs fixed
749012 GtkStack: Don't emit notify::visible-child during destruction
771242 opening menu for certain types of GtkComboBox causes Gdk-CRITICAL assertion...
772371 Take advantage of Unicode
773299 Ensure GTK+-4.x builds and works on Windows (MSVC in particular)
774265 No tilt for wintab devices
774534 input shape and opaque region not applied without begin_paint()/end_paint()
774686 GtkMenu does not unref all GtkCheckMenuItem it creates
774695 GtkProgressbar needs full and empty classes
774743 GtkNotebook does not unref all GtkBuiltinIcon it creates
774760 inspector: ensure controller is a GtkGesture
774784 Failed to get desktop session proxy is not an error!
774790 GtkTextHandle does not unref all GtkAdjustment it references
774893 Application font sizes scaling gets clamped to 1.00 when starting GtkInspector
774915 Destroying the parent of a subsurface causes _gdk_window_destroy_hierarchy: ...
774917 child subsurfaces need to be placed relative to their parent
774939 GtkLabelAccessible: Initialize link before setting parent
775038 Build: Add wayland to GSKs dependencies
775212 GtkScaleButton does not unref all GtkAdjustment it references
775316 gtk_drag_source_set_icon_pixbuf references the pixbuf received once too much
775319 gdk_window_get_toplevel() fails to return the toplevel of a child subsurface
775410 gsk/Makefile.am runs g-ir-scanner before libgsk-4.la is linked
775525 gtk_flow_box_get_child_at_index shouldn't crash with an invalid index
775651 GdkX11-4.0.gir, GdkWin32-4.0.gir, and Gsk-4.0.gir are generated before Gdk-4...
776132 Mention the difference between gdk_window_create_similar_image_surface and c...
776187 flowbox: Add gtk_flow_box_get_child_at_pos to gtk3
776306 flowbox: Sometimes emits child-activated during rubberband selection
* Translation updates
Czech
German
Hungarian
Italian
Kazakh
Russian
Spanish
Overview of Changes in GTK+ 3.89.1
==================================

View File

@@ -10,7 +10,7 @@
m4_define([gtk_major_version], [3])
m4_define([gtk_minor_version], [89])
m4_define([gtk_micro_version], [1])
m4_define([gtk_micro_version], [2])
m4_define([gtk_interface_age], [0])
m4_define([gtk_binary_age],
[m4_eval(100 * gtk_minor_version + gtk_micro_version)])

View File

@@ -34,13 +34,16 @@ IGNORE_HFILES= \
gdkdisplaymanagerprivate.h \
gdkdisplayprivate.h \
gdkdndprivate.h \
gdkdrawcontextprivate.h \
gdkframeclockprivate.h \
gdkglcontextprivate.h \
gdkkeysprivate.h \
gdkmonitorprivate.h \
gdkscreenprivate.h \
gdkseatdefaultprivate.h \
gdkseatprivate.h \
gdkvisualprivate.h \
gdkvulkancontextprivate.h \
keyname-table.h \
win32 \
x11 \

View File

@@ -36,6 +36,7 @@
<xi:include href="xml/gdkframetimings.xml" />
<xi:include href="xml/gdkdrawingcontext.xml" />
<xi:include href="xml/gdkglcontext.xml" />
<xi:include href="xml/gdkvulkancontext.xml" />
<xi:include href="xml/events.xml" />
<xi:include href="xml/event_structs.xml" />
<xi:include href="xml/keys.xml" />

View File

@@ -127,7 +127,6 @@ gdk_display_supports_clipboard_persistence
gdk_display_store_clipboard
gdk_display_supports_shapes
gdk_display_supports_input_shapes
gdk_display_supports_composite
gdk_display_get_app_launch_context
gdk_display_notify_startup_complete
gdk_display_get_default_seat
@@ -180,21 +179,8 @@ GdkScreen
gdk_screen_get_default
gdk_screen_get_root_window
gdk_screen_get_display
gdk_screen_get_number
gdk_screen_get_toplevel_windows
gdk_screen_get_n_monitors
gdk_screen_get_primary_monitor
gdk_screen_get_monitor_geometry
gdk_screen_get_monitor_workarea
gdk_screen_get_monitor_at_point
gdk_screen_get_monitor_at_window
gdk_screen_get_monitor_height_mm
gdk_screen_get_monitor_width_mm
gdk_screen_get_monitor_plug_name
gdk_screen_get_monitor_scale_factor
gdk_screen_get_setting
gdk_screen_get_font_options
gdk_screen_set_font_options
gdk_screen_get_resolution
gdk_screen_set_resolution
@@ -317,10 +303,7 @@ gdk_window_resize
gdk_window_move_resize
gdk_window_scroll
gdk_window_move_region
gdk_window_flush
gdk_window_has_native
gdk_window_ensure_native
gdk_window_reparent
gdk_window_raise
gdk_window_lower
gdk_window_restack
@@ -336,13 +319,13 @@ gdk_window_beep
gdk_window_get_scale_factor
gdk_window_set_opaque_region
gdk_window_create_gl_context
gdk_window_create_vulkan_context
gdk_window_mark_paint_from_clip
<SUBSECTION>
gdk_window_get_clip_region
gdk_window_begin_draw_frame
gdk_window_end_draw_frame
gdk_window_should_draw
gdk_window_get_visible_region
<SUBSECTION>
@@ -373,10 +356,6 @@ gdk_window_input_shape_combine_region
gdk_window_set_child_input_shapes
gdk_window_merge_child_input_shapes
gdk_window_set_title
gdk_window_set_background
gdk_window_set_background_rgba
gdk_window_set_background_pattern
gdk_window_get_background_pattern
GDK_PARENT_RELATIVE
gdk_window_set_cursor
gdk_window_get_cursor
@@ -542,6 +521,7 @@ gdk_cairo_region
gdk_cairo_region_create_from_surface
gdk_cairo_surface_create_from_pixbuf
gdk_cairo_draw_from_gl
gdk_cairo_surface_upload_to_gl
</SECTION>
<SECTION>
@@ -679,6 +659,7 @@ gdk_device_get_last_event_window
<SUBSECTION>
gdk_device_tool_get_serial
gdk_device_tool_get_tool_type
gdk_device_tool_get_hardware_id
<SUBSECTION Standard>
GDK_TYPE_AXIS_USE
@@ -698,6 +679,8 @@ GDK_TYPE_DEVICE
GdkDeviceClass
gdk_device_get_type
gdk_device_type_get_type
gdk_device_tool_get_type
gdk_device_tool_new
GDK_MAX_TIMECOORD_AXES
</SECTION>
@@ -1373,3 +1356,23 @@ GDK_TYPE_DRAWING_CONTEXT
GDK_DRAWING_CONTEXT
GDK_IS_DRAWING_CONTEXT
</SECTION>
<SECTION>
<FILE>gdkvulkancontext</FILE>
GdkVulkanContext
gdk_vulkan_context_get_device
gdk_vulkan_context_get_draw_index
gdk_vulkan_context_get_draw_semaphore
gdk_vulkan_context_get_image
gdk_vulkan_context_get_image_format
gdk_vulkan_context_get_instance
gdk_vulkan_context_get_n_images
gdk_vulkan_context_get_physical_device
gdk_vulkan_context_get_queue
gdk_vulkan_context_get_queue_family_index
<SUBSECTION Standard>
gdk_vulkan_context_get_type
gdk_vulkan_error_quark
gdk_vulkan_strerror
</SECTION>

View File

@@ -18,7 +18,6 @@
<title>API Reference</title>
<xi:include href="xml/GskRenderer.xml" />
<xi:include href="xml/GskRenderNode.xml" />
<xi:include href="xml/GskRenderNodeIter.xml" />
</reference>
<index id="api-index-full">

View File

@@ -1,3 +1,2 @@
gsk_render_node_get_type
gsk_render_node_iter_get_type
gsk_renderer_get_type

View File

@@ -23,7 +23,7 @@ DISTCLEANFILES =
noinst_LTLIBRARIES =
if HAVE_VULKAN
gsk_private_vulan_source_h = \
gsk_private_vulkan_source_h = \
gskvulkanblendpipelineprivate.h \
gskvulkanbufferprivate.h \
gskvulkancolorpipelineprivate.h \

View File

@@ -604,7 +604,6 @@ gsk_gl_renderer_add_render_item (GskGLRenderer *self,
RenderItem *parent)
{
graphene_rect_t viewport;
graphene_rect_t bounds;
RenderItem item;
RenderItem *ritem = NULL;
int program_id;
@@ -618,24 +617,22 @@ gsk_gl_renderer_add_render_item (GskGLRenderer *self,
if (scale_factor < 1)
scale_factor = 1;
gsk_render_node_get_bounds (node, &bounds);
item.node = node;
item.name = node->name != NULL ? node->name : "unnamed";
/* The texture size */
item.size.width = bounds.size.width * scale_factor;
item.size.height = bounds.size.height * scale_factor;
item.size.width = node->bounds.size.width * scale_factor;
item.size.height = node->bounds.size.height * scale_factor;
/* Each render item is an axis-aligned bounding box that we
* transform using the given transformation matrix
*/
item.min.x = bounds.origin.x;
item.min.y = bounds.origin.y;
item.min.x = node->bounds.origin.x;
item.min.y = node->bounds.origin.y;
item.min.z = 0.f;
item.max.x = item.min.x + bounds.size.width;
item.max.y = item.min.y + bounds.size.height;
item.max.x = item.min.x + node->bounds.size.width;
item.max.y = item.min.y + node->bounds.size.height;
item.max.z = 0.f;
/* The location of the item, in normalized world coordinates */
@@ -763,17 +760,14 @@ gsk_gl_renderer_add_render_item (GskGLRenderer *self,
default:
{
graphene_rect_t bounds;
cairo_surface_t *surface;
cairo_t *cr;
gsk_render_node_get_bounds (node, &bounds);
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
ceil (bounds.size.width),
ceil (bounds.size.height));
ceil (node->bounds.size.width),
ceil (node->bounds.size.height));
cr = cairo_create (surface);
cairo_translate (cr, -bounds.origin.x, -bounds.origin.y);
cairo_translate (cr, -node->bounds.origin.x, -node->bounds.origin.y);
gsk_render_node_draw (node, cr);

View File

@@ -616,7 +616,7 @@ gsk_renderer_unrealize (GskRenderer *renderer)
* using the given #GdkDrawingContext.
*
* The @renderer will acquire a reference on the #GskRenderNode tree while
* the rendering is in progress, and will make the tree immutable.
* the rendering is in progress.
*
* Since: 3.90
*/
@@ -635,7 +635,6 @@ gsk_renderer_render (GskRenderer *renderer,
g_return_if_fail (context == priv->drawing_context);
priv->root_node = gsk_render_node_ref (root);
gsk_render_node_make_immutable (priv->root_node);
#ifdef G_ENABLE_DEBUG
gsk_profiler_reset (priv->profiler);

View File

@@ -35,8 +35,8 @@
*
* Render nodes are meant to be transient; once they have been associated
* to a #GskRenderer it's safe to release any reference you have on them.
* Once a #GskRenderNode has been rendered, it is marked as immutable, and
* cannot be modified.
* All #GskRenderNodes are immutable, you can only specify their properties
* during construction.
*/
#include "config.h"
@@ -68,13 +68,11 @@ G_DEFINE_BOXED_TYPE (GskRenderNode, gsk_render_node,
static void
gsk_render_node_finalize (GskRenderNode *self)
{
self->is_mutable = TRUE;
self->node_class->finalize (self);
g_clear_pointer (&self->name, g_free);
g_slice_free1 (self->node_class->struct_size, self);
g_free (self);
}
/*< private >
@@ -84,14 +82,14 @@ gsk_render_node_finalize (GskRenderNode *self)
* Returns: (transfer full): the newly created #GskRenderNode
*/
GskRenderNode *
gsk_render_node_new (const GskRenderNodeClass *node_class)
gsk_render_node_new (const GskRenderNodeClass *node_class, gsize extra_size)
{
GskRenderNode *self;
g_return_val_if_fail (node_class != NULL, NULL);
g_return_val_if_fail (node_class->node_type != GSK_NOT_A_RENDER_NODE, NULL);
self = g_slice_alloc0 (node_class->struct_size);
self = g_malloc0 (node_class->struct_size + extra_size);
self->node_class = node_class;
@@ -100,8 +98,6 @@ gsk_render_node_new (const GskRenderNodeClass *node_class)
self->min_filter = GSK_SCALING_FILTER_NEAREST;
self->mag_filter = GSK_SCALING_FILTER_NEAREST;
self->is_mutable = TRUE;
return self;
}
@@ -180,7 +176,7 @@ gsk_render_node_get_bounds (GskRenderNode *node,
g_return_if_fail (GSK_IS_RENDER_NODE (node));
g_return_if_fail (bounds != NULL);
node->node_class->get_bounds (node, bounds);
graphene_rect_init_from_rect (bounds, &node->bounds);
}
void
@@ -237,23 +233,6 @@ gsk_render_node_get_name (GskRenderNode *node)
return node->name;
}
/*< private >
* gsk_render_node_make_immutable:
* @node: a #GskRenderNode
*
* Marks @node, and all its children, as immutable.
*/
void
gsk_render_node_make_immutable (GskRenderNode *node)
{
if (!node->is_mutable)
return;
node->node_class->make_immutable (node);
node->is_mutable = FALSE;
}
/**
* gsk_render_node_draw:
* @node: a #GskRenderNode
@@ -279,14 +258,11 @@ gsk_render_node_draw (GskRenderNode *node,
if (!GSK_RENDER_MODE_CHECK (GEOMETRY))
{
graphene_rect_t frame;
gsk_render_node_get_bounds (node, &frame);
GSK_NOTE (CAIRO, g_print ("CLIP = { .x = %g, .y = %g, .width = %g, .height = %g }\n",
frame.origin.x, frame.origin.y,
frame.size.width, frame.size.height));
node->bounds.origin.x, node->bounds.origin.y,
node->bounds.size.width, node->bounds.size.height));
cairo_rectangle (cr, frame.origin.x, frame.origin.y, frame.size.width, frame.size.height);
cairo_rectangle (cr, node->bounds.origin.x, node->bounds.origin.y, node->bounds.size.width, node->bounds.size.height);
cairo_clip (cr);
}
@@ -298,12 +274,9 @@ gsk_render_node_draw (GskRenderNode *node,
if (GSK_RENDER_MODE_CHECK (GEOMETRY))
{
graphene_rect_t frame;
gsk_render_node_get_bounds (node, &frame);
cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
cairo_rectangle (cr, frame.origin.x - 1, frame.origin.y - 1, frame.size.width + 2, frame.size.height + 2);
cairo_rectangle (cr, node->bounds.origin.x - 1, node->bounds.origin.y - 1,
node->bounds.size.width + 2, node->bounds.size.height + 2);
cairo_set_line_width (cr, 2);
cairo_set_source_rgba (cr, 0, 0, 0, 0.5);
cairo_stroke (cr);

File diff suppressed because it is too large Load Diff

View File

@@ -23,8 +23,7 @@ struct _GskRenderNode
GskScalingFilter min_filter;
GskScalingFilter mag_filter;
/* Bit fields; leave at the end */
gboolean is_mutable : 1;
graphene_rect_t bounds;
};
struct _GskRenderNodeClass
@@ -33,16 +32,11 @@ struct _GskRenderNodeClass
gsize struct_size;
const char *type_name;
void (* finalize) (GskRenderNode *node);
void (* make_immutable) (GskRenderNode *node);
void (* draw) (GskRenderNode *node,
cairo_t *cr);
void (* get_bounds) (GskRenderNode *node,
graphene_rect_t *bounds);
};
GskRenderNode *gsk_render_node_new (const GskRenderNodeClass *node_class);
void gsk_render_node_make_immutable (GskRenderNode *node);
GskRenderNode *gsk_render_node_new (const GskRenderNodeClass *node_class, gsize extra_size);
void gsk_render_node_get_bounds (GskRenderNode *node,
graphene_rect_t *frame);

View File

@@ -171,20 +171,20 @@ gsk_vulkan_render_pass_upload_fallback (GskVulkanRenderPass *self,
GskVulkanRender *render,
GskVulkanUploader *uploader)
{
graphene_rect_t bounds;
GskRenderNode *node;
cairo_surface_t *surface;
cairo_t *cr;
gsk_render_node_get_bounds (op->node, &bounds);
node = op->node;
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
ceil (bounds.size.width),
ceil (bounds.size.height));
ceil (node->bounds.size.width),
ceil (node->bounds.size.height));
cr = cairo_create (surface);
cairo_translate (cr, -bounds.origin.x, -bounds.origin.y);
cairo_translate (cr, -node->bounds.origin.x, -node->bounds.origin.y);
gsk_render_node_draw (node, cr);
gsk_render_node_draw (op->node, cr);
cairo_destroy (cr);
op->source = gsk_vulkan_image_new_from_data (uploader,
@@ -303,26 +303,20 @@ gsk_vulkan_render_pass_collect_vertex_data (GskVulkanRenderPass *self,
case GSK_VULKAN_OP_SURFACE:
case GSK_VULKAN_OP_TEXTURE:
{
graphene_rect_t bounds;
gsk_render_node_get_bounds (op->render.node, &bounds);
op->render.vertex_offset = offset + n_bytes;
gsk_vulkan_blend_pipeline_collect_vertex_data (GSK_VULKAN_BLEND_PIPELINE (op->render.pipeline),
data + n_bytes + offset,
&bounds);
&op->render.node->bounds);
n_bytes += op->render.vertex_count;
}
break;
case GSK_VULKAN_OP_COLOR:
{
graphene_rect_t bounds;
gsk_render_node_get_bounds (op->render.node, &bounds);
op->render.vertex_offset = offset + n_bytes;
gsk_vulkan_color_pipeline_collect_vertex_data (GSK_VULKAN_COLOR_PIPELINE (op->render.pipeline),
data + n_bytes + offset,
&bounds,
&op->render.node->bounds,
gsk_color_node_peek_color (op->render.node));
n_bytes += op->render.vertex_count;
}

View File

@@ -165,7 +165,6 @@ gtk_snapshot_finish (GtkSnapshot *snapshot)
* @keep_coordinates: If %TRUE, the current offset and clip will be kept.
* Otherwise, the clip will be unset and the offset will be reset to
* (0, 0).
* @bounds: the bounds for the new node
* @name: (transfer none): a printf() style format string for the name for the new node
* @...: arguments to insert into the format string
*
@@ -540,7 +539,7 @@ gtk_snapshot_push_shadow (GtkSnapshot *snapshot,
* Removes the top element from the stack of render nodes,
* making the node underneath the current node again.
*
* Returns: (transfer full) (allow none): A #GskRenderNode for
* Returns: (transfer full) (nullable): A #GskRenderNode for
* the contents that were rendered to @snapshot since
* the corresponding gtk_snapshot_push() call
*
@@ -632,8 +631,8 @@ gtk_snapshot_translate_2d (GtkSnapshot *snapshot,
/**
* gtk_snapshot_get_offset:
* @snapshot: a #GtkSnapshot
* @x: (out allow-none): return location for x offset
* @y: (out allow-none): return location for y offset
* @x: (out) (optional): return location for x offset
* @y: (out) (optional): return location for y offset
*
* Queries the offset managed by @snapshot. This offset is the
* accumulated sum of calls to gtk_snapshot_translate_2d().

1901
po/kk.po

File diff suppressed because it is too large Load Diff