gdk: Make each backend have a custom GdkDrawingContext subclass

This commit is contained in:
Benjamin Otte 2016-11-20 07:16:32 +01:00
parent 1912d992d8
commit cb18752f94
25 changed files with 543 additions and 13 deletions

View File

@ -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 \

View File

@ -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)
{
}

View File

@ -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__ */

View File

@ -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;
}

View File

@ -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;

View File

@ -24,6 +24,7 @@ libgdk_mir_la_SOURCES = \
gdkmircursor.c \
gdkmirdevicemanager.c \
gdkmirdisplay.c \
gdkmirdrawingcontext.c \
gdkmireventsource.c \
gdkmirglcontext.c \
gdkmirkeyboard.c \

View File

@ -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);

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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 \

View File

@ -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)
{
}

View File

@ -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__ */

View File

@ -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;

View File

@ -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 \

View File

@ -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)
{
}

View File

@ -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__ */

View File

@ -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",

View File

@ -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 \

View File

@ -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)
{
}

View File

@ -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__ */

View File

@ -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;

View File

@ -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 \

View File

@ -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)
{
}

View File

@ -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__ */

View File

@ -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;
}