Midstream on #8 : TilesetEditor, TilesetProperties and GridDisplay all interact as expected at this point
This commit is contained in:
@@ -8,63 +8,55 @@ module Tailor
|
|||||||
def initialize(*args)
|
def initialize(*args)
|
||||||
super(*args)
|
super(*args)
|
||||||
@imageGrid = nil
|
@imageGrid = nil
|
||||||
@padX = 0
|
@pristineImage = nil
|
||||||
@padY = 0
|
|
||||||
@pitchX = 0
|
|
||||||
@pitchY = 0
|
|
||||||
@gridX = 32
|
|
||||||
@gridY = 32
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_image(image)
|
def set_image(image)
|
||||||
_super.set_image(image)
|
@pristineImage = image
|
||||||
@imageGrid = Wx::Bitmap.new(@image.get_width(),
|
set_grid(0, 0, 0, 0, 32, 32)
|
||||||
@image.get_height(),
|
|
||||||
32
|
|
||||||
)
|
|
||||||
set_grid(@padX, @padY, @pitchX, @pitchY, @gridX, @gridY)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_grid(padX, padY, pitchX, pitchY, gridX, gridY)
|
def set_grid(padX, padY, pitchX, pitchY, gridX, gridY)
|
||||||
@padX = padX
|
@imageGrid = Wx::Bitmap.new(@pristineImage.get_width(),
|
||||||
@padY = padY
|
@pristineImage.get_height(),
|
||||||
@pitchX = pitchX
|
@pristineImage.get_depth()
|
||||||
@pitchY = pitchY
|
)
|
||||||
@gridX = gridX
|
|
||||||
@gridY = gridY
|
|
||||||
|
|
||||||
@imageGrid.draw() { |dc|
|
@imageGrid.draw() { |dc|
|
||||||
dc.draw_bitmap(@image, 0, 0, true)
|
dc.clear
|
||||||
stepx = @gridX + @pitchX
|
dc.draw_bitmap(@pristineImage, 0, 0, true)
|
||||||
|
stepx = gridX + pitchX
|
||||||
stepx = 1 unless stepx != 0
|
stepx = 1 unless stepx != 0
|
||||||
stepy = @gridY + @pitchY
|
stepy = gridY + pitchY
|
||||||
stepy = 1 unless stepy != 0
|
stepy = 1 unless stepy != 0
|
||||||
rows = ( (@image.height - @padY) / stepy )
|
rows = ( (@pristineImage.height - padY) / stepy )
|
||||||
columns = ( (@image.width - @padX) / stepx )
|
columns = ( (@pristineImage.width - padX) / stepx )
|
||||||
points = []
|
puts "Grid will be #{rows} tall and #{columns} wide"
|
||||||
curX = @padX
|
curX = padX
|
||||||
curY = @padY
|
curY = padY
|
||||||
|
|
||||||
dc.set_brush(Wx::TRANSPARENT_BRUSH)
|
dc.set_brush(Wx::TRANSPARENT_BRUSH)
|
||||||
dc.set_pen(Wx::RED_PEN)
|
dc.set_pen(Wx::RED_PEN)
|
||||||
|
|
||||||
for row in 0..rows
|
for row in 0..rows
|
||||||
for column in 0..columns
|
for column in 0..columns
|
||||||
dc.draw_rectangle(curX, curY, @gridX, @gridY)
|
next if ((curX + stepx + padX) > @imageGrid.get_width)
|
||||||
|
next if ((curY + stepy + padY) > @imageGrid.get_height)
|
||||||
|
dc.draw_rectangle(curX, curY, gridX, gridY)
|
||||||
|
puts "Drew (#{curX}, #{curY}, #{gridX}, #{gridY})"
|
||||||
curX += stepx
|
curX += stepx
|
||||||
end
|
end
|
||||||
curX = @padX
|
curX = padX
|
||||||
curY += stepy
|
curY += stepy
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
_super.set_image(@imageGrid)
|
||||||
end
|
end
|
||||||
|
|
||||||
def on_draw(dc)
|
def on_draw(dc)
|
||||||
_super.on_draw(dc)
|
dc.set_background Wx::WHITE_BRUSH
|
||||||
tmp=@image
|
dc.clear
|
||||||
@image=@imageGrid
|
return if @imageGrid == nil
|
||||||
_super.on_draw(dc)
|
dc.draw_bitmap(@imageGrid, 0, 0, true)
|
||||||
@image=tmp
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -98,12 +98,13 @@ module Tailor
|
|||||||
end
|
end
|
||||||
|
|
||||||
def on_tilepropsChanged(event)
|
def on_tilepropsChanged(event)
|
||||||
@tilesetSlicer.set_grid(event.padX,
|
puts "Tileset properties changed : #{event.inspect} #{event.client_data}"
|
||||||
event.padY,
|
@tilesetSlicer.set_grid(event.client_data['padX'],
|
||||||
event.pitchX,
|
event.client_data['padY'],
|
||||||
event.pitchY,
|
event.client_data['pitchX'],
|
||||||
event.gridX,
|
event.client_data['pitchY'],
|
||||||
event.gridY
|
event.client_data['gridX'],
|
||||||
|
event.client_data['gridY']
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -4,34 +4,16 @@ module Tailor
|
|||||||
module GUI
|
module GUI
|
||||||
|
|
||||||
class TilesetPropertiesChangedEvent < Wx::CommandEvent
|
class TilesetPropertiesChangedEvent < Wx::CommandEvent
|
||||||
attr_accessor :padX
|
EVT_TILEPROPS_CHANGED = Wx::EvtHandler.register_class(self,
|
||||||
attr_accessor :padY
|
nil,
|
||||||
attr_accessor :pitchX
|
"evt_tileprops_changed",
|
||||||
attr_accessor :pitchY
|
1)
|
||||||
attr_accessor :gridX
|
def initialize(source, grid)
|
||||||
attr_accessor :gridY
|
super(EVT_TILEPROPS_CHANGED)
|
||||||
|
self.id = source.get_id
|
||||||
def initialize(*args)
|
self.client_data = grid
|
||||||
super(args[0])
|
|
||||||
@padX = args[2]['padX']
|
|
||||||
@padY = args[2]['padY']
|
|
||||||
@pitchX = args[2]['pitchX']
|
|
||||||
@pitchY = args[2]['pitchY']
|
|
||||||
@gridX = args[2]['gridX']
|
|
||||||
@gridY = args[2]['gridY']
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def clone
|
|
||||||
TilesetPropertiesChangedEvent.new(self.id,
|
|
||||||
self.eventType,
|
|
||||||
{ 'padX' => @padX,
|
|
||||||
'padY' => @padY,
|
|
||||||
'pitchX' => @pitchX,
|
|
||||||
'pitchY' => @pitchY,
|
|
||||||
'gridX' => @gridX,
|
|
||||||
'gridY' => @gridY }
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
class TilesetProperties < Wx::Panel
|
class TilesetProperties < Wx::Panel
|
||||||
@@ -59,8 +41,9 @@ module Tailor
|
|||||||
flag = Wx::EXPAND|Wx::ALIGN_LEFT)
|
flag = Wx::EXPAND|Wx::ALIGN_LEFT)
|
||||||
elemCtrl = Wx::TextCtrl.new(self,
|
elemCtrl = Wx::TextCtrl.new(self,
|
||||||
Wx::ID_ANY,
|
Wx::ID_ANY,
|
||||||
value.to_s)
|
value.to_s,
|
||||||
evt_text(elemCtrl) { |event| on_textChanged(event) }
|
:style => Wx::TE_PROCESS_ENTER)
|
||||||
|
evt_text_enter(elemCtrl) { |event| on_textChanged(event) }
|
||||||
tmpsizer.add(elemCtrl, flag = Wx::EXPAND|Wx::ALIGN_RIGHT)
|
tmpsizer.add(elemCtrl, flag = Wx::EXPAND|Wx::ALIGN_RIGHT)
|
||||||
|
|
||||||
rubyname = elem.gsub(/ /, '')
|
rubyname = elem.gsub(/ /, '')
|
||||||
@@ -68,7 +51,7 @@ module Tailor
|
|||||||
elemCtrl.set_value(val)
|
elemCtrl.set_value(val)
|
||||||
}
|
}
|
||||||
create_method( "#{rubyname}".to_sym ) {
|
create_method( "#{rubyname}".to_sym ) {
|
||||||
elemCtrl.get_value
|
elemCtrl.get_value.to_i
|
||||||
}
|
}
|
||||||
@sizer.add(tmpsizer)
|
@sizer.add(tmpsizer)
|
||||||
end
|
end
|
||||||
@@ -76,23 +59,17 @@ module Tailor
|
|||||||
end
|
end
|
||||||
|
|
||||||
def on_textChanged(event)
|
def on_textChanged(event)
|
||||||
add_pending_event(TilesetPropertiesChangedEvent.new(Wx::ID_ANY,
|
grid = { 'gridX' => self.TileX,
|
||||||
EVT_TILEPROPS_CHANGED,
|
'gridY' => self.TileY,
|
||||||
{ 'PadX' => @TileX,
|
'pitchX' => self.SpaceX,
|
||||||
'PadY' => @TileY,
|
'pitchY' => self.SpaceY,
|
||||||
'PitchX' => @SpaceX,
|
'padX' => self.PadX,
|
||||||
'PitchY' => @SpaceY,
|
'padY' => self.PadY }
|
||||||
'GridX' => @TileX,
|
evt = TilesetPropertiesChangedEvent.new(self, grid)
|
||||||
'GridY' => @TileY }
|
event_handler.process_event(evt)
|
||||||
)
|
puts "Emitted TilesetPropertiesChangedEvent #{evt.inspect} (#{evt.client_data}) from (#{grid})"
|
||||||
)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
EVT_TILEPROPS_CHANGED = Wx::Event.new_event_type
|
|
||||||
Wx::EvtHandler.register_class(TilesetPropertiesChangedEvent,
|
|
||||||
EVT_TILEPROPS_CHANGED,
|
|
||||||
"evt_tileprops_changed",
|
|
||||||
1)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user