[gjs/simplify-private-pointers: 33/35] cairo: Use cairo_pattern_t as the private pointer for Cairo.Pattern
- From: Philip Chimento <pchimento src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gjs/simplify-private-pointers: 33/35] cairo: Use cairo_pattern_t as the private pointer for Cairo.Pattern
- Date: Thu, 21 May 2020 05:59:56 +0000 (UTC)
commit d3f72107f091e1865bbd89128316b90d04b5f5f9
Author: Philip Chimento <philip chimento gmail com>
Date: Sat May 2 18:56:40 2020 -0700
cairo: Use cairo_pattern_t as the private pointer for Cairo.Pattern
Instead of allocating a separate private struct that allocates a
cairo_pattern_t, use the cairo_pattern_t directly as the private struct.
This makes the code simpler and saves 8 bytes per object.
modules/cairo-linear-gradient.cpp | 4 ++--
modules/cairo-pattern.cpp | 40 ++++++++-------------------------------
modules/cairo-private.h | 4 +---
modules/cairo-radial-gradient.cpp | 4 ++--
modules/cairo-solid-pattern.cpp | 2 +-
modules/cairo-surface-pattern.cpp | 4 ++--
6 files changed, 16 insertions(+), 42 deletions(-)
---
diff --git a/modules/cairo-linear-gradient.cpp b/modules/cairo-linear-gradient.cpp
index 3bb62ade..3b50011b 100644
--- a/modules/cairo-linear-gradient.cpp
+++ b/modules/cairo-linear-gradient.cpp
@@ -63,7 +63,7 @@ GJS_NATIVE_CONSTRUCTOR_DECLARE(cairo_linear_gradient)
if (!gjs_cairo_check_status(context, cairo_pattern_status(pattern), "pattern"))
return false;
- gjs_cairo_pattern_construct(context, object, pattern);
+ gjs_cairo_pattern_construct(object, pattern);
cairo_pattern_destroy(pattern);
GJS_NATIVE_CONSTRUCTOR_FINISH(cairo_linear_gradient);
@@ -108,7 +108,7 @@ gjs_cairo_linear_gradient_from_pattern(JSContext *context,
return nullptr;
}
- gjs_cairo_pattern_construct(context, object, pattern);
+ gjs_cairo_pattern_construct(object, pattern);
return object;
}
diff --git a/modules/cairo-pattern.cpp b/modules/cairo-pattern.cpp
index 84ffe184..8669a338 100644
--- a/modules/cairo-pattern.cpp
+++ b/modules/cairo-pattern.cpp
@@ -38,22 +38,15 @@
#include "gjs/macros.h"
#include "modules/cairo-private.h"
-typedef struct {
- cairo_pattern_t *pattern;
-} GjsCairoPattern;
-
GJS_DEFINE_PROTO_ABSTRACT_WITH_GTYPE("Pattern", cairo_pattern,
CAIRO_GOBJECT_TYPE_PATTERN,
JSCLASS_BACKGROUND_FINALIZE)
-GJS_DEFINE_PRIV_FROM_JS(GjsCairoPattern, gjs_cairo_pattern_class)
static void gjs_cairo_pattern_finalize(JSFreeOp*, JSObject* obj) {
- GjsCairoPattern *priv;
- priv = (GjsCairoPattern*) JS_GetPrivate(obj);
- if (!priv)
- return;
- cairo_pattern_destroy(priv->pattern);
- g_slice_free(GjsCairoPattern, priv);
+ using AutoPattern =
+ GjsAutoPointer<cairo_pattern_t, cairo_pattern_t, cairo_pattern_destroy>;
+ AutoPattern pattern = static_cast<cairo_pattern_t*>(JS_GetPrivate(obj));
+ JS_SetPrivate(obj, nullptr);
}
/* Properties */
@@ -102,7 +95,6 @@ JSFunctionSpec gjs_cairo_pattern_static_funcs[] = { JS_FS_END };
/**
* gjs_cairo_pattern_construct:
- * @context: the context
* @object: object to construct
* @pattern: cairo_pattern to attach to the object
*
@@ -111,23 +103,12 @@ JSFunctionSpec gjs_cairo_pattern_static_funcs[] = { JS_FS_END };
*
* This is mainly used for subclasses where object is already created.
*/
-void
-gjs_cairo_pattern_construct(JSContext *context,
- JS::HandleObject object,
- cairo_pattern_t *pattern)
-{
- GjsCairoPattern *priv;
-
- g_return_if_fail(context);
+void gjs_cairo_pattern_construct(JSObject* object, cairo_pattern_t* pattern) {
g_return_if_fail(object);
g_return_if_fail(pattern);
- priv = g_slice_new0(GjsCairoPattern);
-
- g_assert(!priv_from_js(context, object));
- JS_SetPrivate(object, priv);
-
- priv->pattern = cairo_pattern_reference(pattern);
+ g_assert(!JS_GetPrivate(object));
+ JS_SetPrivate(object, cairo_pattern_reference(pattern));
}
/**
@@ -209,10 +190,5 @@ cairo_pattern_t* gjs_cairo_pattern_get_pattern(
return nullptr;
}
- auto* priv = static_cast<GjsCairoPattern*>(JS_GetPrivate(pattern_wrapper));
- if (!priv)
- return nullptr;
-
- g_assert(priv->pattern);
- return priv->pattern;
+ return static_cast<cairo_pattern_t*>(JS_GetPrivate(pattern_wrapper));
}
diff --git a/modules/cairo-private.h b/modules/cairo-private.h
index 98850e1a..4923cab3 100644
--- a/modules/cairo-private.h
+++ b/modules/cairo-private.h
@@ -147,9 +147,7 @@ bool gjs_cairo_pattern_define_proto(JSContext *cx,
JS::HandleObject module,
JS::MutableHandleObject proto);
-void gjs_cairo_pattern_construct (JSContext *context,
- JS::HandleObject object,
- cairo_pattern_t *pattern);
+void gjs_cairo_pattern_construct(JSObject* object, cairo_pattern_t* pattern);
void gjs_cairo_pattern_finalize_pattern (JSFreeOp *fop,
JSObject *object);
GJS_JSAPI_RETURN_CONVENTION
diff --git a/modules/cairo-radial-gradient.cpp b/modules/cairo-radial-gradient.cpp
index 328302de..3d0e71fc 100644
--- a/modules/cairo-radial-gradient.cpp
+++ b/modules/cairo-radial-gradient.cpp
@@ -65,7 +65,7 @@ GJS_NATIVE_CONSTRUCTOR_DECLARE(cairo_radial_gradient)
if (!gjs_cairo_check_status(context, cairo_pattern_status(pattern), "pattern"))
return false;
- gjs_cairo_pattern_construct(context, object, pattern);
+ gjs_cairo_pattern_construct(object, pattern);
cairo_pattern_destroy(pattern);
GJS_NATIVE_CONSTRUCTOR_FINISH(cairo_radial_gradient);
@@ -110,7 +110,7 @@ gjs_cairo_radial_gradient_from_pattern(JSContext *context,
return nullptr;
}
- gjs_cairo_pattern_construct(context, object, pattern);
+ gjs_cairo_pattern_construct(object, pattern);
return object;
}
diff --git a/modules/cairo-solid-pattern.cpp b/modules/cairo-solid-pattern.cpp
index a9856431..e03e420a 100644
--- a/modules/cairo-solid-pattern.cpp
+++ b/modules/cairo-solid-pattern.cpp
@@ -140,7 +140,7 @@ gjs_cairo_solid_pattern_from_pattern(JSContext *context,
return nullptr;
}
- gjs_cairo_pattern_construct(context, object, pattern);
+ gjs_cairo_pattern_construct(object, pattern);
return object;
}
diff --git a/modules/cairo-surface-pattern.cpp b/modules/cairo-surface-pattern.cpp
index 35a1d119..5c522d7d 100644
--- a/modules/cairo-surface-pattern.cpp
+++ b/modules/cairo-surface-pattern.cpp
@@ -66,7 +66,7 @@ GJS_NATIVE_CONSTRUCTOR_DECLARE(cairo_surface_pattern)
if (!gjs_cairo_check_status(context, cairo_pattern_status(pattern), "pattern"))
return false;
- gjs_cairo_pattern_construct(context, object, pattern);
+ gjs_cairo_pattern_construct(object, pattern);
cairo_pattern_destroy(pattern);
GJS_NATIVE_CONSTRUCTOR_FINISH(cairo_surface_pattern);
@@ -222,7 +222,7 @@ gjs_cairo_surface_pattern_from_pattern(JSContext *context,
return nullptr;
}
- gjs_cairo_pattern_construct(context, object, pattern);
+ gjs_cairo_pattern_construct(object, pattern);
return object;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]