rmagick4j 0.3.4-java → 0.3.9-java
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.
- checksums.yaml +7 -0
- data/History.txt +84 -0
- data/LICENSE.txt +31 -0
- data/README.txt +25 -0
- data/Rakefile +65 -0
- data/lib/magick4j.jar +0 -0
- data/lib/{RMagick.rb → rmagick.rb} +574 -405
- data/lib/rmagick4j/constants.rb +34 -0
- data/lib/rmagick4j/draw.rb +124 -0
- data/lib/rmagick4j/enum.rb +120 -0
- data/lib/rmagick4j/gradient_fill.rb +14 -0
- data/lib/rmagick4j/image.rb +351 -0
- data/lib/rmagick4j/image_list.rb +25 -0
- data/lib/rmagick4j/pixel.rb +170 -0
- data/lib/rmagick4j/rmagick4j.rb +15 -430
- data/lib/rmagick4j/texture_fill.rb +14 -0
- data/lib/rmagick4j/type_metric.rb +8 -0
- data/lib/rmagick4j/version.rb +5 -0
- data/lib/rvg/clippath.rb +2 -2
- data/lib/rvg/container.rb +2 -2
- data/lib/rvg/describable.rb +2 -2
- data/lib/rvg/embellishable.rb +2 -2
- data/lib/rvg/misc.rb +3 -3
- data/lib/rvg/paint.rb +7 -2
- data/lib/rvg/pathdata.rb +2 -2
- data/lib/rvg/rvg.rb +3 -3
- data/lib/rvg/stretchable.rb +15 -3
- data/lib/rvg/stylable.rb +2 -2
- data/lib/rvg/text.rb +2 -2
- data/lib/rvg/transformable.rb +2 -2
- data/lib/rvg/units.rb +2 -2
- data/test/RMagickTestSuite.rb +129 -0
- data/test/eyetests/bullseye.rb +151 -0
- data/test/eyetests/doc.rb +79 -0
- data/test/eyetests/tests/draw_arc_basic.rb +16 -0
- data/test/eyetests/tests/draw_circle_affine.rb +19 -0
- data/test/eyetests/tests/draw_circle_basic.rb +16 -0
- data/test/eyetests/tests/draw_clip_path.rb +44 -0
- data/test/eyetests/tests/draw_ellipse_affine.rb +19 -0
- data/test/eyetests/tests/draw_ellipse_basic.rb +16 -0
- data/test/eyetests/tests/draw_line_affine.rb +24 -0
- data/test/eyetests/tests/draw_line_basic.rb +21 -0
- data/test/eyetests/tests/draw_multiline_type_metrics.rb +42 -0
- data/test/eyetests/tests/draw_pattern_1.rb +35 -0
- data/test/eyetests/tests/draw_polygon_affine.rb +22 -0
- data/test/eyetests/tests/draw_polygon_basic.rb +19 -0
- data/test/eyetests/tests/draw_polyline_affine.rb +19 -0
- data/test/eyetests/tests/draw_polyline_basic.rb +18 -0
- data/test/eyetests/tests/draw_pop_push.rb +16 -0
- data/test/eyetests/tests/draw_pop_push_translate.rb +22 -0
- data/test/eyetests/tests/draw_rectangle_affine.rb +16 -0
- data/test/eyetests/tests/draw_rectangle_basic.rb +16 -0
- data/test/eyetests/tests/draw_rectangle_narrow.rb +18 -0
- data/test/eyetests/tests/draw_rmagick_test_01.rb +35 -0
- data/test/eyetests/tests/draw_rmagick_test_02.rb +40 -0
- data/test/eyetests/tests/draw_rmagick_test_03.rb +17 -0
- data/test/eyetests/tests/draw_rmagick_test_04.rb +21 -0
- data/test/eyetests/tests/draw_rotate_01.rb +33 -0
- data/test/eyetests/tests/draw_roundrectangle_affine.rb +19 -0
- data/test/eyetests/tests/draw_roundrectangle_basic.rb +16 -0
- data/test/eyetests/tests/draw_scale_01.rb +33 -0
- data/test/eyetests/tests/draw_skewx_01.rb +34 -0
- data/test/eyetests/tests/draw_skewy_01.rb +33 -0
- data/test/eyetests/tests/draw_stroke_miterlimit.rb +21 -0
- data/test/eyetests/tests/effect_blur.rb +9 -0
- data/test/eyetests/tests/effect_charcoal.rb +9 -0
- data/test/eyetests/tests/effect_edge.rb +9 -0
- data/test/eyetests/tests/effect_implode.rb +9 -0
- data/test/eyetests/tests/effect_negate.rb +9 -0
- data/test/eyetests/tests/effect_negate_true.rb +9 -0
- data/test/eyetests/tests/effect_normalize.rb +9 -0
- data/test/eyetests/tests/effect_shade.rb +9 -0
- data/test/eyetests/tests/effect_solarize.rb +10 -0
- data/test/eyetests/tests/effect_wave.rb +9 -0
- data/test/eyetests/tests/gradient_fill_horizontal_diagonal_fill.rb +9 -0
- data/test/eyetests/tests/gradient_fill_horizontal_fill.rb +9 -0
- data/test/eyetests/tests/gradient_fill_point_fill.rb +9 -0
- data/test/eyetests/tests/gradient_fill_vertical_diagonal_fill.rb +9 -0
- data/test/eyetests/tests/gradient_fill_vertical_fill.rb +9 -0
- data/test/eyetests/tests/gruff_accumulator_bar.rb +29 -0
- data/test/eyetests/tests/gruff_area_1.rb +16 -0
- data/test/eyetests/tests/gruff_area_2.rb +27 -0
- data/test/eyetests/tests/gruff_bar_1.rb +29 -0
- data/test/eyetests/tests/gruff_bar_2.rb +19 -0
- data/test/eyetests/tests/gruff_dot_1.rb +19 -0
- data/test/eyetests/tests/gruff_line_1.rb +13 -0
- data/test/eyetests/tests/gruff_line_2.rb +20 -0
- data/test/eyetests/tests/gruff_net_1.rb +16 -0
- data/test/eyetests/tests/gruff_net_2.rb +16 -0
- data/test/eyetests/tests/gruff_pie_1.rb +21 -0
- data/test/eyetests/tests/gruff_pie_2.rb +22 -0
- data/test/eyetests/tests/gruff_scene_1.rb +14 -0
- data/test/eyetests/tests/gruff_scene_2.rb +14 -0
- data/test/eyetests/tests/gruff_sidebar.rb +32 -0
- data/test/eyetests/tests/gruff_sidestacked_bar_1.rb +26 -0
- data/test/eyetests/tests/gruff_sidestacked_bar_2.rb +26 -0
- data/test/eyetests/tests/gruff_spider_1.rb +22 -0
- data/test/eyetests/tests/gruff_spider_2.rb +15 -0
- data/test/eyetests/tests/gruff_stacked_area_1.rb +23 -0
- data/test/eyetests/tests/gruff_stacked_bar_1.rb +23 -0
- data/test/eyetests/tests/gruff_stacked_bar_2.rb +26 -0
- data/test/eyetests/tests/hatch_fill.rb +9 -0
- data/test/eyetests/tests/image_list_flatten_images.rb +15 -0
- data/test/eyetests/tests/new_image.rb +31 -0
- data/test/eyetests/tests/path_a_command_01.rb +16 -0
- data/test/eyetests/tests/path_a_command_02.rb +19 -0
- data/test/eyetests/tests/path_c_command_01.rb +16 -0
- data/test/eyetests/tests/path_c_command_02.rb +16 -0
- data/test/eyetests/tests/path_complex_01.rb +16 -0
- data/test/eyetests/tests/path_espiral_01.rb +29 -0
- data/test/eyetests/tests/path_h_command_01.rb +16 -0
- data/test/eyetests/tests/path_h_command_02.rb +16 -0
- data/test/eyetests/tests/path_l_command_01.rb +16 -0
- data/test/eyetests/tests/path_l_command_02.rb +16 -0
- data/test/eyetests/tests/path_m_command_01.rb +16 -0
- data/test/eyetests/tests/path_m_command_02.rb +16 -0
- data/test/eyetests/tests/path_m_command_03.rb +16 -0
- data/test/eyetests/tests/path_q_command_01.rb +16 -0
- data/test/eyetests/tests/path_q_command_02.rb +16 -0
- data/test/eyetests/tests/path_q_command_03.rb +25 -0
- data/test/eyetests/tests/path_s_command_01.rb +16 -0
- data/test/eyetests/tests/path_s_command_02.rb +16 -0
- data/test/eyetests/tests/path_star_01.rb +19 -0
- data/test/eyetests/tests/path_t_command_01.rb +16 -0
- data/test/eyetests/tests/path_t_command_02.rb +16 -0
- data/test/eyetests/tests/path_v_command_01.rb +16 -0
- data/test/eyetests/tests/path_v_command_02.rb +16 -0
- data/test/eyetests/tests/store_pixel_smiley.rb +123 -0
- data/test/eyetests/tests/texture_fill.rb +11 -0
- data/test/gruff_tests/test/gruff_test_case.rb +123 -0
- data/test/gruff_tests/test/monkey_gruff.rb +7 -0
- data/test/gruff_tests/test/test_accumulator_bar.rb +50 -0
- data/test/gruff_tests/test/test_area.rb +134 -0
- data/test/gruff_tests/test/test_bar.rb +295 -0
- data/test/gruff_tests/test/test_base.rb +8 -0
- data/test/gruff_tests/test/test_bullet.rb +26 -0
- data/test/gruff_tests/test/test_dot.rb +273 -0
- data/test/gruff_tests/test/test_legend.rb +68 -0
- data/test/gruff_tests/test/test_line.rb +554 -0
- data/test/gruff_tests/test/test_mini_bar.rb +33 -0
- data/test/gruff_tests/test/test_mini_pie.rb +20 -0
- data/test/gruff_tests/test/test_mini_side_bar.rb +37 -0
- data/test/gruff_tests/test/test_net.rb +230 -0
- data/test/gruff_tests/test/test_photo.rb +41 -0
- data/test/gruff_tests/test/test_pie.rb +154 -0
- data/test/gruff_tests/test/test_scene.rb +100 -0
- data/test/gruff_tests/test/test_side_bar.rb +12 -0
- data/test/gruff_tests/test/test_sidestacked_bar.rb +89 -0
- data/test/gruff_tests/test/test_spider.rb +216 -0
- data/test/gruff_tests/test/test_stacked_area.rb +52 -0
- data/test/gruff_tests/test/test_stacked_bar.rb +52 -0
- data/test/images/clown.jpg +0 -0
- data/test/images/texture.jpg +0 -0
- data/test/implemented_methods.rb +18 -0
- data/test/spec/draw_spec.rb +43 -0
- data/test/spec/features/step_definitions/geometry_steps.rb +22 -0
- data/test/spec/features/step_definitions/image_filling_steps.rb +49 -0
- data/test/spec/features/support/env.rb +3 -0
- data/test/spec/image_constants.rb +76 -0
- data/test/spec/image_spec.rb +83 -0
- data/test/spec/pixel_spec.rb +89 -0
- metadata +333 -45
- data/lib/RMagick.jar +0 -0
- data/lib/jhlabs-filters.jar +0 -0
data/lib/rvg/clippath.rb
CHANGED
data/lib/rvg/container.rb
CHANGED
data/lib/rvg/describable.rb
CHANGED
data/lib/rvg/embellishable.rb
CHANGED
data/lib/rvg/misc.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
# $Id: misc.rb,v 1.
|
|
2
|
-
# Copyright (C)
|
|
1
|
+
# $Id: misc.rb,v 1.12 2008/02/24 18:26:36 rmagick Exp $
|
|
2
|
+
# Copyright (C) 2008 Timothy P. Hunter
|
|
3
3
|
module Magick
|
|
4
4
|
class RVG
|
|
5
5
|
|
|
@@ -295,7 +295,7 @@ module Magick
|
|
|
295
295
|
end
|
|
296
296
|
first_word = false
|
|
297
297
|
word.split('').each do |glyph|
|
|
298
|
-
case @ctx.text_attrs.glyph_orientation_vertical
|
|
298
|
+
case @ctx.text_attrs.glyph_orientation_vertical.to_i
|
|
299
299
|
when 0, 90, 270
|
|
300
300
|
x_shift = (dx - x_rel_coords.shift) / 2
|
|
301
301
|
when 180
|
data/lib/rvg/paint.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#--
|
|
2
|
-
# $Id: paint.rb,v 1.
|
|
3
|
-
# Copyright (C)
|
|
2
|
+
# $Id: paint.rb,v 1.5 2008/02/24 18:26:36 rmagick Exp $
|
|
3
|
+
# Copyright (C) 2008 Timothy P. Hunter
|
|
4
4
|
#++
|
|
5
5
|
# Defines paint server classes.
|
|
6
6
|
# Eventually this will include gradients.
|
|
@@ -18,6 +18,11 @@ module Magick
|
|
|
18
18
|
include Duplicatable
|
|
19
19
|
include Stylable
|
|
20
20
|
|
|
21
|
+
# Return upper-left corner, width, height of viewport in user coordinates.
|
|
22
|
+
# Usually these are the values specified when the Pattern object is
|
|
23
|
+
# created, but they can be changed by a call to the viewbox method.
|
|
24
|
+
attr_reader :x, :y, :width, :height
|
|
25
|
+
|
|
21
26
|
# Create a pattern that can be used with the :fill or :stroke styles.
|
|
22
27
|
# The +width+ and +height+ arguments define the viewport.
|
|
23
28
|
# The pattern will be repeated at <tt>x+m*width</tt> and <tt>y+n*height</tt>
|
data/lib/rvg/pathdata.rb
CHANGED
data/lib/rvg/rvg.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#--############################################################################
|
|
2
|
-
# $Id: rvg.rb,v 1.
|
|
2
|
+
# $Id: rvg.rb,v 1.9 2008/02/24 21:15:24 rmagick Exp $
|
|
3
3
|
#
|
|
4
|
-
# Copyright (C)
|
|
4
|
+
# Copyright (C) 2008 by Timothy P. Hunter
|
|
5
5
|
#
|
|
6
6
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
7
7
|
# copy of this software and associated documentation files (the
|
|
@@ -222,7 +222,7 @@ module Magick
|
|
|
222
222
|
@background_fill_opacity = 1.0 # applies only if background_fill= is used
|
|
223
223
|
@background_position = :scaled
|
|
224
224
|
@background_pattern, @background_image, @desc, @title, @metadata = nil
|
|
225
|
-
@x, @y = 0.0
|
|
225
|
+
@x, @y = 0.0, 0.0
|
|
226
226
|
@nested = false
|
|
227
227
|
yield(self) if block_given?
|
|
228
228
|
end
|
data/lib/rvg/stretchable.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#--
|
|
2
|
-
# $Id: stretchable.rb,v 1.
|
|
3
|
-
# Copyright (C)
|
|
2
|
+
# $Id: stretchable.rb,v 1.6 2008/02/24 21:52:32 rmagick Exp $
|
|
3
|
+
# Copyright (C) 2008 Timothy P. Hunter
|
|
4
4
|
#++
|
|
5
5
|
|
|
6
6
|
module Magick
|
|
@@ -36,7 +36,7 @@ module Magick
|
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
# The methods in this module describe the user-coordinate space.
|
|
39
|
-
#
|
|
39
|
+
# RVG and Pattern objects are stretchable.
|
|
40
40
|
module Stretchable
|
|
41
41
|
|
|
42
42
|
private
|
|
@@ -145,6 +145,18 @@ module Magick
|
|
|
145
145
|
end
|
|
146
146
|
raise(ArgumentError, "viewbox width must be > 0 (#{width} given)") unless width >= 0
|
|
147
147
|
raise(ArgumentError, "viewbox height must be > 0 (#{height} given)") unless height >= 0
|
|
148
|
+
|
|
149
|
+
# return the user-coordinate space attributes if defined
|
|
150
|
+
class << self
|
|
151
|
+
if not defined? @redefined then
|
|
152
|
+
@redefined = true
|
|
153
|
+
define_method(:x) { @vbx_x }
|
|
154
|
+
define_method(:y) { @vbx_y }
|
|
155
|
+
define_method(:width) { @vbx_width}
|
|
156
|
+
define_method(:height) { @vbx_height }
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
|
|
148
160
|
yield(self) if block_given?
|
|
149
161
|
self
|
|
150
162
|
end
|
data/lib/rvg/stylable.rb
CHANGED
data/lib/rvg/text.rb
CHANGED
data/lib/rvg/transformable.rb
CHANGED
data/lib/rvg/units.rb
CHANGED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
puts Time.new
|
|
2
|
+
begin
|
|
3
|
+
require 'rubygems'
|
|
4
|
+
gem PLATFORM == 'java' ? 'rmagick4j' : 'rmagick'
|
|
5
|
+
rescue Exception
|
|
6
|
+
puts "No gems! #{$!}"
|
|
7
|
+
end
|
|
8
|
+
puts Time.new
|
|
9
|
+
require 'RMagick'
|
|
10
|
+
puts Time.new
|
|
11
|
+
|
|
12
|
+
# TODO I know this isn't a real test, but it's what I've got for now.
|
|
13
|
+
# TODO Probably eventually want to hook into RMagick's existing tests.
|
|
14
|
+
|
|
15
|
+
def main
|
|
16
|
+
if ARGV.length > 0
|
|
17
|
+
ARGV.each {|arg| send(arg).display}
|
|
18
|
+
else
|
|
19
|
+
image = addTransparencyWithAMask.raise
|
|
20
|
+
# image = open_clown.blur_image(0, 5)
|
|
21
|
+
open(File.dirname(__FILE__) +'/test.jpg', 'w') do |file|
|
|
22
|
+
file.write(image.to_blob {self.format = 'JPEG'})
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
puts Time.new
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def addRaisedEdges
|
|
29
|
+
open_clown.raise
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def addText
|
|
33
|
+
clown = open_clown
|
|
34
|
+
text = Magick::Draw.new
|
|
35
|
+
text.annotate(clown, 0, 0, 0, 60, "My friend!") {
|
|
36
|
+
self.gravity = Magick::SouthGravity
|
|
37
|
+
self.pointsize = 48
|
|
38
|
+
self.stroke = 'transparent'
|
|
39
|
+
self.fill = '#0000A9'
|
|
40
|
+
self.font_weight = Magick::BoldWeight
|
|
41
|
+
}
|
|
42
|
+
clown.first
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def addTransparencyWithAMask
|
|
46
|
+
clown = open_clown.first
|
|
47
|
+
mask = Magick::Image.new(clown.columns, clown.rows) {
|
|
48
|
+
self.background_color = 'black'
|
|
49
|
+
}
|
|
50
|
+
bg = Magick::Image.read("pattern:checkerboard") {
|
|
51
|
+
self.size = "#{clown.columns}x#{clown.rows}"
|
|
52
|
+
}
|
|
53
|
+
bg = bg.first
|
|
54
|
+
|
|
55
|
+
height = clown.rows * 0.8
|
|
56
|
+
width = clown.columns * 0.7
|
|
57
|
+
x = (clown.columns - width) / 2
|
|
58
|
+
y = (clown.rows - height) / 2
|
|
59
|
+
|
|
60
|
+
gc = Magick::Draw.new
|
|
61
|
+
gc.stroke('white').fill('white')
|
|
62
|
+
gc.roundrectangle(x, y, x+width, y+height, 24, 24)
|
|
63
|
+
gc.draw(mask)
|
|
64
|
+
|
|
65
|
+
mask = mask.blur_image(0, 20)
|
|
66
|
+
|
|
67
|
+
mask.matte = false
|
|
68
|
+
clown.matte = true
|
|
69
|
+
|
|
70
|
+
clown = clown.composite(mask, Magick::CenterGravity, Magick::CopyOpacityCompositeOp)
|
|
71
|
+
bg.composite(clown, Magick::CenterGravity, Magick::OverCompositeOp)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def addWatermark
|
|
75
|
+
mark = Magick::Image.new(300, 50) do
|
|
76
|
+
self.background_color = 'none'
|
|
77
|
+
end
|
|
78
|
+
gc = Magick::Draw.new
|
|
79
|
+
gc.annotate(mark, 0, 0, 0, 0, "Image by RMagick") do
|
|
80
|
+
self.gravity = Magick::CenterGravity
|
|
81
|
+
self.pointsize = 32
|
|
82
|
+
self.font_family = "Times"
|
|
83
|
+
self.fill = "white"
|
|
84
|
+
self.stroke = "none"
|
|
85
|
+
end
|
|
86
|
+
mark.rotate!(-90)
|
|
87
|
+
clown = open_clown.first
|
|
88
|
+
clown = clown.watermark(mark, 0.15, 0, Magick::EastGravity)
|
|
89
|
+
clown
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def crop_resized
|
|
93
|
+
open_clown.crop_resized(50, 50)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def cropToANewSize
|
|
97
|
+
clown = open_clown
|
|
98
|
+
face = clown.crop(50, 15, 150, 165)
|
|
99
|
+
white_bg = Magick::Image.new(clown.columns, clown.rows)
|
|
100
|
+
white_bg.composite(face, 50, 15, Magick::OverCompositeOp)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def flipIt
|
|
104
|
+
open_clown.flip!
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def makeAThumbnail
|
|
108
|
+
clown = open_clown
|
|
109
|
+
tiny = clown.resize(0.25)
|
|
110
|
+
white_bg = Magick::Image.new(clown.columns, clown.rows)
|
|
111
|
+
white_bg.composite(tiny, Magick::CenterGravity, Magick::OverCompositeOp)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def open_clown
|
|
115
|
+
#Magick::ImageList.new("clown.jpg")
|
|
116
|
+
open(File.dirname(__FILE__) + "/clown.jpg") {|file| Magick::ImageList.new.from_blob(file.read)}
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def rotateToAnyAngle
|
|
120
|
+
clown = open_clown
|
|
121
|
+
clown.rotate(130)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def turnItIntoBlackAndWhite
|
|
125
|
+
clown = Magick::ImageList.new("clown.jpg")
|
|
126
|
+
clown.quantize(256, Magick::GRAYColorspace)
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
main
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
TEST_ROOT = File.expand_path(File.dirname(__FILE__))
|
|
2
|
+
|
|
3
|
+
require 'java'
|
|
4
|
+
require 'rubygems'
|
|
5
|
+
|
|
6
|
+
#require 'RMagick'
|
|
7
|
+
require 'profligacy/swing'
|
|
8
|
+
require 'profligacy/lel'
|
|
9
|
+
require TEST_ROOT + '/tests/new_image.rb'
|
|
10
|
+
require 'tmpdir'
|
|
11
|
+
Kernel.srand(Time.now.to_i)
|
|
12
|
+
OUTPUT_DIR = File.join(Dir.tmpdir,Kernel.rand(100).to_s)
|
|
13
|
+
Dir.mkdir(OUTPUT_DIR)
|
|
14
|
+
|
|
15
|
+
module Bullseye
|
|
16
|
+
include Profligacy
|
|
17
|
+
|
|
18
|
+
DefaultListModel = javax.swing.DefaultListModel
|
|
19
|
+
ImageIO = javax.imageio.ImageIO
|
|
20
|
+
JButton = javax.swing.JButton
|
|
21
|
+
JFile = java.io.File
|
|
22
|
+
JFrame = javax.swing.JFrame
|
|
23
|
+
JLabel = javax.swing.JLabel
|
|
24
|
+
JList = javax.swing.JList
|
|
25
|
+
JPanel = javax.swing.JPanel
|
|
26
|
+
JScrollPane = javax.swing.JScrollPane
|
|
27
|
+
JTextField = javax.swing.JTextField
|
|
28
|
+
|
|
29
|
+
class ImagePanel < JPanel
|
|
30
|
+
attr_accessor :image_1, :image_2
|
|
31
|
+
|
|
32
|
+
def paint(graphics)
|
|
33
|
+
|
|
34
|
+
unless image_1.nil?
|
|
35
|
+
begin
|
|
36
|
+
pic = load_image(image_1)
|
|
37
|
+
graphics.drawImage(pic, 0, 0, nil)
|
|
38
|
+
rescue
|
|
39
|
+
pic = Magick::Image.new(300, 300)
|
|
40
|
+
pic.background_color = 'red'
|
|
41
|
+
pic.erase!
|
|
42
|
+
graphics.drawImage(pic._image.getImage, 0, 0, nil)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
unless image_2.nil?
|
|
47
|
+
begin
|
|
48
|
+
pic = load_image(image_2)
|
|
49
|
+
graphics.drawImage(pic, 310, 0, nil)
|
|
50
|
+
rescue
|
|
51
|
+
pic = Magick::Image.new(300, 300)
|
|
52
|
+
pic.background_color = 'red'
|
|
53
|
+
pic.erase!
|
|
54
|
+
graphics.drawImage(pic._image.getImage, 310, 0, nil)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def load_image(filename)
|
|
60
|
+
file = JFile.new(filename)
|
|
61
|
+
raise ArgumentError.new("File #{filename} does not exist") unless file.exists
|
|
62
|
+
ImageIO.read(file)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
class ScriptRunner < Struct.new(:picture_panel, :source)
|
|
67
|
+
def initialize(picture_panel, source)
|
|
68
|
+
super(picture_panel, source)
|
|
69
|
+
@running = false
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def run_script
|
|
73
|
+
@running = true
|
|
74
|
+
script_name = source.selected_value.downcase.gsub(' ','_')
|
|
75
|
+
selected_script = File.join(TEST_ROOT, 'tests', script_name + '.rb')
|
|
76
|
+
NOTIFIER.notify 'Running script in MRI.'
|
|
77
|
+
output_commands = `sh -c 'ruby #{selected_script} #{OUTPUT_DIR}'`
|
|
78
|
+
NOTIFIER.notify 'Running in JRuby.'
|
|
79
|
+
output_commands += `jruby #{selected_script} #{OUTPUT_DIR}`
|
|
80
|
+
if output_commands == ''
|
|
81
|
+
NOTIFIER.notify 'Done'
|
|
82
|
+
picture_panel.image_1 = File.join(OUTPUT_DIR, script_name + '.jruby.jpg')
|
|
83
|
+
picture_panel.image_2 = File.join(OUTPUT_DIR, script_name + '.mri.jpg')
|
|
84
|
+
picture_panel.repaint
|
|
85
|
+
else
|
|
86
|
+
puts output_commands
|
|
87
|
+
NOTIFIER.notify 'Error'
|
|
88
|
+
end
|
|
89
|
+
@running = false
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
class Notifier < Struct.new(:output)
|
|
94
|
+
def notify(string)
|
|
95
|
+
output.text = string.to_s
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
class ScriptList < JList
|
|
100
|
+
def initialize
|
|
101
|
+
@default_model = DefaultListModel.new
|
|
102
|
+
super(@default_model)
|
|
103
|
+
load_test_scripts
|
|
104
|
+
|
|
105
|
+
self.setSelectedIndex(0)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def load_test_scripts
|
|
109
|
+
Dir[File.dirname(__FILE__) + '/tests/*.rb'].sort.each do |script|
|
|
110
|
+
script = script.gsub(/(^.*tests\/|.rb$)/,'').split('_').map{|x| x.capitalize}.join(' ')
|
|
111
|
+
@default_model.addElement(script) unless script == 'New Image'
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def self.scrollable(component)
|
|
117
|
+
JScrollPane.new component,
|
|
118
|
+
JScrollPane::VERTICAL_SCROLLBAR_AS_NEEDED,
|
|
119
|
+
JScrollPane::HORIZONTAL_SCROLLBAR_NEVER
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
lel = '[ <label_results | <label_scripts ]
|
|
123
|
+
[ (610,300)image_panel | <scripts_list ]
|
|
124
|
+
[ >status | >run_button ]'
|
|
125
|
+
|
|
126
|
+
ui = Swing::LEL.new(JFrame, lel) do |c, i|
|
|
127
|
+
c.label_scripts = JLabel.new('Scripts')
|
|
128
|
+
c.scripts_list = scrollable(scripts = ScriptList.new)
|
|
129
|
+
c.run_button = JButton.new('Run')
|
|
130
|
+
c.label_results = JLabel.new('Results')
|
|
131
|
+
c.image_panel = ImagePanel.new
|
|
132
|
+
c.status = JLabel.new ""
|
|
133
|
+
|
|
134
|
+
Bullseye::NOTIFIER = Notifier.new(c.status)
|
|
135
|
+
script_runner = ScriptRunner.new(c.image_panel, scripts)
|
|
136
|
+
run_script = proc {
|
|
137
|
+
scripts.enabled = c.run_button.enabled = false
|
|
138
|
+
Thread.new do
|
|
139
|
+
NOTIFIER.notify 'Running scripts...'
|
|
140
|
+
script_runner.run_script
|
|
141
|
+
scripts.enabled = c.run_button.enabled = true
|
|
142
|
+
end
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
scripts.addMouseListener { |event| run_script.call if event.click_count == 2 }
|
|
146
|
+
i.run_button = {:action => proc { |t,e| run_script.call } }
|
|
147
|
+
end.build :args => 'Bullseye'
|
|
148
|
+
|
|
149
|
+
ui.default_close_operation = JFrame::EXIT_ON_CLOSE
|
|
150
|
+
|
|
151
|
+
end
|