module RbSDL2::Window::Display

Public Instance Methods

brightness(= ::SDL2.SDL_GetWindowBrightness(self)) click to toggle source

Brightness はウィンドウ単体ではなくウインドウの中心があるディスプレイの輝度の取得、変更を行う。 対象となるディスプレイの取得は Window#display メソッドを呼び出す。

# File lib/rb_sdl2/window/display.rb, line 6
    def brightness = ::SDL2.SDL_GetWindowBrightness(self)

    def brightness=(float)
      err = ::SDL2.SDL_SetWindowBrightness(self, float)
      raise RbSDL2Error if err < 0
    end

    require_relative '../display'

    def display = Display.new(display_index)

    def display_index
      index = ::SDL2.SDL_GetWindowDisplayIndex(to_ptr)
      raise RbSDL2Error if index < 0
      index
    end

    require_relative '../display_mode'
    def fullscreen_display_mode
      obj = DisplayMode.new
      err = ::SDL2.SDL_GetWindowDisplayMode(self, obj)
      raise RbSDL2Error if err < 0
      obj
    end

    def fullscreen_display_mode=(display_mode)
      err = ::SDL2.SDL_SetWindowDisplayMode(self, display_mode)
      raise RbSDL2Error if err < 0
    end

    class GammaRamp
      class << self
        def [](*a)
          raise ArgumentError if a.length != 256
          ptr = ::FFI::MemoryPointer.new(:uint16, 256).write_array_of_uint16(a)
          obj = allocate
          obj.__send__(:initialize, ptr)
          obj
        end

        def new(gamma)
          ptr = ::FFI::MemoryPointer.new(:uint16, 256)
          ::SDL2.SDL_CalculateGammaRamp(gamma, ptr)
          super(ptr)
        end
      end

      def initialize(ptr)
        @ptr = ptr
      end

      def to_ptr = @ptr

      def to_a = @ptr.read_array_of_uint16(256)
      alias to_ary to_a
    end

    # [r_gamma, g_gamma, b_gamma] | gamma
    def gamma=(rgb)
      r, g, b = *rgb
      self.gamma_ramp = (!g && !b ? [r, r, r] : [r, g, b]).map { |f| GammaRamp.new(f) }
    end

    def gamma_ramp
      rgb = Array.new(3) { GammaRamp.new }
      err = ::SDL2.SDL_GetWindowGammaRamp(self, *rgb)
      raise RbSDL2Error if err < 0
      rgb.map(&:to_a)
    end

    # r_g_b: [[r,...],[g,...],[b,...]]
    # 画面全体に影響を与える。OSからリセットされることもある。
    # アプリケーションが終了しても永続的に影響をあたえる。ユーザにとって望ましくないだろう。
    def gamma_ramp=(r_g_b)
      err = ::SDL2.SDL_SetWindowGammaRamp(self, *r_g_b.map { |a| GammaRamp[*a] })
      raise RbSDL2Error if err < 0
    end
  end
end
brightness=(float) click to toggle source
# File lib/rb_sdl2/window/display.rb, line 8
def brightness=(float)
  err = ::SDL2.SDL_SetWindowBrightness(self, float)
  raise RbSDL2Error if err < 0
end
display(= Display.new(display_index)) click to toggle source
# File lib/rb_sdl2/window/display.rb, line 15
      def display = Display.new(display_index)

      def display_index
        index = ::SDL2.SDL_GetWindowDisplayIndex(to_ptr)
        raise RbSDL2Error if index < 0
        index
      end

      require_relative '../display_mode'
      def fullscreen_display_mode
        obj = DisplayMode.new
        err = ::SDL2.SDL_GetWindowDisplayMode(self, obj)
        raise RbSDL2Error if err < 0
        obj
      end

      def fullscreen_display_mode=(display_mode)
        err = ::SDL2.SDL_SetWindowDisplayMode(self, display_mode)
        raise RbSDL2Error if err < 0
      end

      class GammaRamp
        class << self
          def [](*a)
            raise ArgumentError if a.length != 256
            ptr = ::FFI::MemoryPointer.new(:uint16, 256).write_array_of_uint16(a)
            obj = allocate
            obj.__send__(:initialize, ptr)
            obj
          end

          def new(gamma)
            ptr = ::FFI::MemoryPointer.new(:uint16, 256)
            ::SDL2.SDL_CalculateGammaRamp(gamma, ptr)
            super(ptr)
          end
        end

        def initialize(ptr)
          @ptr = ptr
        end

        def to_ptr = @ptr

        def to_a = @ptr.read_array_of_uint16(256)
        alias to_ary to_a
      end

      # [r_gamma, g_gamma, b_gamma] | gamma
      def gamma=(rgb)
        r, g, b = *rgb
        self.gamma_ramp = (!g && !b ? [r, r, r] : [r, g, b]).map { |f| GammaRamp.new(f) }
      end

      def gamma_ramp
        rgb = Array.new(3) { GammaRamp.new }
        err = ::SDL2.SDL_GetWindowGammaRamp(self, *rgb)
        raise RbSDL2Error if err < 0
        rgb.map(&:to_a)
      end

      # r_g_b: [[r,...],[g,...],[b,...]]
      # 画面全体に影響を与える。OSからリセットされることもある。
      # アプリケーションが終了しても永続的に影響をあたえる。ユーザにとって望ましくないだろう。
      def gamma_ramp=(r_g_b)
        err = ::SDL2.SDL_SetWindowGammaRamp(self, *r_g_b.map { |a| GammaRamp[*a] })
        raise RbSDL2Error if err < 0
      end
    end
  end
end
display_index() click to toggle source
# File lib/rb_sdl2/window/display.rb, line 17
def display_index
  index = ::SDL2.SDL_GetWindowDisplayIndex(to_ptr)
  raise RbSDL2Error if index < 0
  index
end
fullscreen_display_mode() click to toggle source
# File lib/rb_sdl2/window/display.rb, line 24
def fullscreen_display_mode
  obj = DisplayMode.new
  err = ::SDL2.SDL_GetWindowDisplayMode(self, obj)
  raise RbSDL2Error if err < 0
  obj
end
fullscreen_display_mode=(display_mode) click to toggle source
# File lib/rb_sdl2/window/display.rb, line 31
def fullscreen_display_mode=(display_mode)
  err = ::SDL2.SDL_SetWindowDisplayMode(self, display_mode)
  raise RbSDL2Error if err < 0
end