gtk2/gtk/gtksnapshotprivate.h
Benjamin Otte ab60cbd86a snapshot: Implement gtk_snapshot_clips_rect()
And use this to cull widgets and gadgets that are completely outside the
clip region.

A potential optimization is to apply this clip region to cairo contexts
created with gtk_snapshot_append_cairo_node(), but for that we'd need to
apply the inverse matrix to the clip region, and that causes rounding
errors.

Plus, I hope that cairo drawing becomes exceedingly rare so it won't be
used for the whole widget factory like today (which might also explain
why no culling happens in the widget factory outside the header bar.
2016-11-17 03:33:50 +01:00

59 lines
1.8 KiB
C

/* GTK - The GIMP Toolkit
* Copyright (C) 2016 Benjamin Otte <otte@gnome.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GTK_SNAPSHOT_PRIVATE_H__
#define __GTK_SNAPSHOT_PRIVATE_H__
#include "gtksnapshot.h"
G_BEGIN_DECLS
typedef struct _GtkSnapshotState GtkSnapshotState;
struct _GtkSnapshotState {
GtkSnapshotState *parent;
GskRenderNode *node;
graphene_matrix_t transform;
graphene_matrix_t world_transform;
guint world_is_valid : 1;
};
struct _GtkSnapshot {
GtkSnapshotState *state;
GskRenderNode *root;
GskRenderer *renderer;
const cairo_region_t *clip_region;
};
void gtk_snapshot_init (GtkSnapshot *state,
GskRenderer *renderer,
const cairo_region_t *clip);
GskRenderNode * gtk_snapshot_finish (GtkSnapshot *state);
static inline const graphene_matrix_t *
gtk_snapshot_get_transform (const GtkSnapshot *snapshot)
{
return &snapshot->state->transform;
}
G_END_DECLS
#endif /* __GTK_SNAPSHOT_PRIVATE_H__ */