dedalus 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.document +3 -0
- data/.gitignore +7 -0
- data/.rspec +1 -0
- data/.yardopts +1 -0
- data/ChangeLog.md +4 -0
- data/Gemfile +11 -0
- data/LICENSE.txt +20 -0
- data/README.md +135 -0
- data/Rakefile +42 -0
- data/bin/dedalus +20 -0
- data/dedalus.gemspec +60 -0
- data/features/.gitkeep +0 -0
- data/features/dedalus.feature +1 -0
- data/features/step_definitions/.gitkeep +0 -0
- data/features/step_definitions/dedalus_steps.rb +1 -0
- data/gemspec.yml +20 -0
- data/lib/dedalus/app_view_composer.rb +60 -0
- data/lib/dedalus/application_view.rb +48 -0
- data/lib/dedalus/elements/heading.rb +13 -0
- data/lib/dedalus/elements/icon.rb +21 -0
- data/lib/dedalus/elements/image.rb +53 -0
- data/lib/dedalus/elements/paragraph.rb +13 -0
- data/lib/dedalus/elements/text.rb +44 -0
- data/lib/dedalus/elements.rb +78 -0
- data/lib/dedalus/palette.rb +89 -0
- data/lib/dedalus/pattern_library/application.rb +140 -0
- data/lib/dedalus/pattern_library/application_view.rb +28 -0
- data/lib/dedalus/pattern_library/library_view.rb +7 -0
- data/lib/dedalus/pattern_library/models/library.rb +10 -0
- data/lib/dedalus/pattern_library/models/library_item.rb +11 -0
- data/lib/dedalus/pattern_library/models/library_section.rb +26 -0
- data/lib/dedalus/pattern_library/molecules/library_item_example.rb +50 -0
- data/lib/dedalus/pattern_library/molecules/library_section_tab.rb +62 -0
- data/lib/dedalus/pattern_library/molecules/periodic_table.rb +32 -0
- data/lib/dedalus/pattern_library/molecules/periodic_table_entry.rb +70 -0
- data/lib/dedalus/pattern_library/organisms/app_footer.rb +37 -0
- data/lib/dedalus/pattern_library/organisms/app_header.rb +36 -0
- data/lib/dedalus/pattern_library/organisms/app_sidebar.rb +29 -0
- data/lib/dedalus/pattern_library/organisms/library_entry.rb +64 -0
- data/lib/dedalus/pattern_library/screens/app_screen.rb +22 -0
- data/lib/dedalus/pattern_library/templates/app_template.rb +94 -0
- data/lib/dedalus/pattern_library.rb +1 -0
- data/lib/dedalus/version.rb +4 -0
- data/lib/dedalus/view_traversal.rb +129 -0
- data/lib/dedalus.rb +40 -0
- data/media/icons/arrow_cursor.png +0 -0
- data/media/icons/atom.png +0 -0
- data/media/icons/hive.png +0 -0
- data/media/icons/house.png +0 -0
- data/media/icons/molecule.png +0 -0
- data/media/icons/paramecium.png +0 -0
- data/spec/dedalus_spec.rb +28 -0
- data/spec/spec_helper.rb +4 -0
- metadata +226 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e0478287f743dff77183fa294339e63c6391ae63
|
4
|
+
data.tar.gz: 004fd7192a547643a9cc859e8d64b7b4a4c7cd5c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b7c1239ab8bb26509b2dcd82bdca36211911c3ea7bec1900e71d30fec676cbd5f6e3029a289597c9513aaa5e01a151dac19cd9004897d81ad9d469beafbc0f13
|
7
|
+
data.tar.gz: e7c517a6f3d4eff49dffa45aded6b581949e9dc0fb859b6a793c2c1f842e18ad36be7d9637b018b03db8233b9f0d8fd52687d7b0b0803a2095b1e2ffe9e3ede3
|
data/.document
ADDED
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour --format documentation
|
data/.yardopts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--markup markdown --title "dedalus Documentation" --protected
|
data/ChangeLog.md
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2016 Joseph Weissman
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,135 @@
|
|
1
|
+
# dedalus
|
2
|
+
|
3
|
+
* [Homepage](https://rubygems.org/gems/dedalus)
|
4
|
+
* [Documentation](http://rubydoc.info/gems/dedalus/frames)
|
5
|
+
* [Email](mailto:jweissman1986 at gmail.com)
|
6
|
+
|
7
|
+
[![Code Climate GPA](https://codeclimate.com/github//dedalus/badges/gpa.svg)](https://codeclimate.com/github//dedalus)
|
8
|
+
|
9
|
+
## Description
|
10
|
+
|
11
|
+
An incredible atomic design pattern library for [Joyce](https://github.com/deepcerulean/joyce)
|
12
|
+
|
13
|
+
## Features
|
14
|
+
|
15
|
+
- Layout manager for Joyce apps
|
16
|
+
|
17
|
+
## Examples
|
18
|
+
|
19
|
+
require 'dedalus'
|
20
|
+
|
21
|
+
module PatternLibrary
|
22
|
+
class ApplicationView < Joyce::ApplicationView
|
23
|
+
def render
|
24
|
+
composer.render!(welcome_screen)
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
def welcome_screen
|
29
|
+
@welcome_screen ||= WelcomeScreen.create
|
30
|
+
end
|
31
|
+
|
32
|
+
def composer
|
33
|
+
@composer ||= Dedalus::ApplicationViewComposer.new(self)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class ApplicationHeader < Dedalus::Organism
|
38
|
+
attr_accessor :title, :subtitle
|
39
|
+
|
40
|
+
def show
|
41
|
+
[ heading, subheading ]
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
def heading
|
46
|
+
@heading ||= Elements::Heading.create(text: title)
|
47
|
+
end
|
48
|
+
|
49
|
+
def subheading
|
50
|
+
@subheading ||= Elements::Heading.create(text: subtitle, scale: 0.75)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
class ApplicationSidebar < Dedalus::Organism
|
55
|
+
has_many :library_sections
|
56
|
+
|
57
|
+
def show
|
58
|
+
self.library_sections.all
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
class LibrarySection < Dedalus::Molecule
|
63
|
+
belongs_to :application_sidebar
|
64
|
+
attr_accessor :name
|
65
|
+
|
66
|
+
def show
|
67
|
+
Elements::Heading.create(text: name)
|
68
|
+
end
|
69
|
+
|
70
|
+
def height
|
71
|
+
0.03
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
class ApplicationScreen < Dedalus::Template
|
76
|
+
def layout
|
77
|
+
[
|
78
|
+
page_header, [ sidebar, yield ]
|
79
|
+
]
|
80
|
+
end
|
81
|
+
|
82
|
+
private
|
83
|
+
def page_header
|
84
|
+
@page_header ||= ApplicationHeader.create(
|
85
|
+
title: 'Dedalus',
|
86
|
+
subtitle: 'A Visual Pattern Library for Joyce',
|
87
|
+
height: 0.1
|
88
|
+
)
|
89
|
+
end
|
90
|
+
|
91
|
+
def sidebar
|
92
|
+
@sidebar ||= ApplicationSidebar.create(
|
93
|
+
library_sections: [
|
94
|
+
LibrarySection.create(name: "Home"),
|
95
|
+
LibrarySection.create(name: "Atoms"),
|
96
|
+
LibrarySection.create(name: "Molecules"),
|
97
|
+
LibrarySection.create(name: "Organisms"),
|
98
|
+
LibrarySection.create(name: "Templates"),
|
99
|
+
LibrarySection.create(name: "Screens")
|
100
|
+
],
|
101
|
+
width: 0.3
|
102
|
+
)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
class WelcomeScreen < ApplicationScreen
|
107
|
+
def show
|
108
|
+
layout { welcome_message }
|
109
|
+
end
|
110
|
+
|
111
|
+
def welcome_message
|
112
|
+
@welcome_message ||= Elements::Heading.create(text: "Welcome to our Pattern Library!")
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
class Application < Joyce::Application
|
117
|
+
viewed_with ApplicationView
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
## Requirements
|
122
|
+
|
123
|
+
## Install
|
124
|
+
|
125
|
+
$ gem install dedalus
|
126
|
+
|
127
|
+
## Synopsis
|
128
|
+
|
129
|
+
$ dedalus
|
130
|
+
|
131
|
+
## Copyright
|
132
|
+
|
133
|
+
Copyright (c) 2016 Joseph Weissman
|
134
|
+
|
135
|
+
See {file:LICENSE.txt} for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
|
5
|
+
begin
|
6
|
+
require 'bundler/setup'
|
7
|
+
rescue LoadError => e
|
8
|
+
abort e.message
|
9
|
+
end
|
10
|
+
|
11
|
+
require 'rake'
|
12
|
+
|
13
|
+
require 'rubygems/tasks'
|
14
|
+
Gem::Tasks.new
|
15
|
+
|
16
|
+
require 'rspec/core/rake_task'
|
17
|
+
RSpec::Core::RakeTask.new
|
18
|
+
|
19
|
+
task :test => :spec
|
20
|
+
task :default => :spec
|
21
|
+
|
22
|
+
require 'yard'
|
23
|
+
YARD::Rake::YardocTask.new
|
24
|
+
task :doc => :yard
|
25
|
+
|
26
|
+
require 'cucumber/rake/task'
|
27
|
+
|
28
|
+
Cucumber::Rake::Task.new do |t|
|
29
|
+
t.cucumber_opts = %w[--format pretty]
|
30
|
+
end
|
31
|
+
|
32
|
+
require 'joyce'
|
33
|
+
require 'joyce/tasks/build'
|
34
|
+
|
35
|
+
task :app do
|
36
|
+
Joyce::Tasks::AppBuilder.new.make({
|
37
|
+
app_name: "dedalus",
|
38
|
+
app_class_name: 'Dedalus::PatternLibrary::Application',
|
39
|
+
template_location: "dist/Ruby.app",
|
40
|
+
target_directory: "dist"
|
41
|
+
})
|
42
|
+
end
|
data/bin/dedalus
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
root = File.expand_path(File.join(File.dirname(__FILE__),'..'))
|
4
|
+
if File.directory?(File.join(root,'.git'))
|
5
|
+
Dir.chdir(root) do
|
6
|
+
begin
|
7
|
+
require 'bundler/setup'
|
8
|
+
require 'dedalus'
|
9
|
+
Dedalus::PatternLibrary::Application.kickstart!({
|
10
|
+
setup: {
|
11
|
+
module_to_search: Dedalus::PatternLibrary
|
12
|
+
}
|
13
|
+
})
|
14
|
+
rescue LoadError => e
|
15
|
+
warn e.message
|
16
|
+
warn "Run `gem install bundler` to install Bundler"
|
17
|
+
exit(-1)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/dedalus.gemspec
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
Gem::Specification.new do |gem|
|
6
|
+
gemspec = YAML.load_file('gemspec.yml')
|
7
|
+
|
8
|
+
gem.name = gemspec.fetch('name')
|
9
|
+
gem.version = gemspec.fetch('version') do
|
10
|
+
lib_dir = File.join(File.dirname(__FILE__),'lib')
|
11
|
+
$LOAD_PATH << lib_dir unless $LOAD_PATH.include?(lib_dir)
|
12
|
+
|
13
|
+
require 'dedalus/version'
|
14
|
+
Dedalus::VERSION
|
15
|
+
end
|
16
|
+
|
17
|
+
gem.summary = gemspec['summary']
|
18
|
+
gem.description = gemspec['description']
|
19
|
+
gem.licenses = Array(gemspec['license'])
|
20
|
+
gem.authors = Array(gemspec['authors'])
|
21
|
+
gem.email = gemspec['email']
|
22
|
+
gem.homepage = gemspec['homepage']
|
23
|
+
|
24
|
+
glob = lambda { |patterns| gem.files & Dir[*patterns] }
|
25
|
+
|
26
|
+
gem.files = `git ls-files`.split($/)
|
27
|
+
gem.files = glob[gemspec['files']] if gemspec['files']
|
28
|
+
|
29
|
+
gem.executables = gemspec.fetch('executables') do
|
30
|
+
glob['bin/*'].map { |path| File.basename(path) }
|
31
|
+
end
|
32
|
+
gem.default_executable = gem.executables.first if Gem::VERSION < '1.7.'
|
33
|
+
|
34
|
+
gem.extensions = glob[gemspec['extensions'] || 'ext/**/extconf.rb']
|
35
|
+
gem.test_files = glob[gemspec['test_files'] || '{test/{**/}*_test.rb']
|
36
|
+
gem.extra_rdoc_files = glob[gemspec['extra_doc_files'] || '*.{txt,md}']
|
37
|
+
|
38
|
+
gem.require_paths = Array(gemspec.fetch('require_paths') {
|
39
|
+
%w[ext lib].select { |dir| File.directory?(dir) }
|
40
|
+
})
|
41
|
+
|
42
|
+
gem.requirements = Array(gemspec['requirements'])
|
43
|
+
gem.required_ruby_version = gemspec['required_ruby_version']
|
44
|
+
gem.required_rubygems_version = gemspec['required_rubygems_version']
|
45
|
+
gem.post_install_message = gemspec['post_install_message']
|
46
|
+
|
47
|
+
split = lambda { |string| string.split(/,\s*/) }
|
48
|
+
|
49
|
+
if gemspec['dependencies']
|
50
|
+
gemspec['dependencies'].each do |name,versions|
|
51
|
+
gem.add_dependency(name,split[versions])
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
if gemspec['development_dependencies']
|
56
|
+
gemspec['development_dependencies'].each do |name,versions|
|
57
|
+
gem.add_development_dependency(name,split[versions])
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
data/features/.gitkeep
ADDED
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
Feature: Blah blah blah
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
@wip
|
data/gemspec.yml
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
name: dedalus
|
2
|
+
summary: atomic patterns for 2d games
|
3
|
+
description: atomic ui pattern library toolkit for joyce
|
4
|
+
license: MIT
|
5
|
+
authors: Joseph Weissman
|
6
|
+
email: jweissman1986@gmail.com
|
7
|
+
homepage: https://rubygems.org/gems/dedalus
|
8
|
+
|
9
|
+
dependencies:
|
10
|
+
joyce: ~> 0.1
|
11
|
+
geometer: ~> 0.1
|
12
|
+
|
13
|
+
development_dependencies:
|
14
|
+
bundler: ~> 1.10
|
15
|
+
codeclimate-test-reporter: ~> 0.1
|
16
|
+
cucumber: ~> 0.10.2
|
17
|
+
rake: ~> 10.0
|
18
|
+
rspec: ~> 3.0
|
19
|
+
rubygems-tasks: ~> 0.2
|
20
|
+
yard: ~> 0.8
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Dedalus
|
2
|
+
class ApplicationViewComposer
|
3
|
+
include Geometer::PointHelpers
|
4
|
+
include Geometer::DimensionHelpers
|
5
|
+
|
6
|
+
def traverse(structure, origin: [0,0], dimensions:, &blk)
|
7
|
+
traversal = ViewTraversal.new(&blk)
|
8
|
+
traversal.walk!(structure, origin: origin, dimensions: dimensions)
|
9
|
+
structure
|
10
|
+
end
|
11
|
+
|
12
|
+
def send_molecule(structure, window_dims, mouse_position:, message:) #, origin: [0,0], dimensions:, mouse_position:)
|
13
|
+
mouse_coord = coord(*mouse_position)
|
14
|
+
|
15
|
+
traverse(structure, origin: [0,0], dimensions: window_dims) do
|
16
|
+
on_molecule do |molecule, origin:, dimensions:|
|
17
|
+
element_bounding_box = Geometer::Rectangle.new(coord(*origin), dim(*dimensions))
|
18
|
+
mouse_overlap = element_bounding_box.contains?(mouse_coord) rescue false # could get bad coords...
|
19
|
+
if mouse_overlap
|
20
|
+
molecule.send(message)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def hover_molecule(structure, window_dims, mouse_position:)
|
27
|
+
send_molecule(structure, window_dims, mouse_position: mouse_position, message: :hover)
|
28
|
+
end
|
29
|
+
|
30
|
+
def click_molecule(structure, window_dims, mouse_position:)
|
31
|
+
send_molecule(structure, window_dims, mouse_position: mouse_position, message: :click)
|
32
|
+
end
|
33
|
+
|
34
|
+
def render!(structure, dims)
|
35
|
+
traverse(structure, origin: [0,0], dimensions: dims) do
|
36
|
+
on_atom do |atom, origin:, dimensions:|
|
37
|
+
if atom.background_color
|
38
|
+
atom.draw_bounding_box(
|
39
|
+
color: atom.background_color,
|
40
|
+
origin: origin,
|
41
|
+
dimensions: dimensions
|
42
|
+
)
|
43
|
+
end
|
44
|
+
atom.position = origin
|
45
|
+
atom.render
|
46
|
+
end
|
47
|
+
|
48
|
+
on_element do |element, origin:, dimensions:|
|
49
|
+
if element.background_color
|
50
|
+
element.draw_bounding_box(
|
51
|
+
color: element.background_color,
|
52
|
+
origin: origin,
|
53
|
+
dimensions: dimensions
|
54
|
+
)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Dedalus
|
2
|
+
class ApplicationView < Joyce::ApplicationView
|
3
|
+
def initialize(app)
|
4
|
+
super(app)
|
5
|
+
Dedalus.activate!(self)
|
6
|
+
end
|
7
|
+
|
8
|
+
def render
|
9
|
+
compose(app_screen)
|
10
|
+
end
|
11
|
+
|
12
|
+
def click
|
13
|
+
p [ :app_view_click ]
|
14
|
+
composer.click_molecule(app_screen, [window.width, window.height], mouse_position: mouse_position)
|
15
|
+
end
|
16
|
+
|
17
|
+
def compose(screen)
|
18
|
+
screen = composer.hover_molecule(screen, dimensions, mouse_position: mouse_position)
|
19
|
+
composer.render!(screen, dimensions)
|
20
|
+
|
21
|
+
cursor.position = mouse_position
|
22
|
+
cursor.render
|
23
|
+
end
|
24
|
+
|
25
|
+
def dimensions
|
26
|
+
[window.width, window.height]
|
27
|
+
end
|
28
|
+
|
29
|
+
def mouse_position
|
30
|
+
if @application.window.fullscreen?
|
31
|
+
x0,y0 = *super
|
32
|
+
[ x0 * 2, y0 * 2 ]
|
33
|
+
else
|
34
|
+
super
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
protected
|
39
|
+
def cursor
|
40
|
+
@cursor ||= Elements::Icon.for :arrow_cursor
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
def composer
|
45
|
+
@composer ||= Dedalus::ApplicationViewComposer.new
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Dedalus
|
2
|
+
module Elements
|
3
|
+
class Icon < Image
|
4
|
+
attr_accessor :name
|
5
|
+
|
6
|
+
def scale
|
7
|
+
@scale ||= 0.062
|
8
|
+
end
|
9
|
+
|
10
|
+
def path
|
11
|
+
@path ||= "media/icons/#{name}.png"
|
12
|
+
end
|
13
|
+
|
14
|
+
class << self
|
15
|
+
def for(sym, attrs={})
|
16
|
+
new(attrs.merge(name: sym))
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Dedalus
|
2
|
+
module Elements
|
3
|
+
class ImageRepository
|
4
|
+
def self.lookup(path)
|
5
|
+
@images ||= {}
|
6
|
+
@images[path] ||= Gosu::Image.new(path)
|
7
|
+
@images[path]
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class Image < Dedalus::Atom
|
12
|
+
attr_accessor :path, :padding
|
13
|
+
|
14
|
+
def render
|
15
|
+
x,y = *position
|
16
|
+
asset.draw(x + padding, y + padding, ZOrder::Foreground, scale, scale)
|
17
|
+
end
|
18
|
+
|
19
|
+
def width
|
20
|
+
2*padding + (asset.width * scale)
|
21
|
+
end
|
22
|
+
|
23
|
+
def height
|
24
|
+
2*padding + (asset.height * scale)
|
25
|
+
end
|
26
|
+
|
27
|
+
def dimensions
|
28
|
+
[ width, height ]
|
29
|
+
end
|
30
|
+
|
31
|
+
def padding
|
32
|
+
@padding ||= 10.0
|
33
|
+
end
|
34
|
+
|
35
|
+
def scale
|
36
|
+
@scale ||= 1.0
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.example_data
|
40
|
+
{ path: "media/icons/house.png" }
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.description
|
44
|
+
"an image"
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
def asset
|
49
|
+
@asset ||= ImageRepository.lookup(path)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Dedalus
|
2
|
+
module Elements
|
3
|
+
class Text < Dedalus::Atom
|
4
|
+
attr_accessor :text, :scale, :padding
|
5
|
+
|
6
|
+
|
7
|
+
def render(*)
|
8
|
+
x,y = *position
|
9
|
+
font.draw(text, x + padding, y + padding, ZOrder::Text, self.scale, self.scale)
|
10
|
+
|
11
|
+
# draw_bounding_box(origin: [x,y], dimensions: dimensions)
|
12
|
+
end
|
13
|
+
|
14
|
+
def width
|
15
|
+
2*padding + (font.text_width(text) * scale)
|
16
|
+
end
|
17
|
+
|
18
|
+
def height
|
19
|
+
2*padding + (font.height * scale)
|
20
|
+
end
|
21
|
+
|
22
|
+
def padding
|
23
|
+
@padding ||= 0.0
|
24
|
+
end
|
25
|
+
|
26
|
+
def scale
|
27
|
+
@scale ||= 1.0
|
28
|
+
end
|
29
|
+
|
30
|
+
def dimensions
|
31
|
+
[ width, height ]
|
32
|
+
end
|
33
|
+
|
34
|
+
# sample data for the explorer...
|
35
|
+
def self.example_data
|
36
|
+
{ text: "Hello World" }
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.description
|
40
|
+
"words"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
module Dedalus
|
2
|
+
def self.activate!(app_view)
|
3
|
+
@active_view = app_view
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.active_view
|
7
|
+
@active_view ||= nil
|
8
|
+
end
|
9
|
+
|
10
|
+
class Element
|
11
|
+
attr_accessor :position
|
12
|
+
|
13
|
+
# in % as 0.0-1.0 (hint to compositing engine for elements in columns/rows respectively)
|
14
|
+
attr_accessor :width_percent, :height_percent
|
15
|
+
|
16
|
+
# raw width/height
|
17
|
+
attr_accessor :width, :height
|
18
|
+
|
19
|
+
attr_accessor :padding, :margin
|
20
|
+
attr_accessor :background_color
|
21
|
+
|
22
|
+
def initialize(attrs={})
|
23
|
+
attrs.each { |(k,v)| instance_variable_set(:"@#{k}",v) } unless attrs.nil?
|
24
|
+
end
|
25
|
+
|
26
|
+
def draw_bounding_box(origin:, dimensions:, color: Palette.gray) #, highlight: false)
|
27
|
+
x,y = *origin
|
28
|
+
w,h = *dimensions
|
29
|
+
|
30
|
+
raise "Invalid color #{color} given to #{self.class.name} for bounding box" unless color.is_a?(Dedalus::Color)
|
31
|
+
|
32
|
+
c = color.to_gosu
|
33
|
+
window.draw_quad(x,y,c,
|
34
|
+
x,y+h,c,
|
35
|
+
x+w,y,c,
|
36
|
+
x+w,y+h,c,ZOrder::Background)
|
37
|
+
end
|
38
|
+
|
39
|
+
def view
|
40
|
+
Dedalus.active_view
|
41
|
+
end
|
42
|
+
|
43
|
+
def font
|
44
|
+
view.font
|
45
|
+
end
|
46
|
+
|
47
|
+
def window
|
48
|
+
view.window
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
###
|
53
|
+
|
54
|
+
class Atom < Element
|
55
|
+
attr_accessor :scale, :padding
|
56
|
+
end
|
57
|
+
|
58
|
+
class Molecule < Element
|
59
|
+
def click
|
60
|
+
end
|
61
|
+
|
62
|
+
def hover
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
class Organism < Element
|
67
|
+
end
|
68
|
+
|
69
|
+
class Template < Element
|
70
|
+
end
|
71
|
+
|
72
|
+
class Screen < Element
|
73
|
+
end
|
74
|
+
|
75
|
+
module ZOrder
|
76
|
+
Background, Foreground, Text, Overlay = *(0..5)
|
77
|
+
end
|
78
|
+
end
|