gtk2html 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/gtk2html.rb +105 -33
- data.tar.gz.sig +0 -0
- metadata +2 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4b81efb096425aecfebf68214bf408e611cd28ee
|
4
|
+
data.tar.gz: 326fc3bb1f2d4b7fb92a7c641852cabc9f03fcb8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a2cd659cebe59ea8420966134300b4b32538e255989d69221f8d3b01feda70b10c60302b2f1c994d74c2d0701fc0a8cdee3834097f33c8e90546e305c31090da
|
7
|
+
data.tar.gz: e1ce4bf4c31357354b112c6fcefde89a9a4778ee2e269385cf0f00cc703ca5dbcae439673d5f3f94aad61a3c3360d459603f42300da9bd0e40b4525b6840e458
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/lib/gtk2html.rb
CHANGED
@@ -23,7 +23,7 @@ module Gtk2HTML
|
|
23
23
|
|
24
24
|
h = attributes
|
25
25
|
|
26
|
-
[:draw_box, [x1,y1,x2,y2], style, render_all(e)]
|
26
|
+
[[:draw_box, [x1,y1,x2,y2], style], render_all(e)]
|
27
27
|
end
|
28
28
|
|
29
29
|
def div(e, attributes, raw_style)
|
@@ -33,7 +33,7 @@ module Gtk2HTML
|
|
33
33
|
coords = [0, nil, @width, @height/2]
|
34
34
|
padding = style[:padding].values
|
35
35
|
|
36
|
-
[:draw_box, margin, coords, padding, style, render_all(e)]
|
36
|
+
[[:draw_box, margin, coords, padding, style], render_all(e)]
|
37
37
|
end
|
38
38
|
|
39
39
|
def html(e, attributes, style)
|
@@ -42,7 +42,7 @@ module Gtk2HTML
|
|
42
42
|
coords = [0, 0, @width, @height]
|
43
43
|
padding = style[:padding].values
|
44
44
|
|
45
|
-
[:draw_box, margin, coords, padding, style, render_all(e)]
|
45
|
+
[[:draw_box, margin, coords, padding, style], render_all(e)]
|
46
46
|
end
|
47
47
|
|
48
48
|
private
|
@@ -56,7 +56,7 @@ module Gtk2HTML
|
|
56
56
|
if h.has_key? x then
|
57
57
|
|
58
58
|
a = expand_shorthand(h[x])
|
59
|
-
|
59
|
+
a.map!(&:to_i) # assumes everything is in pixels not em
|
60
60
|
r.merge!(x => Hash[%i(top right bottom left).zip(a)])
|
61
61
|
else
|
62
62
|
r
|
@@ -76,6 +76,59 @@ module Gtk2HTML
|
|
76
76
|
|
77
77
|
end
|
78
78
|
|
79
|
+
class Layout
|
80
|
+
|
81
|
+
attr_reader :to_a
|
82
|
+
|
83
|
+
def initialize(instructions, width: 320, height: 240)
|
84
|
+
|
85
|
+
@width, @height = width, height
|
86
|
+
a = lay_out(instructions, pcoords: [0, 0, @width, @height])
|
87
|
+
@to_a = a
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
private
|
93
|
+
|
94
|
+
def lay_out(a, pcoords: [])
|
95
|
+
|
96
|
+
item, children = a
|
97
|
+
|
98
|
+
name, margin, raw_coords, padding, style = item
|
99
|
+
|
100
|
+
coords = raw_coords.map.with_index {|x,i| x ? x : pcoords[i]}
|
101
|
+
|
102
|
+
x1 = coords[0] + margin[0]
|
103
|
+
y1 = coords[1] + margin[1]
|
104
|
+
x2 = coords[2] - margin[2]
|
105
|
+
y2 = coords[3] - margin[3]
|
106
|
+
|
107
|
+
item[2] = [x1, y1, x2, y2]
|
108
|
+
|
109
|
+
nested = if children and children.length > 1 then
|
110
|
+
lay_out(children, pcoords: coords)
|
111
|
+
else
|
112
|
+
children
|
113
|
+
end
|
114
|
+
#[owidth=(coords[2] - coords[0]), oheight=(coords[3] - coords[1])]
|
115
|
+
r = [item]
|
116
|
+
r << nested if nested
|
117
|
+
r
|
118
|
+
end
|
119
|
+
|
120
|
+
def lay_out2(a, pcoords: [])
|
121
|
+
|
122
|
+
name, raw_coords, attributes, style, children = a
|
123
|
+
coords = raw_coords.map.with_index {|x,i| x ? x : pcoords[i]}
|
124
|
+
|
125
|
+
owidth, oheight = lay_out(children, pcoords: coords) if children
|
126
|
+
|
127
|
+
[(coords[2] - coords[0]), (coords[3] - coords[1])]
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
131
|
+
|
79
132
|
class DrawingInstructions
|
80
133
|
|
81
134
|
attr_accessor :area
|
@@ -87,24 +140,24 @@ module Gtk2HTML
|
|
87
140
|
|
88
141
|
end
|
89
142
|
|
90
|
-
def draw_box(
|
143
|
+
def draw_box(margin, raw_coords, padding, style)
|
91
144
|
|
92
|
-
margin, raw_coords, padding, style = args
|
93
145
|
coords = raw_coords.map.with_index {|x,i| x ? x : @curpos[i] }
|
94
146
|
|
95
147
|
h2 = style.clone
|
96
148
|
h2.delete :color
|
97
149
|
x1, y1, x2, y2 = coords
|
98
150
|
|
99
|
-
@curpos = coords
|
151
|
+
@curpos = coords
|
152
|
+
|
153
|
+
width = x2 - x1
|
154
|
+
height = y2 - y1
|
100
155
|
|
101
156
|
gc = gc_ini(h2)
|
102
|
-
@area.window.draw_rectangle(gc, 1, x1, y1,
|
157
|
+
@area.window.draw_rectangle(gc, 1, x1, y1, width, height)
|
103
158
|
end
|
104
159
|
|
105
|
-
def draw_layout(
|
106
|
-
|
107
|
-
text, style = args
|
160
|
+
def draw_layout(text, style)
|
108
161
|
|
109
162
|
x, y = @curpos
|
110
163
|
|
@@ -124,10 +177,8 @@ module Gtk2HTML
|
|
124
177
|
def window(args)
|
125
178
|
end
|
126
179
|
|
127
|
-
def render(a)
|
128
|
-
|
129
|
-
method(a[0]).call(args=a[1..4])
|
130
|
-
draw a[5]
|
180
|
+
def render(a)
|
181
|
+
draw [a]
|
131
182
|
end
|
132
183
|
|
133
184
|
def script(args)
|
@@ -138,31 +189,43 @@ module Gtk2HTML
|
|
138
189
|
private
|
139
190
|
|
140
191
|
def draw(a)
|
192
|
+
|
193
|
+
return unless a
|
194
|
+
|
195
|
+
a.each do |row|
|
196
|
+
|
197
|
+
next unless row
|
198
|
+
x, remaining = row
|
141
199
|
|
142
|
-
|
143
|
-
|
144
|
-
x, *remaining = rawx
|
200
|
+
case x[0].class.to_s.to_sym
|
145
201
|
|
146
|
-
|
202
|
+
when :Symbol
|
203
|
+
|
204
|
+
name, *args = x
|
205
|
+
|
206
|
+
@latest_style = args[3]
|
147
207
|
|
148
|
-
|
149
|
-
method(x).call(args=remaining.shift(4))
|
208
|
+
method(name).call(*args)
|
150
209
|
draw remaining
|
151
|
-
|
152
|
-
|
153
|
-
next unless x.length > 0
|
210
|
+
|
211
|
+
when :String then
|
154
212
|
|
155
|
-
|
213
|
+
next if x.empty?
|
156
214
|
|
157
|
-
|
215
|
+
method(:draw_layout).call(x, @latest_style)
|
158
216
|
|
217
|
+
when :Array
|
159
218
|
draw remaining
|
160
219
|
else
|
161
|
-
|
220
|
+
|
221
|
+
name, *args = x
|
222
|
+
|
223
|
+
method(name).call(args)
|
224
|
+
draw remaining
|
162
225
|
end
|
163
|
-
|
164
|
-
end
|
165
226
|
|
227
|
+
end
|
228
|
+
|
166
229
|
end
|
167
230
|
|
168
231
|
def set_colour(c)
|
@@ -202,7 +265,7 @@ module Gtk2HTML
|
|
202
265
|
|
203
266
|
|
204
267
|
attr_accessor :doc, :html
|
205
|
-
attr_reader :width, :height
|
268
|
+
attr_reader :width, :height, :window
|
206
269
|
|
207
270
|
def initialize(html, irb: false)
|
208
271
|
|
@@ -216,6 +279,7 @@ module Gtk2HTML
|
|
216
279
|
|
217
280
|
@width = 320
|
218
281
|
@height = 240
|
282
|
+
@window = window
|
219
283
|
window.set_default_size(@width, @height)
|
220
284
|
|
221
285
|
@dirty = true
|
@@ -223,15 +287,23 @@ module Gtk2HTML
|
|
223
287
|
|
224
288
|
area.signal_connect("expose_event") do
|
225
289
|
|
290
|
+
width, height = window.size
|
291
|
+
|
292
|
+
@dirty = true if [@width, @height] != [width, height]
|
293
|
+
|
294
|
+
|
226
295
|
if @dirty then
|
227
296
|
|
228
297
|
Thread.new { @doc.root.xpath('//script').each {|x| eval x.text.unescape } }
|
298
|
+
|
299
|
+
@width, @height = window.size
|
300
|
+
instructions = Gtk2HTML::Render.new(@doc, @width, @height).to_a
|
301
|
+
@layout_instructions = Gtk2HTML::Layout.new(instructions).to_a
|
229
302
|
|
230
|
-
@instructions = Gtk2HTML::Render.new(@doc, @width, @height).to_a
|
231
303
|
end
|
232
304
|
|
233
305
|
drawing = DrawingInstructions.new area
|
234
|
-
drawing.render @
|
306
|
+
drawing.render @layout_instructions
|
235
307
|
@dirty = false
|
236
308
|
|
237
309
|
end
|
@@ -280,4 +352,4 @@ module Gtk2HTML
|
|
280
352
|
|
281
353
|
end
|
282
354
|
|
283
|
-
end
|
355
|
+
end
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gtk2html
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -31,7 +31,7 @@ cert_chain:
|
|
31
31
|
XW00gFE4S5Cq4J0/5Y8BLyxXWUTTXHeLXwfiIfffKOUtTUjlivG+dvqexj8Qbbv9
|
32
32
|
bW25tpA1jigdbQ==
|
33
33
|
-----END CERTIFICATE-----
|
34
|
-
date: 2015-11-
|
34
|
+
date: 2015-11-27 00:00:00.000000000 Z
|
35
35
|
dependencies:
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: gtk2svg
|
metadata.gz.sig
CHANGED
Binary file
|