GUI 的历史和 macOS 窗口机制

本次主要想总结一些目前使用的GUI界面,以及macOS界面中的窗口和应用程序的概念。首先对于一个新的东西了解之前是采用浏览引擎,从百度到Google,或者新生代的duckduckgo等等;但是因为互联网的垃圾太多,自己去寻找的过程也是挑挑拣拣的过程,直到发现wiki 百科。它可以更清晰的说明一个领域

0x01 引言:从Vscode引起的macOS应用和窗口的疑惑

macOS的文档(Document)、窗口(window)和应用程序(application)的关系之前一直分不清楚,使用的时候能感受到和window不一样的地方,但是一直不知道区别在哪里。直到使用vs code对于默认打开文件夹的疑惑。

事情是这样的,我的vs code每次打开的时候都不会显示上次打开的文件夹,在网上搜索设置的时候看到可以在

1
windows.restore = 'one' // 可以打开上次关闭的文件夹

但是如果我使用左上角的红 ’x‘关闭,还是会退出文件夹,但是并没有关闭vs code(因为指示灯还是开着);如果使用dock内的vs code’退出‘则可以关闭vs code并在下次打开的时候正常出现文件夹

img

7151660891268_.pic

0x02 GUI的发展历史

我们使用鼠标(mouse)进行交互,使用单击(click)图标启动程序,使用图形控件(graphical control)操作屏幕上的各种窗口(window),这些都和图形操作有关,这里参照wiki百科–GUI

2.1 没有计算机的时代

1930年,Vannevar Bush首次编写一种称为 Memex的设备,设想像一个桌子,上面有两个触摸屏图形显示器、一个键盘和一个扫描仪,允许用户使用与超链接的工作方式来访问所有的人类知识。注意这个时候并没有数字计算机,所以这个想法并没有得到任何讨论,《信息机器Memex》–阮一峰

img

bg2007112201

这种机器内部用微缩胶卷(microfile)存储信息,也就是自动翻拍,可以不断往里面添加新的信息;桌面上有阅读屏,用来放大阅读微缩胶卷;还有许多个按钮,每一个按钮代表一个主题,只要按一下,相应的微缩胶卷就会显示出来。每一个胶卷内部还记录着相关的其他胶卷的编号,可以方便地切换,形成同主题阅读

2.2 Douglas Englebart – 诞生初期

1968年,被称为GUI之父的Douglas Englebart (道格拉斯·恩格尔巴特)在NACA(NASA前身)在某些开车上班的日子EMO的时候突然想到,作为一名工程师,他真正的使命不是从事可能只会让少数人受益的小项目。因此回顾布什的文章来思考如何建造一台可以增强人类智力的机器,在战争时期担任雷达操作员,主要设想围绕阴极射线管构建显示系统;在1962年在一篇《AUGMENTING HUMAN INTELLECT: A Conceptual Framework》提出认为数字计算机可以提供最快的方法来提高一个人处理复杂问题情况的能力,获得理解以适应他的特殊需求,并得到问题的解决方案,他也设想计算机不是人类智力的替代品,而是增强智力的工具,比如建筑师使用使用CAD来设计建筑物,而不是机器自己设计建筑物

这个时候时间点还是1962年,人们采用的计算机的体积非常巨大,通常用户会使用打孔纸带和他们进行交互,然后计算机在数小时或者数天之后输出结果。但是人们的想象力并不会拘束与时代!

因为这是一项全新的技术,Englebart的演示使用电视摄像机对准他的脸、手和正在观看的小显示屏,用来给人们展示一些全新的概念。这个显示系统基于矢量图形技术,可以在同一屏幕上显示文本和实线,受限于内存大小,它只能显示大写字母。Englebart采用的交互工具包括:一个标准打字机键盘、一个五键“和弦键盘”以及一个长方形三个按钮的盒子

img

2-NLSdisplay

img

3-NLSmouse

这个长方形的盒子、用着长电线连接到计算机,就是鼠标(mouse);没有人知道谁先叫它鼠标的,但是它在当时出现,并一直保留到现在,在机械上,它与现代鼠标略有不同,因为连接到内部电位器的两个圆形轮子直接在桌面上滚动,而不是由单个鼠标球与滚轮摩擦来操纵。然而,对于最终用户来说,它的操作几乎与现代鼠标相同。其他输入设备也曾尝试过(如触摸屏和光笔),但用户测试发现鼠标是操作屏幕光标最自然的方式。今天仍然如此。 鼠标的发明的伴生 – 指针也出现了,在当时演示的系统中指针是一个箭头,大约是单个字符的高度,指向正上方,指针在最初被称为‘Bug’。但是这个称呼并没有传承下来,而是pointer

