summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--ext/ruby2d/ruby2d-opal.rb9
-rw-r--r--ext/ruby2d/ruby2d.c2
2 files changed, 10 insertions, 1 deletions
diff --git a/ext/ruby2d/ruby2d-opal.rb b/ext/ruby2d/ruby2d-opal.rb
index d4bea68..666a354 100644
--- a/ext/ruby2d/ruby2d-opal.rb
+++ b/ext/ruby2d/ruby2d-opal.rb
@@ -176,7 +176,14 @@ function render() {
module Ruby2D
class Image
def init(path)
- `#{self}.data = S2D.CreateImage(path);`
+ `#{self}.data = S2D.CreateImage(path, function() {
+ if (#{@width} == Opal.nil) {
+ #{@width} = #{self}.data.width;
+ }
+ if (#{@height} == Opal.nil) {
+ #{@height} = #{self}.data.height;
+ }
+ });`
end
end
diff --git a/ext/ruby2d/ruby2d.c b/ext/ruby2d/ruby2d.c
index d91e0dc..ae39fbb 100644
--- a/ext/ruby2d/ruby2d.c
+++ b/ext/ruby2d/ruby2d.c
@@ -173,6 +173,8 @@ static R_VAL ruby2d_image_init(R_VAL self, R_VAL path) {
sprintf(S2D_msg, "Init image: %s", RSTRING_PTR(path));
S2D_Log(S2D_msg, S2D_INFO);
S2D_Image *img = S2D_CreateImage(RSTRING_PTR(path));
+ r_iv_set(self, "@width", INT2NUM(img->width));
+ r_iv_set(self, "@height", INT2NUM(img->height));
r_iv_set(self, "@data", r_data_wrap_struct(image, img));
return R_NIL;
}