carray-cairo 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 279bfa2faf50a3ad0f9d6cb3a43ad5293c16f667
4
+ data.tar.gz: 2be766d74ae1f946d62a279904d2537c90ea6dc1
5
+ SHA512:
6
+ metadata.gz: 3b6c40efb05d5c9dfadd727da7a19eac70b77aba719af0bab37fd691a10df827c0adab7af799fb4a34217a3499e2a92ad1a217d9cdded51d78c5c4e12e2181b2
7
+ data.tar.gz: c0e0d618cb4a16dc1899cbac2eeb4d37a8b65c63a0b56f6fc61003c975a98e182a37d43b6f46493adc78c3d382d049d8c6e4af8c2c81ca586f126046af4e30c1
@@ -0,0 +1,11 @@
1
+ carray-cairo
2
+ ==============
3
+
4
+ Extension For Converting Cairo::ImageSurface To/From CArray.
5
+
6
+ Author
7
+ ------
8
+
9
+ Hiroki Motoyoshi
10
+
11
+
@@ -0,0 +1,23 @@
1
+
2
+ Gem::Specification::new do |s|
3
+ version = "1.0.0"
4
+
5
+ files = Dir.glob("**/*") - [
6
+ Dir.glob("carray*.gem"),
7
+ ].flatten
8
+
9
+ s.platform = Gem::Platform::RUBY
10
+ s.name = "carray-cairo"
11
+ s.summary = "Extension for converting Cairo::ImageSurface to/from CArray"
12
+ s.description = <<-HERE
13
+ Extension for converting Cairo::ImageSurface to/from CArray
14
+ HERE
15
+ s.version = version
16
+ s.author = "Hiroki Motoyoshi"
17
+ s.email = ""
18
+ s.homepage = 'https://github.com/himotoyoshi/carray-cairo'
19
+ s.files = files
20
+ s.extensions = [ "extconf.rb" ]
21
+ s.has_rdoc = false
22
+ s.required_ruby_version = ">= 1.8.1"
23
+ end
@@ -0,0 +1,70 @@
1
+ /* ---------------------------------------------------------------------------
2
+
3
+ carray/carray_cairo.c
4
+
5
+ This file is part of Ruby/CArray extension library.
6
+ You can redistribute it and/or modify it under the terms of
7
+ the Ruby Licence.
8
+
9
+ Copyright (C) 2005-2008 Hiroki Motoyoshi
10
+
11
+ ---------------------------------------------------------------------------- */
12
+
13
+ #include "ruby.h"
14
+ #include <cairo.h>
15
+
16
+ static VALUE rb_mCairo, rb_cImageSurface;
17
+
18
+ #include "carray.h"
19
+
20
+ static VALUE
21
+ cr_image_surface_ca (VALUE self)
22
+ {
23
+ volatile VALUE obj;
24
+ int32_t dim[3];
25
+ int format, width, height, width0;
26
+ unsigned char *data;
27
+ cairo_surface_t *surface;
28
+
29
+ Data_Get_Struct (self, cairo_surface_t, surface);
30
+
31
+ format = cairo_image_surface_get_format(surface);
32
+ width = cairo_image_surface_get_width(surface);
33
+ height = cairo_image_surface_get_height(surface);
34
+ data = cairo_image_surface_get_data(surface);
35
+
36
+ switch ( format ) {
37
+ case CAIRO_FORMAT_ARGB32:
38
+ case CAIRO_FORMAT_RGB24:
39
+ dim[0] = height;
40
+ dim[1] = width;
41
+ dim[2] = 4;
42
+ obj = rb_carray_wrap_ptr(CA_UINT8, 3, dim, 0, NULL, (char *)data, self);
43
+ if ( ca_endian == CA_LITTLE_ENDIAN ) {
44
+ obj = rb_funcall(obj, rb_intern("[]"), 2,
45
+ Qfalse,
46
+ rb_range_new(INT2FIX(-1),INT2FIX(0),0));
47
+ }
48
+ break;
49
+ case CAIRO_FORMAT_A8:
50
+ width0 = width + (CA_ALIGN_VOIDP - width % CA_ALIGN_VOIDP);
51
+ dim[0] = height;
52
+ dim[1] = width0;
53
+ obj = rb_carray_wrap_ptr(CA_UINT8, 2, dim, 0, NULL, (char *)data, self);
54
+ obj = rb_funcall(obj, rb_intern("[]"), 2,
55
+ Qnil,
56
+ rb_range_new(INT2FIX(0),INT2NUM(width), 1));
57
+ break;
58
+ case CAIRO_FORMAT_A1:
59
+ rb_raise(rb_eRuntimeError, "can't wrap CAIRO_FORMAT_A1 data by CArray");
60
+ }
61
+ return obj;
62
+ }
63
+
64
+ void
65
+ Init_carray_cairo ()
66
+ {
67
+ rb_mCairo = rb_const_get(rb_cObject, rb_intern("Cairo"));
68
+ rb_cImageSurface = rb_const_get(rb_mCairo, rb_intern("ImageSurface"));
69
+ rb_define_method(rb_cImageSurface, "ca", cr_image_surface_ca, 0);
70
+ }
@@ -0,0 +1,45 @@
1
+ require "mkmf"
2
+ require "carray/mkmf"
3
+
4
+ ENV["PKG_CONFIG_PATH"] = (ENV["PKG_CONFIG_PATH"]||"") + ":/opt/X11/lib/pkgconfig"
5
+
6
+ if /cygwin|mingw/ =~ RUBY_PLATFORM
7
+ open("Makefile", "w") { |io|
8
+ io << "all:" << "\n"
9
+ io << "install:" << "\n"
10
+ io << "clean:" << "\n"
11
+ io << "distclean:" << "\n"
12
+ io << "\trm -rf mkmf.log Makefile" << "\n"
13
+ }
14
+ exit(0)
15
+ end
16
+
17
+ begin
18
+ have_image_cairo = true
19
+ $CPPFLAGS << " " << `pkg-config --cflags cairo`.chomp
20
+ $LDFLAGS << " " << `pkg-config --libs cairo`.chomp
21
+ `pkg-config --libs cairo`.chomp.split(/\s+/).uniq.each do |opt|
22
+ case opt
23
+ when /\-l(.*)/
24
+ unless have_library($1)
25
+ have_image_cairo = false
26
+ break
27
+ end
28
+ end
29
+ end
30
+ rescue
31
+ end
32
+
33
+ if have_carray()
34
+ if have_header("cairo.h") and have_image_cairo
35
+ create_makefile("carray/carray_cairo")
36
+ else
37
+ open("Makefile", "w") { |io|
38
+ io << "all:" << "\n"
39
+ io << "install:" << "\n"
40
+ io << "clean:" << "\n"
41
+ io << "distclean:" << "\n"
42
+ io << "\trm -rf mkmf.log Makefile" << "\n"
43
+ }
44
+ end
45
+ end
@@ -0,0 +1,9 @@
1
+
2
+ module Cairo
3
+ class Surface
4
+ end
5
+ class ImageSurface < Surface
6
+ autoload_method "self.new_from_ca", "carray/graphics/cairo"
7
+ autoload_method "ca", "carray/graphics/cairo"
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ require "carray"
2
+ require "carray/carray_cairo"
3
+ require "carray/graphics/cairo"
@@ -0,0 +1,49 @@
1
+ # ----------------------------------------------------------------------------
2
+ #
3
+ # carray/graphics/cairo.rb
4
+ #
5
+ # This file is part of Ruby/CArray extension library.
6
+ # You can redistribute it and/or modify it under the terms of
7
+ # the Ruby Licence.
8
+ #
9
+ # Copyright (C) 2005-2008 Hiroki Motoyoshi
10
+ #
11
+ # ----------------------------------------------------------------------------
12
+
13
+ require "cairo"
14
+ require "carray/carray_cairo"
15
+
16
+ class Cairo::ImageSurface
17
+
18
+ def self.new_from_ca (ca)
19
+
20
+ if ca.data_type != CA_UINT8
21
+ raise "invalid data_type for Cairo::ImageSurface"
22
+ end
23
+
24
+ case true
25
+ when ( ca.rank == 2 ),
26
+ ( ( ca.rank == 3 ) and ( ca.dim2 == 1 ) )
27
+ image_type = Cairo::FORMAT_A8
28
+ img = Cairo::ImageSurface.new(image_type, ca.dim1, ca.dim0)
29
+ img.ca[] = ca
30
+ when ( ca.data_type == CA_UINT8 and ca.rank == 3 and ca.dim2 == 3 )
31
+ image_type = Cairo::FORMAT_RGB24
32
+ img = Cairo::ImageSurface.new(image_type, ca.dim1, ca.dim0)
33
+ img.ca[] = ca
34
+ when ( ca.data_type == CA_UINT8 and ca.rank == 3 and ca.dim2 == 4 )
35
+ image_type = Cairo::FORMAT_ARGB32
36
+ img = Cairo::ImageSurface.new(image_type, ca.dim1, ca.dim0)
37
+ img.ca[] = ca
38
+ else
39
+ raise "invalid shape of carray to create Cairo::ImageSurface"
40
+ end
41
+
42
+ return img
43
+ end
44
+
45
+ def to_ca
46
+ return ca.to_ca
47
+ end
48
+
49
+ end
@@ -0,0 +1,16 @@
1
+ require "cairo"
2
+ require "carray"
3
+ require "G"
4
+
5
+ img = Cairo::ImageSurface.new(:rgb24, 100, 100)
6
+ #p Cairo::ImageSurface.new(:a8, 50, 100).ca
7
+ data = img.ca
8
+ data[nil,nil,1].random!(255)
9
+ p img
10
+ p img.ca
11
+ p img.format
12
+ G.open(100,100)
13
+ G { render(img) }
14
+ G.update
15
+ G.listen()
16
+
@@ -0,0 +1,17 @@
1
+ require "carray"
2
+ require "G"
3
+
4
+ ca = CArray.uint8(100, 100, 4) { 255 }
5
+
6
+ img = Cairo::ImageSurface.new_from_ca(ca)
7
+ p Cairo::FORMAT_ARGB32
8
+ p img
9
+ img.ca[false, 3] = 255
10
+ img.ca[false, 0] = 255
11
+ p img.ca
12
+ p img.format
13
+
14
+ G.open(100,100)
15
+ G { render(img, 0.5) }
16
+ G.update
17
+ G.listen()
metadata ADDED
@@ -0,0 +1,54 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: carray-cairo
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Hiroki Motoyoshi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-05-06 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: |2
14
+ Extension for converting Cairo::ImageSurface to/from CArray
15
+ email: ''
16
+ executables: []
17
+ extensions:
18
+ - extconf.rb
19
+ extra_rdoc_files: []
20
+ files:
21
+ - README.md
22
+ - carray-cairo.gemspec
23
+ - carray_cairo.c
24
+ - extconf.rb
25
+ - lib/autoload/autoload_graphics_cairo.rb
26
+ - lib/carray-cairo.rb
27
+ - lib/graphics/cairo.rb
28
+ - test/test.rb
29
+ - test/test2.rb
30
+ homepage: https://github.com/himotoyoshi/carray-cairo
31
+ licenses: []
32
+ metadata: {}
33
+ post_install_message:
34
+ rdoc_options: []
35
+ require_paths:
36
+ - lib
37
+ required_ruby_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: 1.8.1
42
+ required_rubygems_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ requirements: []
48
+ rubyforge_project:
49
+ rubygems_version: 2.6.4
50
+ signing_key:
51
+ specification_version: 4
52
+ summary: Extension for converting Cairo::ImageSurface to/from CArray
53
+ test_files: []
54
+ has_rdoc: false