Class: MtgCardMaker::SvgGradientService

Inherits:
Object
  • Object
show all
Defined in:
lib/mtg_card_maker/svg_gradient_service.rb

Overview

Simplified gradient definitions for SVG cards Removes complex abstraction in favor of direct gradient creation

Since:

  • 0.1.0

Class Method Summary collapse

Class Method Details

.add_metallic_pattern_circles(svg, color_scheme) ⇒ Object

Since:

  • 0.1.0



146
147
148
149
150
151
152
153
154
155
156
# File 'lib/mtg_card_maker/svg_gradient_service.rb', line 146

def add_metallic_pattern_circles(svg, color_scheme)
  svg.circle cx: '5', cy: '5', r: '0.5',
             fill: color_scheme.metallic_pattern_light,
             opacity: '0.6'
  svg.circle cx: '15', cy: '15', r: '0.5',
             fill: color_scheme.metallic_pattern_light,
             opacity: '0.6'
  svg.circle cx: '10', cy: '10', r: '0.3',
             fill: color_scheme.metallic_pattern_dark,
             opacity: '0.4'
end

.add_metallic_pattern_lines(svg, color_scheme) ⇒ Object

Since:

  • 0.1.0



135
136
137
138
139
140
141
142
143
144
# File 'lib/mtg_card_maker/svg_gradient_service.rb', line 135

def add_metallic_pattern_lines(svg, color_scheme)
  svg.line x1: '0', y1: '0', x2: '20', y2: '20',
           stroke: color_scheme.metallic_pattern_light,
           'stroke-width': '0.5',
           opacity: '0.3'
  svg.line x1: '20', y1: '0', x2: '0', y2: '20',
           stroke: color_scheme.metallic_pattern_dark,
           'stroke-width': '0.5',
           opacity: '0.2'
end

.card_gradient_id(color_scheme) ⇒ Object

Get gradient ID for card gradient

Since:

  • 0.1.0



17
18
19
# File 'lib/mtg_card_maker/svg_gradient_service.rb', line 17

def card_gradient_id(color_scheme)
  "#{color_scheme.scheme_name}_card_gradient"
end

.define_all_gradients(svg, color_scheme = DEFAULT_COLOR_SCHEME) ⇒ Object

Defines all gradients needed for a color scheme

Since:

  • 0.1.0



9
10
11
12
13
14
# File 'lib/mtg_card_maker/svg_gradient_service.rb', line 9

def define_all_gradients(svg, color_scheme = DEFAULT_COLOR_SCHEME)
  svg.defs do
    define_standard_gradients(svg, color_scheme)
    define_metallic_gradients(svg, color_scheme) if metallic_properties?(color_scheme)
  end
end

.define_card_gradient(svg, color_scheme, scheme_name) ⇒ Object

Since:

  • 0.1.0



65
66
67
68
69
70
71
# File 'lib/mtg_card_maker/svg_gradient_service.rb', line 65

def define_card_gradient(svg, color_scheme, scheme_name)
  svg.linearGradient id: "#{scheme_name}_card_gradient", x1: '0%', y1: '0%', x2: '100%', y2: '100%' do
    svg.stop offset: '0%', 'stop-color': color_scheme.card_gradient_start
    svg.stop offset: '50%', 'stop-color': color_scheme.card_gradient_middle
    svg.stop offset: '100%', 'stop-color': color_scheme.card_gradient_end
  end
end

.define_description_gradient(svg, color_scheme, scheme_name) ⇒ Object

Since:

  • 0.1.0



89
90
91
92
93
94
95
# File 'lib/mtg_card_maker/svg_gradient_service.rb', line 89

def define_description_gradient(svg, color_scheme, scheme_name)
  svg.linearGradient id: "#{scheme_name}_description_gradient", x1: '0%', y1: '0%', x2: '100%', y2: '100%' do
    svg.stop offset: '0%', 'stop-color': color_scheme.description_gradient_start
    svg.stop offset: '50%', 'stop-color': color_scheme.description_gradient_middle
    svg.stop offset: '100%', 'stop-color': color_scheme.description_gradient_end
  end
