得体の知れないもの作成中
途中で飽きてやめる可能性大ではあるが。
SoundEffectで簡単な音を作るGUIツールを作ろうと思ってプログラムをいじり始めたところ、汎用の簡易GUIフレームワークとか作れるんじゃね?みたいな感じで。
とりあえずウィンドウらしきものを作って、タイトルバーらしきものをドラッグして動かせる。
つもりだったのだが、いまのところ思いっきりバグっていて、カーソルを速く動かしたらウィンドウがついてこない。
ウィンドウの移動はウィンドウのクラスでやるならWin32APIで言うマウスのキャプチャみたいな機能が必要だし、そうでなければシステム側でやらないといけないということなのだろう。
っていうか作りかけすぎてあちこちボロボロだw
なんでこんなものをソース公開してるんだか。
いいじゃない、作りかけのソフトってこんな感じなのだ。
DXRubyだって最初は笑っちゃうほどひどいものだったんだぞ。
require 'dxruby' class CWindow attr_accessor :x, :y, :width, :height, :control def initialize(x = 128, y = 128 , width = 128, height = 128, title = "") @x = x @y = y @width = width + 4 @height = height + 4 + 16 @image = Image.new(width, height, [255, 128, 128, 128]) @image.boxFill(0, 0, width-2, 1, [255, 180, 180, 180]) @image.boxFill(0, 0, 1, height-2, [255, 180, 180, 180]) @image.boxFill(width-2, 2, width-1, height-1, [255, 80, 80, 80]) @image.boxFill(2, height-2, width-1, height-1, [255, 80, 80, 80]) @title = title @control = [] @drag = false end def internal_onmouse(x, y) if Input.mousePush?(M_LBUTTON) if y < @y + 18 @drag = true @oldx = x @oldy = y else onMousePushL(x, y) end end if @drag if Input.mouseDown?(M_LBUTTON) @x += x - @oldx @y += y - @oldy @oldx = x @oldy = y else @drag = false end end end def internal_update Window.draw(@x, @y, @image) Window.drawFont(@x+3, @y+3, @title, App.font) update end def update end def onMousePushL(x, y) end end class CApp attr_accessor :windows, :font def initialize @windows = [] @font = Font.new(16) end def run Window.create loop do sleep(0.01) break if Input.update flag = false x, y = Input.mousePosX, Input.mousePosY @windows.reverse.each do |window| if x >= window.x and x < window.x + window.width and y >= window.y and y < window.y + window.height window.internal_onmouse(x, y) end end update Window.update end end def update @windows.each do |window| window.internal_update end end def createWindow(window) @windows.push(window) end end App = CApp.new App.createWindow(CWindow.new(100, 100, 200, 200, "たいとる")) App.run