gglib 1.1.0
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.
- data/gemspec.txt +15 -0
- data/gglib-1.1.tar.gz +0 -0
- data/gglib.gemspec +15 -0
- data/gglib.tar +0 -0
- data/lib/camera.rb +7 -0
- data/lib/carray.rb +71 -0
- data/lib/examples/BasicExample.rb +71 -0
- data/lib/examples/ConsoleDemo.rb +26 -0
- data/lib/examples/FadeIn.rb +40 -0
- data/lib/examples/SplashScreen.rb +30 -0
- data/lib/ext/menus.rb +0 -0
- data/lib/ext/splash.rb +42 -0
- data/lib/ext/themes.rb +159 -0
- data/lib/ext/widgets.rb +349 -0
- data/lib/gglib.rb +13 -0
- data/lib/image.rb +177 -0
- data/lib/mouse.rb +63 -0
- data/lib/null.rb +1 -0
- data/lib/state.rb +137 -0
- data/lib/theme.rb +205 -0
- data/lib/tile.rb +170 -0
- data/lib/widget.rb +206 -0
- data/lib/window.rb +324 -0
- metadata +74 -0
data/gemspec.txt
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
spec = Gem::Specification.new do |s|
|
2
|
+
s.name = 'gglib'
|
3
|
+
s.version = '1.1.0'
|
4
|
+
s.summary = "A GUI Library for the Gosu graphics engine."
|
5
|
+
s.description = "A GUI library for the Gosu graphics engine."
|
6
|
+
s.files = Dir['lib/**/*.rb']
|
7
|
+
s.require_path = 'lib'
|
8
|
+
s.autorequire = 'builder'
|
9
|
+
s.has_rdoc = true
|
10
|
+
s.extra_rdoc_files = Dir['[A-Z]*']
|
11
|
+
s.rdoc_options << '--title' << 'GGLib - A Gosu GUI Library'
|
12
|
+
s.author = "Praneeth Sadda"
|
13
|
+
s.email = "psadda@comcast.net"
|
14
|
+
s.homepage = "http://gglib.rubyforge.org"
|
15
|
+
end
|
data/gglib-1.1.tar.gz
ADDED
Binary file
|
data/gglib.gemspec
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
spec = Gem::Specification.new do |s|
|
2
|
+
s.name = 'gglib'
|
3
|
+
s.version = '1.1.0'
|
4
|
+
s.summary = "A GUI Library for the Gosu graphics engine."
|
5
|
+
s.description = "A GUI library for the Gosu graphics engine."
|
6
|
+
s.files = Dir['lib/**/*.rb']
|
7
|
+
s.require_path = 'lib'
|
8
|
+
s.autorequire = 'builder'
|
9
|
+
s.has_rdoc = true
|
10
|
+
s.extra_rdoc_files = Dir['[A-Z]*']
|
11
|
+
s.rdoc_options << '--title' << 'GGLib - A Gosu GUI Library'
|
12
|
+
s.author = "Praneeth Sadda"
|
13
|
+
s.email = "psadda@comcast.net"
|
14
|
+
s.homepage = "http://gglib.rubyforge.org"
|
15
|
+
end
|
data/gglib.tar
ADDED
Binary file
|
data/lib/camera.rb
ADDED
data/lib/carray.rb
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
module GGLib
|
2
|
+
|
3
|
+
#CArray is an Array which does not compact. CArrays place a priority on preserving the indices of each element in order to allow identification of elements thier indices.
|
4
|
+
#CArrays are used by the Window and Tile classes.
|
5
|
+
|
6
|
+
class CArray < Array
|
7
|
+
public
|
8
|
+
@intsize
|
9
|
+
def initialize
|
10
|
+
@intsize=0
|
11
|
+
super
|
12
|
+
end
|
13
|
+
def push(item)
|
14
|
+
self[@intsize]=item
|
15
|
+
@intsize+=1
|
16
|
+
return @intsize-1
|
17
|
+
end
|
18
|
+
def <<(item)
|
19
|
+
self[@intsize]=item
|
20
|
+
@intsize+=1
|
21
|
+
return @intsize-1
|
22
|
+
end
|
23
|
+
def each
|
24
|
+
i=0
|
25
|
+
while i<=@intsize
|
26
|
+
if self[i] !=nil
|
27
|
+
yield self[i]
|
28
|
+
end
|
29
|
+
i+=1
|
30
|
+
end
|
31
|
+
end
|
32
|
+
def delete(obj)
|
33
|
+
if obj!=nil
|
34
|
+
i=0
|
35
|
+
while i<=@intsize
|
36
|
+
if self[i] == obj
|
37
|
+
self[i]=nil
|
38
|
+
end
|
39
|
+
i+1
|
40
|
+
end
|
41
|
+
else
|
42
|
+
return nil
|
43
|
+
end
|
44
|
+
end
|
45
|
+
def delete_at(loc)
|
46
|
+
if loc<@intsize
|
47
|
+
self[loc]=nil
|
48
|
+
end
|
49
|
+
return self[loc+1]
|
50
|
+
end
|
51
|
+
def pp
|
52
|
+
puts "CArray: "
|
53
|
+
i=0
|
54
|
+
while i<=@intsize
|
55
|
+
if self[i] !=nil
|
56
|
+
puts i.to_s+"\t"+self[i].to_s
|
57
|
+
else
|
58
|
+
puts i.to_s+"\tnil"
|
59
|
+
end
|
60
|
+
i+=1
|
61
|
+
end
|
62
|
+
end
|
63
|
+
def compact
|
64
|
+
return false
|
65
|
+
end
|
66
|
+
def compact!
|
67
|
+
return false
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
end #module GGLib
|
@@ -0,0 +1,71 @@
|
|
1
|
+
begin
|
2
|
+
# In case you use Gosu via RubyGems.
|
3
|
+
require 'rubygems'
|
4
|
+
rescue LoadError
|
5
|
+
# In case you don't.
|
6
|
+
end
|
7
|
+
|
8
|
+
#Load Gosu
|
9
|
+
require "gosu"
|
10
|
+
#Load GGLib
|
11
|
+
require "../gglib"
|
12
|
+
#Load some extra widgets for us to play with
|
13
|
+
require "../ext/widgets"
|
14
|
+
#And themes to make them look cool
|
15
|
+
require "../ext/themes"
|
16
|
+
|
17
|
+
class MyGUIWindow < GGLib::GUIWindow
|
18
|
+
def initialize
|
19
|
+
super(640, 480, false, 20)
|
20
|
+
self.caption = "GGLib Tutorial"
|
21
|
+
#Rather than override methods such as update, button_down,
|
22
|
+
#and draw, as we would with plain Gosu code, we will override
|
23
|
+
#these methods in state objects. This allows the user to switch
|
24
|
+
#between various game states, such as between menus and the
|
25
|
+
#actual game, without having to litter their functions with
|
26
|
+
#switch statements or if-else statements.
|
27
|
+
self.state = MyStateObj.new
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
#Now for our state object:
|
32
|
+
class MyStateObj < GGLib::StateObject
|
33
|
+
#We can override the constructor as normal, but be careful not
|
34
|
+
#to mess around with the window here! The window does not belong
|
35
|
+
#to this state object yet: another state object is using it.
|
36
|
+
def initialize
|
37
|
+
super
|
38
|
+
@myvar = 42
|
39
|
+
end
|
40
|
+
#This method is called right after our state object gains ownership
|
41
|
+
#over the window. Now we can perform operations that modify the
|
42
|
+
#window.
|
43
|
+
def onStart
|
44
|
+
puts "MyStateObj activated."
|
45
|
+
#Since Gosu only allows one window instance at a time, the current
|
46
|
+
#window is automatically sotred in the global $window.
|
47
|
+
$window.setBackground("img/bggray.png")
|
48
|
+
#Whats a GUI Library without widgets?
|
49
|
+
#A textbox:
|
50
|
+
$textbox = GGLib::TextBox.new("textbox1", 242, 100, 12, GGLib::Themes::Windows)
|
51
|
+
#Some buttons:
|
52
|
+
GGLib::Button.new("button1", "Click Me", 270, 50, Proc.new{ |widget| $textbox.text = "Thank you" }, GGLib::Themes::Windows)
|
53
|
+
GGLib::Button.new("button2", "Exit", 270, 200, Proc.new{ |widget| $window.close; exit }, GGLib::Themes::Windows)
|
54
|
+
end
|
55
|
+
#This method is called right after our state object looses
|
56
|
+
#ownership of the window. The window is automatically reset, but
|
57
|
+
#if you modified anything other than the window, this is where you
|
58
|
+
#should clean it up.
|
59
|
+
def onEnd
|
60
|
+
puts "MyStateObj terminated."
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
#Create and launch the window.
|
65
|
+
MyGUIWindow.new.show
|
66
|
+
|
67
|
+
#To see how easy it is to customize your GUI with themeing, try
|
68
|
+
#replacing all of the instances of GGLib::Themes::BlueSteel in
|
69
|
+
#this file to GGLib::Themes::Rubygoo for a Rubygoo like theme,
|
70
|
+
#GGLib::Themes::Shade for a dark theme, and GGLib::Themes::Windows
|
71
|
+
#for a Windows Vista like theme.
|
@@ -0,0 +1,26 @@
|
|
1
|
+
begin
|
2
|
+
require 'rubygems'
|
3
|
+
rescue LoadError
|
4
|
+
end
|
5
|
+
|
6
|
+
require "gosu"
|
7
|
+
require "../gglib"
|
8
|
+
require "../ext/widgets"
|
9
|
+
require "../ext/themes"
|
10
|
+
|
11
|
+
class ConsoleDemoWindow < GGLib::GUIWindow
|
12
|
+
def initialize
|
13
|
+
super(640, 480, false, 20)
|
14
|
+
self.caption = "GGLib Console Demo"
|
15
|
+
self.state = ConsoleDemoState.new
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class ConsoleDemoState < GGLib::StateObject
|
20
|
+
def onStart
|
21
|
+
$window.setBackground("img/bg.png")
|
22
|
+
GGLib::Button.new("button2", "Open Console", 270, 200, Proc.new{ |widget| GGLib::DebugConsole.new }, GGLib::Themes::BlueSteel)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
ConsoleDemoWindow.new.show
|
@@ -0,0 +1,40 @@
|
|
1
|
+
begin
|
2
|
+
# In case you use Gosu via RubyGems.
|
3
|
+
require 'rubygems'
|
4
|
+
rescue LoadError
|
5
|
+
# In case you don't.
|
6
|
+
end
|
7
|
+
|
8
|
+
#Load Gosu
|
9
|
+
require "gosu"
|
10
|
+
#Load GGLib
|
11
|
+
require "../gglib"
|
12
|
+
#Load extra widgets (for ThemeButton)
|
13
|
+
require "../ext/widgets"
|
14
|
+
|
15
|
+
class FadeExample < GGLib::GUIWindow
|
16
|
+
def initialize
|
17
|
+
super(640, 480, false, 20)
|
18
|
+
self.caption = "GGLib Tutorial"
|
19
|
+
self.state = StartMenu.new
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
#The menu we will fade from
|
24
|
+
class StartMenu < GGLib::StateObject
|
25
|
+
def onStart
|
26
|
+
$window.setBackground("img/splash.png")
|
27
|
+
GGLib::ThemeButton.new("button1", "Fade", 270, 200, Proc.new{ |widget| $window.state = GGLib::FadeScreen.new(EndMenu.new, 2) })
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
#The menu we will fade to
|
32
|
+
class EndMenu < GGLib::StateObject
|
33
|
+
def onStart
|
34
|
+
$window.setBackground("img/bg.png")
|
35
|
+
GGLib::ThemeButton.new("button1", "Fade Back", 270, 200, Proc.new{ |widget| $window.state = GGLib::FadeScreen.new(StartMenu.new, 2) })
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
#Launch the window
|
40
|
+
FadeExample.new.show
|
@@ -0,0 +1,30 @@
|
|
1
|
+
begin
|
2
|
+
# In case you use Gosu via RubyGems.
|
3
|
+
require 'rubygems'
|
4
|
+
rescue LoadError
|
5
|
+
# In case you don't.
|
6
|
+
end
|
7
|
+
|
8
|
+
require "gosu"
|
9
|
+
require "../gglib"
|
10
|
+
require "../ext/splash"
|
11
|
+
|
12
|
+
class MySplashScreen < GGLib::SplashScreen
|
13
|
+
def initialize
|
14
|
+
super(640, 480, "img/splash.png")
|
15
|
+
end
|
16
|
+
def load
|
17
|
+
#Put initialization code here.
|
18
|
+
#This example doesn't actually have to initialize anything,
|
19
|
+
#so we will just use Thread#sleep to kill some time.
|
20
|
+
sleep(1)
|
21
|
+
end
|
22
|
+
def createWindow
|
23
|
+
#Once the load method is finished, create window is called.
|
24
|
+
#This is where we should initialize and lauch our window.
|
25
|
+
#We'll just resuse the routines from BasicExample.rb.
|
26
|
+
require "BasicExample"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
MySplashScreen.new.show
|
data/lib/ext/menus.rb
ADDED
File without changes
|
data/lib/ext/splash.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
module GGLib
|
2
|
+
|
3
|
+
class SplashScreen < Gosu::Window
|
4
|
+
def initialize(width=640, height=480, img = "null.png", caption = "Loading...")
|
5
|
+
super(width, height, false, 20)
|
6
|
+
self.caption = caption
|
7
|
+
@background_image = Gosu::Image.new(self, img, true)
|
8
|
+
@done=false
|
9
|
+
end
|
10
|
+
|
11
|
+
#Override this method and include all initialization methods here *except for opening the window*.
|
12
|
+
def load
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
#Override with method with the code needed to initialize the main application window.
|
17
|
+
def createWindow
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
def update
|
22
|
+
load
|
23
|
+
@done=true
|
24
|
+
if @done
|
25
|
+
puts "\nLaunching in:\n3"
|
26
|
+
sleep(1)
|
27
|
+
puts "2"
|
28
|
+
sleep(1)
|
29
|
+
puts "1"
|
30
|
+
sleep(1)
|
31
|
+
puts "0"
|
32
|
+
close
|
33
|
+
createWindow
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def draw
|
38
|
+
@background_image.draw(0, 0, 0)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
end #module GGLib
|
data/lib/ext/themes.rb
ADDED
@@ -0,0 +1,159 @@
|
|
1
|
+
module GGLib
|
2
|
+
|
3
|
+
$initthemes = false
|
4
|
+
|
5
|
+
module Themes
|
6
|
+
|
7
|
+
class BlueSteelTheme < ImageTheme
|
8
|
+
@@button = nil
|
9
|
+
def initialize
|
10
|
+
image = ThemeImageGroup.new( $gglroot+"/media/bluesteel/generic/menusmall.png", $gglroot+"/media/bluesteel/generic/menusmall.png", $gglroot+"/media/bluesteel/generic/menusmall.png" )
|
11
|
+
font = ThemeFontGroup.new( Gosu::Font.new($window, Gosu::default_font_name, 17), Gosu::Font.new($window, Gosu::default_font_name, 25), Gosu::Font.new($window, Gosu::default_font_name, 20))
|
12
|
+
super("BlueSteel.Generic", font, image)
|
13
|
+
end
|
14
|
+
def request(obj)
|
15
|
+
if @@button == nil #Can't initialize atglobal scope because $window may not have been set
|
16
|
+
@@button = ImageTheme.new("BlueSteel.Button", ThemeFontGroup.new( Gosu::Font.new($window, Gosu::default_font_name, 17), Gosu::Font.new($window, Gosu::default_font_name, 25), Gosu::Font.new($window, Gosu::default_font_name, 20)), ThemeImageGroup.new( $gglroot+"/media/bluesteel/button/button.png", $gglroot+"/media/bluesteel/button/buttonup.png" , $gglroot+"/media/bluesteel/button/buttonup.png" ))
|
17
|
+
@@textbox = ImageTheme.new("BlueSteel.TextBox", ThemeFontGroup.new( Gosu::Font.new($window, Gosu::default_font_name, 17), Gosu::Font.new($window, Gosu::default_font_name, 25), Gosu::Font.new($window, Gosu::default_font_name, 20)), ThemeImageGroup.new( $gglroot+"/media/bluesteel/textbox/textbox.png", $gglroot+"/media/bluesteel/textbox/textboxactive.png" , $gglroot+"/media/bluesteel/textbox/textboxactive.png" ))
|
18
|
+
@@label = ImageTheme.new("BlueSteel.Label", ThemeFontGroup.new( Gosu::Font.new($window, Gosu::default_font_name, 17), Gosu::Font.new($window, Gosu::default_font_name, 25), Gosu::Font.new($window, Gosu::default_font_name, 20)), ThemeImageGroup.new( $gglroot+"/null.png", $gglroot+"/null.png" , $gglroot+"/null.png" ) )
|
19
|
+
end
|
20
|
+
if obj.kind_of?(Button)
|
21
|
+
return @@button
|
22
|
+
elsif obj.kind_of?(TextBox)
|
23
|
+
return @@textbox
|
24
|
+
elsif obj.kind_of?(Label)
|
25
|
+
return @@label
|
26
|
+
end
|
27
|
+
return self
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class RubygooTheme < DrawnTheme
|
32
|
+
@@textbox = nil
|
33
|
+
def initialize
|
34
|
+
font = ThemeFontGroup.new( Gosu::Font.new($window, Gosu::default_font_name, 17), Gosu::Font.new($window, Gosu::default_font_name, 25), Gosu::Font.new($window, Gosu::default_font_name, 20), 0xff000000, 0xff848484)
|
35
|
+
super("Rubygoo.Generic", font)
|
36
|
+
end
|
37
|
+
def request(obj)
|
38
|
+
if @@textbox == nil #Can't initialize atglobal scope because $window may not have been set
|
39
|
+
@@textbox = RubygooTextTheme.new
|
40
|
+
@@label = RubygooLabelTheme.new
|
41
|
+
end
|
42
|
+
if obj.kind_of?(TextBox)
|
43
|
+
return @@textbox
|
44
|
+
elsif obj.kind_of?(Label)
|
45
|
+
return @@label
|
46
|
+
end
|
47
|
+
return self
|
48
|
+
end
|
49
|
+
def draw(x1,y1, x2, y2, state)
|
50
|
+
if state == 1
|
51
|
+
$window.draw_quad(x1, y1, 0xffb22222, x2, y1, 0xffb22222, x1, y2, 0xffb22222, x2, y2, 0xffb22222, ZOrder::Widget)
|
52
|
+
$window.draw_quad(x1+1, y1+1, 0xff6e6e6e, x2-1, y1+1, 0xff6e6e6e, x1+1, y2-1, 0xff6e6e6e, x2-1, y2-1, 0xff6e6e6e, ZOrder::Widget)
|
53
|
+
else
|
54
|
+
$window.draw_quad(x1, y1, 0xffb22222, x2, y1, 0xffb22222, x1, y2, 0xffb22222, x2, y2, 0xffb22222, ZOrder::Widget)
|
55
|
+
$window.draw_quad(x1+1, y1+1, 0xff808080, x2-1, y1+1, 0xff808080, x1+1, y2-1, 0xff808080, x2-1, y2-1, 0xff808080, ZOrder::Widget)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
class RubygooTextTheme < DrawnTheme
|
61
|
+
@@textbox = nil
|
62
|
+
def initialize
|
63
|
+
font = ThemeFontGroup.new( Gosu::Font.new($window, Gosu::default_font_name, 17), Gosu::Font.new($window, Gosu::default_font_name, 25), Gosu::Font.new($window, Gosu::default_font_name, 20), 0xff000000, 0xffb22222)
|
64
|
+
super("Rubygoo.TextBox", font)
|
65
|
+
end
|
66
|
+
def draw(x1,y1, x2, y2, state)
|
67
|
+
if state == 1
|
68
|
+
$window.draw_quad(x1, y1, 0xff6e6e6e, x2, y1, 0xff6e6e6e, x1, y2, 0xff6e6e6e, x2, y2, 0xff6e6e6e, ZOrder::Widget)
|
69
|
+
$window.draw_quad(x1+2, y1+2, 0xff000000, x2-2, y1+2, 0xff000000, x1+2, y2-2, 0xff000000, x2-2, y2-2, 0xff000000, ZOrder::Widget)
|
70
|
+
$window.draw_quad(x1+3, y1+3, 0xff6e6e6e, x2-3, y1+3, 0xff6e6e6e, x1+3, y2-3, 0xff6e6e6e, x2-3, y2-3, 0xff6e6e6e, ZOrder::Widget)
|
71
|
+
else
|
72
|
+
$window.draw_quad(x1, y1, 0xff808080, x2, y1, 0xff808080, x1, y2, 0xff808080, x2, y2, 0xff808080, ZOrder::Widget)
|
73
|
+
$window.draw_quad(x1+2, y1+2, 0xff000000, x2-2, y1+2, 0xff000000, x1+2, y2-2, 0xff000000, x2-2, y2-2, 0xff000000, ZOrder::Widget)
|
74
|
+
$window.draw_quad(x1+3, y1+3, 0xff808080, x2-3, y1+3, 0xff808080, x1+3, y2-3, 0xff808080, x2-3, y2-3, 0xff808080, ZOrder::Widget)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
class RubygooLabelTheme < DrawnTheme
|
80
|
+
@@textbox = nil
|
81
|
+
def initialize
|
82
|
+
font = ThemeFontGroup.new( Gosu::Font.new($window, Gosu::default_font_name, 17), Gosu::Font.new($window, Gosu::default_font_name, 25), Gosu::Font.new($window, Gosu::default_font_name, 20), 0xff000000, 0xffb22222)
|
83
|
+
super("Rubygoo.Label", font)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
class ShadeTheme < DrawnTheme
|
88
|
+
@@label = nil
|
89
|
+
def initialize
|
90
|
+
font = ThemeFontGroup.new( Gosu::Font.new($window, Gosu::default_font_name, 17), Gosu::Font.new($window, Gosu::default_font_name, 25), Gosu::Font.new($window, Gosu::default_font_name, 20), 0xffe6e6e6, 0xffb22222)
|
91
|
+
super("Shade.Generic", font)
|
92
|
+
end
|
93
|
+
def request(obj)
|
94
|
+
if @@label == nil #Can't initialize atglobal scope because $window may not have been set
|
95
|
+
@@label = ShadeLabelTheme.new
|
96
|
+
end
|
97
|
+
if obj.kind_of?(Label)
|
98
|
+
return @@label
|
99
|
+
end
|
100
|
+
return self
|
101
|
+
end
|
102
|
+
def draw(x1,y1, x2, y2, state)
|
103
|
+
if state == 1
|
104
|
+
$window.draw_quad(x1, y1, 0xff2e2e2e, x2, y1, 0xff2e2e2e, x1, y2, 0xff2e2e2e, x2, y2, 0xff2e2e2e, ZOrder::Widget)
|
105
|
+
$window.draw_quad(x1+2, y1+2, 0xffbdbdbd, x2-2, y1+2, 0xffbdbdbd, x1+2, y2-2, 0xffbdbdbd, x2-2, y2-2, 0xffbdbdbd, ZOrder::Widget)
|
106
|
+
$window.draw_quad(x1+3, y1+3, 0xff2e2e2e, x2-3, y1+3, 0xff2e2e2e, x1+3, y2-3, 0xff2e2e2e, x2-3, y2-3, 0xff2e2e2e, ZOrder::Widget)
|
107
|
+
else
|
108
|
+
$window.draw_quad(x1, y1, 0xff2e2e2e, x2, y1, 0xff2e2e2e, x1, y2, 0xff2e2e2e, x2, y2, 0xff2e2e2e, ZOrder::Widget)
|
109
|
+
$window.draw_quad(x1+2, y1+2, 0xffffffff, x2-2, y1+2, 0xffffffff, x1+2, y2-2, 0xffffffff, x2-2, y2-2, 0xffffffff, ZOrder::Widget)
|
110
|
+
$window.draw_quad(x1+3, y1+3, 0xff2e2e2e, x2-3, y1+3, 0xff2e2e2e, x1+3, y2-3, 0xff2e2e2e, x2-3, y2-3, 0xff2e2e2e, ZOrder::Widget)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
class ShadeLabelTheme < DrawnTheme
|
116
|
+
@@textbox = nil
|
117
|
+
def initialize
|
118
|
+
font = ThemeFontGroup.new( Gosu::Font.new($window, Gosu::default_font_name, 17), Gosu::Font.new($window, Gosu::default_font_name, 25), Gosu::Font.new($window, Gosu::default_font_name, 20), 0xffe6e6e6, 0xff848484)
|
119
|
+
super("Shade.Label", font)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
class WindowsTheme < ImageTheme
|
124
|
+
@@button = nil
|
125
|
+
def initialize
|
126
|
+
image = ThemeImageGroup.new( $gglroot+"/media/windows/generic/menusmall.png", $gglroot+"/media/bluesteel/generic/menusmall.png", $gglroot+"/media/bluesteel/generic/menusmall.png" )
|
127
|
+
font = ThemeFontGroup.new( Gosu::Font.new($window, Gosu::default_font_name, 17), Gosu::Font.new($window, Gosu::default_font_name, 25), Gosu::Font.new($window, Gosu::default_font_name, 20))
|
128
|
+
super("Windows.Generic", font, image)
|
129
|
+
end
|
130
|
+
def request(obj)
|
131
|
+
if @@button == nil #Can't initialize atglobal scope because $window may not have been set
|
132
|
+
@@button = ImageTheme.new("Windows.Button", ThemeFontGroup.new( Gosu::Font.new($window, Gosu::default_font_name, 17), Gosu::Font.new($window, Gosu::default_font_name, 25), Gosu::Font.new($window, Gosu::default_font_name, 20)), ThemeImageGroup.new( $gglroot+"/media/windows/button/button.png", $gglroot+"/media/windows/button/buttonup.png" , $gglroot+"/media/windows/button/buttondown.png" ))
|
133
|
+
@@textbox = ImageTheme.new("Windows.TextBox", ThemeFontGroup.new( Gosu::Font.new($window, Gosu::default_font_name, 17), Gosu::Font.new($window, Gosu::default_font_name, 25), Gosu::Font.new($window, Gosu::default_font_name, 20)), ThemeImageGroup.new( $gglroot+"/media/windows/textbox/textbox.png", $gglroot+"/media/windows/textbox/textboxup.png" , $gglroot+"/media/windows/textbox/textboxup.png" ))
|
134
|
+
@@label = ImageTheme.new("Windows.Label", ThemeFontGroup.new( Gosu::Font.new($window, Gosu::default_font_name, 17), Gosu::Font.new($window, Gosu::default_font_name, 25), Gosu::Font.new($window, Gosu::default_font_name, 20)), ThemeImageGroup.new( $gglroot+"/null.png", $gglroot+"/null.png" , $gglroot+"/null.png" ) )
|
135
|
+
end
|
136
|
+
if obj.kind_of?(Button)
|
137
|
+
return @@button
|
138
|
+
elsif obj.kind_of?(TextBox)
|
139
|
+
return @@textbox
|
140
|
+
elsif obj.kind_of?(Label)
|
141
|
+
return @@label
|
142
|
+
end
|
143
|
+
return self
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
$theme_init_hook = Proc.new {
|
148
|
+
unless $initthemes
|
149
|
+
Themes.const_set("BlueSteel", BlueSteelTheme.new)
|
150
|
+
Themes.const_set("Rubygoo", RubygooTheme.new)
|
151
|
+
Themes.const_set("Shade", ShadeTheme.new)
|
152
|
+
Themes.const_set("Windows", WindowsTheme.new)
|
153
|
+
$initthemes = true
|
154
|
+
end
|
155
|
+
}
|
156
|
+
|
157
|
+
end #module Themes
|
158
|
+
|
159
|
+
end #module GGLib
|