end

.define_frame_gradient(svg, color_scheme, scheme_name) ⇒ Object

Since:

  • 0.1.0



73
74
75
76
77
78
79
# File 'lib/mtg_card_maker/svg_gradient_service.rb', line 73

def define_frame_gradient(svg, color_scheme, scheme_name)
  svg.linearGradient id: "#{scheme_name}_frame_gradient", x1: '0%', y1: '0%', x2: '100%', y2: '100%' do
    svg.stop offset: '0%', 'stop-color': color_scheme.frame_gradient_start
    svg.stop offset: '50%', 'stop-color': color_scheme.frame_gradient_middle
    svg.stop offset: '100%', 'stop-color': color_scheme.frame_gradient_end
  end
end

.define_metallic_gradients(svg, color_scheme) ⇒ Object

Since:

  • 0.1.0



97
98
99
100
101
102
103
# File 'lib/mtg_card_maker/svg_gradient_service.rb', line 97

def define_metallic_gradients(svg, color_scheme)
  scheme_name = color_scheme.scheme_name

  define_metallic_highlight_gradient(svg, color_scheme, scheme_name)
  define_metallic_shadow_gradient(svg, color_scheme, scheme_name)
  define_metallic_pattern(svg, color_scheme, scheme_name)
end

.define_metallic_highlight_gradient(svg, color_scheme, scheme_name) ⇒ Object

Since:

  • 0.1.0



105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/mtg_card_maker/svg_gradient_service.rb', line 105

def define_metallic_highlight_gradient(svg, color_scheme, scheme_name)
  svg.linearGradient id: "#{scheme_name}_metallic_highlight_gradient", x1: '0%', y1: '0%', x2: '100%',
                     y2: '100%' do
    svg.stop offset: '0%', 'stop-color': color_scheme.metallic_highlight_end, 'stop-opacity': '0.6'
    svg.stop offset: '20%', 'stop-color': color_scheme.metallic_highlight_middle, 'stop-opacity': '0.9'
    svg.stop offset: '38%', 'stop-color': color_scheme.metallic_highlight_start, 'stop-opacity': '1.0'
    svg.stop offset: '42%', 'stop-color': color_scheme.metallic_highlight_middle, 'stop-opacity': '0.7'
    svg.stop offset: '62%', 'stop-color': color_scheme.metallic_highlight_end, 'stop-opacity': '0.5'
    svg.stop offset: '73%', 'stop-color': color_scheme.metallic_highlight_start, 'stop-opacity': '0.8'
    svg.stop offset: '80%', 'stop-color': color_scheme.metallic_highlight_middle, 'stop-opacity': '0.6'
    svg.stop offset: '100%', 'stop-color': color_scheme.metallic_highlight_end, 'stop-opacity': '0.4'
  end
end

.define_metallic_pattern(svg, color_scheme, scheme_name) ⇒ Object

Since:

  • 0.1.0



127
128
129
130
131
132
133
# File 'lib/mtg_card_maker/svg_gradient_service.rb', line 127

def define_metallic_pattern(svg, color_scheme, scheme_name)
  svg.pattern id: "#{scheme_name}_metallic_pattern", x: '0', y: '0', width: '20', height: '20',
              patternUnits: 'userSpaceOnUse' do
    add_metallic_pattern_lines(svg, color_scheme)
    add_metallic_pattern_circles(svg, color_scheme)
  end
end

.define_metallic_shadow_gradient(svg, color_scheme, scheme_name) ⇒ Object

Since:

  • 0.1.0



119
120
121
122
123
124
125
# File 'lib/mtg_card_maker/svg_gradient_service.rb', line 119

def define_metallic_shadow_gradient(svg, color_scheme, scheme_name)
  svg.radialGradient id: "#{scheme_name}_metallic_shadow_gradient", cx: '50%', cy: '50%', r: '70%' do
    svg.stop offset: '0%', 'stop-color': color_scheme.metallic_shadow_start, 'stop-opacity': '0.3'
    svg.stop offset: '50%', 'stop-color': color_scheme.metallic_shadow_middle, 'stop-opacity': '0.5'
    svg.stop offset: '100%', 'stop-color': color_scheme.metallic_shadow_end, 'stop-opacity': '0.7'
  end
