From b3790c41d200bb26e389b41ed9911cb460fac686 Mon Sep 17 00:00:00 2001
From: Jeremy Soller <jackpot51@gmail.com>
Date: Tue, 21 Mar 2017 21:21:24 -0600
Subject: [PATCH] Make most applications adjust to available screen size

---
 src/browser/main.rs  |  5 +++--
 src/editor/main.rs   | 19 ++++++++++---------
 src/terminal/main.rs |  6 +++---
 3 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/src/browser/main.rs b/src/browser/main.rs
index f3c9c21..0521d2f 100644
--- a/src/browser/main.rs
+++ b/src/browser/main.rs
@@ -554,8 +554,9 @@ fn main_window(arg: &str, font: &Font, font_bold: &Font) {
 
     let mut url = Url::parse(arg).unwrap();
 
-    let window_w = 800;
-    let window_h = 600;
+    let (display_width, display_height) = orbclient::get_display_size().expect("viewer: failed to get display size");
+    let (window_w, window_h) = (cmp::min(800, display_width * 4/5) as i32, cmp::min(576, display_height * 4/5) as i32);
+
     let mut window = Window::new_flags(
         -1, -1, window_w as u32, window_h as u32,  "Browser", &[WindowFlag::Resizable]
     ).unwrap();
diff --git a/src/editor/main.rs b/src/editor/main.rs
index 79be5d4..bf0899a 100644
--- a/src/editor/main.rs
+++ b/src/editor/main.rs
@@ -1,11 +1,12 @@
 #![deny(warnings)]
 
+extern crate orbclient;
 extern crate orbtk;
 
 use orbtk::{Action, Button, Menu, Point, Rect, Separator, TextBox, Window};
 use orbtk::traits::{Click, Place, Text};
 
-use std::env;
+use std::{cmp, env};
 use std::fs::File;
 use std::io::{Read, Write};
 
@@ -18,10 +19,10 @@ fn main(){
         format!("Editor")
     };
 
-    let width = 800;
-    let height = 600;
+    let (display_width, display_height) = orbclient::get_display_size().expect("viewer: failed to get display size");
+    let (width, height) = (cmp::min(800, display_width * 4/5), cmp::min(576, display_height * 4/5));
 
-    let mut window = Window::new(Rect::new(100, 100, width, height), &title);
+    let mut window = Window::new(Rect::new(-1, -1, width, height), &title);
 
     let text_box = TextBox::new();
     text_box.position(0, 16)
@@ -82,11 +83,11 @@ fn main(){
     let save_as_path_option = path_option.clone();
     save_as_action.on_click(move |_action: &Action, _point: Point| {
         println!("Save As");
-        let mut window = Window::new(Rect::new(100, 100, 576, 32), "Save As");
+        let mut window = Window::new(Rect::new(100, 100, 320, 32), "Save As");
 
         let text_box = TextBox::new();
         text_box.position(0, 0)
-            .size(576, 16);
+            .size(320, 16);
         window.add(&text_box);
 
         if let Some(ref path) = save_as_path_option {
@@ -97,7 +98,7 @@ fn main(){
             let window_cancel = &mut window as *mut Window;
             let button = Button::new();
             button.position(0, 16)
-                .size(576/2, 16)
+                .size(320/2, 16)
                 .text("Cancel")
                 .on_click(move |_button: &Button, _point: Point| {
                     unsafe { (&mut *window_cancel).close(); }
@@ -108,8 +109,8 @@ fn main(){
         {
             let window_save_as = &mut window as *mut Window;
             let button = Button::new();
-            button.position(576/2, 16)
-                .size(576/2, 16)
+            button.position(320/2, 16)
+                .size(320/2, 16)
                 .text("Save As")
                 .on_click(move |_button: &Button, _point: Point| {
                     println!("Save {}", text_box.text.get());
diff --git a/src/terminal/main.rs b/src/terminal/main.rs
index 9442f61..9ebb33c 100644
--- a/src/terminal/main.rs
+++ b/src/terminal/main.rs
@@ -13,7 +13,7 @@ extern crate libc;
 extern crate syscall;
 
 use orbclient::event;
-use std::{env, str};
+use std::{cmp, env, str};
 use std::error::Error;
 use std::fs::{File, OpenOptions};
 use std::io::{self, Result, Read, Write};
@@ -206,8 +206,8 @@ fn main() {
     let slave_stdout = OpenOptions::new().read(false).write(true).open(&tty_path).unwrap();
     let slave_stderr = OpenOptions::new().read(false).write(true).open(&tty_path).unwrap();
 
-    let width = 800;
-    let height = 576;
+    let (display_width, display_height) = orbclient::get_display_size().expect("viewer: failed to get display size");
+    let (width, height) = (cmp::min(800, display_width * 4/5), cmp::min(576, display_height * 4/5));
 
     env::set_var("COLUMNS", format!("{}", width / 8));
     env::set_var("LINES", format!("{}", height / 16));
-- 
GitLab