From c0dd53104a381dc06992ed6db5256589c36c1858 Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Tue, 16 Sep 2014 11:37:11 -0700 Subject: [PATCH] Make a managing the atom window section de-public the get/setWindowDimensions in favor of the (get|set)(Size|Position) --- spec/atom-spec.coffee | 17 ++++++ src/atom.coffee | 126 +++++++++++++++++++++++++----------------- 2 files changed, 92 insertions(+), 51 deletions(-) diff --git a/spec/atom-spec.coffee b/spec/atom-spec.coffee index 7b1ae1618..c71f89faa 100644 --- a/spec/atom-spec.coffee +++ b/spec/atom-spec.coffee @@ -8,6 +8,23 @@ describe "the `atom` global", -> beforeEach -> atom.workspaceView = new WorkspaceView + describe 'window sizing methods', -> + describe '::getPosition and ::setPosition', -> + it 'sets the position of the window, and can retrieve the position just set', -> + atom.setPosition(22, 45) + expect(atom.getPosition()).toEqual x: 22, y: 45 + + describe '::getSize and ::setSize', -> + originalSize = null + beforeEach -> + originalSize = atom.getSize() + afterEach -> + atom.setSize(originalSize.width, originalSize.height) + + it 'sets the size of the window, and can retrieve the size just set', -> + atom.setSize(100, 400) + expect(atom.getSize()).toEqual width: 100, height: 400 + describe "package lifecycle methods", -> describe ".loadPackage(name)", -> it "continues if the package has an invalid package.json", -> diff --git a/src/atom.coffee b/src/atom.coffee index 299f55c31..6c2c1fd53 100644 --- a/src/atom.coffee +++ b/src/atom.coffee @@ -217,11 +217,84 @@ class Atom extends Model setBodyPlatformClass: -> document.body.classList.add("platform-#{process.platform}") + + ### + Section: Managing The Atom Window + ### + # Public: Get the current window getCurrentWindow: -> @constructor.getCurrentWindow() - # Public: Get the dimensions of this window. + # Public: Get the size of current window. + # + # Returns an {Object} in the format `{width: 1000, height: 700}` + getSize: -> + [width, height] = @getCurrentWindow().getSize() + {width, height} + + # Public: Set the size of current window. + # + # * `width` The {Number} of pixels. + # * `height` The {Number} of pixels. + setSize: (width, height) -> + @getCurrentWindow().setSize(width, height) + + # Public: Get the position of current window. + # + # Returns an {Object} in the format `{x: 10, y: 20}` + getPosition: -> + [x, y] = @getCurrentWindow().getPosition() + {x, y} + + # Public: Set the position of current window. + # + # * `x` The {Number} of pixels. + # * `y` The {Number} of pixels. + setPosition: (x, y) -> + ipc.send('call-window-method', 'setPosition', x, y) + + # Public: Returns a {Boolean} true when the current window is maximized. + isMaximixed: -> + @getCurrentWindow().isMaximized() + + # Public: Move current window to the center of the screen. + center: -> + ipc.send('call-window-method', 'center') + + # Public: Focus the current window. + focus: -> + ipc.send('call-window-method', 'focus') + $(window).focus() + + # Public: Show the current window. + show: -> + ipc.send('call-window-method', 'show') + + # Public: Hide the current window. + hide: -> + ipc.send('call-window-method', 'hide') + + # Public: Close the current window. + close: -> + @getCurrentWindow().close() + + # Public: Reload the current window. + reload: -> + ipc.send('call-window-method', 'restart') + + # Schedule the window to be shown and focused on the next tick. + # + # This is done in a next tick to prevent a white flicker from occurring + # if called synchronously. + displayWindow: ({maximize}={}) -> + setImmediate => + @show() + @focus() + @setFullScreen(true) if @workspace.fullScreen + @maximize() if maximize + + # Get the dimensions of this window. # # Returns an {Object} with the following keys: # * `x` The window's x-position {Number}. @@ -235,7 +308,7 @@ class Atom extends Model maximized = browserWindow.isMaximized() {x, y, width, height, maximized} - # Public: Set the dimensions of the window. + # Set the dimensions of the window. # # The window will be centered if either the x or y coordinate is not set # in the dimensions parameter. If x or y are omitted the window will be @@ -472,56 +545,7 @@ class Atom extends Model executeJavaScriptInDevTools: (code) -> ipc.send('call-window-method', 'executeJavaScriptInDevTools', code) - # Public: Reload the current window. - reload: -> - ipc.send('call-window-method', 'restart') - # Public: Focus the current window. - focus: -> - ipc.send('call-window-method', 'focus') - $(window).focus() - - # Public: Show the current window. - show: -> - ipc.send('call-window-method', 'show') - - # Public: Hide the current window. - hide: -> - ipc.send('call-window-method', 'hide') - - # Public: Set the size of current window. - # - # * `width` The {Number} of pixels. - # * `height` The {Number} of pixels. - setSize: (width, height) -> - @getCurrentWindow().setSize(width, height) - - # Public: Set the position of current window. - # - # * `x` The {Number} of pixels. - # * `y` The {Number} of pixels. - setPosition: (x, y) -> - ipc.send('call-window-method', 'setPosition', x, y) - - # Public: Move current window to the center of the screen. - center: -> - ipc.send('call-window-method', 'center') - - - # Schedule the window to be shown and focused on the next tick. - # - # This is done in a next tick to prevent a white flicker from occurring - # if called synchronously. - displayWindow: ({maximize}={}) -> - setImmediate => - @show() - @focus() - @setFullScreen(true) if @workspace.fullScreen - @maximize() if maximize - - # Public: Close the current window. - close: -> - @getCurrentWindow().close() exit: (status) -> app = remote.require('app')