# Fullscreen++ v2.0 for VX and VXace by Zeus81# Free for non commercial and commercial use# Licence :
http://creativecommons.org/licenses/by-sa/3.0/# Contact : zeusex81@gmail.com# (fr) Manuel d'utilisation :
http://pastebin.com/1TQfMnVJ# (en) User Guide :
http://pastebin.com/EgnWt9ur class << Graphics Disable_VX_Fullscreen = false CreateWindowEx = Win32API.new('user32' , 'CreateWindowEx' , 'ippiiiiiiiii', 'i') GetClientRect = Win32API.new('user32' , 'GetClientRect' , 'ip' , 'i') GetDC = Win32API.new('user32' , 'GetDC' , 'i' , 'i') GetSystemMetrics = Win32API.new('user32' , 'GetSystemMetrics' , 'i' , 'i') GetWindowRect = Win32API.new('user32' , 'GetWindowRect' , 'ip' , 'i') FillRect = Win32API.new('user32' , 'FillRect' , 'ipi' , 'i') FindWindow = Win32API.new('user32' , 'FindWindow' , 'pp' , 'i') ReleaseDC = Win32API.new('user32' , 'ReleaseDC' , 'ii' , 'i') SendInput = Win32API.new('user32' , 'SendInput' , 'ipi' , 'i') SetWindowLong = Win32API.new('user32' , 'SetWindowLong' , 'iii' , 'i') SetWindowPos = Win32API.new('user32' , 'SetWindowPos' , 'iiiiiii' , 'i') ShowWindow = Win32API.new('user32' , 'ShowWindow' , 'ii' , 'i') SystemParametersInfo = Win32API.new('user32' , 'SystemParametersInfo' , 'iipi' , 'i') UpdateWindow = Win32API.new('user32' , 'UpdateWindow' , 'i' , 'i') GetPrivateProfileString = Win32API.new('kernel32', 'GetPrivateProfileString' , 'ppppip' , 'i') WritePrivateProfileString = Win32API.new('kernel32', 'WritePrivateProfileString', 'pppp' , 'i') CreateSolidBrush = Win32API.new('gdi32' , 'CreateSolidBrush' , 'i' , 'i') DeleteObject = Win32API.new('gdi32' , 'DeleteObject' , 'i' , 'i') unless method_defined?

