xftdim 0.0.1

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.
Files changed (3) hide show
  1. data/ext/extconf.rb +3 -0
  2. data/ext/xftdim.c +53 -0
  3. metadata +65 -0
@@ -0,0 +1,3 @@
1
+ require 'mkmf'
2
+ pkg_config('xft')
3
+ create_makefile('xftdim')
@@ -0,0 +1,53 @@
1
+ #include <ruby/ruby.h>
2
+ #include <X11/Xlib.h>
3
+ #include <X11/Xft/Xft.h>
4
+
5
+ XftFont *load_font(char *, Display *);
6
+ void textdim(char *, int, char *, int *);
7
+ VALUE rb_cString_xftdim(VALUE, VALUE);
8
+
9
+ void Init_xftdim() {
10
+ rb_define_method(rb_cString, "xftdim", rb_cString_xftdim, 1);
11
+ }
12
+
13
+ VALUE
14
+ rb_cString_xftdim(VALUE self, VALUE font) {
15
+ int d[2];
16
+ VALUE dims = rb_ary_new();
17
+ if (rb_type(font) != T_STRING) {
18
+ rb_raise(rb_eArgError, "Argument must be a string");
19
+ }
20
+
21
+ rb_funcall(self, rb_intern("encode!"), 1, rb_str_new2("UTF-8"));
22
+ rb_funcall(font, rb_intern("encode!"), 1, rb_str_new2("UTF-8"));
23
+ textdim(RSTRING_PTR(self), rb_funcall(self, rb_intern("length"), 0), RSTRING_PTR(font), d);
24
+ rb_ary_push(dims, INT2FIX(d[0]));
25
+ rb_ary_push(dims, INT2FIX(d[1]));
26
+
27
+ return dims;
28
+ }
29
+
30
+ void
31
+ textdim(char * string, int len, char * font_name, int * dims) {
32
+ XftFont *font;
33
+ Display *dpy;
34
+ XGlyphInfo extents;
35
+
36
+ if (!(dpy = XOpenDisplay(NULL)))
37
+ rb_raise(rb_eException, "Can't connect to X server %s\n", XDisplayName(NULL));
38
+
39
+ font = load_font(font_name, dpy);
40
+ XftTextExtentsUtf8(dpy, font, (const FcChar8 *) string, len, &extents);
41
+ dims[0] = extents.width - extents.x;
42
+ dims[1] = font->height;
43
+ XCloseDisplay(dpy);
44
+ }
45
+
46
+ XftFont *
47
+ load_font(char * font_name, Display *dpy) {
48
+ XftFont *font = NULL;
49
+
50
+ if (!(font = XftFontOpenName(dpy, DefaultScreen(dpy), font_name)))
51
+ rb_raise(rb_eException, "Can't locate '%s`\n", font_name);
52
+ return font;
53
+ }
metadata ADDED
@@ -0,0 +1,65 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: xftdim
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - shura
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-09-11 00:00:00 +02:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: Add a method to String:Class to get width and height of text for given string and xft-font
22
+ email: shura1991@gmail.com
23
+ executables: []
24
+
25
+ extensions:
26
+ - ext/extconf.rb
27
+ extra_rdoc_files: []
28
+
29
+ files:
30
+ - ext/extconf.rb
31
+ - ext/xftdim.c
32
+ has_rdoc: true
33
+ homepage: http://github.com/shurizzle/ruby-xftdim
34
+ licenses: []
35
+
36
+ post_install_message:
37
+ rdoc_options: []
38
+
39
+ require_paths:
40
+ - lib
41
+ required_ruby_version: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ segments:
47
+ - 0
48
+ version: "0"
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ segments:
55
+ - 0
56
+ version: "0"
57
+ requirements: []
58
+
59
+ rubyforge_project:
60
+ rubygems_version: 1.3.7
61
+ signing_key:
62
+ specification_version: 3
63
+ summary: Get dimensions of string for a xft-font
64
+ test_files: []
65
+