Midstream on #8 : TilesetEditor, TilesetProperties and GridDisplay all interact as expected at this point

This commit is contained in:
2014-05-20 21:53:32 -07:00
parent 684e5ff265
commit 1bd207adc4
3 changed files with 54 additions and 84 deletions

View File

@@ -8,63 +8,55 @@ module Tailor
def initialize(*args)
super(*args)
@imageGrid = nil
@padX = 0
@padY = 0
@pitchX = 0
@pitchY = 0
@gridX = 32
@gridY = 32
@pristineImage = nil
end
def set_image(image)
_super.set_image(image)
@imageGrid = Wx::Bitmap.new(@image.get_width(),
@image.get_height(),
32
)
set_grid(@padX, @padY, @pitchX, @pitchY, @gridX, @gridY)
@pristineImage = image
set_grid(0, 0, 0, 0, 32, 32)
end
def set_grid(padX, padY, pitchX, pitchY, gridX, gridY)
@padX = padX
@padY = padY
@pitchX = pitchX
@pitchY = pitchY
@gridX = gridX
@gridY = gridY
@imageGrid = Wx::Bitmap.new(@pristineImage.get_width(),
@pristineImage.get_height(),
@pristineImage.get_depth()
)
@imageGrid.draw() { |dc|
dc.draw_bitmap(@image, 0, 0, true)
stepx = @gridX + @pitchX
dc.clear
dc.draw_bitmap(@pristineImage, 0, 0, true)
stepx = gridX + pitchX
stepx = 1 unless stepx != 0
stepy = @gridY + @pitchY
stepy = gridY + pitchY
stepy = 1 unless stepy != 0
rows = ( (@image.height - @padY) / stepy )
columns = ( (@image.width - @padX) / stepx )
points = []
curX = @padX
curY = @padY
rows = ( (@pristineImage.height - padY) / stepy )
columns = ( (@pristineImage.width - padX) / stepx )
puts "Grid will be #{rows} tall and #{columns} wide"
curX = padX
curY = padY
dc.set_brush(Wx::TRANSPARENT_BRUSH)
dc.set_pen(Wx::RED_PEN)
for row in 0..rows
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
end
curX = @padX
curX = padX
curY += stepy
end
}
_super.set_image(@imageGrid)
end
def on_draw(dc)
_super.on_draw(dc)
tmp=@image
@image=@imageGrid
_super.on_draw(dc)
@image=tmp
dc.set_background Wx::WHITE_BRUSH
dc.clear
return if @imageGrid == nil
dc.draw_bitmap(@imageGrid, 0, 0, true)
end
end

View File

@@ -98,12 +98,13 @@ module Tailor
end
def on_tilepropsChanged(event)
@tilesetSlicer.set_grid(event.padX,
event.padY,
event.pitchX,
event.pitchY,
event.gridX,
event.gridY
puts "Tileset properties changed : #{event.inspect} #{event.client_data}"
@tilesetSlicer.set_grid(event.client_data['padX'],
event.client_data['padY'],
event.client_data['pitchX'],
event.client_data['pitchY'],
event.client_data['gridX'],
event.client_data['gridY']
)
end

View File

@@ -4,34 +4,16 @@ module Tailor
module GUI
class TilesetPropertiesChangedEvent < Wx::CommandEvent
attr_accessor :padX
attr_accessor :padY
attr_accessor :pitchX
attr_accessor :pitchY
attr_accessor :gridX
attr_accessor :gridY
def initialize(*args)
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']
EVT_TILEPROPS_CHANGED = Wx::EvtHandler.register_class(self,
nil,
"evt_tileprops_changed",
1)
def initialize(source, grid)
super(EVT_TILEPROPS_CHANGED)
self.id = source.get_id
self.client_data = grid
end
def clone
TilesetPropertiesChangedEvent.new(self.id,
self.eventType,
{ 'padX' => @padX,
'padY' => @padY,
'pitchX' => @pitchX,
'pitchY' => @pitchY,
'gridX' => @gridX,
'gridY' => @gridY }
)
end
end
class TilesetProperties < Wx::Panel
@@ -59,8 +41,9 @@ module Tailor
flag = Wx::EXPAND|Wx::ALIGN_LEFT)
elemCtrl = Wx::TextCtrl.new(self,
Wx::ID_ANY,
value.to_s)
evt_text(elemCtrl) { |event| on_textChanged(event) }
value.to_s,
:style => Wx::TE_PROCESS_ENTER)
evt_text_enter(elemCtrl) { |event| on_textChanged(event) }
tmpsizer.add(elemCtrl, flag = Wx::EXPAND|Wx::ALIGN_RIGHT)
rubyname = elem.gsub(/ /, '')
@@ -68,7 +51,7 @@ module Tailor
elemCtrl.set_value(val)
}
create_method( "#{rubyname}".to_sym ) {
elemCtrl.get_value
elemCtrl.get_value.to_i
}
@sizer.add(tmpsizer)
end
@@ -76,23 +59,17 @@ module Tailor
end
def on_textChanged(event)
add_pending_event(TilesetPropertiesChangedEvent.new(Wx::ID_ANY,
EVT_TILEPROPS_CHANGED,
{ 'PadX' => @TileX,
'PadY' => @TileY,
'PitchX' => @SpaceX,
'PitchY' => @SpaceY,
'GridX' => @TileX,
'GridY' => @TileY }
)
)
grid = { 'gridX' => self.TileX,
'gridY' => self.TileY,
'pitchX' => self.SpaceX,
'pitchY' => self.SpaceY,
'padX' => self.PadX,
'padY' => self.PadY }
evt = TilesetPropertiesChangedEvent.new(self, grid)
event_handler.process_event(evt)
puts "Emitted TilesetPropertiesChangedEvent #{evt.inspect} (#{evt.client_data}) from (#{grid})"
end
end
EVT_TILEPROPS_CHANGED = Wx::Event.new_event_type
Wx::EvtHandler.register_class(TilesetPropertiesChangedEvent,
EVT_TILEPROPS_CHANGED,
"evt_tileprops_changed",
1)
end
end