zeus81_fullscreen_update) HWND = FindWindow.call('RGSS Player', 0) BackHWND = CreateWindowEx.call(0x08000008, 'Static', '', 0x80000000, 0, 0, 0, 0, 0, 0, 0, 0) alias zeus_fullscreen_resize_screen resize_screen alias zeus_fullscreen_update update end def initialize_fullscreen load_fullscreen_settings if Disable_VX_Fullscreen then toggle_vx_fullscreen else @fullscreen = false end if vx_fullscreen? fullscreen? ? fullscreen_mode : windowed_mode endprivate def initialize_rects @borders_size ||= borders_size @fullscreen_rect ||= fullscreen_rect @workarea_rect ||= workarea_rect end def load_fullscreen_settings buffer = [].pack('x256') section = 'Fullscreen++' filename = './Game.ini' get_option = Proc.new do |key, default_value| l = GetPrivateProfileString.call(section, key, default_value, buffer, buffer.size, filename) buffer[0, l] end @fullscreen = get_option.call('Fullscreen', '0') == '1' @fullscreen_ratio = get_option.call('FullscreenRatio', '0').to_i @windowed_ratio = get_option.call('WindowedRatio', '1').to_i end def save_fullscreen_settings section = 'Fullscreen++' filename = './Game.ini' set_option = Proc.new do |key, value| WritePrivateProfileString.call(section, key, value.to_s, filename) end set_option.call('Fullscreen' , @fullscreen ? 1 : 0) set_option.call('FullscreenRatio', @fullscreen_ratio) set_option.call('WindowedRatio' , @windowed_ratio) end def borders_size GetWindowRect.call(HWND, wrect = [0, 0, 0, 0].pack('l4')) GetClientRect.call(HWND, crect = [0, 0, 0, 0].pack('l4')) wrect, crect = wrect.unpack('l4'), crect.unpack('l4') Rect.new(0, 0, wrect[2]-wrect[0]-crect[2], wrect[3]-wrect[1]-crect[3]) end def fullscreen_rect Rect.new(0, 0, GetSystemMetrics.call(0), GetSystemMetrics.call(1)) end def workarea_rect SystemParametersInfo.call(0x30, 0, rect = [0, 0, 0, 0].pack('l4'), 0) rect = rect.unpack('l4') Rect.new(rect[0], rect[1], rect[2]-rect[0], rect[3]-rect[1]) end def hide_borders() SetWindowLong.call(HWND, -16, 0x14000000) end def show_borders() SetWindowLong.call(HWND, -16, 0x14CA0000) end def hide_back() ShowWindow.call(BackHWND, 0) end def show_back ShowWindow.call(BackHWND, 3) UpdateWindow.call(BackHWND) dc = GetDC.call(BackHWND) rect = [0, 0, @fullscreen_rect.width, @fullscreen_rect.height].pack('l4') brush = CreateSolidBrush.call(0) FillRect.call(dc, rect, brush) ReleaseDC.call(BackHWND, dc) DeleteObject.call(brush) end def resize_window(w, h) screen = @fullscreen ? @fullscreen_rect : @workarea_rect x, y = screen.x+(screen.width-w)/2, screen.y+(screen.height-h)/2 SetWindowPos.call(HWND, @fullscreen ? -1 : -2, x, y, w, h, 0) end def vx_fullscreen? screen = fullscreen_rect screen.width == 640 and screen.height == 480 end def toggle_vx_fullscreen inputs = [1,18,0, 1,13,0, 1,13,2, 1,18,2].pack('LSx2Lx16'*4) SendInput.call(4, inputs, 28) zeus_fullscreen_update end def release_alt inputs = [1,18,2].pack('LSx2Lx16') SendInput.call(1, inputs, 28) endpublic def fullscreen?() @fullscreen or vx_fullscreen? end def toggle_fullscreen() fullscreen? ? windowed_mode : fullscreen_mode end def fullscreen_mode return if vx_fullscreen? initialize_rects @fullscreen = true if @fullscreen_ratio == 0 w_max, h_max = @fullscreen_rect.width, @fullscreen_rect.height w, h = w_max, w_max * height / width h, w = h_max, h_max * width / height if h > h_max else w, h = width * @fullscreen_ratio, height * @fullscreen_ratio end show_back hide_borders resize_window(w, h) save_fullscreen_settings end def windowed_mode toggle_vx_fullscreen if vx_fullscreen? initialize_rects @fullscreen = false if @windowed_ratio == 0 w_max = @workarea_rect.width - @borders_size.width h_max = @workarea_rect.height - @borders_size.height w, h = w_max, w_max * height / width h, w = h_max, h_max * width / height if h > h_max else w, h = width * @windowed_ratio, height * @windowed_ratio end hide_back show_borders resize_window(w + @borders_size.width, h + @borders_size.height) save_fullscreen_settings end def toggle_ratio return if vx_fullscreen? initialize_rects if @fullscreen @fullscreen_ratio += 1 @fullscreen_ratio = 0 if width * @fullscreen_ratio > @fullscreen_rect.width or height * @fullscreen_ratio > @fullscreen_rect.height fullscreen_mode else @windowed_ratio += 1 @windowed_ratio = 0 if width * @windowed_ratio > @workarea_rect.width or height * @windowed_ratio > @workarea_rect.height windowed_mode end end def update release_alt if Disable_VX_Fullscreen and Input.trigger?(Input::ALT) zeus_fullscreen_update toggle_fullscreen if Input.trigger?(Input::F5) toggle_ratio if Input.trigger?(Input::F6) end def resize_screen(width, height) zeus_fullscreen_resize_screen(width, height) fullscreen? ? fullscreen_mode : windowed_mode endendGraphics.initialize_fullscreen