img

4-NLSgui

在当时的演示中包括:超文本连接(hypertext linking)、全屏文档编辑(full screen document editing)、上下文操作(context- sensitive help)、网络文档协同(networked document collaboration)、电子邮件(email)、即时消息(instant message)、视频会议(video meeting);但是由于视频系统的显示很难分辨发生了什么。

可惜没有钱来实现商业化

2.3 PARC – 施乐(Xerox) 复印机公司的自救

当复印机厂商看到了computer带来的电子文档进行协作创作的时候,会担心自己的公司会在无纸化的进程中不可避免的消亡,这个时候他们需要做的是确保自己控制这项新的技术,因此在1970年成立了PARC(帕洛阿尔托研究中心),来使用五年的时间自由的做感兴趣的任何事情

第一件发明是激光打印机,是复印机业务的自然补充,因为打印需要一种更图形化的方式来让计算机开始准备文件,因为当时没有这样的计算机,它们方面来自己的计算机称为ALTO,它的显示屏的界面为606*808,每个像素都可以独立打开和关闭,但是只能显示固定的文本字符。但是具有一个键盘和更加现代化的Englebart鼠标,这个鼠标具有三个按钮,本身也变成了位图图像,并首次使用我们熟悉的对角线箭头形状,并可以根据正在执行的任务变成其他形状。Alto上软件开始非常粗糙,包括文件管理器(Norton commander)、图形文字处理器(Bravo,DOS的word前身)、位图图形编辑器(类似paint);但是这些不同的应用程序需要一个一致的用户界面,因此它们发明了Smalltalk,第一个现代GUI

img

6-AltoFM

第二件,smalltalk是一种易于使用的编程语言和开发环境,也可以算得上是第第一个面向对象的编程语言,其中程序代码和数据可以封装到称为对象的单元中来进行复用而不用了解其中实现细节,在1974年具有雏形并不不断完善,Smalltalk是一个图形开发环境,类似于windows和visual studio之间的感觉。Smalltalk 中的各个窗口都包含在图形边框中,并在其下方背景的灰色图案中显得格外醒目。他们每个人在每个窗口的顶行都有一个标题栏,可用于识别窗口并在屏幕上移动它。与 BeOS 类似,标题栏并没有延伸到窗口的整个长度,而是从左上角开始,仅延伸到标题本身。窗口可以与屏幕上的其他窗口重叠,并且选定的窗口会将自身移动到“堆栈”的顶部。此时还发明了“图标”的概念——程序或文档的小图标表示,可以单击以运行或操作它们。弹出菜单也是同时发明的——用户单击鼠标按钮之一并分层,基于手头任务的图形菜单将出现在鼠标光标的最后位置。首次出现的还有滚动条、单选按钮和对话框。

img

7-AltoST

第三件便是Xerox star 8010文档,Smalltalk是如此优美,但是施乐公司管理层并没有允许其作为商业产品推销,而是在1981年推出了ALTO精简版Alto,最重要的是取消了重叠窗口的功能,但是对于公众来说太混乱了。但是太晚了,因为Apple Computer.Inc在1976年创立.

img

8-Star

2.4 Apple/Steven Jobs - - 推动商业化的典范,从Lisa到Macintosh

1976年,Steve Jobs和Steve Woznlak在车库内创立一家Apple Computer的小型创业公司,在推出饱受欢迎具有传统命令行界面的Apple II,因为其年轻的属性,资金充裕同时愿意冒险,在继承诸多Xerox PARC工程师之后,Apple的下一代计算机Lisa(Local Integrated Software Architecture)也因此改变,从商业用途的传统基于文本的命令行计算机直到转变为第一台采用GUI和鼠标的个人电脑。Lisa 界面的许多不同原型都在 Apple ]II上进行了模拟,包括一个基于任务的界面被称为“二十个问题”,因为它似乎需要很长时间才能让计算机做任何事情,以及一个类似的四列文件浏览器与 Smalltalk 一起出现的,后来在 NeXTstep 和 Mac OSX 中重新出现。Lisa 团队最终确定了一个基于图标的界面,其中每个图标都表示一个文档或一个应用程序,并开发了第一个下拉菜单栏,所有菜单都出现在屏幕的最顶行。

