Field
The present invention relates generally to graphical user interfaces and more specifically to browsing multiple images.
Description of the Related Art
An image browser is a software application that enables a user to browse multiple images. A conventional image browser displays images arranged in rows and columns, sometimes referred to as a grid, table, or list. If the source images are large relative to the available screen space, it is difficult to display several of the source images simultaneously. In this situation, a conventional image browser displays “thumbnail” versions of the source images rather than the source images themselves. A thumbnail version of a source image is smaller and/or of a lower resolution than the source image.
Sometimes, the image grid is larger than the window that is used to display the grid. The window acts like a “viewport” on top of the image grid that allows certain parts of the grid (those parts that are underneath the viewport) to be displayed. In this situation, more images exist than are currently displayed. In order to view these images, the image grid is kept stationary, and the user moves the viewport relative to the image grid, thereby allowing different parts of the grid (those parts that are underneath the viewport based on the viewport's new position) to be displayed. Alternatively, the viewport is kept stationary, and the user moves the image grid relative to the viewport, thereby allowing different parts of the grid (those parts that have moved to be underneath the viewport) to be displayed. This navigation functionality is commonly referred to as scrolling.
In some image browsers, scrolling is constrained to be either vertical or horizontal. In other image browsers, the scrolling direction is unconstrained and can be in any direction (this is sometimes referred to as “panning”). Vertical or horizontal scrolling is usually performed by using a scroll bar or buttons. This type of user interaction generally reflects the “stationary-grid-moving-viewport” approach. Panning is usually performed by grabbing and dragging within the image grid area. This type of user interaction generally reflects the “stationary-viewport-moving-grid” approach.
In some image browsers, scrolling speed is constant (i.e., scrolling is either on or off). For example, if scrolling is performed using a button, then scrolling starts when the button is pressed and continues while the button is held down. When the button is released, the scrolling stops. In other image browsers, scrolling speed is variable (referred to as “rate-based scrolling”). For example, if rate-based scrolling is performed using a button, then scrolling starts when the button is pressed and continues while the button is held down. Over time, as the button is held down, the scrolling speed increases. When the button is released, the scrolling stops. Scrolling at high speed involves rapid movement through the image grid. This movement can cause blurring if it occurs too rapidly. The rapid visual flow can also reduce a user's ability to determine whether she has reached her target and cause the user to become disoriented.
One way to reduce the effect of rapid visual flow is to decrease the magnification level (“zoom level”) of the images, thereby reducing the image size or shrinking the images. This technique essentially “zooms out” from the image grid so that the images in the grid appear smaller than normal. For example, if a user plans to scroll quickly through an image grid, she first decreases the magnification level so that the images in the grid appear smaller. When she then scrolls quickly through the grid, the effect of the rapid visual flow is reduced. This makes it easier for her to browse the images.
The problem with zooming out in order to reduce the effect of rapid visual flow is that the images get smaller and, as a result, more difficult to see. More images can be displayed simultaneously, but the images themselves cannot be seen clearly. Also, if the grid is short in one dimension (e.g., not very wide with vertical scrolling or not very tall with horizontal scrolling), then zooming out will cause the display of a lot of empty space (beyond the edges of the grid). This empty space is useless to the user in terms of seeing images and browsing them quickly.
An image browser is a software application that enables a user to browse multiple images. Images are arranged in rows and columns, referred to as a grid. The image grid can be displayed with a perpendicular view or with a perspective view. In the perpendicular view, the viewpoint's position will be on a vector that is orthogonal to the grid plane, and the viewpoint will be oriented directly toward the grid. In the perspective view, the viewpoint is oriented toward the grid but is not located directly overhead the visible portion of the grid. As a result, the viewpoint appears to be “tilted” toward the grid.
Conventional image browsers always display the image grid using a perpendicular view. A new kind of image browser, referred to as a “perspective image browser,” is capable of alternating between a view with less perspective distortion and a view with more perspective distortion when displaying an image grid. The amount of perspective distortion is determined by the image grid's angle of rotation. Note that if the first angle of rotation is set to zero, then the “less distorted” view actually has no perspective distortion at all because the view is a perpendicular view.
In one embodiment, the user manually switches between the less distorted view (e.g., perpendicular view) and the more distorted view. In another embodiment, the switching of views is performed automatically based on whether the image grid is moving or stationary. If the image grid is moving, then the image grid is shown with a more distorted view using a particular rotation angle. If the image grid is stationary, then the image grid is shown with a less distorted view (e.g., perpendicular view). In yet another embodiment, the switching of views is performed automatically based on the scrolling velocity (i.e., speed and direction). In this embodiment, scrolling and tilting are integrated such that as scrolling velocity changes, tilt angle changes also.
In the “automatic” embodiments, when the image grid is stationary (i.e., not being scrolled), the perspective image browser displays the grid using a less distorted view (e.g., perpendicular view). This enables the user to view the images with less distortion (or no distortion at all). When the image grid is moving (i.e., being scrolled), the perspective image browser displays the grid using a more distorted view. This enables the user to see more images simultaneously, which reduces the effect of the rapid visual flow. When the image grid stops moving (i.e., stops scrolling), the perspective image browser once again displays the grid using a less distorted view (e.g., perpendicular view).
The patent or application file contains at least one drawing executed in color. Copies of this patent or patent application publication with color drawings will be provided by the U.S. Patent and Trademark Office upon request and payment of the necessary fee.
The figures depict embodiments of the present invention for purposes of illustration only. One skilled in the art will readily recognize from the following discussion that alternative embodiments of the structures and methods illustrated herein may be employed without departing from the principles of the invention described herein.
The following description introduces a new kind of image browser. An image browser is a software application that enables a user to browse multiple images. The word “image” is meant to include any type of visual content. An image can be, for example, a photograph, a drawing, a frame of video, or text (e.g., a web page or other document or portion thereof). An image can represent, for example, a content item (e.g., an electronic file of any type) or an item for sale.
An image browser is generally used to browse a set of images. A set of images can represent, for example, a set of search results (e.g., items that satisfy a search query) or a set of items that are associated in some way (e.g., content items that are referred to by the same file, such as a web page, or content items that are stored in the same logical location, such as an electronic folder or album).
The problem with zooming out in order to reduce the effect of rapid visual flow is that the images get smaller and, as a result, more difficult to see. More images can be displayed simultaneously, but the images themselves cannot be seen clearly. Also, if the grid is short in one dimension (e.g., not very wide with vertical scrolling or not very tall with horizontal scrolling), then zooming out will cause the display of a lot of empty space (beyond the edges of the grid). This empty space is useless to the user in terms of seeing images and browsing them quickly.
What is needed is a way to display more images simultaneously yet not make the images too small to see. Since screen real estate (display space) is valuable, it should be used to display images, not to display empty space (like in the zoomed out view).
In one embodiment, an image grid is distorted or warped so that its appearance reflects what would be seen using a perspective view.
Note that although the grids shown in
One way to describe the difference between
Another way to describe the difference between
Conventional image browsers always view the image grid using a perpendicular view. If the grid is “zoomable” (i.e., can be zoomed into and out of), then the viewpoint can be moved closer to or farther from the grid. However, the viewpoint's position will always be on a vector that is orthogonal to the grid plane, and the viewpoint will always be oriented directly toward the grid. The orientation (rotational position) of the viewpoint does not change. In the perspective view, the viewpoint is oriented toward the grid but is not located directly overhead the visible portion of the grid. As a result, the viewpoint appears to be “tilted” toward the grid.
Perspective distortion is further discussed in “Allowing Camera Tilts for Document Navigation in the Standard GUI: A Discussion and an Experiment”, Guiard, Y., et al., Proceedings: Advanced Visual Interfaces (AVI), Venice, Italy, May 23-26, 2006, pp. 241-244.
As explained above, the perspective view of a grid enables more tiles to be displayed in the same amount of space compared with a perspective view. If each tile represents an image, then the perspective view of an image grid enables more images to be displayed in the same amount of space compared with a perspective view.
One way to use perspective view in an image browser is to always display the image grid using a perspective view. This technique will maximize the number of images shown at all times. The problem with the perspective view, of course, is that it distorts the images. If the perspective view is always used, then the images are always distorted.
A new kind of image browser, referred to as a “perspective image browser,” is capable of alternating between a view with less perspective distortion and a view with more perspective distortion when displaying an image grid. The amount of perspective distortion is determined by the image grid's angle of rotation. For example, a smaller angle of rotation yields less distortion, while a larger angle of rotation yields more distortion. In one embodiment, the image grid's first angle of rotation (for the “less distorted” view) and/or second angle of rotation (for the “more distorted” view) are configurable. Note that if the first angle of rotation is set to zero, then the “less distorted” view actually has no perspective distortion at all because the view is a perpendicular view.
Note that a perspective image browser can display image grids that differ from the image grids that are shown in
The type of perspective distortion can also be different. For example, the perspective distortion applied to the grid in
Alternatively, the axis of rotation could be horizontal. In that situation, applying perspective distortion to a perpendicular view grid would result in the top of the grid tilting away from the user or the bottom of the grid tilting away from the user.
Of course, the axis of rotation need be neither exactly vertical nor exactly horizontal—it can be at any angle whatsoever within the plane of the image grid. In one embodiment, the type of perspective distortion of the grid interface is configurable.
Scrolling
In one embodiment, the user manually switches between the less distorted view (e.g., perpendicular view) and the more distorted view. For example, if the user plans to scroll quickly through the image grid, she first displays the grid using the more distorted view so that the grid appears tilted (or more tilted). When she then scrolls quickly through the grid, the effect of the rapid visual flow is reduced. This makes it easier for her to browse the images. When she finds a portion of the grid that interests her, she stops scrolling and displays the grid using the less distorted view (e.g., perpendicular view).
In another embodiment, the switching of views is performed automatically based on whether the image grid is moving or stationary. If the image grid is moving, then the image grid is shown with a more distorted view using a particular rotation angle. If the image grid is stationary, then the image grid is shown with a less distorted view (e.g., perpendicular view).
In yet another embodiment, the switching of views is performed automatically based on the scrolling velocity (i.e., speed and direction). In this embodiment, scrolling and tilting are integrated such that as scrolling velocity changes, tilt angle changes also. Scrolling and tilting are unified by automatically adjusting the tilt angle during scrolling. A single user action interdependently controls both scrolling (viewpoint translation, both speed and direction) and tilting (viewpoint rotation).
In this “automatic” embodiment, when the image grid is stationary (i.e., not being scrolled), the perspective image browser displays the grid using a less distorted view (e.g., perpendicular view). This enables the user to view the images with less distortion (or no distortion at all). When the image grid is moving (i.e., being scrolled), the perspective image browser displays the grid using a more distorted view. This enables the user to see more images simultaneously, which reduces the effect of the rapid visual flow. (The perpendicular view prevents the user from looking ahead while navigating the grid. As a result, fast navigation (e.g., fast scrolling) causes the user to experience rapid visual flow.) When the image grid stops moving (i.e., stops scrolling), the perspective image browser once again displays the grid using a less distorted view (e.g., perpendicular view).
The direction of the perspective distortion (and the axis of rotation, which defines the distortion) is determined by the direction of the scrolling. For example, if the grid is being scrolled horizontally (i.e., left or right), the perspective distortion is also horizontal (and the axis of rotation is vertical), such that each row of the grid has one end that appears closer to the user and one end that appears farther from the user. The grid appears to have rotated around a vertical axis. In
The image grid in
If the grid is being scrolled vertically (i.e., up or down), the perspective distortion is also vertical (and the axis of rotation is horizontal), such that each column of the grid has one end that appears closer to the user and one end that appears farther from the user. The grid appears to have rotated around a horizontal axis. In
The image grid in
In one embodiment, scrolling can occur in any direction. In this embodiment, the axis of rotation is orthogonal to the scrolling direction such that the grid is tilted either towards or away from the scrolling direction. For example, if the scrolling direction is towards the upper-left corner of the screen (e.g., north-west), then the axis of rotation will be at a 45 degree angle (running north-east to south-west), and the grid will tilt either towards or away from the upper-left corner of the screen.
When a grid is scrolled, the tiles on one side of the grid are entering the screen (i.e., appearing), and the tiles on the opposite side of the grid are leaving the screen (i.e., disappearing). In one embodiment, the tiles that are entering the screen are shown farther away from the user (i.e., that portion of the grid is tilted away from the user). As the grid scrolls, those same tiles reach the middle of the screen and continue on, getting closer to the user. Eventually, right before the tiles scroll off the screen, they are as close to the user as they will ever be. Alternatively, in another embodiment, the tiles that are leaving the screen are shown farther away from the user (i.e., that portion of the grid is tilted away from the user).
If the perspective image browser switched immediately between the less distorted view (e.g., perpendicular view) and the more distorted view, the visual effect would be jarring to the user's senses. In one embodiment, the perspective image browser switches gradually between the less distorted view and the more distorted view. For example, assume that the perspective image browser is displaying the grid using a less distorted view (because the grid is stationary). As the grid starts to scroll, the viewpoint slowly changes its location and/or orientation so that its line of sight slowly changes from directly overhead the visible portion of the grid (if the less distorted view was the perpendicular view) or barely off to the side of the visible portion of the grid (if the less distorted view was not the perpendicular view) to off to the side (or further off to the side) of the visible portion of the grid. In this way, the switch between the less distorted view and the more distorted view is animated smoothly.
For example,
In one embodiment, if the scrolling speed is higher, then the transition between the less distorted view and the more distorted view is shorter (i.e., it happens more quickly). If the scrolling speed is lower, then the transition between the less distorted view and the more distorted view is longer (i.e., it happens more slowly). In other words, the view of the image grid is modified automatically based on the scrolling speed. This feature, referred to as speed-dependent automatic distortion (SDAD), integrates rate-based scrolling with automatic perspective distortion. When a user scrolls rapidly, the view automatically distorts so that the perceptual scrolling speed in screen space remains constant. As a result, the user can efficiently and smoothly navigate over a large area without becoming disoriented by extremely fast visual flow.
As the perspective image browser transitions between the less distorted view of the grid and the more distorted view of the grid, the appearance of the grid changes. Exactly how the grid's appearance changes depends on the technique used to tilt the viewpoint (with respect to the grid). One tilting technique is panoramic rotation, where the viewpoint stays in the same place but rotates.
In another tilting technique, the viewpoint moves around the grid in an arc and rotates so that the same portion of the grid remains visible. This technique is referred to as lunar rotation because the viewpoint appears to “orbit” a point in the grid.
In yet another tilting technique, the viewpoint moves at a fixed altitude (above the grid) and rotates so that the same portion of the grid remains visible. This technique is referred to as trans-rotation because the viewpoint translates.
If an image grid contains too many tiles to be displayed all at once in its entirety, the user can scroll the grid to view additional portions. As the number of tiles increases, it becomes more and more difficult for the user to know which portion of the grid is currently being displayed. This makes it harder for the user to navigate the grid because she doesn't know how big the entire grid is or where the edges of the grid are (relative to the visible portion).
One way to alleviate this problem is to display a second view of the grid (referred to as a “global view”) that compactly represents the entire grid. The global view gives the user an overview of the grid. A field-of-view indicator indicates which portion of the grid is currently visible (e.g., which portion of the grid is represented by the user interfaces in
The global view uses an icon or shape (e.g., a dot) to represent a tile. The dots are arranged in the same way as the tiles. For example, the grid portion that is visible in
Once an image grid has been configured, its tile layout stays the same, regardless of how many tiles are in the grid. Since the global view dots are arranged in the same way as the tiles, the dot layout also stays the same, regardless of how many dots are in the global view.
The global view's field-of-view indicator visually distinguishes the field-of-view dots (the dots that represent tiles that are currently visible in the detail view) from the remaining dots (the dots that represent tiles that are currently off-screen relative to the detail view). Any type of visual effect can be used to distinguish the dots. For example, the field-of-view dots can be shown against a different background than the remaining dots (such that the field-of-view dots appear to be highlighted). As another example, the field-of-view dots can be surrounded by a shape (e.g., a rectangle), while the remaining dots are not. In one embodiment, the field-of-view dots are shown in a first color (blue), while the remaining dots are shown in a second color (gray). Additional colors can be used to indicate additional information, such as a third color (gold) indicating that the corresponding tile has been flagged.
In
The problem with the global view is that the size of the field-of-view indicator depends on the ratio of the size of the viewport relative to the size of the entire grid. If the number of tiles that can be shown in the viewport is very small relative to the number of tiles in the entire grid, then the field-of-view indicator will be very small (and, therefore, difficult to see). This problem is similar to the “zooming out” problem that was discussed in the Background section. The global view is similar to a zoomed out view of the grid where the tiles have been replaced by dots. What is needed is a way to give the user more context than is provided in the detail view yet not make the field-of-view indicator too small to see.
In one embodiment, the size of the field-of-view indicator is maintained regardless of the size of the grid. In this embodiment, if the grid is too big (such that the field-of-view indicator would be smaller than the designated size), then only a portion of the global view is shown, rather than the entire global view. This type of view will henceforth be referred to as an “intermediate view.”
The intermediate view represents all of the tiles that are currently visible (i.e., those that are shown in the detail view) and some (but not necessarily all) of the tiles that are not visible (i.e., the tiles that are off-screen). Since the intermediate view represents at least some of the off-screen tiles, it gives the user some context regarding the grid portion that is visible (detail view) relative to the portion that is not visible.
The intermediate view is therefore either the entire global view or a portion thereof. If dots are shown at the edge of the intermediate view area, it is unclear whether those dots represent the edge of the grid or whether additional dots exist that are part of the global view but are not included in the intermediate view. In one embodiment, an icon is shown within the intermediate view to indicate that no more dots exist past the icon. For example, the icon can be a line located next to the last column of dots. The line represents the edge of the grid.
The intermediate view is coordinated with the detail view. When the detail view is moved (e.g., scrolled), the visible portion of the grid changes, and the intermediate view is updated to reflect the new position of the field-of-view indicator. For example, assume that the viewport is in the center of the grid and that the field-of-view indicator is therefore also centered in the middle of the intermediate view. If the detail view were scrolled, the field-of-view indicator would move to show which part of the grid became visible.
When the field-of-view indicator is centered within the intermediate view, information is displayed about the tiles closest to the visible tiles. These tiles are the ones that the user is mostly likely to navigate to next. In one embodiment, in order to ensure that this information is presented to the user, the position of the intermediate view (with respect to the larger global view) is automatically adjusted so that the field-of-view indicator is centered in the middle of the intermediate view.
Many different user interaction techniques can be used to scroll the image grid (and thereby tilt the image grid, if tilting is automatically triggered by scrolling). For example, the user can “mouse down” on a button that causes the grid to scroll. Different buttons can cause the grid to scroll in different directions. As another example, the user can activate a scroll bar. Different scroll bars can cause the grid to scroll in different directions. As yet another example, the user can hover over or click within a particular region of the display (sometimes called a “hotspot”). Different hotspots can cause the grid to scroll in different directions. In one embodiment, when a user ceases to activate a scroll control (such as a button or hotpot), the image grid stops scrolling immediately. In another embodiment, the image grid continues to scroll, but the scrolling speed decays over time, which results in the scrolling eventually slowing down and stopping. The scrolling speed decay makes it seem like the scrolling is being affected by friction. If the angle of rotation of the image grid is based on the scrolling speed, then the angle of rotation will decay as the scrolling speed decays.
In one embodiment, scrolling is performed by grabbing and dragging (sometimes referred to as “sticky hand”). Grabbing and dragging can be performed using any pointing device, such as a mouse, trackball, pointing stick, or touch screen. The user mouses down somewhere within the detail view, moves the cursor (thereby “dragging” the grid and changing its position), and then mouses up. This causes a different portion of the grid to become visible. (If an intermediate view is displayed, the intermediate view is updated accordingly so that it reflects the new position of the grid.) This type of user interaction generally reflects the “stationary-viewport-moving-grid” approach.
Grabbing and dragging the detail view like this will result in scrolling the detail view one visible portion at a time (at the most—since the largest drag distance is from one edge of the visible portion to the opposite edge). Many grab-and-drags may be required to move the grid to the desired location. In one embodiment, in order to decrease the amount of time needed to perform the grab-and-drags, the user is allowed to initiate a second grab-and-drag while the grid is still scrolling due to a first grab-and-drag. In other words, the user need not wait for the grid to come to a complete stop before initiating another grab-and-drag.
In one embodiment, grabbing and dragging is also supported by the intermediate view. For example, the field-of-view indicator can be grabbed and dragged within the intermediate view so that it indicates a different set of dots. (Alternatively, the user can click within the intermediate view, and the field-of-view indicator will be moved to that location.) The detail view will be scrolled accordingly. The intermediate view represents more tiles than can be visible within the detail view. Thus, a single grab-and-drag within the intermediate view can cause the image grid to scroll farther than a single grab-and-drag within the detail view. After the grab-and-drag (or after the click), the intermediate view will reposition itself so that the field-of-view indicator is centered again. Similar to the detail view, the user is allowed to initiate a second grab-and-drag while the intermediate view is still repositioning itself due to a first grab-and-drag.
Scrolling—Each location of the grid relative to the viewport (or, alternatively, each location of the viewport relative to the grid) is characterized by a “scroll position.” When the image grid is stationary, it has a first scroll position (“initial scroll position”). A user input then indicates a second scroll position (“target scroll position”). Keyframe animation is used to animate the grid so that it appears to tilt and scroll between the initial scroll position and the target scroll position. Images of the grid in various stages of tilting and scrolling (i.e., intermediate keyframes) are generated and displayed sequentially to produce the animation.
As mentioned above, different types of user input can be used to scroll the grid. In one embodiment, if the user input is a grab-and-drag in the detail view followed by a release, then the location of the cursor on the mouse down (the “grab”) represents the initial scroll position, and the location of the cursor on the mouse up (after the “drag” is over) represents the target scroll position. The speed of the drag does not affect the target scroll position.
In one embodiment, if the user input is a grab-and-drag in the detail view without a release (i.e., without a mouse up), then the grid continues to scroll. The speed of the drag affects the speed of the scroll, such that a faster drag results in a faster scroll. For example, the scrolling speed is determined by the cursor velocity when the cursor reaches the edge of the detail view. In one embodiment, the scrolling speed decays over time, which results in the scrolling eventually slowing down and stopping, even if the user has not released (moused up). The scrolling speed decay makes it seem like the scrolling is being affected by friction. If the angle of rotation of the image grid is based on the scrolling speed, then the angle of rotation will decay as the scrolling speed decays.
Any animation technique can be used to scroll and tilt the grid from its initial scroll position to its target scroll position. In one embodiment, an iterative function is used, where the grid's scroll position in each intermediate frame is a weighted average of the scroll position in the previous frame and the target scroll position. In this embodiment, the scrolling is fast initially and slows down as the grid approaches its target scroll position. In another embodiment, a parameterized function is used, where the grid scrolls from the initial scroll position to the target scroll position over a period of time, and that time value is used to determine the scroll position for each intermediate frame.
Tilting—The tilting of the grid is based on the scroll positions. Given a current scroll position and a target scroll position, a “target tilt angle” is determined. The target tilt angle is proportional to the velocity of the grid as the grid is scrolling. The tilt angle for each frame is determined such that the tilt angle is continuously interpolated towards the target tilt angle.
Intermediate view—If the user initiates a scroll from within the detail view, then as the current scroll position changes and approaches the target scroll position, the position of the intermediate view (with respect to the larger global view) is automatically adjusted so that the field-of-view indicator is centered in the middle of the intermediate view. In one embodiment, the field-of-view indicator specifies which tiles will be shown in the detail view when the grid is at rest. In this embodiment, if the grid is scrolling, the field-of-view indicator specifies which tiles will be shown in the detail view when the grid has reached its target scroll position.
If the user initiates a scroll from within the intermediate view (e.g., by moving the field-of-view indicator), the target position is determined, and then the wall starts to scroll. After the user has moused up, the position of the intermediate view is automatically adjusted so that the field-of-view indicator is centered in the middle of the intermediate view.
Tile population—Tile population includes obtaining content to show in tiles (e.g., images and text) and generating the tiles (e.g., combining the images with the text). In one embodiment, tiles are populated from the visual center of the grid outward. For example, the visual center of the grid is determined. Resources are loaded in priority order from the visual center outwards. In one embodiment, a tile is populated even if it is not currently being displayed. For example, assume that a first set of tiles is currently being displayed without any scrolling (i.e., stationary). The tiles that are adjacent to the displayed tiles are also populated. This way, if the user scrolls the grid to show the adjacent tiles, those tiles are ready to be displayed.
As the grid is scrolled, the visual center is continuously re-computed. Returning to the previous example, assume that the first set of tiles is currently being displayed without any scrolling. Now, the user issues a scrolling command that causes the grid to be scrolled the equivalent of five screens (i.e., five sets of tiles, each of which would occupy one screen). The visual center is determined to be within the destination screen (i.e., that area of the grid), and the tiles are populated from that point outward. This means that the tiles in the destination set will be populated before the tiles that are located in the grid between the first set of tiles and the destination set of tiles. In this way, content that the user is likely to see immediately is retrieved first.
In one embodiment, a tile is populated as follows: First, the content (e.g., an image and/or text) is requested. Then, if the aspect ratio of the content is known, the dimensions of the tile are set accordingly. For example, if the content is an image referenced by an HTML <IMG> tag, then the <IMG> tag might include the height and width of the image as attributes. These attributes can be used to set the dimensions of the tile.
At this point in the population process, the content may not have been received yet. Since the content is not available, the tile can display instead a color, pattern, or image as a placeholder. For example, if the image grid represents a set of items for sale, then the tile can display the logo of the store that is selling the items. In one embodiment, the tile is filled with the color black or a black gradient.
When the content is received, it is used to create an image that will be used for the tile. When the tile is displayed (rendered), the created image is displayed. In one embodiment, when the created image is first displayed, its brightness is set to a low level. Then, over time, the brightness level is increased until the original created image is shown. The effect is that the created image seems to “fade in” over time. The fade-in effect can occur over a fixed period of time, or the period of time can vary based on the scrolling speed (e.g., if the scrolling is faster, then the period of time is shortened, which causes the fade-in to occur faster). The fixed period of time can be configurable. In another embodiment, the original created image is shown immediately, without a fade-in effect.
In one embodiment, the tile population strategy is modified based on input received from an eye-tracking device. The eye-tracking device indicates where the user is looking That location is used as the visual center, and the tiles are populated starting there and going outwards. The eye-tracking input can also be used to enhance the level of detail in areas where the eye is pointing. For example, images that are shown in this area can be shown at a higher resolution than images in other areas (i.e., areas where the user is not looking).
After the contents of a tile have been generated, they are cached. If the cache becomes full, the tile that is farthest away from the field-of-view indicator (i.e., farthest away from being visible) is identified, and its contents are evicted from the cache.
Reference in the specification to “one embodiment” or to “an embodiment” means that a particular feature, structure, or characteristic described in connection with the embodiments is included in at least one embodiment of the invention. The appearances of the phrase “in one embodiment” in various places in the specification are not necessarily all referring to the same embodiment.
Some portions of the detailed description are presented in terms of algorithms and symbolic representations of operations on data bits within a computer memory. These algorithmic descriptions and representations are the means used by those skilled in the data processing arts to most effectively convey the substance of their work to others skilled in the art. An algorithm is here, and generally, conceived to be a self-consistent sequence of steps (instructions) leading to a desired result. The steps are those requiring physical manipulations of physical quantities. Usually, though not necessarily, these quantities take the form of electrical, magnetic or optical signals capable of being stored, transferred, combined, compared and otherwise manipulated. It is convenient at times, principally for reasons of common usage, to refer to these signals as bits, values, elements, symbols, characters, terms, numbers, or the like. Furthermore, it is also convenient at times, to refer to certain arrangements of steps requiring physical manipulations of physical quantities as modules or code devices, without loss of generality.
However, all of these and similar terms are to be associated with the appropriate physical quantities and are merely convenient labels applied to these quantities. Unless specifically stated otherwise as apparent from the following discussion, it is appreciated that throughout the description, discussions utilizing terms such as “processing” or “computing” or “calculating” or “displaying” or “determining” or the like, refer to the action and processes of a computer system, or similar electronic computing device, that manipulates and transforms data represented as physical (electronic) quantities within the computer system memories or registers or other such information storage or display devices.
Certain aspects of the present invention include process steps and instructions described herein in the form of an algorithm. It should be noted that the process steps and instructions of the present invention could be embodied in software, firmware or hardware, and when embodied in software, could be downloaded to reside on and be operated from different platforms used by a variety of operating systems.
The present invention also relates to an apparatus for performing the operations herein. This apparatus may be specially constructed for the required purposes, or it may comprise a general-purpose computer selectively activated or reconfigured by a computer program stored in the computer. Such a computer program may be stored in a tangible computer-readable (or machine-readable) storage medium, such as, but not limited to, any type of disk including floppy disks, optical disks, CD-ROMs, magnetic-optical disks, read-only memories (ROMs), random access memories (RAMs), EPROMs, EEPROMs, magnetic or optical cards, application specific integrated circuits (ASICs), or any type of media suitable for storing electronic instructions, and each coupled to a computer system bus. Furthermore, the computers referred to in the specification may include a single processor or may be architectures employing multiple processor designs for increased computing capability.
The algorithms and displays presented herein are not inherently related to any particular computer or other apparatus. Various general-purpose systems may also be used with programs in accordance with the teachings herein, or it may prove convenient to construct more specialized apparatus to perform the required method steps. The required structure for a variety of these systems will appear from the description. In addition, the present invention is not described with reference to any particular programming language. It will be appreciated that a variety of programming languages may be used to implement the teachings of the present invention as described herein, and any references to specific languages are provided for disclosure of enablement and best mode of the present invention.
As will be understood by those familiar with the art, the invention may be embodied in other specific forms without departing from the spirit or essential characteristics thereof. Likewise, the particular naming and division of the modules, features, attributes, methodologies, managers and other aspects are not mandatory or significant, and the mechanisms that implement the invention or its features may have different names, divisions and/or formats. Furthermore, as will be apparent to one of ordinary skill in the relevant art, the modules, features, attributes, methodologies, managers and other aspects of the invention can be implemented as software, hardware, firmware or any combination of the three. Of course, wherever a component of the present invention is implemented as software, the component can be implemented as a standalone program, as part of a larger program, as a plurality of separate programs, as a statically or dynamically linked library, as a kernel loadable module, as a device driver, and/or in every and any other way known now or in the future to those of skill in the art of computer programming. Additionally, the present invention is in no way limited to implementation in any specific programming language, or for any specific operating system or environment.
In addition, the language used in the specification has been principally selected for readability and instructional purposes and may not have been selected to delineate or circumscribe the inventive subject matter. Accordingly, the disclosure of the present invention is intended to be illustrative, but not limiting, of the scope of the invention, which is set forth in the following claims.
This application is a continuation of U.S. application Ser. No. 12/590,187, filed Nov. 3, 2009, which claims the benefit of U.S. Provisional Application No. 61/205,031, filed Jan. 13, 2009, and which is a continuation-in-part of U.S. application Ser. No. 12/472,270, filed May 26, 2009, which claims the benefit of U.S. Provisional Application No. 61/056,815, filed May 28, 2008, all of which are hereby incorporated by reference herein in their entirety.
Number | Date | Country | |
---|---|---|---|
61205031 | Jan 2009 | US | |
61056815 | May 2008 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 12590187 | Nov 2009 | US |
Child | 14552358 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 12472270 | May 2009 | US |
Child | 12590187 | US |