具体实施方式
用户常常希望他们在如何查看文档方面具有灵活性。随着技术演进,用户界面提供越来越多的灵活性。在计算器的早期时日中,文本按行的顺序在屏幕上向用户呈现。当填充屏幕时,较旧的行跑出页面的顶部且不可恢复。在后续革新中,引入了竖直滚动以允许用户在文档中上下移动。作为对自动换行的替选还引入了水平滚动,从而提供一种用以示出太宽而不能调整在一个屏幕中的行的方式。
通常,可滚动的区域提供用户可以指定用户是否想要在文档中上或下(或在水平滚动的情形中,左或右)移动的区域。该区域通常包括用户可以上或下(或左或右)移动以表明他或她想要移动之处的滚动条或“滑块(thumb)”。
除了滚动之外,用户常常希望能够在查看内容时放大和缩小。然而,一些应用提供了滚动能力但是没有缩放能力。可以使用本文中的主题实施显露滚动功能的应用中的缩放功能。为了增进已有应用的查看功能,查看适配器截获用户的姿态和其它命令以确定用户正尝试做什么。例如,用户可以向查看框右或左移动鼠标,从而表明用户想要放大或缩小。由于可能无法在应用本身中实施缩放功能,所以适配器截获这些姿态,获得适当调节的内容,以及通过在应用的查看框上显示调节的内容来响应命令。
为了获得适当调节的内容、以及把该内容提供给应用,适配器可以执行动作如下。对于提供底层文档视图的任何给定应用,适配器可以通过与应用的滚动能力交互来“驱动”应用。适配器与应用的交互可以对用户不直接可见,但是应用可以使用这些交互获得向用户示出的内容。例如,适配器可以使用应用的滚动能力在文档中上下(或者,可能地,左右)滚动。查看适配器以此方式导航文档的原因是收集文档的各种部分。例如,假定一次只有文档的十分之一可以适合在查看框中。如果用户表明(通过适当缩放姿态)他想要看到包括文档五个查看框价值的文档的解除增大(de-magnify)视图,则适配器可以使用它对应用的控制滚动文档和收集该文档的五个查看框价值。适配器可以随后对它收集的信息解除增大,以使得它适合在一个查看框中。为了使得解除增大版本对用户可见,适配器可以把解除增大版本放在适配器管理的虚拟文档中。因而,适配器把底层文档的解除增大视图放到虚拟文档中,随后把该虚拟文档显露给用户。例如,适配器可以将虚拟文档的视图覆盖在应用的查看框上以使得用户看到查看框中的虚拟文档。
适配器可以使用某些技术收集和存储文档有关的信息。例如,适配器可以提供查看文档的许多不同缩放级别,但是可能不会想要存储所有缩放级别的整个文档。因此,适配器可以响应于对具体缩放级别的用户请求来收集文档的部分,或者可以先于用户查看文档该区域的实际发出的命令,试图预见用户接下来将会查看文档的什么区域。例如,如果用户正查看特定缩放级别的文档且看似向上滚动或平移,则适配器可以预见用户将会继续向上滚动和将会在用户实际上请求它之前收集文档中上方较高处的信息。另外,适配器可以通过丢弃用户已经查看和移出查看区域的文档部分而保持隔开。
为了确定如何“驱动”应用,适配器可以试图学习应用的控件在何处。用以学习应用的控件在何处的一个方式是检查应用显露的元数据。例如,应用可以提供表明可滚动查看区域和它的滚动条位于何处的元数据。或者,作为另一实例,适配器可以通过观测用户行为和应用响应于该行为采取的动作推断可滚动查看区域和滚动条的位置。例如,表明滚动条位置的通常行为是:首先用户在滚动滑块上点击;随后什么也未发生;随后用户开始向上或下移动滑块;以及随后查看区域中的内容在滑块的方向上向上或下移动。通过观测此模式,适配器可以检测可滚动查看区域的存在、以及滚动条的位置。在另一实例中,如果用户点击鼠标和随后观测到滚动,则此模式倾向于表明用户点击了除了滑块以外一些地方的滚动条。(以上内容描述用于检测竖直滚动条的一些技术,但是可以使用相似技术检测水平滚动条。)
现在转到图,图1示出了滚动可用的实例应用界面。窗口102提供程序104的用户界面。例如,通过窗口102提供界面的程序104可以是处理诸如超文本标记语言(HTML)和Java代码以显示一些类别内容的浏览器。窗口102可以具有窗口具有的正常控件,如,允许用户隐藏、调整、以及关闭窗口102的控件106。
在窗口102内,程序104可以显示各种类型的内容。这种内容的一个实例是允许显示一些底层内容110的查看框108。在此实例中,虽然可以通过查看框108显示任何类型的内容(例如,文本、图像等),但要显示的内容110是熟悉的“Lorem ipsum”文本内容。例如,当使用浏览器访问一些类型的内容时,访问的内容可以是提供HTML或Java代码使得浏览器显示查看框108、以及还使得通过查看框108显示内容110的的服务器侧应用。内容110可以包括一个或更多个组件,如,源文本文件112、字体114、以及图像116。例如,查看框108中示出的内容110可以是包含文本和图像的报纸文章。通过经由查看框108显示的像素示出内容。示出的特定像素包含文本和图形。从图像116得出表示图形的像素。从源文本文件112和字体114得出表示文本的像素——即,源文本文件112表明要绘制哪些字符,字体114表明这些字符将会如何显现。
查看框108提供用户可以竖直地和/或水平地滚动内容110的控件。例如,沿着查看框108的右和底部边缘是用来引导查看框108中内容110滚动的两个矩形118和120。矩形118和120包含允许用户上下(滑块122)和/或右左(滑块124)滚动的滚动条、或者滑块122和124。提供查看框108的服务器侧应用可以提供此滚动功能。(在一些实例中,查看框108可以只提供竖直滚动、或者只提供水平滚动。可以使用本文中描述的技术来扩展查看功能以提供查看框108未在本地提供的维度(dimension)的滚动)。
用户会想要执行的一个查看功能是缩放或调节。虽然滚动能力允许用户在查看框108内上或下移动内容110,但滚动不允许用户使得内容较大(以看到更详尽的较少量内容)、或者使得内容较小(以看到更不详尽的较大量内容)。存在用户可以使用鼠标表明诸如“放大”或“缩小”的功能的各种方式。例如,用户可以向右拖动鼠标指点器以表明放大,或者向左以表明缩小。虽然用户可以做出这种姿态,但查看框108可以不提供这些姿态的本地支持。可以使用本文中提供的技术提供这种支持,以使得即使在正查看内容的应用在本地未提供这种支持的情况下、用户也可以在内容上放大和缩小(或执行任何其它适当查看操控)。
图2示出了提供支持以便扩展查看功能的实例方式。服务器侧应用提供用于提供对一些底层内容(例如,文本、字体、图像等)访问的查看框108,并且在向用户提供此查看框视图的窗口102中打开程序(例如,浏览器)。另外,查看框108可以提供允许竖直和/或水平滚动的滑块122和124(或者,如以上所注意到的,查看框108可以提供仅一个维度的滚动)。这些组件与图1中示出的类似。应用实例202是用户与之交互的应用的实例。例如,系统可以打开浏览器窗口以允许用户与应用实例202交互。然而,查看适配器206也可以如应用实例202界面的虚线图所表明的,以对用户不可见的方式与应用实例202交互。
特别地,虽然用户通过窗口102与应用实例202交互,但查看适配器206截获用户发出的命令208。例如,如果用户做出诸如上述左和右姿态的姿态(表明放大和缩小功能),则可以把这些姿态译码成命令208,查看适配器206可以截获这些命令208。查看适配器206可以截获这些命令的一个方式是无论何时窗口102具有焦点时观测窗口102中的键盘和鼠标交互。(通常把“具有焦点”理解为意思是窗口是激活的——即,与一些其它窗口相反,在该时间点把键盘和鼠标输入理解成针对具有焦点的窗口)。
无论查看适配器206截获命令的方式如何,一旦查看适配器206具有命令208它就可以译码命令以确定用户正尝试查看什么。例如,可以把向左运动译码成用户想要缩小,从而看到较少内容,但是看到该内容的较大图像。查看适配器206可以随后尝试获得用户想要看到的内容。查看适配器206通过操控应用中的查看框210获得此内容。查看框210可以提供允许控制查看框210内的内容查看的滑块212和214。查看框210中要显示的内容是图1的查看框108中显示的同样内容110。查看适配器206通过控制滑块212和214控制内容110的查看。注意到,查看适配器206对查看框210内部视图的操控可以在“后台”发生,在这个意义上此操控实际上不直接向用户显示。例如,查看框210中内容的滚动和箭头的运动不会在应用的任何桌面窗口中显现。而是,查看适配器206以应用确信它正接收用户可能通过键盘或鼠标提供了同样种类命令的这种方式简单地对应用的输入缓存器操作。
通过对应用的控件操作,查看适配器206能够查看底层内容110的不同部分。查看适配器收集表示内容110的像素216。例如,如果内容110包含文本,则像素216是表示以一些字体绘制的该文本字符的像素。如果内容110包含图像,则像素216是表示这些图像的像素。
当查看适配器206收集了像素216时,查看适配器206使用像素创建替换文档218。替换文档218在它代替用户正通过应用实例202尝试查看的原始内容110的意义上是“替换物”。将回想到用户实例化应用实例202以查看底层内容110。如上所述,查看适配器206与应用实例202交互以收集表示内容110的像素。查看适配器206随后以遵从用户命令的方式布置这些像素。例如,如果用户表明了他想要在文本的一些部分上(在查看框108未在本地支持缩放特征之处)放大,则查看适配器206创建该文本的扩大视图。为了创建此扩大视图,查看适配器206使用应用实例202收集表示用户想要缩放的文本部分的像素,以及随后把视图扩大到适当比例。随后把此扩大视图放置在文档中。查看适配器206可以随后将文档的图像覆盖在如若不然将会对用户可见的查看框的顶部(即,在查看框108的顶部)。通常,应用实例202将会通过查看框108呈现内容110。然而,由于查看适配器206通过替换文档218的图像覆盖查看框108,所以用户在用户预计看到内容110的位置看到替换文档218,从而创建了用户在内容110上缩放就如同查看框108中已有如此进行的机制一样的幻象。如可以看出的,内容110的文本较之在查看框210中而言在查看框108中(或者,更精确地,在查看框108顶部的覆盖物中)显现得较大,以表明替换文档218表示向用户示出的该文本的缩放视图。
图3示出了如何用替换文档218代替原始内容110。如以上所讨论的,通常把应用实例202实例化为应用通过查看框108向用户显示的查看内容110。然而,当使用查看适配器206时,查看适配器将替换文档218的图像覆盖在查看框108的顶部,从而使得看到替换文档而非内容110(如内容110与查看框108之间的线上的“XX”标记所表明的)。查看适配器206控制替换文档218的内容。查看适配器206利用查看适配器206通过控制应用实例202以从内容110收集像素而收集的这些像素216来填充替换文档218。因而,当用户看到查看框108中的内容时,用户正看到查看适配器206放置在替换文档218中的内容,而非原始内容110。以此方式,查看适配器206可以扩大、缩减、或者如若不然变换内容110的外观以按照用户的命令向用户示出——只要查看适配器206可以通过一些方式收集此内容即可。查看适配器206通过以这种方式“驱动”应用以收集它希望放置在替换文档218中的像素如上所述来收集内容。
图4以流程图的形式示出了可以向应用提供一定查看功能(例如,缩放)的实例过程。在转到图4的描述之前,注意到,虽然这些过程可以在任何系统中执行和不限于图1-3中示出的场景,但参照图1-3中示出的组件通过实例描述本文中(图4中以及图5中)包含的流程图。另外,图4和5中流程图中的每个流程图如连接区块的线所表明的,示出了按特定次序执行过程阶段的实例,但是可以按任何次序、或者以任何组合或子组合执行这些图中示出的各种阶段。
在402,应用被启动。例如,用户可以调用上述浏览器程序,以及可以使用浏览器访问在浏览器窗口中提供查看框的应用。在404,检测查看框中的滚动条。例如,查看框可以只提供竖直滚动,在此情形中,检测竖直滚动条。或者,如以上所注意到的,查看框可以提供竖直和水平滚动条这二者,并且可以检测这两者。
可以通过各种方式执行滚动条的检测。在一个实例中,提供查看框的应用还可以提供表明查看框和它的滚动条位置的元数据406。在另一实例中,可以在查看框显现的用户界面上执行观测检测408以检测查看框和/或它的滚动条。可以执行此观测检测的一个方式如下,以及在图5中示出。首先,检测到(在502)用户点击了鼠标按钮(或一些其它类型指点装置(如,触摸板)上的按钮)。随后,检测到(在504)在鼠标按钮点击之后,作为该点击的结果在屏幕上什么也未发生。接下来,检测到(在506)用户开始移动鼠标。随后,检测到(在508)响应于鼠标的移动出现了滚动——即,屏幕上的一些内容在用户移动鼠标时开始滚动。由于观测的动作与用户操作了滑块一致,所以该动作序列倾向于表明用户使用鼠标来操作滚动条的滑块。使用这些观测,推断出查看框和滑块的位置。
现在回到图4,在412,应用消耗用户正使用该应用以查看的原始内容。例如,如果用户正打算使用该应用查看内容110(在图1中示出),则该应用消耗内容110。该应用可以在查看适配器206的指引下消耗内容110(在图2中示出)。查看适配器指引内容110的查看的同时,查看适配器从文档收集像素(在414)。在416,查看适配器把像素放在替换文档中。在418,来自替换文档的内容被覆盖在应用的查看框顶部,使得看似应用正示出来自替换文档的用户内容。例如,查看适配器可以创建应用中查看框的位置顶部的覆盖物,以及可以显示来自该覆盖物中替换文档的内容。
注意到,当查看适配器使用所述应用收集像素时,它可以通过各种方式、以及响应于各种线索来如此进行。例如,查看适配器可以响应于用户进行的具体动作从底层内容收集像素。即,如果用户请求缩小,则查看适配器可以使用所述应用来操控底层内容和收集数个查看框价值的像素,以使得可以向用户示出数个框价值内容的缩小视图。然而,在另一实例中,查看适配器尝试预见用户将会要求什么。例如,如果用户正在某个方向上(例如,向右)平移内容,则查看适配器可以基于用户将会在不远将来的某时间在该方向上进一步平移的预测,认为用户将会在该方向上继续平移内容,并且因此可以在用户实际平移这么远之前尝试在该方向上进一步收集内容的部分。另外,查看适配器可以在预期用户在内容的同样位置上放大或缩小时,存储来自不同级别细节的底层内容的像素。例如,如果用户平移到文档中的具体位置和随后停止平移,则用户可以在该位置处放大或缩小,所以查看适配器可以在预期用户将会实际上在该位置处放大或缩小时,构建数个不同缩放级别的文档图像。系统可以把在不同缩放级别的内容的各种不同视图存储一些时间,以及还可以在预见到在不远的将来不可能使用存储的视图时刷新存储的视图。通过在预见到尚未发出的用户命令时预先计算内容的视图,可以通过能够在请求它们之后迅速提供视图来增加性能的感知。另外,通过刷新查看适配器确信在不远的将来不可能使用的视图,减少用来存储视图的空间量。
图6示出了可以部署本文中描述的主题方面的实例环境。
计算机600包括一个或更多个处理器602和一个或更多个数据记忆组件604。处理器602通常是如个人桌面或膝上型计算机、服务器、手持计算机、或者另一种类的运算装置中得到的微处理器。数据记忆组件604是能够短或者长期存储数据的组件。数据记忆组件604的实例包括硬盘、可移除盘(包括光和磁盘)、易失性和非易失性随机访问存储器(RAM)、只读存储器(ROM)、闪存、磁带等。数据记忆组件是计算机可读存储介质的实例。计算机600可以包括显示器612、或者与之相关联,显示器612可以是阴极射线管(CRT)监视器、液晶显示(LCD)监视器、或者任何其它类型监视器。
软件可以存储在数据记忆组件604中,以及可以在一个或更多个处理器602上执行。虽然可以使用任何类型的软件,但这种软件的实例是可以实施以上结合图1-5描述的功能中一些或所有功能的查看适配软件606。可以例如通过一个或更多个组件实施软件606,所述组件可以是分布式系统、单独文件、单独功能、单独对象、单独代码行等中的组件。虽然本文中描述的主题不限于此实例,但在硬盘上存储程序、向RAM中加载程序、以及在计算机的处理器上执行程序的个人计算机代表图6中描绘的场景。
可以作为数据记忆组件604中的一个或更多个中存储的软件和在处理器602的一个或更多个上执行的软件来实施本文中描述的主题。作为另一实例,可以作为一个或更多个计算机可读存储介质上存储的指令实施主题。(有形介质(如,光盘或磁盘)是存储介质的实例)。这种指令在通过计算机或其它机器执行时可以使得计算机或其它机器执行方法的一个或更多个动作。可以把用以执行动作的指令存储在一个介质上,或者可以分布在多个介质上,以使得无论所有指令是否恰好在同样介质上,所述指令都可以统一显现为在一个或更多个计算机可读存储介质上。
另外,本文中描述的任何动作(无论是否在图中示出)可以作为方法的一部分通过处理器(例如,处理器602中的一个或更多个)执行。因而,如果在本文中描述动作A、B、以及C,则可以执行包括动作A、B、以及C的方法。此外,如果在本文中描述动作A、B、以及C,则可以执行包括使用处理器执行A、B、以及C动作的方法。
在一个实例环境中,计算机600可以以通信方式通过网络608连接到一个或更多个其它装置。虽然其它类型的装置也可以如此连接,但计算机610是可以连接到计算机600的装置的实例,其中计算机610可以在结构上与计算机600类似。
虽然以特定于结构特征和/或方法动作的语言描述了主题,但要理解,所附权利要求中定义的主题并非一定限于上述具体特征或动作。而是,上述具体特征和动作作为实施权利要求的实例形式公开。