LISA中创新包括,选定菜单项旁边显示复选标记、键盘快捷键、固定高度的滚动条、垃圾桶、灰显的菜单。但是也将鼠标从三个键简化称为一个键,所以引入双击的概念。同时也提出图标来代替文件系统中的文件,并使用分层目录结构浏览这些文件

img

9-Lisamockup1

1983年发布的Lisa因为高昂的售价并没有成功,在1984年(也是IBM被打倒的一年),推出了Macintosh项目配备9英寸、128KB、没有多任务处理、低成本的图形计算机,并成功实现商业化。在1984年底销量开始下降、以及其他问题乔布斯在1985年9月17日离开苹果,前往NeXT

Macintosh的名称来自于,公司员工喜欢的苹果品种(真的苹果)为mcIntosh,但是有一家音响公司为McIntosh,因此拼为Macintosh

img

11-Mac1

1988 年发布了 NeXTSTEP,这是史蒂夫·乔布斯的 NeXT 计算机的新 GUI 和操作系统,这是他在 1985 年离开 Apple 后的第一个重大项目。NeXTSTEP 为其所有 GUI 组件引入了锐利的 3D 斜面外观,是第一个使用“X”符号表示关闭窗口小部件,并在左上角引入了垂直菜单条的想法,也可以在任何时候“撕掉”,以便用户可以随时离开特定菜单点在屏幕上。NeXTSTEP 也有一个位于屏幕任意一侧的 Dock(但默认位于右侧)。

img

21-next

2.5 Windows - - 更加商业化的GUI推广

1985年的windows1.0版本,比尔盖茨来源于VisiOn、Dos的word的交叉,包括彩色界面、具有常见的GUI组件滚动条、窗口控件小部件和菜单;但是不想LIsa或者Macintosh上的单个菜单栏,每个应用程序都有自己的菜单栏;同时采用平铺的窗口而不是可以重叠的窗口,但是后续会改进

img

14-win101

1987年,Windows2.0,采用现有的传统的重叠方法,增加了最大化和最小化窗口,也由此与Apple发生专利冲突

img

19-win2

1990的3.0、1992年的3.1版本的发布,一致到windows95的巩固其在GUI操作系统的领先地位

img

25-win95

2.6 others

GUI界面也包括其他厂商的努力,比如GEM、Amiga Workbench、GEOS、Acorn等等

0x03 Mac中的窗口、文档的概念

参考

在GUI的设计中面向用户的概念有三个:应用、窗口和文档。在三者之间的关系可以分为MDI、SDI和TDI

  • MDI(multiple document interface),多份文档包含在窗口下,多个窗口保存在同一个应用
  • SDI(Single Document interface),每个窗口都是独立的应用,由OS自动调度。这也是windows的首创,因此一个窗口就是一份应用,也就是一个文档
  • TDI(Tab document interface)比如chrome,术语两者的混合体

每个应用可以打开一个或者多个窗口,每个窗口可以打开一份或者多份文档。

img

image-20220819161527184

这个简单的概念在只有128KB的Macintosh上这一层抽象并不容易,这样多个窗口的共存可能需要多个应用的同步,因为当时的内存只能跑一个前台程序,因此需要传达给用户

  1. 一个应用在逻辑上只能打开一个窗口
  2. 用户应当尽可能的停留在单个页面

img

img

所以Mac系统的红x对应的是关闭现有的窗口,以及其打开的文档,但是并没有退出应用,退出的话可以用dock里面的退出或者使用“command+Q”

而windows代表的操作系统让应用可以实现多开,逐渐弱化了窗口的概念,每份文档对应每个app,关闭文档也就是关闭对应的app

img

img

更对应的,在ios或者android、harmony中已经完全失去了文档的概念,只存在应用和窗口。

0x04 使用注意

macOS中窗口的概念由内存和算力限制而诞生,也因现有GUI发展而茁壮,在使用中注意区分application和window的区别,关闭window使用红‘x’、退出应用使用‘command+Q’;或许这就是window- server内存为什么这么高的原因吧

img

image-20220819163754181

1984年Macintosh模拟

参考链接

PARC:Palo Alto Research Center,帕洛阿尔托研究中心

Lisa:(Local Integrated Software Architecture),但是显然是Jobs的女儿名字

https://www.zhihu.com/question/21143701/answer/2521552530

https://arstechnica.com/features/2005/05/gui/


GUI 的历史和 macOS 窗口机制
https://blog.tjdata.site/posts/fc40e199.html
作者
chenlongxu
发布于
2024年4月29日
许可协议