class Fzeet::AcceleratorTable

Public Class Methods

new(*args) click to toggle source
# File lib/fzeet/windows/user/Accelerator.rb, line 190
def initialize(*args)
        FFI::MemoryPointer.new(Windows::ACCEL, args.size) { |paccels|
                args.each_with_index { |data, i|
                        accel = Windows::ACCEL.new(paccels + i * Windows::ACCEL.size)

                        data.unshift(0) if data.size == 2

                        accel[:fVirt] = Fzeet.flags(data[0], :f)

                        accel[:key] = case key = data[1]
                        when Integer
                                accel[:fVirt] |= Windows::FVIRTKEY

                                key
                        when Symbol
                                accel[:fVirt] |= Windows::FVIRTKEY

                                ((key = key.to_s).length == 1) ? key.upcase.ord : Fzeet.constant(key, :vk_)
                        when String
                                if key.length == 1
                                        key.ord
                                else
                                        accel[:fVirt] |= Windows::FVIRTKEY

                                        Fzeet.constant(key, :vk_)
                                end
                        end

                        accel[:cmd] = Command[data[2]]
                }

                @handle = Windows.DetonateLastError(FFI::Pointer::NULL, :CreateAcceleratorTable, paccels, args.size); attach
        }
end

Public Instance Methods

dispose() click to toggle source
# File lib/fzeet/windows/user/Accelerator.rb, line 225
def dispose; Windows.DestroyAcceleratorTable(@handle); detach end