module RbSDL2::Clipboard

Public Class Methods

clear(= self.text = nil) click to toggle source
# File lib/rb_sdl2/clipboard.rb, line 4
    def clear = self.text = nil

    # イベントを pump したとき外部からのクリップボード取得が行われる。
    # その際に SDL_CLIPBOARDUPDATE イベントがキューに入る。これはイベントコールバックで捕獲できる。
    # 読み出し時にクリップボードの内容はクリアーされない。
    def text
      # SDL_GetClipboardText は NULL ポインターを戻さない。返すべき内容がない場合は空の文字列を戻す。
      ::SDL2.SDL_GetClipboardText.read_string.force_encoding(Encoding::UTF_8)
    ensure
      # SDL_GetClipboardText は呼び出されるたびに OS から取得したクリップボードの内容を SDL 内部に保存し、
      # それをさらにコピーしたものを戻す。
      # アプリケーション側は取得した文字列ポインタを必ず開放しなければならない。
      ::SDL2.SDL_free(ptr)
    end

    # クリップボードの内容を戻す。text メソッドと違い読み出し後にクリップボードの内容をクリアーする。
    def text!
      str = text
      clear
      str
    end

    # クリップボードへ書き込む。クリップボードはパブリックであり他のアプリケーションから取得できる。
    # 当然、SDL もこの書き込みを補足する。
    # クリップボードの読み出しを行わずに、大量のクリップボード書き込みを行うと SDL はエラーを戻す。
    # このエラーは SDL からではなく OS から戻るエラーである。書き込み上限や既に書き込んだ回数を知る方法はない。
    # また、アプリケーション側でクリップボードを読み出しても制限を回避できない。
    # (OS に保存されたクリップボードはパブリックなコピーでありユーザが取り出さなければそのコピーは消えないだろう)
    def text=(obj)
      raise RbSDL2Error if ::SDL2.SDL_SetClipboardText(obj&.to_s&.encode(Encoding::UTF_8)) < 0
    end

    # クリップボードに内容があるか確認をする。
    # これはアプリケーションがクリップボードを読み出しても内容はクリアーされないため、
    # クリップボードの更新を知るためには実装を工夫する必要がある。
    # もっとも簡単な方法は、クリップボードの内容を読み込み度に Clipboard.text = nil を実行し、
    # クリップボードをクリアする。
    def text? = ::SDL2.SDL_HasClipboardText == ::SDL2::SDL_TRUE
  end
end
text() click to toggle source

イベントを pump したとき外部からのクリップボード取得が行われる。 その際に SDL_CLIPBOARDUPDATE イベントがキューに入る。これはイベントコールバックで捕獲できる。 読み出し時にクリップボードの内容はクリアーされない。

# File lib/rb_sdl2/clipboard.rb, line 9
def text
  # SDL_GetClipboardText は NULL ポインターを戻さない。返すべき内容がない場合は空の文字列を戻す。
  ::SDL2.SDL_GetClipboardText.read_string.force_encoding(Encoding::UTF_8)
ensure
  # SDL_GetClipboardText は呼び出されるたびに OS から取得したクリップボードの内容を SDL 内部に保存し、
  # それをさらにコピーしたものを戻す。
  # アプリケーション側は取得した文字列ポインタを必ず開放しなければならない。
  ::SDL2.SDL_free(ptr)
end
text!() click to toggle source

クリップボードの内容を戻す。text メソッドと違い読み出し後にクリップボードの内容をクリアーする。

# File lib/rb_sdl2/clipboard.rb, line 20
def text!
  str = text
  clear
  str
end
text=(obj) click to toggle source

クリップボードへ書き込む。クリップボードはパブリックであり他のアプリケーションから取得できる。 当然、SDL もこの書き込みを補足する。 クリップボードの読み出しを行わずに、大量のクリップボード書き込みを行うと SDL はエラーを戻す。 このエラーは SDL からではなく OS から戻るエラーである。書き込み上限や既に書き込んだ回数を知る方法はない。 また、アプリケーション側でクリップボードを読み出しても制限を回避できない。 (OS に保存されたクリップボードはパブリックなコピーでありユーザが取り出さなければそのコピーは消えないだろう)

# File lib/rb_sdl2/clipboard.rb, line 32
def text=(obj)
  raise RbSDL2Error if ::SDL2.SDL_SetClipboardText(obj&.to_s&.encode(Encoding::UTF_8)) < 0
end
text?(= ::SDL2.SDL_HasClipboardText == ::SDL2::SDL_TRUE) click to toggle source

クリップボードに内容があるか確認をする。 これはアプリケーションがクリップボードを読み出しても内容はクリアーされないため、 クリップボードの更新を知るためには実装を工夫する必要がある。 もっとも簡単な方法は、クリップボードの内容を読み込み度に Clipboard.text = nil を実行し、 クリップボードをクリアする。

# File lib/rb_sdl2/clipboard.rb, line 41
  def text? = ::SDL2.SDL_HasClipboardText == ::SDL2::SDL_TRUE
end