end

.define_name_gradient(svg, color_scheme, scheme_name) ⇒ Object

Since:

  • 0.1.0



81
82
83
84
85
86
87
# File 'lib/mtg_card_maker/svg_gradient_service.rb', line 81

def define_name_gradient(svg, color_scheme, scheme_name)
  svg.linearGradient id: "#{scheme_name}_name_gradient", x1: '0%', y1: '0%', x2: '100%', y2: '100%' do
    svg.stop offset: '0%', 'stop-color': color_scheme.name_gradient_start
    svg.stop offset: '50%', 'stop-color': color_scheme.name_gradient_middle
    svg.stop offset: '100%', 'stop-color': color_scheme.name_gradient_end
  end
end

.define_standard_gradients(svg, color_scheme) ⇒ Object

Since:

  • 0.1.0



56
57
58
59
60
61
62
63
# File 'lib/mtg_card_maker/svg_gradient_service.rb', line 56

def define_standard_gradients(svg, color_scheme)
  scheme_name = color_scheme.scheme_name

  define_card_gradient(svg, color_scheme, scheme_name)
  define_frame_gradient(svg, color_scheme, scheme_name)
  define_name_gradient(svg, color_scheme, scheme_name)
  define_description_gradient(svg, color_scheme, scheme_name)
end

.description_gradient_id(color_scheme) ⇒ Object

Get gradient ID for description gradient

Since:

  • 0.1.0



32
33
34
# File 'lib/mtg_card_maker/svg_gradient_service.rb', line 32

def description_gradient_id(color_scheme)
  "#{color_scheme.scheme_name}_description_gradient"
end

.frame_gradient_id(color_scheme) ⇒ Object

Get gradient ID for frame gradient

Since:

  • 0.1.0



22
23
24
# File 'lib/mtg_card_maker/svg_gradient_service.rb', line 22

def frame_gradient_id(color_scheme)
  "#{color_scheme.scheme_name}_frame_gradient"
end

.metallic_highlight_gradient_id(color_scheme) ⇒ Object

Get gradient ID for metallic highlight gradient

Since:

  • 0.1.0



37
38
39
# File 'lib/mtg_card_maker/svg_gradient_service.rb', line 37

def metallic_highlight_gradient_id(color_scheme)
  "#{color_scheme.scheme_name}_metallic_highlight_gradient"
end

.metallic_pattern_id(color_scheme) ⇒ Object

Get pattern ID for metallic texture

Since:

  • 0.1.0



47
48
49
# File 'lib/mtg_card_maker/svg_gradient_service.rb', line 47

def metallic_pattern_id(color_scheme)
  "#{color_scheme.scheme_name}_metallic_pattern"
end

.metallic_properties?(color_scheme) ⇒ Boolean

Check if color scheme has metallic properties

Returns:

  • (Boolean)

Since:

  • 0.1.0



52
53
54
# File 'lib/mtg_card_maker/svg_gradient_service.rb', line 52

def metallic_properties?(color_scheme)
  [:gold, :colorless].include?(color_scheme.scheme_name)
end

.metallic_shadow_gradient_id(color_scheme) ⇒ Object

Get gradient ID for metallic shadow gradient

Since:

  • 0.1.0



42
43
44
# File 'lib/mtg_card_maker/svg_gradient_service.rb', line 42

def metallic_shadow_gradient_id(color_scheme)
  "#{color_scheme.scheme_name}_metallic_shadow_gradient"
end

.name_gradient_id(color_scheme) ⇒ Object

Get gradient ID for name gradient

Since:

  • 0.1.0



27
28
29
# File 'lib/mtg_card_maker/svg_gradient_service.rb', line 27

def name_gradient_id(color_scheme)
  "#{color_scheme.scheme_name}_name_gradient"
end