Skip to content

Instantly share code, notes, and snippets.

@gerrit
Forked from matthewtodd/gist:728014
Created October 13, 2011 08:03
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gerrit/1283691 to your computer and use it in GitHub Desktop.
Save gerrit/1283691 to your computer and use it in GitHub Desktop.
Resize an OSX display with RubyCocoa.
require 'osx/cocoa'
include OSX
class Screen
class << self
def resize(width, height, &block)
new.resize(width, height, &block)
end
end
def initialize(screen = CGMainDisplayID())
@screen = screen
@mode = CGDisplayCopyDisplayMode(@screen)
end
def resize(width, height, &block)
configure(best_mode(width, height))
block.call
ensure
configure(@mode)
end
private
def best_mode(width, height)
# TODO Try to figure out color depth from CGDisplayModeCopyPixelEncoding?
CGDisplayCopyAllDisplayModes(@screen, nil).detect do |mode|
CGDisplayModeGetWidth(mode) == width &&
CGDisplayModeGetHeight(mode) == height &&
CGDisplayModeIsUsableForDesktopGUI(mode)
end
end
def configure(mode)
result, config = CGBeginDisplayConfiguration()
if result == KCGErrorSuccess
CGConfigureDisplayWithDisplayMode(config, @screen, mode, nil)
CGCompleteDisplayConfiguration(config, KCGConfigureForSession)
else
raise "I have no clue what just happened: #{result}"
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment