123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- # Style is eveything relzted to the look and feel of a widget,
- # That is the foreground, background, border colors as well as
- # the font
- module Zori
- class Style
- # Style colors is a class that groups the colors of the style
- class Colors
-
- attr_accessor :foreground
- attr_accessor :background
- attr_accessor :border
-
- def initialize(fg = nil, bg = nil, br = nil, hi = nil, sh = nil)
- @foreground = fg || [255,255,255]
- @background = bg || [0,0,128]
- # PaleGreen # GoldenWhisp # PaleGoldenRod
- @border = br || [191,191,191]
- end
-
- # Returns a deep copy of self
- def deep_copy()
- return self.class.new(@text, @background, @border, @highlight, @shadow)
- end
-
- end
-
-
- # A spacer is used to leave space in the given direction between widgets
- # or between a widget and it's content
- class Spacers
- attr_accessor :top
- attr_accessor :left
- attr_accessor :bottom
- attr_accessor :right
-
- def initialize(t = 0, l = nil, b = nil, r = nil)
- @top = t || 0
- @bottom = b || @top
- @left = l || @top
- @right = r || @left
- end
-
- # Returns a deep copy of self
- def deep_copy()
- return self.class.new(@top, @left, @bottom, @right)
- end
- end
-
- attr_reader :font
- attr_reader :colors
- attr_reader :margin
- attr_reader :padding
- attr_accessor :alignment
- #
- DEFAULT_FONTNAME = 'dejavuserif'
- DEFAULT_MARGIN = 4
- DEFAULT_PADDING = 4
- DEFAULT_ALIGNMENT = :left
- DEFAULT_BACKGROUND = 'green.png'
-
- def self.font_dir
- return '/font'
- end
-
- def initialize(font = nil, colors_in = nil, background = DEFAULT_BACKGROUND)
- @font = font
- @colors = colors_in || Zori::Style::Colors.new
- @margin = DEFAULT_MARGIN
- @padding = DEFAULT_PADDING
- @alignment = DEFAULT_ALIGNMENT
- load_background(background)
- yield self if block_given?
- end
-
- def load_background(back)
- if back.is_a? String
- @bgimage = Zori::Hanao.load_image('ui', 'background', back) rescue nil;
- else
- @bgimage = back
- end
- end
-
-
- # Returns a deep copy of self
- def deep_copy()
- new_colors = self.colors.deep_copy();
- return self.class.new(@font, new_colors, @bgimage)
- end
- def colors_foreground()
- return self.colors.foreground
- end
-
- def colors_highlight()
- return self.colors.highlight
- end
-
- def colors_border()
- return self.colors.border
- end
-
- # Sets the graph node object to the given Zori style.
- def to_graph(node)
- node.background_color = @colors.background
- node.border_color = @colors.border
- node.color = @colors.foreground
- node.margin = @margin
- node.border_thickness = @thickness
- Eruta::Graph.border_thickness_(@id, t)
- end
-
- def angle=(a)
- Eruta::Graph.angle_(@id, r, g, b, a)
- end
-
- def size=(size)
- w, h = *size
- Eruta::Graph.size_(@id, w, h)
- end
-
- def font_id=(f)
- Eruta::Graph.font_(@id, f)
- end
-
-
- def self.default
- @default ||= self.new()
- return @default
- end
- end # class Style
- end # module Zori
|