diff options
Diffstat (limited to 'gdk')
25 files changed, 543 insertions, 13 deletions
diff --git a/gdk/broadway/Makefile.am b/gdk/broadway/Makefile.am index be5304ac5d..5858eebb4a 100644 --- a/gdk/broadway/Makefile.am +++ b/gdk/broadway/Makefile.am @@ -61,6 +61,8 @@ libgdk_broadway_la_SOURCES = \ gdkdisplay-broadway.c \ gdkdisplay-broadway.h \ gdkdnd-broadway.c \ + gdkdrawingcontext-broadway.c \ + gdkdrawingcontext-broadway.h \ gdkeventsource.c \ gdkeventsource.h \ gdkglobals-broadway.c \ diff --git a/gdk/broadway/gdkdrawingcontext-broadway.c b/gdk/broadway/gdkdrawingcontext-broadway.c new file mode 100644 index 0000000000..ea1ec8514f --- /dev/null +++ b/gdk/broadway/gdkdrawingcontext-broadway.c @@ -0,0 +1,33 @@ +/* GDK - The GIMP Drawing Kit + * Copyright 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/>. + */ + +#include "config.h" + +#include "gdkdrawingcontext-broadway.h" + +G_DEFINE_TYPE (GdkBroadwayDrawingContext, gdk_broadway_drawing_context, GDK_TYPE_DRAWING_CONTEXT) + +static void +gdk_broadway_drawing_context_class_init (GdkBroadwayDrawingContextClass *klass) +{ +} + +static void +gdk_broadway_drawing_context_init (GdkBroadwayDrawingContext *self) +{ +} + diff --git a/gdk/broadway/gdkdrawingcontext-broadway.h b/gdk/broadway/gdkdrawingcontext-broadway.h new file mode 100644 index 0000000000..03883d834a --- /dev/null +++ b/gdk/broadway/gdkdrawingcontext-broadway.h @@ -0,0 +1,48 @@ +/* GDK - The GIMP Drawing Kit + * + * 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 __GDK_BROADWAY_DRAWING_CONTEXT_H__ +#define __GDK_BROADWAY_DRAWING_CONTEXT_H__ + +#include "gdk/gdkdrawingcontextprivate.h" + +G_BEGIN_DECLS + +#define GDK_TYPE_BROADWAY_DRAWING_CONTEXT (gdk_broadway_drawing_context_get_type ()) +#define GDK_BROADWAY_DRAWING_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDK_TYPE_BROADWAY_DRAWING_CONTEXT, GdkBroadwayDrawingContext)) +#define GDK_IS_BROADWAY_DRAWING_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDK_TYPE_BROADWAY_DRAWING_CONTEXT)) +#define GDK_BROADWAY_DRAWING_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_BROADWAY_DRAWING_CONTEXT, GdkBroadwayDrawingContextClass)) +#define GDK_IS_BROADWAY_DRAWING_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_BROADWAY_DRAWING_CONTEXT)) +#define GDK_BROADWAY_DRAWING_CONTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_BROADWAY_DRAWING_CONTEXT, GdkBroadwayDrawingContextClass)) + +typedef struct _GdkBroadwayDrawingContext GdkBroadwayDrawingContext; +typedef struct _GdkBroadwayDrawingContextClass GdkBroadwayDrawingContextClass; + +struct _GdkBroadwayDrawingContext +{ + GdkDrawingContext parent_instance; +}; + +struct _GdkBroadwayDrawingContextClass +{ + GdkDrawingContextClass parent_instance; +}; + +GType gdk_broadway_drawing_context_get_type (void) G_GNUC_CONST; + +G_END_DECLS + +#endif /* __GDK_BROADWAY_DRAWING_CONTEXT_H__ */ diff --git a/gdk/broadway/gdkwindow-broadway.c b/gdk/broadway/gdkwindow-broadway.c index e54abd2a36..1ddc444dd7 100644 --- a/gdk/broadway/gdkwindow-broadway.c +++ b/gdk/broadway/gdkwindow-broadway.c @@ -33,6 +33,7 @@ #include "gdkwindow.h" #include "gdkwindowimpl.h" #include "gdkdisplay-broadway.h" +#include "gdkdrawingcontext-broadway.h" #include "gdkprivate-broadway.h" #include "gdkinternals.h" #include "gdkdeviceprivate.h" @@ -1510,6 +1511,16 @@ gdk_broadway_get_last_seen_time (GdkWindow *window) return _gdk_broadway_server_get_last_seen_time (GDK_BROADWAY_DISPLAY (display)->server); } +static GdkDrawingContext * +gdk_broadway_window_create_draw_context (GdkWindow *window, + const cairo_region_t *region) +{ + return g_object_new (GDK_TYPE_BROADWAY_DRAWING_CONTEXT, + "window", window, + "clip", region, + NULL); +} + static void gdk_window_impl_broadway_class_init (GdkWindowImplBroadwayClass *klass) { @@ -1588,4 +1599,5 @@ gdk_window_impl_broadway_class_init (GdkWindowImplBroadwayClass *klass) impl_class->change_property = _gdk_broadway_window_change_property; impl_class->delete_property = _gdk_broadway_window_delete_property; impl_class->get_drag_protocol = _gdk_broadway_window_get_drag_protocol; + impl_class->create_draw_context = gdk_broadway_window_create_draw_context; } diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index 0fd2023791..f3661b8b14 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -2892,7 +2892,6 @@ gdk_window_begin_draw_frame (GdkWindow *window, const cairo_region_t *region) { GdkDrawingContext *context; - GdkWindowImplClass *impl_class; g_return_val_if_fail (GDK_IS_WINDOW (window), NULL); @@ -2907,18 +2906,7 @@ gdk_window_begin_draw_frame (GdkWindow *window, if (gdk_window_has_native (window) && gdk_window_is_toplevel (window)) gdk_window_begin_paint_internal (window, region); - impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl); - if (impl_class->create_draw_context != NULL) - { - context = impl_class->create_draw_context (window, region); - } - else - { - context = g_object_new (GDK_TYPE_DRAWING_CONTEXT, - "window", window, - "clip", region, - NULL); - } + context = GDK_WINDOW_IMPL_GET_CLASS (window->impl)->create_draw_context (window, region); /* Do not take a reference, to avoid creating cycles */ window->drawing_context = context; diff --git a/gdk/mir/Makefile.am b/gdk/mir/Makefile.am index 654b8f9bb8..87ec55bad3 100644 --- a/gdk/mir/Makefile.am +++ b/gdk/mir/Makefile.am @@ -24,6 +24,7 @@ libgdk_mir_la_SOURCES = \ gdkmircursor.c \ gdkmirdevicemanager.c \ gdkmirdisplay.c \ + gdkmirdrawingcontext.c \ gdkmireventsource.c \ gdkmirglcontext.c \ gdkmirkeyboard.c \ diff --git a/gdk/mir/gdkmir-private.h b/gdk/mir/gdkmir-private.h index 69f927fab9..afe7a7c0d3 100644 --- a/gdk/mir/gdkmir-private.h +++ b/gdk/mir/gdkmir-private.h @@ -95,6 +95,8 @@ void _gdk_mir_window_impl_set_cursor_state (GdkMirWindowImpl *impl, gdouble x, g void _gdk_mir_window_impl_get_cursor_state (GdkMirWindowImpl *impl, gdouble *x, gdouble *y, gboolean *cursor_inside, guint *button_state); +GdkDrawingContext *gdk_mir_drawing_context_new (GdkWindow *window, const cairo_region_t *region); + GdkMirEventSource *_gdk_mir_display_get_event_source (GdkDisplay *display); GdkMirEventSource *_gdk_mir_event_source_new (GdkDisplay *display); diff --git a/gdk/mir/gdkmirdrawingcontext.c b/gdk/mir/gdkmirdrawingcontext.c new file mode 100644 index 0000000000..e888a4abaa --- /dev/null +++ b/gdk/mir/gdkmirdrawingcontext.c @@ -0,0 +1,63 @@ +/* GDK - The GIMP Drawing Kit + * Copyright 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/>. + */ + +#include "config.h" + +#define GDK_TYPE_MIR_DRAWING_CONTEXT (gdk_mir_drawing_context_get_type ()) +#define GDK_MIR_DRAWING_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDK_TYPE_MIR_DRAWING_CONTEXT, GdkMirDrawingContext)) +#define GDK_IS_MIR_DRAWING_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDK_TYPE_MIR_DRAWING_CONTEXT)) +#define GDK_MIR_DRAWING_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_MIR_DRAWING_CONTEXT, GdkMirDrawingContextClass)) +#define GDK_IS_MIR_DRAWING_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_MIR_DRAWING_CONTEXT)) +#define GDK_MIR_DRAWING_CONTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_MIR_DRAWING_CONTEXT, GdkMirDrawingContextClass)) + +typedef struct _GdkMirDrawingContext GdkMirDrawingContext; +typedef struct _GdkMirDrawingContextClass GdkMirDrawingContextClass; + +struct _GdkMirDrawingContext +{ + GdkDrawingContext parent_instance; +}; + +struct _GdkMirDrawingContextClass +{ + GdkDrawingContextClass parent_instance; +}; + +GType gdk_mir_drawing_context_get_type (void) G_GNUC_CONST; + +G_DEFINE_TYPE (GdkMirDrawingContext, gdk_mir_drawing_context, GDK_TYPE_DRAWING_CONTEXT) + +static void +gdk_mir_drawing_context_class_init (GdkMirDrawingContextClass *klass) +{ +} + +static void +gdk_mir_drawing_context_init (GdkMirDrawingContext *self) +{ +} + +GdkDrawingContext * +gdk_mir_drawing_context_new (GdkWindow *window, + const cairo_region_t *region) +{ + return g_object_new (GDK_TYPE_MIR_DRAWING_CONTEXT, + "window", window, + "clip", region, + NULL); +} + diff --git a/gdk/mir/gdkmirwindowimpl.c b/gdk/mir/gdkmirwindowimpl.c index ec76ac554c..96f65a4feb 100644 --- a/gdk/mir/gdkmirwindowimpl.c +++ b/gdk/mir/gdkmirwindowimpl.c @@ -1832,5 +1832,6 @@ gdk_mir_window_impl_class_init (GdkMirWindowImplClass *klass) impl_class->set_opaque_region = gdk_mir_window_impl_set_opaque_region; impl_class->set_shadow_width = gdk_mir_window_impl_set_shadow_width; impl_class->create_gl_context = gdk_mir_window_impl_create_gl_context; + impl_class->create_draw_context = gdk_mir_drawing_context_new; impl_class->invalidate_for_new_frame = gdk_mir_window_impl_invalidate_for_new_frame; } diff --git a/gdk/quartz/Makefile.am b/gdk/quartz/Makefile.am index eda5263f72..ba5e8d20fd 100644 --- a/gdk/quartz/Makefile.am +++ b/gdk/quartz/Makefile.am @@ -30,6 +30,8 @@ libgdk_quartz_la_SOURCES = \ gdkdevicemanager-core-quartz.h \ gdkdisplay-quartz.c \ gdkdisplaymanager-quartz.c \ + gdkdrawingcontext-quartz.c \ + gdkdrawingcontext-quartz.h \ gdkdnd-quartz.c \ gdkdnd-quartz.h \ gdkevents-quartz.c \ diff --git a/gdk/quartz/gdkdrawingcontext-quartz.c b/gdk/quartz/gdkdrawingcontext-quartz.c new file mode 100644 index 0000000000..1e30ed7e23 --- /dev/null +++ b/gdk/quartz/gdkdrawingcontext-quartz.c @@ -0,0 +1,33 @@ +/* GDK - The GIMP Drawing Kit + * Copyright 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/>. + */ + +#include "config.h" + +#include "gdkdrawingcontext-quartz.h" + +G_DEFINE_TYPE (GdkQuartzDrawingContext, gdk_quartz_drawing_context, GDK_TYPE_DRAWING_CONTEXT) + +static void +gdk_quartz_drawing_context_class_init (GdkQuartzDrawingContextClass *klass) +{ +} + +static void +gdk_quartz_drawing_context_init (GdkQuartzDrawingContext *self) +{ +} + diff --git a/gdk/quartz/gdkdrawingcontext-quartz.h b/gdk/quartz/gdkdrawingcontext-quartz.h new file mode 100644 index 0000000000..55c9d69cb9 --- /dev/null +++ b/gdk/quartz/gdkdrawingcontext-quartz.h @@ -0,0 +1,48 @@ +/* GDK - The GIMP Drawing Kit + * + * 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 __GDK_QUARTZ_DRAWING_CONTEXT_H__ +#define __GDK_QUARTZ_DRAWING_CONTEXT_H__ + +#include "gdk/gdkdrawingcontextprivate.h" + +G_BEGIN_DECLS + +#define GDK_TYPE_QUARTZ_DRAWING_CONTEXT (gdk_quartz_drawing_context_get_type ()) +#define GDK_QUARTZ_DRAWING_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDK_TYPE_QUARTZ_DRAWING_CONTEXT, GdkQuartzDrawingContext)) +#define GDK_IS_QUARTZ_DRAWING_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDK_TYPE_QUARTZ_DRAWING_CONTEXT)) +#define GDK_QUARTZ_DRAWING_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_QUARTZ_DRAWING_CONTEXT, GdkQuartzDrawingContextClass)) +#define GDK_IS_QUARTZ_DRAWING_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_QUARTZ_DRAWING_CONTEXT)) +#define GDK_QUARTZ_DRAWING_CONTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_QUARTZ_DRAWING_CONTEXT, GdkQuartzDrawingContextClass)) + +typedef struct _GdkQuartzDrawingContext GdkQuartzDrawingContext; +typedef struct _GdkQuartzDrawingContextClass GdkQuartzDrawingContextClass; + +struct _GdkQuartzDrawingContext +{ + GdkDrawingContext parent_instance; +}; + +struct _GdkQuartzDrawingContextClass +{ + GdkDrawingContextClass parent_instance; +}; + +GType gdk_quartz_drawing_context_get_type (void) G_GNUC_CONST; + +G_END_DECLS + +#endif /* __GDK_QUARTZ_DRAWING_CONTEXT_H__ */ diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c index 9349537135..1c548cc787 100644 --- a/gdk/quartz/gdkwindow-quartz.c +++ b/gdk/quartz/gdkwindow-quartz.c @@ -25,6 +25,7 @@ #include "gdkwindowimpl.h" #include "gdkprivate-quartz.h" +#include "gdkdrawingcontext-quartz.h" #include "gdkglcontext-quartz.h" #include "gdkquartzscreen.h" #include "gdkquartzcursor.h" @@ -2825,6 +2826,16 @@ gdk_quartz_window_get_scale_factor (GdkWindow *window) return 1; } +static GdkDrawingContext * +gdk_quartz_window_create_draw_context (GdkWindow *window, + const cairo_region_t *region) +{ + return g_object_new (GDK_TYPE_QUARTZ_DRAWING_CONTEXT, + "window", window, + "clip", region, + NULL); +} + static void gdk_window_impl_quartz_class_init (GdkWindowImplQuartzClass *klass) { @@ -2909,6 +2920,7 @@ gdk_window_impl_quartz_class_init (GdkWindowImplQuartzClass *klass) impl_class->delete_property = _gdk_quartz_window_delete_property; impl_class->create_gl_context = gdk_quartz_window_create_gl_context; + impl_class->create_draw_context = gdk_quartz_window_create_draw_context; impl_quartz_class->get_context = gdk_window_impl_quartz_get_context; impl_quartz_class->release_context = gdk_window_impl_quartz_release_context; diff --git a/gdk/wayland/Makefile.am b/gdk/wayland/Makefile.am index 127e091b00..c40e24fc51 100644 --- a/gdk/wayland/Makefile.am +++ b/gdk/wayland/Makefile.am @@ -46,6 +46,8 @@ libgdk_wayland_la_SOURCES = \ gdkdevice-wayland.c \ gdkdisplay-wayland.c \ gdkdisplay-wayland.h \ + gdkdrawingcontext-wayland.c \ + gdkdrawingcontext-wayland.h \ gdkdnd-wayland.c \ gdkeventsource.c \ gdkkeys-wayland.c \ diff --git a/gdk/wayland/gdkdrawingcontext-wayland.c b/gdk/wayland/gdkdrawingcontext-wayland.c new file mode 100644 index 0000000000..927e569f98 --- /dev/null +++ b/gdk/wayland/gdkdrawingcontext-wayland.c @@ -0,0 +1,33 @@ +/* GDK - The GIMP Drawing Kit + * Copyright 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/>. + */ + +#include "config.h" + +#include "gdkdrawingcontext-wayland.h" + +G_DEFINE_TYPE (GdkWaylandDrawingContext, gdk_wayland_drawing_context, GDK_TYPE_DRAWING_CONTEXT) + +static void +gdk_wayland_drawing_context_class_init (GdkWaylandDrawingContextClass *klass) +{ +} + +static void +gdk_wayland_drawing_context_init (GdkWaylandDrawingContext *self) +{ +} + diff --git a/gdk/wayland/gdkdrawingcontext-wayland.h b/gdk/wayland/gdkdrawingcontext-wayland.h new file mode 100644 index 0000000000..2577f74e14 --- /dev/null +++ b/gdk/wayland/gdkdrawingcontext-wayland.h @@ -0,0 +1,48 @@ +/* GDK - The GIMP Drawing Kit + * + * 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 __GDK_WAYLAND_DRAWING_CONTEXT_H__ +#define __GDK_WAYLAND_DRAWING_CONTEXT_H__ + +#include "gdk/gdkdrawingcontextprivate.h" + +G_BEGIN_DECLS + +#define GDK_TYPE_WAYLAND_DRAWING_CONTEXT (gdk_wayland_drawing_context_get_type ()) +#define GDK_WAYLAND_DRAWING_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDK_TYPE_WAYLAND_DRAWING_CONTEXT, GdkWaylandDrawingContext)) +#define GDK_IS_WAYLAND_DRAWING_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDK_TYPE_WAYLAND_DRAWING_CONTEXT)) +#define GDK_WAYLAND_DRAWING_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_WAYLAND_DRAWING_CONTEXT, GdkWaylandDrawingContextClass)) +#define GDK_IS_WAYLAND_DRAWING_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_WAYLAND_DRAWING_CONTEXT)) +#define GDK_WAYLAND_DRAWING_CONTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_WAYLAND_DRAWING_CONTEXT, GdkWaylandDrawingContextClass)) + +typedef struct _GdkWaylandDrawingContext GdkWaylandDrawingContext; +typedef struct _GdkWaylandDrawingContextClass GdkWaylandDrawingContextClass; + +struct _GdkWaylandDrawingContext +{ + GdkDrawingContext parent_instance; +}; + +struct _GdkWaylandDrawingContextClass +{ + GdkDrawingContextClass parent_instance; +}; + +GType gdk_wayland_drawing_context_get_type (void) G_GNUC_CONST; + +G_END_DECLS + +#endif /* __GDK_WAYLAND_DRAWING_CONTEXT_H__ */ diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c index 010add3949..12ce613222 100644 --- a/gdk/wayland/gdkwindow-wayland.c +++ b/gdk/wayland/gdkwindow-wayland.c @@ -26,6 +26,7 @@ #include "gdkwindow.h" #include "gdkwindowimpl.h" #include "gdkdisplay-wayland.h" +#include "gdkdrawingcontext-wayland.h" #include "gdkglcontext-wayland.h" #include "gdkframeclockprivate.h" #include "gdkprivate-wayland.h" @@ -3563,6 +3564,16 @@ gdk_wayland_window_show_window_menu (GdkWindow *window, return TRUE; } +static GdkDrawingContext * +gdk_wayland_window_create_draw_context (GdkWindow *window, + const cairo_region_t *region) +{ + return g_object_new (GDK_TYPE_WAYLAND_DRAWING_CONTEXT, + "window", window, + "clip", region, + NULL); +} + static void _gdk_window_impl_wayland_class_init (GdkWindowImplWaylandClass *klass) { @@ -3650,6 +3661,7 @@ _gdk_window_impl_wayland_class_init (GdkWindowImplWaylandClass *klass) impl_class->set_shadow_width = gdk_wayland_window_set_shadow_width; impl_class->show_window_menu = gdk_wayland_window_show_window_menu; impl_class->create_gl_context = gdk_wayland_window_create_gl_context; + impl_class->create_draw_context = gdk_wayland_window_create_draw_context; impl_class->invalidate_for_new_frame = gdk_wayland_window_invalidate_for_new_frame; signals[COMMITTED] = g_signal_new ("committed", diff --git a/gdk/win32/Makefile.am b/gdk/win32/Makefile.am index ebd4ae6f9f..eb76bbcf5a 100644 --- a/gdk/win32/Makefile.am +++ b/gdk/win32/Makefile.am @@ -40,6 +40,8 @@ libgdk_win32_la_SOURCES = \ gdkdisplay-win32.c \ gdkdisplay-win32.h \ gdkdisplaymanager-win32.c \ + gdkdrawingcontext-win32.c \ + gdkdrawingcontext-win32.h \ gdkdnd-win32.c \ gdkevents-win32.c \ gdkgeometry-win32.c \ diff --git a/gdk/win32/gdkdrawingcontext-win32.c b/gdk/win32/gdkdrawingcontext-win32.c new file mode 100644 index 0000000000..6938422444 --- /dev/null +++ b/gdk/win32/gdkdrawingcontext-win32.c @@ -0,0 +1,33 @@ +/* GDK - The GIMP Drawing Kit + * Copyright 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/>. + */ + +#include "config.h" + +#include "gdkdrawingcontext-win32.h" + +G_DEFINE_TYPE (GdkWin32DrawingContext, gdk_win32_drawing_context, GDK_TYPE_DRAWING_CONTEXT) + +static void +gdk_win32_drawing_context_class_init (GdkWin32DrawingContextClass *klass) +{ +} + +static void +gdk_win32_drawing_context_init (GdkWin32DrawingContext *self) +{ +} + diff --git a/gdk/win32/gdkdrawingcontext-win32.h b/gdk/win32/gdkdrawingcontext-win32.h new file mode 100644 index 0000000000..fe6fa45c32 --- /dev/null +++ b/gdk/win32/gdkdrawingcontext-win32.h @@ -0,0 +1,48 @@ +/* GDK - The GIMP Drawing Kit + * + * 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 __GDK_WIN32_DRAWING_CONTEXT_H__ +#define __GDK_WIN32_DRAWING_CONTEXT_H__ + +#include "gdk/gdkdrawingcontextprivate.h" + +G_BEGIN_DECLS + +#define GDK_TYPE_WIN32_DRAWING_CONTEXT (gdk_win32_drawing_context_get_type ()) +#define GDK_WIN32_DRAWING_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDK_TYPE_WIN32_DRAWING_CONTEXT, GdkWin32DrawingContext)) +#define GDK_IS_WIN32_DRAWING_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDK_TYPE_WIN32_DRAWING_CONTEXT)) +#define GDK_WIN32_DRAWING_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_WIN32_DRAWING_CONTEXT, GdkWin32DrawingContextClass)) +#define GDK_IS_WIN32_DRAWING_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_WIN32_DRAWING_CONTEXT)) +#define GDK_WIN32_DRAWING_CONTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_WIN32_DRAWING_CONTEXT, GdkWin32DrawingContextClass)) + +typedef struct _GdkWin32DrawingContext GdkWin32DrawingContext; +typedef struct _GdkWin32DrawingContextClass GdkWin32DrawingContextClass; + +struct _GdkWin32DrawingContext +{ + GdkDrawingContext parent_instance; +}; + +struct _GdkWin32DrawingContextClass +{ + GdkDrawingContextClass parent_instance; +}; + +GType gdk_win32_drawing_context_get_type (void) G_GNUC_CONST; + +G_END_DECLS + +#endif /* __GDK_WIN32_DRAWING_CONTEXT_H__ */ diff --git a/gdk/win32/gdkwindow-win32.c b/gdk/win32/gdkwindow-win32.c index cddd9ef1b5..84e0d7ddb9 100644 --- a/gdk/win32/gdkwindow-win32.c +++ b/gdk/win32/gdkwindow-win32.c @@ -41,6 +41,7 @@ #include "gdkwin32window.h" #include "gdkglcontext-win32.h" #include "gdkdisplay-win32.h" +#include "gdkdrawingcontext-win32.h" #include <cairo-win32.h> #include <dwmapi.h> @@ -6025,6 +6026,16 @@ _gdk_win32_window_get_unscaled_size (GdkWindow *window, *unscaled_height = impl->unscaled_height; } +static GdkDrawingContext * +gdk_win32_window_create_draw_context (GdkWindow *window, + const cairo_region_t *region) +{ + return g_object_new (GDK_TYPE_WIN32_DRAWING_CONTEXT, + "window", window, + "clip", region, + NULL); +} + static void gdk_window_impl_win32_class_init (GdkWindowImplWin32Class *klass) { @@ -6114,6 +6125,7 @@ gdk_window_impl_win32_class_init (GdkWindowImplWin32Class *klass) impl_class->change_property = _gdk_win32_window_change_property; impl_class->delete_property = _gdk_win32_window_delete_property; impl_class->create_gl_context = _gdk_win32_window_create_gl_context; + impl_class->create_draw_context = _gdk_win32_window_create_draw_context; impl_class->invalidate_for_new_frame = _gdk_win32_window_invalidate_for_new_frame; impl_class->get_scale_factor = _gdk_win32_window_get_scale_factor; impl_class->get_unscaled_size = _gdk_win32_window_get_unscaled_size; diff --git a/gdk/x11/Makefile.am b/gdk/x11/Makefile.am index c23352091a..cd4d0e0a83 100644 --- a/gdk/x11/Makefile.am +++ b/gdk/x11/Makefile.am @@ -35,6 +35,8 @@ libgdk_x11_la_SOURCES = \ gdkdisplay-x11.c \ gdkdisplay-x11.h \ gdkdnd-x11.c \ + gdkdrawingcontext-x11.c \ + gdkdrawingcontext-x11.h \ gdkeventsource.c \ gdkeventsource.h \ gdkeventtranslator.c \ diff --git a/gdk/x11/gdkdrawingcontext-x11.c b/gdk/x11/gdkdrawingcontext-x11.c new file mode 100644 index 0000000000..6941124473 --- /dev/null +++ b/gdk/x11/gdkdrawingcontext-x11.c @@ -0,0 +1,33 @@ +/* GDK - The GIMP Drawing Kit + * Copyright 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/>. + */ + +#include "config.h" + +#include "gdkdrawingcontext-x11.h" + +G_DEFINE_TYPE (GdkX11DrawingContext, gdk_x11_drawing_context, GDK_TYPE_DRAWING_CONTEXT) + +static void +gdk_x11_drawing_context_class_init (GdkX11DrawingContextClass *klass) +{ +} + +static void +gdk_x11_drawing_context_init (GdkX11DrawingContext *self) +{ +} + diff --git a/gdk/x11/gdkdrawingcontext-x11.h b/gdk/x11/gdkdrawingcontext-x11.h new file mode 100644 index 0000000000..e2858fc2a3 --- /dev/null +++ b/gdk/x11/gdkdrawingcontext-x11.h @@ -0,0 +1,48 @@ +/* GDK - The GIMP Drawing Kit + * + * 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 __GDK_X11_DRAWING_CONTEXT_H__ +#define __GDK_X11_DRAWING_CONTEXT_H__ + +#include "gdk/gdkdrawingcontextprivate.h" + +G_BEGIN_DECLS + +#define GDK_TYPE_X11_DRAWING_CONTEXT (gdk_x11_drawing_context_get_type ()) +#define GDK_X11_DRAWING_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDK_TYPE_X11_DRAWING_CONTEXT, GdkX11DrawingContext)) +#define GDK_IS_X11_DRAWING_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDK_TYPE_X11_DRAWING_CONTEXT)) +#define GDK_X11_DRAWING_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_X11_DRAWING_CONTEXT, GdkX11DrawingContextClass)) +#define GDK_IS_X11_DRAWING_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_X11_DRAWING_CONTEXT)) +#define GDK_X11_DRAWING_CONTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_X11_DRAWING_CONTEXT, GdkX11DrawingContextClass)) + +typedef struct _GdkX11DrawingContext GdkX11DrawingContext; +typedef struct _GdkX11DrawingContextClass GdkX11DrawingContextClass; + +struct _GdkX11DrawingContext +{ + GdkDrawingContext parent_instance; +}; + +struct _GdkX11DrawingContextClass +{ + GdkDrawingContextClass parent_instance; +}; + +GType gdk_x11_drawing_context_get_type (void) G_GNUC_CONST; + +G_END_DECLS + +#endif /* __GDK_X11_DRAWING_CONTEXT_H__ */ diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c index b13e246420..998d302f22 100644 --- a/gdk/x11/gdkwindow-x11.c +++ b/gdk/x11/gdkwindow-x11.c @@ -36,6 +36,7 @@ #include "gdkasync.h" #include "gdkeventsource.h" #include "gdkdisplay-x11.h" +#include "gdkdrawingcontext-x11.h" #include "gdkglcontext-x11.h" #include "gdkprivate-x11.h" #include "gdk-private.h" @@ -210,6 +211,16 @@ gdk_x11_window_get_unscaled_size (GdkWindow *window, *unscaled_height = impl->unscaled_height; } +static GdkDrawingContext * +gdk_x11_window_create_draw_context (GdkWindow *window, + const cairo_region_t *region) +{ + return g_object_new (GDK_TYPE_X11_DRAWING_CONTEXT, + "window", window, + "clip", region, + NULL); +} + static void set_sync_counter(Display *display, XSyncCounter counter, @@ -5409,5 +5420,6 @@ gdk_window_impl_x11_class_init (GdkWindowImplX11Class *klass) impl_class->show_window_menu = gdk_x11_window_show_window_menu; impl_class->create_gl_context = gdk_x11_window_create_gl_context; impl_class->invalidate_for_new_frame = gdk_x11_window_invalidate_for_new_frame; + impl_class->create_draw_context = gdk_x11_window_create_draw_context; impl_class->get_unscaled_size = gdk_x11_window_get_unscaled_size; } |