GitHub - wxLuaApp をぼちぼちと開発中。いろいろと忙しくてなかなか進まんけど、こんな感じになってます。
コードの方は、wxmain.lua
, Document.lua
, Controller.lua
の3ファイルを1つのフォルダに入れて、このフォルダを wxLuaApp のアプリケーションに Drag&Drop する。Love2D と同じようなスタイル。
-- wxmain.lua
require "Document"
function LuaApp.OpenDocument(file)
local doc = Document.new(file)
end
function LuaApp.NewDocument()
LuaApp.OpenDocument(nil)
end
-- Document.lua
require "Controller"
-- Class definition
Document = {}
Document.untitled_count = 0
function Document.new(filename)
local doc = {}
setmetatable(doc, { __index = Document } )
local bname
if filename == nil then
bname = string.format("Untitled %d", Document.untitled_count)
Document.untitled_count = Document.untitled_count + 1
else
bname = filename
end
doc.controller = Controller.new(doc, bname)
return doc
end
-- Controller.lua
-- Class definition
Controller = {}
function Controller.new(doc, bname)
local cont = {}
setmetatable(cont, { __index = Controller } )
cont.document = doc
-- Create frame
local frame = wx.wxFrame(wx.NULL, wx.wxID_ANY, "", wx.wxDefaultPosition, wx.wxSize(640, 400))
frame.controller = cont
frame:SetTitle(bname)
cont.frame = frame
cont.scrollwin = wx.wxScrolledWindow(frame, wx.wxID_ANY)
cont.scrollwin:SetScrollbars(1, 1, 640, 400)
cont.panel = wx.wxPanel(cont.scrollwin, wx.wxID_ANY, wx.wxDefaultPosition, wx.wxSize(640, 400))
cont.panel:Connect(wx.wxEVT_PAINT, function (event) cont:OnPaint(event) end)
frame:Show(true)
return cont
end
function Controller.OnPaint(self, event)
local dc = wx.wxPaintDC(self.panel)
dc:DrawLine(0, 0, 640, 400)
dc:delete()
end
実際にコーディングしてみると、ピリオドとコロンの間違いでしょっちゅう引っかかる。これは Python や Ruby にはないストレス。要は「なんちゃってオブジェクト指向」の悲しさだな。「Lua の良さ」を引き出すには、「処理速度」と「組み込み向け」の特徴を生かさないといけない。つまり、重い処理を Lua で書いて、「C++ 使わなくてもここまでできるでしょ?」と見せつけるのと、単体のアプリをそこそこのサイズ(実行形式で 200 MB とかじゃなくて)で作ってみせること。