dedalus 0.2.17 → 0.2.18
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/dedalus/app_view_composer.rb +12 -5
- data/lib/dedalus/application_view.rb +7 -5
- data/lib/dedalus/elements/image.rb +3 -3
- data/lib/dedalus/elements/image_grid.rb +3 -2
- data/lib/dedalus/elements/map_tile.rb +31 -0
- data/lib/dedalus/elements/sprite_field.rb +3 -1
- data/lib/dedalus/elements/text.rb +1 -1
- data/lib/dedalus/elements.rb +11 -11
- data/lib/dedalus/font_repository.rb +10 -0
- data/lib/dedalus/image_repository.rb +7 -0
- data/lib/dedalus/pattern_library/molecules/library_section_tab.rb +8 -4
- data/lib/dedalus/pattern_library/molecules/periodic_table.rb +1 -1
- data/lib/dedalus/pattern_library/organisms/app_sidebar.rb +13 -6
- data/lib/dedalus/pattern_library/templates/app_template.rb +11 -10
- data/lib/dedalus/version.rb +1 -1
- data/lib/dedalus/view_traversal.rb +13 -15
- data/lib/dedalus.rb +2 -0
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7aad84d5fe9bd686820573a33ecd092f9ba1c7ed
|
4
|
+
data.tar.gz: c352ebd5e3bcbcd9c03a43c3e258f63d9dbcafcd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ecd0ed76f0fe13bfa51d882764f024887ef098d326b61d3e671e73b9d2fa5d67bf84ca950d7d61ecc24dfe58c445c2dc6ba1a8d6ae716fde49636b122b47f5ce
|
7
|
+
data.tar.gz: fb1bd4de715afe17664f605619db2548ce63877f97cb66a364e951baedcc8fb1fd1559b0c50dbdaa19e34b3b35cde6fbc235f588be2d88cfc831f765e61b0f73
|
@@ -5,22 +5,27 @@ module Dedalus
|
|
5
5
|
|
6
6
|
def traverse(structure, origin: [0,0], dimensions:, render: false, &blk)
|
7
7
|
traversal = ViewTraversal.new(&blk)
|
8
|
-
traversal.walk!(structure, origin: origin, dimensions: dimensions, render: render)
|
8
|
+
structure = traversal.walk!(structure, origin: origin, dimensions: dimensions, render: render)
|
9
9
|
structure
|
10
10
|
end
|
11
11
|
|
12
12
|
def send_molecule(structure, window_dims, mouse_position:, message:)
|
13
13
|
mouse_coord = coord(*mouse_position)
|
14
14
|
|
15
|
-
traverse(structure, origin: [0,0], dimensions: window_dims) do
|
16
|
-
on_molecule do |molecule, origin:, dimensions:|
|
15
|
+
updated_structure = traverse(structure, origin: [0,0], dimensions: window_dims) do
|
16
|
+
on_molecule do |molecule, origin:, dimensions:, z_index:|
|
17
17
|
element_bounding_box = Geometer::Rectangle.new(coord(*origin), dim(*dimensions))
|
18
18
|
mouse_overlap = element_bounding_box.contains?(mouse_coord) rescue false # could get bad coords...
|
19
19
|
if mouse_overlap
|
20
|
+
molecule.position = origin
|
20
21
|
molecule.send(message)
|
21
22
|
end
|
23
|
+
|
24
|
+
molecule
|
22
25
|
end
|
23
26
|
end
|
27
|
+
|
28
|
+
updated_structure
|
24
29
|
end
|
25
30
|
|
26
31
|
def hover_molecule(structure, window_dims, mouse_position:)
|
@@ -33,7 +38,7 @@ module Dedalus
|
|
33
38
|
|
34
39
|
def render!(structure, dims)
|
35
40
|
traverse(structure, origin: [0,0], dimensions: dims, render: true) do
|
36
|
-
on_atom do |atom, origin:, dimensions:, freeform:|
|
41
|
+
on_atom do |atom, origin:, dimensions:, freeform:, z_index:|
|
37
42
|
if atom.background_color
|
38
43
|
atom.draw_bounding_box(
|
39
44
|
color: atom.background_color,
|
@@ -50,10 +55,12 @@ module Dedalus
|
|
50
55
|
atom.position = origin
|
51
56
|
end
|
52
57
|
|
58
|
+
atom.z_order = z_index
|
59
|
+
|
53
60
|
atom.render
|
54
61
|
end
|
55
62
|
|
56
|
-
on_element do |element, origin:, dimensions:|
|
63
|
+
on_element do |element, origin:, dimensions:, z_index:|
|
57
64
|
if element.background_color
|
58
65
|
element.draw_bounding_box(
|
59
66
|
color: element.background_color,
|
@@ -11,14 +11,16 @@ module Dedalus
|
|
11
11
|
|
12
12
|
def click
|
13
13
|
p [ :app_view_click ]
|
14
|
-
composer.click_molecule(
|
14
|
+
composer.click_molecule(
|
15
|
+
app_screen,
|
16
|
+
[window.width, window.height],
|
17
|
+
mouse_position: mouse_position
|
18
|
+
)
|
15
19
|
end
|
16
20
|
|
17
21
|
def compose(screen)
|
18
|
-
|
19
|
-
composer.render!(screen, dimensions)
|
20
|
-
# cursor.position = mouse_position
|
21
|
-
# cursor.render
|
22
|
+
composer.hover_molecule(screen, dimensions, mouse_position: mouse_position)
|
23
|
+
composer.render!(screen.shown, dimensions)
|
22
24
|
end
|
23
25
|
|
24
26
|
def dimensions
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Dedalus
|
2
2
|
module Elements
|
3
3
|
class ImageGrid < Dedalus::Molecule
|
4
|
-
attr_accessor :grid, :tiles_path, :tile_width, :tile_height
|
4
|
+
attr_accessor :grid, :tiles_path, :tile_width, :tile_height, :tile_class
|
5
5
|
attr_accessor :scale
|
6
6
|
|
7
7
|
def show
|
@@ -49,7 +49,7 @@ module Dedalus
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def sprite_for(frame)
|
52
|
-
|
52
|
+
tile_class.constantize.new(
|
53
53
|
frame: frame,
|
54
54
|
asset_width: tile_width,
|
55
55
|
asset_height: tile_height,
|
@@ -71,6 +71,7 @@ module Dedalus
|
|
71
71
|
tiles_path: "media/images/tiles.png",
|
72
72
|
tile_width: 64,
|
73
73
|
tile_height: 64,
|
74
|
+
tile_class: "Dedalus::Elements::MapTile", #Elements::Sprite",
|
74
75
|
scale: 0.2,
|
75
76
|
grid: [
|
76
77
|
[ nil, 0, 2, 0, 1 ],
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Dedalus
|
2
|
+
module Elements
|
3
|
+
class MapTile < Dedalus::Molecule
|
4
|
+
attr_accessor :frame, :asset_width, :asset_height, :path, :scale
|
5
|
+
|
6
|
+
attr_accessor :highlight
|
7
|
+
|
8
|
+
def show
|
9
|
+
tile_sprite
|
10
|
+
end
|
11
|
+
|
12
|
+
def tile_sprite
|
13
|
+
Sprite.new(
|
14
|
+
frame: frame,
|
15
|
+
asset_width: asset_width,
|
16
|
+
asset_height: asset_height,
|
17
|
+
path: path,
|
18
|
+
scale: scale
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.description
|
23
|
+
'example of a custom tile class for image grid/sprite field'
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.example_data
|
27
|
+
Sprite.example_data
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -2,7 +2,7 @@ module Dedalus
|
|
2
2
|
module Elements
|
3
3
|
class SpriteField < Dedalus::Organism
|
4
4
|
attr_accessor :grid, :sprite_map, :scale, :camera_location
|
5
|
-
attr_accessor :tile_width, :tile_height, :tiles_path
|
5
|
+
attr_accessor :tile_width, :tile_height, :tiles_path, :tile_class
|
6
6
|
|
7
7
|
def show
|
8
8
|
layers
|
@@ -45,6 +45,7 @@ module Dedalus
|
|
45
45
|
grid: grid,
|
46
46
|
tile_width: tile_width,
|
47
47
|
tile_height: tile_height,
|
48
|
+
tile_class: tile_class,
|
48
49
|
scale: scale,
|
49
50
|
offset: camera_offset,
|
50
51
|
name: 'sprite-field-tiles'
|
@@ -77,6 +78,7 @@ module Dedalus
|
|
77
78
|
tiles_path: "media/images/tiles.png",
|
78
79
|
tile_width: 64,
|
79
80
|
tile_height: 64,
|
81
|
+
tile_class: "Dedalus::Elements::MapTile",
|
80
82
|
sprite_map: {
|
81
83
|
[1.2,2.4] => [ Sprite.new(Sprite.example_data) ]
|
82
84
|
}
|
@@ -5,7 +5,7 @@ module Dedalus
|
|
5
5
|
|
6
6
|
def render(*)
|
7
7
|
x,y = *position
|
8
|
-
font.draw(text, x + padding, y + padding,
|
8
|
+
font.draw(text, x + padding, y + padding, z_order, self.scale, self.scale)
|
9
9
|
|
10
10
|
# draw_bounding_box(origin: [x,y], dimensions: dimensions)
|
11
11
|
end
|
data/lib/dedalus/elements.rb
CHANGED
@@ -7,15 +7,6 @@ module Dedalus
|
|
7
7
|
@active_view ||= nil
|
8
8
|
end
|
9
9
|
|
10
|
-
class FontRepository
|
11
|
-
def self.get_font(font_name='Helvetica',size: 20)
|
12
|
-
@fonts ||= {}
|
13
|
-
@fonts[font_name] ||= {}
|
14
|
-
@fonts[font_name][size] ||= Gosu::Font.new(size, name: font_name)
|
15
|
-
@fonts[font_name][size]
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
10
|
class Element
|
20
11
|
attr_accessor :position, :offset
|
21
12
|
|
@@ -28,10 +19,17 @@ module Dedalus
|
|
28
19
|
attr_accessor :padding, :margin
|
29
20
|
attr_accessor :color, :background_color
|
30
21
|
|
22
|
+
attr_accessor :z_order #index
|
23
|
+
|
31
24
|
def initialize(attrs={})
|
32
25
|
attrs.each { |(k,v)| instance_variable_set(:"@#{k}",v) } unless attrs.nil?
|
33
26
|
end
|
34
27
|
|
28
|
+
attr_accessor :shown
|
29
|
+
def shown
|
30
|
+
@shown ||= show
|
31
|
+
end
|
32
|
+
|
35
33
|
def record?
|
36
34
|
false
|
37
35
|
end
|
@@ -46,7 +44,7 @@ module Dedalus
|
|
46
44
|
window.draw_quad(x, y, c,
|
47
45
|
x, y+h, c,
|
48
46
|
x+w, y, c,
|
49
|
-
x+w, y+h, c,ZOrder::Background)
|
47
|
+
x+w, y+h, c, ZOrder::Background)
|
50
48
|
end
|
51
49
|
|
52
50
|
def view
|
@@ -103,6 +101,8 @@ module Dedalus
|
|
103
101
|
# maybe should also pull out rows and columns?
|
104
102
|
# could cleanup traversal impl, and will be clearer ultimately
|
105
103
|
class Layer < Element
|
104
|
+
attr_accessor :elements
|
105
|
+
|
106
106
|
def initialize(elements, freeform: false)
|
107
107
|
@elements = elements
|
108
108
|
@freeform = freeform
|
@@ -118,7 +118,7 @@ module Dedalus
|
|
118
118
|
end
|
119
119
|
|
120
120
|
class LayerStack < Element
|
121
|
-
|
121
|
+
attr_accessor :layers
|
122
122
|
|
123
123
|
def initialize(layers: [])
|
124
124
|
@layers = []
|
@@ -18,5 +18,12 @@ module Dedalus
|
|
18
18
|
@recordings[id] ||= window.record(width.to_i,height.to_i,&blk)
|
19
19
|
@recordings[id]
|
20
20
|
end
|
21
|
+
|
22
|
+
# TODO could handle overflows/alignment in text (should use for code...?)
|
23
|
+
# def self.lookup_text(text, line_height)
|
24
|
+
# @text_images ||= {}
|
25
|
+
# @text_images[text] ||= Gosu::Image.from_text(text, line_height)
|
26
|
+
# @text_images[text]
|
27
|
+
# end
|
21
28
|
end
|
22
29
|
end
|
@@ -4,11 +4,15 @@ module Dedalus
|
|
4
4
|
attr_accessor :icon, :name, :description, :scale, :highlight, :section_color
|
5
5
|
|
6
6
|
def show
|
7
|
-
Container.new(
|
7
|
+
Container.new(
|
8
|
+
[[icon_element, [ title_element, description_element ]]],
|
9
|
+
padding: 16,
|
10
|
+
scale: scale
|
11
|
+
)
|
8
12
|
end
|
9
13
|
|
10
14
|
def hover
|
11
|
-
|
15
|
+
self.scale = 1.05
|
12
16
|
end
|
13
17
|
|
14
18
|
def background_color
|
@@ -21,7 +25,7 @@ module Dedalus
|
|
21
25
|
end
|
22
26
|
|
23
27
|
def scale
|
24
|
-
@scale ||=
|
28
|
+
@scale ||= 1.0
|
25
29
|
end
|
26
30
|
|
27
31
|
def height
|
@@ -33,7 +37,7 @@ module Dedalus
|
|
33
37
|
end
|
34
38
|
|
35
39
|
def title_element
|
36
|
-
Elements::Heading.new(text: name)
|
40
|
+
Elements::Heading.new(text: name, scale: scale)
|
37
41
|
end
|
38
42
|
|
39
43
|
def description_element
|
@@ -1,10 +1,17 @@
|
|
1
1
|
module Dedalus
|
2
2
|
module PatternLibrary
|
3
3
|
class ApplicationSidebar < Dedalus::Organism
|
4
|
-
attr_accessor :
|
4
|
+
attr_accessor :library_section_tabs, :current_entry #_molecules
|
5
5
|
|
6
6
|
def show
|
7
|
-
|
7
|
+
library_section_tab_rows
|
8
|
+
end
|
9
|
+
|
10
|
+
def library_section_tab_rows
|
11
|
+
@tab_rows ||= self.library_section_tabs.map do |tab_data| #_molecules
|
12
|
+
tab_data[:highlight] = tab_data[:name] == current_entry
|
13
|
+
LibrarySectionTab.new(tab_data)
|
14
|
+
end
|
8
15
|
end
|
9
16
|
|
10
17
|
def padding
|
@@ -17,10 +24,10 @@ module Dedalus
|
|
17
24
|
|
18
25
|
def self.example_data
|
19
26
|
{
|
20
|
-
|
21
|
-
LibrarySectionTab.
|
22
|
-
LibrarySectionTab.
|
23
|
-
LibrarySectionTab.
|
27
|
+
library_section_tabs: [
|
28
|
+
LibrarySectionTab.example_data,
|
29
|
+
LibrarySectionTab.example_data,
|
30
|
+
LibrarySectionTab.example_data
|
24
31
|
]
|
25
32
|
}
|
26
33
|
end
|
@@ -78,21 +78,22 @@ module Dedalus
|
|
78
78
|
end
|
79
79
|
|
80
80
|
def sidebar
|
81
|
-
ApplicationSidebar.new(
|
82
|
-
|
81
|
+
@sidebar ||= ApplicationSidebar.new(
|
82
|
+
library_section_tabs: library_section_tabs, #_molecules: section_tabs,
|
83
83
|
width_percent: 0.2,
|
84
|
+
current_entry: current_entry_name,
|
84
85
|
background_color: Palette.decode_color('darkgray')
|
85
86
|
)
|
86
87
|
end
|
87
88
|
|
88
|
-
def section_tabs
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
end
|
89
|
+
# def section_tabs
|
90
|
+
# tab_list = library_section_tabs.map do |attrs|
|
91
|
+
# highlight = attrs[:name] == current_entry_name
|
92
|
+
# LibrarySectionTab.new(attrs.merge(highlight: highlight))
|
93
|
+
# end
|
94
|
+
# # p [ tab_list: tab_list ]
|
95
|
+
# tab_list
|
96
|
+
# end
|
96
97
|
end
|
97
98
|
end
|
98
99
|
end
|
data/lib/dedalus/version.rb
CHANGED
@@ -19,7 +19,7 @@ module Dedalus
|
|
19
19
|
@element_callback = blk
|
20
20
|
end
|
21
21
|
|
22
|
-
def walk!(structure, origin:, dimensions:, freeform: false, render: false)
|
22
|
+
def walk!(structure, origin:, dimensions:, freeform: false, render: false, z_index: ZOrder::Background)
|
23
23
|
width, height = *dimensions
|
24
24
|
|
25
25
|
height = structure.height if !structure.is_a?(Array) && structure.height
|
@@ -28,7 +28,7 @@ module Dedalus
|
|
28
28
|
x0, y0 = *origin
|
29
29
|
|
30
30
|
if structure.is_a?(Dedalus::Atom)
|
31
|
-
@atom_callback.call(structure, origin: origin, dimensions: dimensions, freeform: freeform) if @atom_callback
|
31
|
+
@atom_callback.call(structure, origin: origin, dimensions: dimensions, freeform: freeform, z_index: z_index) if @atom_callback
|
32
32
|
|
33
33
|
# implicitly array is rows, nested arrays are columns, doubly-nested arrays are rows, etc
|
34
34
|
elsif structure.is_a?(Array)
|
@@ -46,11 +46,11 @@ module Dedalus
|
|
46
46
|
margin_dims = [ width - margin*2, height - margin*2 ]
|
47
47
|
|
48
48
|
if structure.is_a?(Dedalus::Molecule) && @molecule_callback
|
49
|
-
@molecule_callback.call(structure, origin: margin_origin, dimensions: margin_dims)
|
49
|
+
@molecule_callback.call(structure, origin: margin_origin, dimensions: margin_dims, z_index: z_index)
|
50
50
|
end
|
51
51
|
|
52
52
|
if @element_callback
|
53
|
-
@element_callback.call(structure, origin: margin_origin, dimensions: margin_dims)
|
53
|
+
@element_callback.call(structure, origin: margin_origin, dimensions: margin_dims, z_index: z_index)
|
54
54
|
end
|
55
55
|
|
56
56
|
pad = structure.padding || 0.0
|
@@ -58,33 +58,31 @@ module Dedalus
|
|
58
58
|
pad_dims = [width - pad*2 - margin*2, height - pad*2 - margin*2 ]
|
59
59
|
|
60
60
|
if structure.is_a?(LayerStack)
|
61
|
-
layers
|
62
|
-
layers.each do |layer|
|
61
|
+
structure.layers.each do |layer|
|
63
62
|
if layer.freeform?
|
64
|
-
if layer.
|
65
|
-
layer.
|
66
|
-
walk!(layer_element, origin: pad_origin, dimensions: pad_dims, freeform: true, render: render)
|
63
|
+
if layer.shown.is_a?(Array)
|
64
|
+
layer.elements.each_with_index do |layer_element, z_offset|
|
65
|
+
walk!(layer_element, origin: pad_origin, dimensions: pad_dims, freeform: true, render: render, z_index: z_index+z_offset)
|
67
66
|
end
|
68
67
|
else
|
69
|
-
walk!(layer, origin: pad_origin, dimensions: pad_dims, freeform: true, render: render)
|
68
|
+
walk!(layer.elements, origin: pad_origin, dimensions: pad_dims, freeform: true, render: render, z_index: z_index)
|
70
69
|
end
|
71
70
|
else
|
72
|
-
walk!(layer, origin: pad_origin, dimensions: pad_dims, freeform: false, render: render)
|
71
|
+
walk!(layer.elements, origin: pad_origin, dimensions: pad_dims, freeform: false, render: render, z_index: z_index)
|
73
72
|
end
|
74
73
|
end
|
75
74
|
else
|
76
75
|
if structure.record? && render
|
77
76
|
recorded_image = ImageRepository.lookup_recording(structure.name, structure.width, structure.height, structure.window) do
|
78
|
-
walk!(structure.
|
77
|
+
walk!(structure.shown, origin: [0,0], dimensions: pad_dims, freeform: freeform, render: render)
|
79
78
|
end
|
80
79
|
|
81
80
|
ox,oy = *pad_origin
|
82
|
-
recorded_image.draw(ox,oy,
|
81
|
+
recorded_image.draw(ox,oy,z_index)
|
83
82
|
else
|
84
|
-
walk!(structure.
|
83
|
+
walk!(structure.shown, origin: pad_origin, dimensions: pad_dims, freeform: freeform, render: render, z_index: z_index)
|
85
84
|
end
|
86
85
|
end
|
87
|
-
|
88
86
|
end
|
89
87
|
end
|
90
88
|
|
data/lib/dedalus.rb
CHANGED
@@ -9,6 +9,7 @@ require 'dedalus/application_view'
|
|
9
9
|
|
10
10
|
require 'dedalus/palette'
|
11
11
|
require 'dedalus/image_repository'
|
12
|
+
require 'dedalus/font_repository'
|
12
13
|
|
13
14
|
require 'dedalus/elements'
|
14
15
|
require 'dedalus/elements/void'
|
@@ -20,5 +21,6 @@ require 'dedalus/elements/icon'
|
|
20
21
|
require 'dedalus/elements/sprite'
|
21
22
|
require 'dedalus/elements/image_grid'
|
22
23
|
require 'dedalus/elements/sprite_field'
|
24
|
+
require 'dedalus/elements/map_tile'
|
23
25
|
|
24
26
|
require 'dedalus/pattern_library'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dedalus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joseph Weissman
|
@@ -170,11 +170,13 @@ files:
|
|
170
170
|
- lib/dedalus/elements/icon.rb
|
171
171
|
- lib/dedalus/elements/image.rb
|
172
172
|
- lib/dedalus/elements/image_grid.rb
|
173
|
+
- lib/dedalus/elements/map_tile.rb
|
173
174
|
- lib/dedalus/elements/paragraph.rb
|
174
175
|
- lib/dedalus/elements/sprite.rb
|
175
176
|
- lib/dedalus/elements/sprite_field.rb
|
176
177
|
- lib/dedalus/elements/text.rb
|
177
178
|
- lib/dedalus/elements/void.rb
|
179
|
+
- lib/dedalus/font_repository.rb
|
178
180
|
- lib/dedalus/image_repository.rb
|
179
181
|
- lib/dedalus/palette.rb
|
180
182
|
- lib/dedalus/pattern_library.rb
|