[gjs] Send in prototype to JS_NewObject



commit bc8f143e4a3a5407c65ebbf500d0c54598bb6104
Author: Johan Dahlin <johan gnome org>
Date:   Tue Mar 30 20:01:45 2010 -0300

    Send in prototype to JS_NewObject
    
    Send in a reference to the prototype to JS_NewObject, this
    makes sure that the created object contains all properties from
    the prototypes. This makes it possible to call Cairo.Context methods
    on wrappers created from API created through introspection.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=614413

 modules/cairo-context.cpp         |    7 +++++--
 modules/cairo-image-surface.cpp   |    6 ++++--
 modules/cairo-linear-gradient.cpp |    3 ++-
 modules/cairo-path.cpp            |    3 ++-
 modules/cairo-pdf-surface.cpp     |    3 ++-
 modules/cairo-ps-surface.cpp      |    3 ++-
 modules/cairo-radial-gradient.cpp |    3 ++-
 modules/cairo-region.cpp          |    3 ++-
 modules/cairo-solid-pattern.cpp   |    3 ++-
 modules/cairo-surface-pattern.cpp |    3 ++-
 modules/cairo-surface.cpp         |    3 ++-
 modules/cairo-svg-surface.cpp     |    3 ++-
 12 files changed, 29 insertions(+), 14 deletions(-)
---
diff --git a/modules/cairo-context.cpp b/modules/cairo-context.cpp
index 5f1164b..cb01bf7 100644
--- a/modules/cairo-context.cpp
+++ b/modules/cairo-context.cpp
@@ -923,7 +923,8 @@ gjs_cairo_context_from_context(JSContext *context,
                                cairo_t *cr)
 {
     JS::RootedObject object(context,
-        JS_NewObject(context, &gjs_cairo_context_class));
+        JS_NewObjectWithGivenProto(context, &gjs_cairo_context_class,
+                                   gjs_cairo_context_prototype));
     if (!object)
         return NULL;
 
@@ -974,8 +975,10 @@ context_from_g_argument(JSContext             *context,
     JSObject *obj;
 
     obj = gjs_cairo_context_from_context(context, (cairo_t*)arg->v_pointer);
-    if (!obj)
+    if (!obj) {
+        gjs_throw(context, "Could not create Cairo context");
         return false;
+    }
 
     value_p.setObject(*obj);
     return true;
diff --git a/modules/cairo-image-surface.cpp b/modules/cairo-image-surface.cpp
index 408bc10..f2253ae 100644
--- a/modules/cairo-image-surface.cpp
+++ b/modules/cairo-image-surface.cpp
@@ -88,7 +88,8 @@ createFromPNG_func(JSContext *context,
         return false;
 
     JS::RootedObject surface_wrapper(context,
-        JS_NewObject(context, &gjs_cairo_image_surface_class));
+        JS_NewObjectWithGivenProto(context, &gjs_cairo_image_surface_class,
+                                   gjs_cairo_image_surface_prototype));
     if (!surface_wrapper) {
         gjs_throw(context, "failed to create surface");
         return false;
@@ -215,7 +216,8 @@ gjs_cairo_image_surface_from_surface(JSContext       *context,
     g_return_val_if_fail(cairo_surface_get_type(surface) == CAIRO_SURFACE_TYPE_IMAGE, NULL);
 
     JS::RootedObject object(context,
-        JS_NewObject(context, &gjs_cairo_image_surface_class));
+        JS_NewObjectWithGivenProto(context, &gjs_cairo_image_surface_class,
+                                   gjs_cairo_image_surface_prototype));
     if (!object) {
         gjs_throw(context, "failed to create image surface");
         return NULL;
diff --git a/modules/cairo-linear-gradient.cpp b/modules/cairo-linear-gradient.cpp
index 89fb087..27d5854 100644
--- a/modules/cairo-linear-gradient.cpp
+++ b/modules/cairo-linear-gradient.cpp
@@ -82,7 +82,8 @@ gjs_cairo_linear_gradient_from_pattern(JSContext       *context,
     g_return_val_if_fail(cairo_pattern_get_type(pattern) == CAIRO_PATTERN_TYPE_LINEAR, NULL);
 
     JS::RootedObject object(context,
-        JS_NewObject(context, &gjs_cairo_linear_gradient_class));
+        JS_NewObjectWithGivenProto(context, &gjs_cairo_linear_gradient_class,
+                                   gjs_cairo_linear_gradient_prototype));
     if (!object) {
         gjs_throw(context, "failed to create linear gradient pattern");
         return NULL;
diff --git a/modules/cairo-path.cpp b/modules/cairo-path.cpp
index 5ffa05a..c08a14a 100644
--- a/modules/cairo-path.cpp
+++ b/modules/cairo-path.cpp
@@ -75,7 +75,8 @@ gjs_cairo_path_from_path(JSContext    *context,
     g_return_val_if_fail(path != NULL, NULL);
 
     JS::RootedObject object(context,
-        JS_NewObject(context, &gjs_cairo_path_class));
+        JS_NewObjectWithGivenProto(context, &gjs_cairo_path_class,
+                                   gjs_cairo_path_prototype));
     if (!object) {
         gjs_throw(context, "failed to create path");
         return NULL;
diff --git a/modules/cairo-pdf-surface.cpp b/modules/cairo-pdf-surface.cpp
index 5ae5ff1..d8d399e 100644
--- a/modules/cairo-pdf-surface.cpp
+++ b/modules/cairo-pdf-surface.cpp
@@ -88,7 +88,8 @@ gjs_cairo_pdf_surface_from_surface(JSContext       *context,
     g_return_val_if_fail(cairo_surface_get_type(surface) == CAIRO_SURFACE_TYPE_PDF, NULL);
 
     JS::RootedObject object(context,
-        JS_NewObject(context, &gjs_cairo_pdf_surface_class));
+        JS_NewObjectWithGivenProto(context, &gjs_cairo_pdf_surface_class,
+                                   gjs_cairo_pdf_surface_prototype));
     if (!object) {
         gjs_throw(context, "failed to create pdf surface");
         return NULL;
diff --git a/modules/cairo-ps-surface.cpp b/modules/cairo-ps-surface.cpp
index 0110708..d9aa54d 100644
--- a/modules/cairo-ps-surface.cpp
+++ b/modules/cairo-ps-surface.cpp
@@ -97,7 +97,8 @@ gjs_cairo_ps_surface_from_surface(JSContext       *context,
     g_return_val_if_fail(cairo_surface_get_type(surface) == CAIRO_SURFACE_TYPE_PS, NULL);
 
     JS::RootedObject object(context,
-        JS_NewObject(context, &gjs_cairo_ps_surface_class));
+        JS_NewObjectWithGivenProto(context, &gjs_cairo_ps_surface_class,
+                                   gjs_cairo_ps_surface_prototype));
     if (!object) {
         gjs_throw(context, "failed to create ps surface");
         return NULL;
diff --git a/modules/cairo-radial-gradient.cpp b/modules/cairo-radial-gradient.cpp
index 308e69d..8dc87cd 100644
--- a/modules/cairo-radial-gradient.cpp
+++ b/modules/cairo-radial-gradient.cpp
@@ -84,7 +84,8 @@ gjs_cairo_radial_gradient_from_pattern(JSContext       *context,
     g_return_val_if_fail(cairo_pattern_get_type(pattern) == CAIRO_PATTERN_TYPE_RADIAL, NULL);
 
     JS::RootedObject object(context,
-        JS_NewObject(context, &gjs_cairo_radial_gradient_class));
+        JS_NewObjectWithGivenProto(context, &gjs_cairo_radial_gradient_class,
+                                   gjs_cairo_radial_gradient_prototype));
     if (!object) {
         gjs_throw(context, "failed to create radial gradient pattern");
         return NULL;
diff --git a/modules/cairo-region.cpp b/modules/cairo-region.cpp
index beab0d3..6de92b2 100644
--- a/modules/cairo-region.cpp
+++ b/modules/cairo-region.cpp
@@ -277,7 +277,8 @@ gjs_cairo_region_from_region(JSContext *context,
                              cairo_region_t *region)
 {
     JS::RootedObject object(context,
-        JS_NewObject(context, &gjs_cairo_region_class));
+        JS_NewObjectWithGivenProto(context, &gjs_cairo_region_class,
+                                   gjs_cairo_region_prototype));
     if (!object)
         return NULL;
 
diff --git a/modules/cairo-solid-pattern.cpp b/modules/cairo-solid-pattern.cpp
index d7fd747..f6a3d19 100644
--- a/modules/cairo-solid-pattern.cpp
+++ b/modules/cairo-solid-pattern.cpp
@@ -112,7 +112,8 @@ gjs_cairo_solid_pattern_from_pattern(JSContext       *context,
     g_return_val_if_fail(cairo_pattern_get_type(pattern) == CAIRO_PATTERN_TYPE_SOLID, NULL);
 
     JS::RootedObject object(context,
-        JS_NewObject(context, &gjs_cairo_solid_pattern_class));
+        JS_NewObjectWithGivenProto(context, &gjs_cairo_solid_pattern_class,
+                                   gjs_cairo_solid_pattern_prototype));
     if (!object) {
         gjs_throw(context, "failed to create solid pattern");
         return NULL;
diff --git a/modules/cairo-surface-pattern.cpp b/modules/cairo-surface-pattern.cpp
index c38ac56..a6ddc76 100644
--- a/modules/cairo-surface-pattern.cpp
+++ b/modules/cairo-surface-pattern.cpp
@@ -187,7 +187,8 @@ gjs_cairo_surface_pattern_from_pattern(JSContext       *context,
     g_return_val_if_fail(cairo_pattern_get_type(pattern) == CAIRO_PATTERN_TYPE_SURFACE, NULL);
 
     JS::RootedObject object(context,
-        JS_NewObject(context, &gjs_cairo_surface_pattern_class));
+        JS_NewObjectWithGivenProto(context, &gjs_cairo_surface_pattern_class,
+                                   gjs_cairo_surface_pattern_prototype));
     if (!object) {
         gjs_throw(context, "failed to create surface pattern");
         return NULL;
diff --git a/modules/cairo-surface.cpp b/modules/cairo-surface.cpp
index abfb313..9d2d0f7 100644
--- a/modules/cairo-surface.cpp
+++ b/modules/cairo-surface.cpp
@@ -206,7 +206,8 @@ gjs_cairo_surface_from_surface(JSContext       *context,
         return gjs_cairo_svg_surface_from_surface(context, surface);
 
     JS::RootedObject object(context,
-        JS_NewObject(context, &gjs_cairo_surface_class));
+        JS_NewObjectWithGivenProto(context, &gjs_cairo_surface_class,
+                                   gjs_cairo_surface_prototype));
     if (!object) {
         gjs_throw(context, "failed to create surface");
         return NULL;
diff --git a/modules/cairo-svg-surface.cpp b/modules/cairo-svg-surface.cpp
index b6807a7..5a1af1f 100644
--- a/modules/cairo-svg-surface.cpp
+++ b/modules/cairo-svg-surface.cpp
@@ -88,7 +88,8 @@ gjs_cairo_svg_surface_from_surface(JSContext       *context,
     g_return_val_if_fail(cairo_surface_get_type(surface) == CAIRO_SURFACE_TYPE_SVG, NULL);
 
     JS::RootedObject object(context,
-        JS_NewObject(context, &gjs_cairo_svg_surface_class));
+        JS_NewObjectWithGivenProto(context, &gjs_cairo_svg_surface_class,
+                                   gjs_cairo_svg_surface_prototype));
     if (!object) {
         gjs_throw(context, "failed to create svg surface");
         return NULL;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]