DE60010272T2 - Graphische objekte mit streck- und kompressionseigenschaften - Google Patents

Graphische objekte mit streck- und kompressionseigenschaften Download PDF

Info

Publication number
DE60010272T2
DE60010272T2 DE60010272T DE60010272T DE60010272T2 DE 60010272 T2 DE60010272 T2 DE 60010272T2 DE 60010272 T DE60010272 T DE 60010272T DE 60010272 T DE60010272 T DE 60010272T DE 60010272 T2 DE60010272 T2 DE 60010272T2
Authority
DE
Germany
Prior art keywords
compression
objects
stretch
properties
graphic
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE60010272T
Other languages
English (en)
Other versions
DE60010272D1 (de
Inventor
H. Robert HALSTEAD
E. David HOLLINGSWORTH
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Curl Corp
Original Assignee
Curl Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Curl Corp filed Critical Curl Corp
Application granted granted Critical
Publication of DE60010272D1 publication Critical patent/DE60010272D1/de
Publication of DE60010272T2 publication Critical patent/DE60010272T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Processing Or Creating Images (AREA)
  • Laminated Bodies (AREA)
  • Shaping By String And By Release Of Stress In Plastics And The Like (AREA)
  • Wrappers (AREA)
  • User Interface Of Digital Computer (AREA)

Description

  • HINTERGRUND DER ERFINDUNG
  • In den letzten Jahren hat die Zahl der Nutzer des Internets exponentiell zugenommen. Mit diesem Anstieg an Popularität hat auch eine erhöhte Nachfrage für Werkzeuge, die die "on-line-Erfahrung" verstärken, stattgefunden. Zu diesem Zweck wurden neue objektorientierte Computerprogrammiersprachen, wie z. B. Java, entwickelt. Während diese Sprachen einen Fortschritt gegenüber früherer Technologie darstellen, gibt es noch Platz für Verbesserung, insbesondere in der Fähigkeit, das Layout komplexer Strukturen graphischer Objekte in Fenstern variabler Größe zu modifizieren. Es ist schwierig, qualitativ hochwertige Echtzeitgraphiken unter Verwendung dieser Sprachen zu implementieren.
  • Java erlaubt eine Spezifizierung minimaler und maximaler Größen für graphische Objekte und verwendet diese Werte in einer Weise, die Objekte veranlasst, sich dehnbarer zu verhalten, wenn die Unterschiede zwischen ihren minimalen und maximalen Größen groß sind.
  • Eine explizit für Internetanwendungen entwickelte Sprache ist die MIT Curl Sprache von NI. Hostetter et al., "Curl: A Gentle Slope Language for the Web", World WideWeb Journal, Vol II. Issue 2. O'Reilly & Associates, Frühjahr 1997.
  • Ausführungsformen der vorliegenden Erfindung erweitern die Curl Sprache. (Die Sprache dieser Ausführungsform der vorliegenden Erfindung wird als "Carl" referenziert und soll von der früheren "MIT Curl" Sprache unterschieden werden.) MIT Curl verwendete ein dreistufiges Verhandlungsschema und erlaubte es Objekten, ihre Größenpräferenzen, was eine minimale Größe und einen Streckungskoeffizienten betrifft, zu beschreiben.
  • TeX ist ein weithin verwendetes Textformatierungsprogramm, das von Donald Knuth entwickelt wurde. Donald E. Knuth, The TeXBook, Addison-Wesley, Reading, MA, 1984. TeX verwendet ein Konzept, bekannt als "glue" (Kleber), um die Ausdehnungspräferenzen von Füllobjekten auszudrücken und vereinigt verschiedene Streck- und Stauchordnungen, die verwendet werden können, um die Streck- und Stauchbarkeit ver schiedener Arten von Füllobjekten zu beschreiben. Da sich die Gesamtausdehnungen eines Layouts ändern, verändern sich die Ausdehnungen einzelner Füllobjekte abhängig von den bevorzugten Größen und Streckbarkeit dieser Objekte.
  • Ein von Robert Halstead entwickelter Graphik-Toolkit, genannt Stk, vereinigt das Konzept einer Elastizität, bekannt als "glue" (Kleber), die eine minimale Größe, einen Streckbarkeitskoeffizient und eine mit graphischen Objekten mit Inhalt assoziierte Streckordnung hat. Der Toolkit formalisiert die Layout-Berechnungen der horizontalen und vertikalen Boxen der graphischen Objekte in Bezug auf elastische Addiere-, Max- und Dividiere-Operationen. Stk ist nicht weit bekannt oder verwendet. Der Layout-Mechanismus von Stk wurde in Swat eingebaut, ein Graphik-Toolkit, der von Harold Abelson, James Miller und Natalya Cohen am MIT entwickelt wurde.
  • Linton M.A. et al.: "Composing user interfaces with Interviews" Computer, US, IEEE Comp.Soc., Long Beach, CA, US, vol. 22, no.2, 1 February 1989, pp. 8–22 und Haarslev V. et al.: "Visualization and graphical layout in object-oriented systems" Journal of Visual Languages and Computing, März 1992, UK, vol. 3, no.1, pp. 1–23 offenbaren Systeme für das graphische Layout von Benutzerschnittstellen.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Gemäß der vorliegenden Erfindung sind ein System, ein Verfahren und eine Datenstruktur vorgesehen, um das Layout graphischer Objekte zu vereinfachen. Gesonderte Streck- und Staucheigenschaften werden für graphische Einheitsobjekte mit Inhalt definiert. Diese Eigenschaften werden verarbeitet, um einzelne Layouts graphischer Objekte innerhalb eines graphischen Gesamtlayouts zu definieren. Die Datenstruktur, die Elastizitäten definiert, umfasst einen Größenwert, eine Streckeigenschaft und eine Staucheigenschaft unabhängig von der Streckeigenschaft. Das Verarbeiten wird vereinfacht, indem man die Elastizitäten direkt einer Einheit, d. h. Blatt, zuordnet, graphische Objekte mit Inhalt im Gegensatz zu nur mit Füllobjekten assoziiert zu werden, die die Inhaltsobjekte umgeben.
  • Die Streckeigenschaften umfassen Streckbarkeitskoeffizienten, die auf Größen angewendet werden, die für die graphischen Objekte bestimmt sind, und die Staucheigenschaften umfassen Stauchbarkeitskoef%zienten, die auf die Größen angewendet wer den, die für die graphischen Objekte bestimmt sind. Die Streck- und Staucheigenschaften könnten Streck- und Stauchordnungen umfassen, um bedeutende, relative Unterschiede zwischen Streck- und Stauchbarkeit relativ zu diesen Eigenschaften anderer graphischer Objekte anzugeben. Streck- und Staucheigenschaften der graphischen Objekte könnten auch durch kompakte Repräsentationen definiert werden, die ähnliche Streck- und Staucheigenschaften teilen.
  • Vorzugsweise definieren die Datenstrukturen, die Elastizitäten der graphischen Objekte definieren, minimale und bevorzugte Größen der graphischen Objekte, und diese minimalen und bevorzugten Größen werden verarbeitet, um die einzelnen Layouts zu definieren.
  • Verschiedene Operationen können auf die graphischen Objekte angewendet werden. In einer Addierungsoperation werden die Streck- und Stauchbarkeitskoeffizienten mehrerer graphischer Objekte abhängig von den relativen Streck- und Stauchordnungen aufsummiert. Insbesondere werden die Streck- bzw. Stauchbarkeitskoeffizienten summiert, falls die entsprechenden Streck- und Stauchordnungen gleich sind, und falls die entsprechenden Streck- und Stauchordnungen nicht gleich sind, schließt ein Addierungsergebnis die Streck- und Stauchbarkeitskoeffizienten der graphischen Objekte ein, die anhand der Streck- und Stauchungsordnungen als am elastischsten ausgewiesen werden. Die Streck- bzw. Stauchordnungen, die die größte Elastizität haben, können als die Ordnung der Eigenschaften des Addierungsergebnisses genommen werden.
  • In einer Max-Operation wird eine von der relativen Stauch- und Streckbarkeit der graphischen Objekte abhängige Größe aus zwei graphischen Objekten ausgewählt. Ein Max-Ergebnis ist die Größe des graphischen Objekts, dessen Elastizität gegenüber der anderen Größe am kleinsten ist. Die Streck- und Staucheigenschaften des Max-Ergebnisses werden aus dem graphischen Objekt ausgewählt, aus dem die Größe ausgewählt wurde, oder, falls die Größe der beiden graphischen Objekte dieselbe ist, aus dem graphischen Objekt, das am wenigsten elastisch war.
  • In einer bevorzugten Ausführungsform umfasst ein Verfahren zum Aufheben einer ursprünglichen Layoutelastizität für ein graphisches Objekt das Empfangen einer neuen Layoutelastizität für eine Ausdehnung des graphischen Objekts. Die neue Layoutelastizität wird dann gespeichert. Eine resultierende Layoutelastizität wird aus der neuen Layoutelastizität und der ursprünglichen Layoutelastizität bestimmt. Schließlich wird die resultierende Layoutelastizität zurückgegeben.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Die nachstehenden und andere Ziele, Merkmale und Vorteile der Erfindung werden aus der folgenden, spezielleren Beschreibung bevorzugter Ausführungsformen der Erfindung offensichtlich, wie in den beiliegenden Zeichnungen illustriert ist, in denen sich gleiche Bezugszeichen über die verschiedenen Ansichten hinweg auf die gleichen Teile beziehen. Die Zeichnungen sind nicht notwendigerweise maßstabsgetreu, wobei die Betonung stattdessen auf der Illustrierung der Prinzipien der Erfindung gelegt wird.
  • 1 stellt ein Beispiel für ein Ansichtsfenster dar, das eine große Anzahl graphischer Objekte enthält, um eine Anwendung der Erfindung zu illustrieren.
  • 2 ist eine Teilansicht der Hierarchie der im Fenster der 1 angezeigten graphischen Objekte.
  • 3A–E illustrieren das Konzept der Elastizität, bei denen zwei graphische Objekte in der Größe verändert werden, um die variierenden Fensterbreiten zu füllen.
  • 4 illustriert linke und rechte Ausmaße, Aufstieg und Abstieg relativ zu einem Ursprung in einem graphischen Objekt.
  • 5 illustriert die Verwendung vertikaler Ursprünge, um ein graphisches Objekt mit der Grundlinie einer Textzeile auszurichten.
  • 6 stellt die Hierarchie der in 5 abgebildeten graphischen Objekte dar.
  • 7 illustriert die Verwendung horizontaler Ursprünge, um eine Spalte von Zahlen auszurichten.
  • 8 stellt die Hierarchie der in 7 abgebildeten graphischen Objekte dar.
  • 9 illustriert die linken und rechten Ausmaße von drei graphischen Objekten einer HBox und der entsprechenden Elastizitäten dar.
  • 10 illustriert ein Gitter aus vier graphischen Objekten.
  • 11 illustriert die Verwendung von Füllung in einer HBox, die drei Rechtecke verschiedener Höhen enthält.
  • 12 illustriert die Verwendung von Füllung in einer HBox, die zentrierte Rechtecke verschiedener Höhen enthält.
  • 13 illustriert die graphische Hierarchie für eine horizontale Anordnung von drei Textboxen.
  • 14 illustriert die horizontale Anordnung der drei Textboxen der 13, wenn ihre bevorzugten Breiten gegeben sind.
  • 15 illustriert die horizontale Anordnung der drei Textboxen der 14, wenn etwas kleineres als ihre bevorzugten Breiten angegeben ist.
  • 16 illustriert die horizontale Anordnung der drei Textboxen der 14 und 15, wenn bedeutend weniger als ihre bevorzugten Breiten angegeben sind.
  • 17 ist ein Flussdiagramm, das einen ersten Durchgang in einer dreistufigen Methode zum Verarbeiten einer HBox illustriert.
  • 18 ist ein Flussdiagramm, das einen zweiten Durchgang zum Verarbeiten einer HBox illustriert.
  • 19 ist ein Flussdiagramm, das einen dritten Durchgang beim Verarbeiten einer HBox illustriert.
  • 20 stellt eine HBox aus drei graphischen Objekten dar, die zur Illustrierung des Verfahrens aus 17 verwendet werden.
  • 21A und 21B illustrieren das Verfahren aus 18.
  • 22 illustriert das Verfahren aus 19.
  • 23 illustriert die horizontale Anordnung von zwei Textboxen und ihren entsprechenden Elastizitäten einschließlich Aufhebungen.
  • 24 illustriert die Hierarchie der in 23 abgebildeten graphischen Objekte.
  • 25 ist ein Flussdiagramm, das ein Verfahren zum Bereitstellen von Aufliebungen für Elastizitäten illustriert.
  • DETAILLIERTE BESCHREIBUNG DER ERFINDUNG
  • Eine der Aufgaben, mit denen 2D-Graphiksysteme konfrontiert sind, ist das Berechnen des Layouts (die Positionen und Größen) der anzuzeigenden Objekte. Graphische Anzeigen in der Curl Programmiersprache werden durch Gruppierung primitiver "Blattgraphiken" in größere Zusammensetzungen konstruiert, indem man sie in als Boxen bekannte graphische Container platziert. Boxen können wiederum in andere Boxen platziert werden, und auf diese Weise können beliebig komplexe graphische Anzeigen konstruiert werden.
  • Die Blattgraphiken können mehrere Arten graphischer Objekte enthalten:
    • 1. Einfache geometrische Formen, wie z. B. Rechtecke und Ellipsen, deren Größen entweder in dem Curl-Programm spezifiziert sein oder zur Layout-Zeit berechnet werden können, so wie es im Programm spezifiziert ist. Einfache Zeichenketten, wie z. B. Beschriftungen, fallen auch in diese Kategorie.
    • 2. Bilder und andere Graphiken, die skaliert werden können, aber in einer Weise skaliert werden sollten, die ihr Seitenverhältnis beibehält (das Verhältnis von Breite zu Höhe).
    • 3. Blöcke formatierten Textes, bei denen die Breite und die Höhe skaliert werden können, aber ein ungefähr inverses Verhältnis zueinander haben müssen. (Wenn die Breite abnimmt, muss die Höhe zunehmen. )
  • 1 zeigt ein typisches Curl-Fenster, das eine große Zahl graphischer Objekte, einschließlich sowohl Blattgraphiken als auch Boxen enthält. 2 zeigt die Struktur der in 1 sichtbaren graphischen Objekte, die in einer teilweise erweiterten Umrissform wiedergegeben ist. Jedes graphische Objekt, ob eine Box oder eine Blattgraphik, ist in 2 auf einer einzelnen Zeile mit einem Namen wie z. B. "{VBox 74}" gezeigt, der den Typ des Objekts (VBox) angibt und eine eindeutige Zahl (74) umfasst, die das spezielle Objekt kennzeichnet, das zu dieser Zeile des Diagramms gehört. Jede Box ist auf einer Zeile angezeigt, die ein Dreiecks-Icon links neben dem Namen der Box enthält, während jede Blattgraphik mit einem quadratischen Icon neben dem Namen der Graphik angezeigt wird. Wenn das Dreiecks-Icon, das einer Box entspricht, nach unten zeigt wie in {VBox 74} oder {HBox 63}, werden die innerhalb der Box enthaltenen Graphiken auf nachfolgenden Zeilen mittels der mit der Unterseite des Dreiecks verbundenen Zeile angezeigt, die das Dreieck mit dem Icon jedes Objekts verbindet, das direkt als Kind der Box enthalten ist. Wenn das Dreieck einer Box nach rechts zeigt, wie in {CdeButton 64} oder {HBox 70}, hat die Box evtl. Kinder, die aus Gründen der Kürze hier nicht gezeigt werden. Es haben jedoch nicht alle Boxen mit nach rechts deutenden Dreiecken Kind-Objekte. {CastTextFlowBox 60} hat zum Beispiel keine Kind-Objekte.
  • Das Diagramm der 2 zeigt, dass das Top-Level Objekt in 1 {CdePaneView 1} ist, das wiederum {VBox 74} als sein einziges graphisches Kind hat. {VBox 74} hat wiederum mehrere Kind-Objekte, von denen jedes die Anzeige horizontal füllt und die von oben nach unten angeordnet sind. {MenuBar 75} ist das Menubalken-Objekt, das den Menubalken 75 in 1 definiert, der die Wörter "File", "Edit", etc. enthält. {HBox 72} ist das Werkzeugbalken-Objekt, das direkt unter diesen Wörtern liegt. 2 zeigt diese HBox expandiert, um die gesonderten CdeButton-Objekte zu zeigen, die den mit "Print", "Windows" etc. beschrifteten Werkzeugschaltflächen entsprechen. {CdeButton 62} ist die "Print" Werkzeugschaltfläche, die wiederum expandiert wurde, um zu zeigen, dass sie ein Rahmen-Objekt {Frame 61} enthält, welches wiederum {VBox 59} enthält. Schließlich ist {VBox 59} die Entität, die das Drucker-Icon {Picture 44} und das innerhalb {CastTextFlowBox 60} enthaltene Wort "Print" aufstapelt. Die anderen in 1 abgebildeten Objekte sind auf ähnliche Weise gruppiert: insbesondere {PageViewPane 77} entspricht dem großen Gebiet, das die Wörter "Welcome to Curl" und den beigefügten Text und Graphiken enthält, während {StretchyTextDisplay 78} der leeren Statusanzeige ganz unten am Bildschirm entspricht, die von Zeit zu Zeit Nachrichten anzeigt, die den Zustand des laufenden Anwendungsprogramms angeben.
  • Da Curl alle diese Arten von Graphiken unterstützt und da jede Kombination von ihnen in einer Box zusammengesetzt werden kann, braucht Curl eine von seinem Layout-System zur Verfügung gestellte Lösung für die folgenden beiden Grundprobleme:
    • 1. Darstellen der Größenpräferenzen graphischer Objekte, die entweder einfache Blattgraphiken oder zusammengesetzte Graphiken (z. B. Boxen) sein können. Diese Darstellung muss dergestalt sein, dass eine Box ihre Komponentengraphiken nach deren Größenpräferenzen fragen kann und diese Ergebnisse in zu einer Darstellung der Größenpräferenz der Box selbst kombinieren kann. Die Darstellung muss die Größenpräfe renzen sowohl starrer Objekte, wie z. B, viele einfache Graphiken, als auch dehnbarer Objekte, wie z. B. Bilder und formatierter Text, verschlüsseln können.
    • In Curl wird diese Rolle von "Elastizitäten" übernommen. Wie unten noch genauer diskutiert wird, werden Elastzitäten für Höhen und Breiten einzelner graphischer Objekte definiert. Die Elastizitäten für zusammengesetzte graphische Objekte werden aus Elastizitäten ihrer Komponenten berechnet.
    • 2. Berechnen graphischer Layouts in einer Weise, die Größenpräferenzen sowohl starrer als auch dehnbarer Objekte berücksichtigt. Die Existenz dehnbarer Objekte, die eine Beziehung zwischen Höhe und Breite, wie z. B. sowohl Bilder mit konstanten Seitenverhältnissen als auch Blöcke formatierten Textes, erzwingen, machen dieses Problem komplizierter.
  • In Curl wird diese Rolle von einem dreistufigen Layout-Verhandlungsalgorithmus übernommen, der zwei Formen hat: Breite-Zuerst und Höhe-Zuerst. Der Breite-Zuerst Algorithmus sammelt Breitenpräferenzen in dem ersten Durchgang durch den graphischen Objektbaum, berechnet Breitenzuweisungen und sammelt Höhenpräferenzen in einem zweiten Durchgang und berechnet Höhenzuweisungen in dem dritten Durchgang. Der Höhe-Zuerst Algorithmus ist ähnlich, vertauscht aber die Rollen von Höhe und Breite. Durch Sammeln von Höhenpräferenzen, nachdem Breitenzuweisungen bekannt sind (oder umgekehrt im Fall von Höhe-Zuerst Layout), passt dieser Algorithmus Objekte an, deren Höhen- und Breitenpräferenzen nicht unabhängig voneinander sind.
  • Das allgemeine Konzept von Elastizitäten
  • Graphische Objekte in einem Layout können bevorzugte Ausdehnungen haben. Zum Beispiel können in 3 zwei Seite an Seite liegende graphische Objekte A und B bevorzugte Breiten PA und PB haben. Um jedoch Hardwareanzeige-Ausdehnungen oder Fensterausdehnungen innerhalb der Anzeige, in der ein Benutzer ein Fenster erweitert oder zusammenschrumpft, das die graphischen Objekte A und B enthält, müssen die Breiten von A und B variieren, um einen Platz zu füllen oder um das Abschneiden peri pherer Merkmale aus der Ansicht zu vermeiden. Falls zum Beispiel die beiden Objekte A und B eine Breite W1 füllen müssen, können sich die beiden Objekte evtl. proportional zu den Ergebnisbreiten WA und WB expandieren, dargestellt in 3B. Das Ergebnis von 3B setzt voraus, dass die beiden elastischen Objekte von der gleichen Elastizität hinsichtlich der Expansion sind, d. h., dass sie die gleiche Streckbarkeit haben. Indem man jedoch Elastizitäten für jedes graphische Objekt definiert, könnte ein Objekt veranlasst werden, sich bevorzugt zu dem anderen zu strecken. Falls zum Beispiel das Objekt B definiert ist, hoch streckbar im Verhältnis zu Objekt A zu sein, kann Objekt A in seiner bevorzugten Breite PA bleiben, mit aller Ausdehnung, um die volle Breite W1 zu füllen, die von dem Objekt B getragen wird, wie in 3C dargestellt ist. Falls die kombinierten Objekte in ähnlicher Weise auf eine verkleinerte Breite W2 reduziert werden müssen, könnten die beiden Objekte proportional gestaucht werden, wie in 3D dargestellt ist. Auf der anderen Seite kann Objekt A definiert werden, eine höhere Stauchbarkeit zu besitzen, so dass ein größerer Stauchanteil von Objekt A getragen wird, wie in 3E dargestellt ist.
  • Eine Elastizität stellt Verhalten wie das einer mechanischen Feder dar. Wie eine Feder hat eine Elastizität eine "bevorzugte Größe", die ihre Länge ist, wenn sie nicht irgendwelchen deformierenden Kräften unterworfen ist. Wie bei einer Feder, wenn eine Elastizität auf eine kleinere Größe als ihre bevorzugte Größe gestaucht wird, kann man sich vorstellen, dass die Elastizität eine Kraft ausübt, die der Stauchung entgegenwirkt. Diese Kraft wird größer, wenn der Grad der Stauchung zunimmt, aber anders als einfache mechanische Federn kann eine Elastizität im allgemeinen diskontinuierliche Veränderungen in der Stärke der Kraft oder der Rate der Kraft im Hinblick auf Veränderungen in der Länge der Elastizität anzeigen.
  • Falls eine Elastizität, anstatt gestaucht zu werden, auf eine Länge größer als ihre bevorzugte Größe gestreckt wird, kann man sich das vorstellen wie ein Entgegenwirken gegen die Streckung mit einer Kraft, die, wie die stauchende Kraft mit der Größe der Deformation zunimmt.
  • So wie es der Fall bei Federn ist, können verschiedene Elastizitäten verschiedene Grade an Streck- oder Stauchbarkeit haben. Die größten Grade an Streck- oder Stauch barkeit gehören zu den Elastizitäten, die die kleinsten Kräfte, die einer gegebenen Deformation entgegenwirken, zeigen.
  • Anders als physikalische Federn können Elastizitäten auch verschiedene "Ordnungen" von Streck- oder Stauchbarkeit haben. Eine Elastizität mit einer höheren Streck- (oder Stauch-)ordnung ist unendlich viel streck- oder stauchbarer als eine mit einer niedrigeren Streck- (oder Stauch-)ordnung. Falls zwei Elastizitäten mit verschiedenen Streckordnungen aneinandergesetzt werden und die Zusammensetzung gestreckt wird, wird die Elastizität mit der niedrigeren Streckordnung in ihrer bevorzugten Größe bleiben und alles von dem Extraabstand wird angerechnet werden, indem man die Elastizität mit der größeren Streckordnung streckt.
  • Falls die beiden Elastizitäten in diesem Szenario jedoch dieselbe Streckordnung haben, dann werden sich beide strecken. Jede Elastizität wird auf die Länge gestreckt, die verursacht, dass die Kräfte die dem Strecken entgegenwirken in den beiden Elastizitäten gleich sind. In der Praxis bedeutet das, dass, falls eine der Elastizitäten N-mal streckbarer ist als die andere, dann wird der Betrag, den diese Elastizität sich über ihre bevorzugte Größe hinaus streckt, N-mal größer sein als der Streckungsbetrag, der der anderen Elastizität zugeteilt wird.
  • Falls, anstatt gestreckt zu werden, die Zusammensetzung zweier Elastizitäten unter ihre bevorzugte Größe gestaucht wird, ist das Verhalten zu dem oben beschriebenen analog, außer dass Strecken durch Stauchen ersetzt wird.
  • Um graphisches Layout durchzuführen, werden Elastizitäten verwendet, um die Höhen- und Breitenpräferenzen graphischer Objekte darzustellen, und daher ist es notwendig zu können:
    • 1. Kombinieren der Elastizitäten, die Graphiken in einer Box beschreiben, um Elastizitäten zu erzeugen, die die Höhen- und Breitenpräferenzen der Box selbst beschreiben.
    • 2. Gegeben eine Höhen- und Breitenzuweisung einer Box als ganzes, und gegeben die Höhen- und Breitenelastizitäten der Graphik innerhalb der Box, Berechnen der Höhen- und Breitenzuweisung für jede dieser Graphiken.
  • Um diese Bedürfnisse zu unterstützen, müssen Elastizitäten bestimmte, grundlegende Operationen unterstützen:
    • 1. Die Addierungsoperation entspricht dem Platzieren zweier Elastizitäten Ende an Ende. Diese würde verwendet werden, um zum Beispiel die Breitenelastizität einer Box zu berechnen, die zwei oder mehrere in horizontalen Zeilen angeordnete Graphiken wie in 3 enthält.
    • 2. Die "Max"-Operation entspricht dem Aneinanderlegen zweier Elastizitäten Seite an Seite. Diese würde verwendet werden, um zum Beispiel die Höhenelastizität einer Box zu berechnen, die mehrere in einer horizontalen Reihe angeordnete Graphiken enthält.
    • 3. Die "Dividiere"-Operation wird auf zwei Elastizitäten und eine Länge angewendet. Diese berechnet den Anteil der Länge, der jeder Elastizität zugeteilt werden sollte, falls die beiden Elastizitäten Ende an Ende platziert würden und diese Zusammensetzung gestreckt oder gestaucht würde, um die spezifizierte Länge anzunehmen. Diese Operation würde zum Beispiel von einer Box verwendet werden, die zwei in einer horizontalen Reihe wie in 3 angeordnete Graphiken enthält, um die Breitenzuweisung für jede Graphik zu berechnen, wenn eine spezifizierte Breitenzuweisung für die Box gegeben ist. Wie unten diskutiert wird, kann diese Operation zusammen mit der Addierungsoperation verwendet werden, um eine spezifizierte Breite oder Höhe unter einer Zahl von Objekten, die in einer Sequenz entlang der betrachteten Ausdehnung angeordnet sind, zuzuteilen.
  • Zusätzlich zu diesen grundlegenden Operationen gibt es einige andere Operationen, die auch in Curls Verwendung von Elastizitäten auftauchen:
    • 4. Die "Skalierungs"-Operation "multipliziert" eine Elastizität mit einer Zahl N > 0. Falls N eine ganze Zahl ist, ist das Ergebnis dasselbe wie das, welches erzeugt wurde, indem man N Kopien der Elastizität unter Verwendung der Addierungsoperation Ende an Ende stellt. Falls N keine ganze Zahl ist, wird das Ergebnis in der offensichtlichen Weise zwischen den Ergebnissen, die den beiden ganzzahligen, am nähesten zu N gelegenen Werten entsprechen, interpoliert.
    • 5. Die "Gleichheits"-Operation auf zwei Elastizitäten gibt wahr zurück, falls die beiden Elastizitäten dieselbe Kraft an allen Größen ausüben.
    • 6. Die "Gleichheit bei Größe" Operation gilt für zwei Elastizitäten und eine spezifizierte Länge. Diese gibt wahr zurück, falls die beiden Elastizitäten dieselbe Kraft ausüben, wenn sie auf die gegebene Länge deformiert werden.
  • Andere Operationen, wie z. B. "subtrahieren" kann man auch vorsehen.
  • Implementierungen von Elastizitäten in der Curl-Sprache Während das oben beschriebene allgemeine Konzept von Elastizitäten eine mächtige Basis für Layout-Berechnungen ist, kann es teuer in seiner allgemeinsten Form zu implementieren sein. Dementsprechend implementiert Curl eine Approximation an das oben beschriebene allgemeine Elastizitätskonzept. Curls Approximation hat die folgenden Eigenschaften:
    • 1. Sie ist fähig, Elastizitäten darzustellen, deren Streckbarkeit (und Streckordnung) sich von ihrer Stauchbarkeit (und Stauchordnung) unterscheiden.
    • 2. Sie enthält die Vorstellung einer "minimalen Größe". Curls Elastizitäten widerstehen sehr stark Stauchung auf eine Größe kleiner als ihre minimale Größe.
    • 3. Es gibt eine Schranke, wie groß die Darstellung einer Elastizität wachsen kann, wenn Addiere, Max und die anderen oben aufgelisteten Operationen darauf ausgeführt werden. Keine Elastizitätsdarstellung, welche diese Eigenschaft hat, kann exakte Ergebnisse für alle möglichen elastischen Operationen liefern, so dass Curl approximative Ergebnisse für add, max und andere Operationen liefert, bei denen dies nötig ist, um die Größe des Ergebnisses vom Wachsen abzuhalten.
    • 4. Es gibt kompakte Darstellungen für einige der häufiger vorkommenden elastischen Werte. Zum Beispiel Elastizitäten, deren Streck- und Stauchbarkeit gleich sind, können kompakter dargestellt werden als allgemeine Elastizitäten, für die diese Gleichheit nicht gilt.
  • Zusammenfassend hat die übliche Curl Elastizität sechs Felder:
    • 1. Die minimale Größe (eine Gleitkommazahl).
    • 2. Die bevorzugte Größe (eine Gleitkommazahl).
    • 3. Den Stauchbarkeitskoeffizient (eine Gleitkommazahl).
    • 4. Die Stauchbarkeitsordnung (eine ganze Zahl).
    • 5. Den Streckbarkeitskoeffizient (eine Gleitkommazahl).
    • 6. Die Streckordnung (eine ganze Zahl).
  • Ein Curl-Objekt, das eine Elastizität repräsentiert, hat einen Typcode (wie alle Curl-Objekte) plus Felder, die die obigen Werte enthalten. Kompakte Darstellungen von Spezialfall-Elastizitäten haben einen anderen Typcode und eine Teilmenge der obigen Felder. Die zu den fehlenden Feldern gehörenden Werte werden mittels Bezug zu dem Typcode und zu den in der kompakten Darstellung bereitgestellten Feldern berechnet. Der Typcode StretchyElastic ist zum Beispiel einem Objekt zugeordnet, welches die Felder (1)–(4) aus der obigen Liste enthält. Wenn Werte entsprechend der Felder (5) oder (6) benötigt werden, werden sie mittels der Bereitstellung der Werte aus den Feldern (3) bzw. (4) geliefert.
  • Ein weiteres Beispiel einer kompakten Elastizitätsdarstellung ist RigidElastic, das nur ein "bevorzugte Größe"-Feld hat. Wenn Werte entsprechend der anderen Felder benötigt werden, werden sie berechnet, so dass die minimale Größe gleich der bevorzugten Größe ist, und Felder (3)–(6) Werte haben, die einem üblichen "starren" Objekt zugeordnet sind.
  • Implementierung der grundlegenden elastischen Operationen in der Curl-Sprache Curls Implementierung der fundamentalen elastischen Operationen kann bzgl. der sechs elastischen Standardfelder wie folgt beschrieben werden.
  • Die Addierungsoperation erzeugt ein Ergebnis mit den folgenden Feldern:
    • 1. Die minimale Größe ist die Summe der minimalen Größen der Operanden.
    • 2. Die bevorzugte Größe ist die Summe der bevorzugten Größen der Operanden.
    • 3. Der Stauchbarkeitskoeffizient ist die Summe der Stauchbarkeitskoeffizienten der Operanden, falls beide Operanden dieselbe Stauchordnung haben. Sonst ist der Stauchbarkeitskoeffizient des Ergebnisses gleich dem Stauchbarkeitskoeffizient desjenigen Operanden mit der größeren Stauchordnung.
    • 4. Die Stauchordnung ist gleich der größeren der Stauchordnungen der Operanden.
    • 5. Der Streckbarkeitskoeffizient ist die Summe der Streckbarkeitskoeffizienten der Operanden, falls beide Operanden dieselbe Streckordnung haben. Sonst ist der Streckbarkeitskoeffizient des Ergebnisses gleich dem Streckbarkeitskoeffizienten desjenigen Operanden mit der größeren Streckordnung.
    • 6. Die Streckordnung ist gleich der größeren der Streckordnungen der Operanden.
  • Die nach diesen Regeln erzeugte Elastizität ist manchmal nur eine Approximation des idealen Ergebnisses der Addierungsoperation. Falls zum Beispiel eine Elastizität A mit einer kleinen bevorzugten Größe und einer großen Stauchordnung zu einer Elastizität B mit einer großen bevorzugten Größe und einer kleinen Stauchordnung addiert wird, wird die Stauchordnung der resultierenden Elastizität C gleich der von A sein, und die bevorzugte Größe von C wird die Summe aus denen von A und B sein. Folglich wird C eine leicht stauchbare Elastizität sein, die leicht stauchbar bleibt, sogar nachdem ihre Größe auf weniger als die bevorzugte Größe von B allein reduziert wird. Dieses Verhalten unterscheidet sich von dem Verhalten eines physikalischen Systems von Federn. In dem physikalischen System, sobald die hoch stauchbare Elastizität A auf Nulllänge gestaucht worden ist, wäre keine weitere Stauchung von A möglich und die Elastizität C würde dann entsprechend der Stauchordnung von B schwieriger zu stauchen werden.
  • Obwohl die Addierungsoperation, so wie sie hier beschrieben wurde, nur approximativ ist, hat sie den Vorteil, ihre Ergebnisse in einer festen verfügbaren Fläche darstellen zu können. Jedes Schema, das das ideale Ergebnis aus elastischen Addierungsoperationen erzeugt, muss wachsende verfügbare Flächen benötigen, da die Ergebnisse von Addierungsoperationen selbst als Operanden weiteren Addierungsoperationen zur Verfügung gestellt werden, was zu Speicherplatz- und Zeitkosten führt, die in Einklang zur erhöhten Genauigkeit des Ergebnisses stehen müssen. Die oben beschriebene Approximation kann effizient berechnet werden und liefert in der Praxis gute Ergebnisse.
  • Die Max-Operation auf zwei Elastizitäten A und B erzeugt ein Ergebnis mit den folgenden Feldern:
    • 1. Die minimale Größe ist die größere der minimalen Größen der Operanden.
    • 2. Die bevorzugte Größe begünstigt die bevorzugte Größe der Elastizität, die am wenigsten elastisch hinsichtlich der bevorzugten Größe der anderen ist. Elastizität wird zunächst durch Ordnung bestimmt und, falls die Ordnung gleich ist, durch Vergleich der Koeffizienten. Da sich eine Elastizität strecken muss, um der anderen gleichzukommen, während sich die andere stauchen muss, um der ersteren gleichzukommen, sind die Elastizitätsvergleiche Vergleiche der Stauchbarkeit gegen Streckbarkeit. Genauer gesagt ist die bevorzugte Größe gleich der bevorzugten Größe von A , falls * die bevorzugte Größe von A größer ist als die von B und entweder (i) die Stauchordnung von A kleiner ist als die Streckordnung von B, oder (ii) die Stauchordnung von A gleich der Streckordnung von B ist und der Stauchbarkeitskoeffizient von A kleiner oder gleich den Streckbarkeitskoeffizienten von B ist; oder * die bevorzugte Größe von A kleiner als die von B und entweder (i) die Streckordnung von A kleiner als die Stauchordnung von B, oder (ii) die Streckordnung von A gleich der Stauchordnung von B ist, und der Streckbarkeitskoeffizient von A kleiner als der Stauchbarkeitskoeffizient von B ist.
    • Sonst ist die bevorzugte Größe des Ergebnisses gleich der bevorzugten Größe von B.
    • 3. Der Stauchbarkeitskoeffizient ist der Stauchbarkeitskoeffizient der Elastizität, deren bevorzugte Größe für den Wert des bevorzugten Größenfeldes (2) gewählt wurde. Falls beide Operanden dieselbe bevorzugte Größe haben, dann falls die Operanden unterschiedliche Stauchordnungen haben, wird der Stauchbarkeitskoeffizient, der der kleineren Stauchordnung zugeordnet ist, verwendet; sonst wird der kleinere der beiden Stauchbarkeitskoeffizienten verwendet.
    • 4. Die Stauchordnung ist die Stauchordnung, die dem für Feld (3) gewählten Stauchbarkeitskoeffizienten zugeordnet ist.
    • 5. Der Streckbarkeitskoeffizient ist der Streckbarkeitskoeffizient der Elastizität, deren bevorzugte Größe für den Wert von Feld (2) gewählt wurde. Falls beide Operanden dieselbe bevorzugte Größe haben, dann falls die Operanden unterschiedliche Streckordnungen haben, wird der der kleineren Streckordnung zugeordnete Streckbarkeitskoeffizient verwendet; sonst wird der kleinere der beiden Streckbarkeitskoeffizienten verwendet.
    • 6. Die Streckordnung ist die Streckordnung, die dem für Feld (5) gewählten Streckbarkeitskoeffizienten zugeordnet ist.
  • Wie die oben beschriebene Addierungs-Implementierung erzeugt diese Implementierung der Max-Operation in einigen Situationen nur ein approximatives Ergebnis. Man nehme zum Beispiel an, dass eine Elastizität A eine kleine bevorzugte und eine kleine Stauchordnung hat, während eine Elastizität B eine größere bevorzugte Größe und eine größere Stauchordnung hat. Falls die Streckordnungen von A und B größer sind als die Stauchordnung von B, dann ist die bevorzugte Größe der Elastizität C, das das Max von A und B ist, gleich der bevorzugten Größe von B. Gleichermaßen werden die Stauchbarkeit und Stauchordnung von C gleich derer von B sein, und folglich wird C leicht stauchbar sein. Basierend auf der Analogie zu physikalischen Federn, erwarten wir vielleicht, dass C schwieriger zu stauchen sein wird, wenn einmal die bevorzugte Größe von A erreicht ist, aber falls die Elastizität C entsprechend der oben dargelegten Regeln berechnet wird, wird dies nicht geschehen.
  • Wie die oben beschriebene Addierungsimplementierung erzeugt diese Implementierung der Max-Operation in einigen Situationen nur ein approximatives Ergebnis. Man nehme z. B. an, dass eine Elastizität A eine kleine bevorzugte Größe und eine kleine Stauchordnung hat, während eine Elastizität B eine größere bevorzugte Größe und eine größere Stauchordnung hat. Falls die Streckordnungen von A und B größer als die Stauchordnungen von B sind, wird die bevorzugte Größe der Elastizität C, welches das Maximum von A und B ist, gleich der bevorzugten Größe von B sein. Gleichermaßen wird C's Stauchbarkeit und Stauchordnung gleich den Werten von B sein, und folglich wird C leicht stauchbar sein. Basierend auf der Analogie zu physikalischen Federn erwarten wir vielleicht, dass C schwieriger zu stauchen sein wird, wenn die bevorzugte Größe von A erst einmal erreicht ist, aber, falls die Elastizität C nach den oben dargelegten Regeln berechnet wird, wird dies nicht geschehen.
  • Wie in dem Fall der Addierungsoperation muss totale Genauigkeit in der Max-Operation von einem Unvermögen, den für die Ergebnisberechnung benötigten Platz und Zeit, zu begrenzen, begleitet werden. Die oben beschriebene Approximierung wird ver wendet, weil sie effizient berechnet werden kann und in der Praxis gute Ergebnisse liefert.
  • Die Dividiere-Operation auf zwei Elastizitäten A und B und einer Länge x, geschrieben als dividiere (A,B,x), erzeugt eine Länge des Objekts, das die Elastizität A hat.
  • Die Dividiere-Operation wird wie folgt durchgeführt:
    • 1. Falls x kleiner als die Summe der minimalen Größen der beiden Elastizitäten ist, dann wird die Länge x in Anteil an die minimalen Größen der Elastizitäten aufgeteilt. Folglich wird das Ergebnis der Dividiere-Operation sein
      Figure 00180001
    • 2. Sonst wird ein Übermaß (oder Defizit) e berechnet, indem man die Summe der bevorzugten Größen der beiden Elastizitätn von x subtrahiert. e wird zwischen den beiden Elastizitäten wie folgt aufgeteilt: a. Falls e ein Übermaß ist, und die beiden Elastizitäten gleiche Streckordnungen haben, teile e in Anteil an die Streckbarkeitskoeffizienten der beiden Elastizitäten auf. Folglich ist das an Elastizität A zugeteilte Übermaß gegeben durch:
      Figure 00180002
      b. Falls e ein Defizit ist, und die beiden Elastizitäten gleiche Stauchordnungen haben, dividiere e in Anteil an die Stauchbarkeitskoeffizienten der beiden Elastizitäten. c. Falls e ein Übermaß ist, und die beiden Elastizitäten ungleiche Streckordnungen haben, teile alles von e der Elastizität mit der größeren Streckordnung zu. d. Falls e ein Defizit ist, und die beiden Elastizitäten ungleiche Stauchordnungen haben, teile alles von e der Elastizität mit der größeren Stauchordnung zu.
  • Das Ergebnis der Dividiere-Operation ist dann die Summe der bevorzugten Größe von A und der Anteil von e, der A zugeteilt wurde, außer dass dieses Ergebnis, falls nötig, angepasst wird, um zu vermeiden, dass man entweder A oder B eine Größe kleiner als ihre minimale Größe zuweist.
  • Die Skalierungsoperation wendet einen Skalierungsfaktor f auf eine Elastizität A an. Die Parameter der resultierenden Elastizität werden aus denen von A wie folgt berechnet:
    • 1. Die minimale Größe ist f-mal die minimale Größe von A.
    • 2. Die bevozugte Größe ist f-mal die bevorzugte Größe von A.
    • 3. Der Stauchbarkeitskoeffizient ist f-mal der Stauchbarkeitskoeffizient von A.
    • 4. Die Stauchordnung ist gleich der Stauchordnung von A.
    • 5. Der Streckbarkeitskoeffizient ist f-mal der Streckbarkeitskoeffizient von A.
    • 6. Die Streckordnung ist gleich der Streckordnung von A.
  • Andere elastische Operationen werden auf analoge Weise implementiert.
  • Graphische Ursprünge und Ausdehnungen
  • Wie oben diskutiert, verwendet Curl Elastizitäten, um Größenpräferenzen für graphische Objekte zu beschreiben. Jedes Objekt hat eine Breite und eine Höhe und hat zudem einen "Ursprungspunkt", der innerhalb dieser Grenzen liegt. Der Ursprung ist ein nützliches Mittel, um z. B. den Ort der Grundlinie einer Textlinie zu repräsentieren, welche sich sowohl unterhalb als auch überhalb der Grundlinie erstreckt. Ursprünge können auch für vertikale Ausrichtungen nützlich sein: falls z. B. Zahlen in Textzeichenketten verwandelt werden, deren Ursprünge am Ort ihrer Dezimalpunkte liegen, dann können die Dezimalpunkte einer Spalte von Zahlen ausgerichtet werden, indem man einfach ihre Ursprünge ausrichtet.
  • Wenn man Ursprünge erklärt, gibt es vier Größenpräferenzen, die unter Verwendung von Elastizitäten, wie in 4 illustriert, beschrieben werden:
    • 1. Der Abstand vom Ursprung eines Objekts bis zu seiner Oberseite (der "Aufstieg" des Objekts)
    • 2. Der Abstand vom Ursprung eines Objekts bis zu seiner Unterseite (der "Abstieg" des Objekts)
    • 3. Der Abstand vom Ursprung eines Objekts bis zu seinem linken Rand (die "Linksausdehnung" des Objekts)
    • 4. Der Abstand vom Ursprung eines Objekts bis zu seinem rechten Rand (die "Rechtsausdehnung" des Objekts)
  • Es ist passend, die Elastizitäten, die Größenpräferenzen für Auf- und Abstieg beschreiben, in eine einzelne Einheit zusammenzubündeln, die Größenpräferenzen in der vertikalen Ausdehnung beschreibt, und in ähnlicher Weise ist es passend, die Elastizitäten, die Präferenzen für die linken und rechten Ausdehnungen eines Objekts beschreiben, zusammenzubündeln. Dementsprechend stellt die Curl-Implementierung eine Klasse OriginElastic zur Verfügung, die ein Paar elastischer Objekte enthält, die Größenpräferenzen auf den beiden Seiten eines Ursprungspunktes beschreiben.
  • Einfache Graphiken, wie z. B. Bilder oder Rechtecke, bauen einfach geeignete Elastizitäten auf, um ihre Größenpräferenzen zu beschreiben, welche auf internen Parametern, wie z. B. die Anzahl der Pixel in dem Bild, basiert sind. Andererseits erzeugen graphische Container ihre Elastizitäten, indem sie die Elastizitäten ihrer Komponentengraphiken kombinieren, indem sie die oben diskutierten elastischen Operationen verwenden.
  • Die Verwendung von Elastizitäten durch HBoxen und VBoxen
  • Curl hat z. B. einen Container, bekannt als HBox, der eine Sammlung von Graphiken in einer horizontalen Reihe platziert. HBox hat mehrere Optionen, die es ermöglicht, zu spezifizieren, dass die Komponenten der HBox anhand ihrer Ursprünge, Unterseiten, Oberseiten oder Mittelpunkte ausgerichtet werden sollten. Falls wir eine HBox betrachten, die die Ursprünge ihrer Komponenten ausrichtet, dann wird der Ursprung der HBox selbst mit dem Ursprung des ersten (linkesten) Objekts in der HBox angeordnet sein, und die Ursprünge all der anderen Komponenten der HBox werden auf derselben horizontalen Linie wie der Ursprung der HBox selbst angeordnet sein.
  • 5 illustriert eine HBox, die drei Objekte enthält: eine CastTextFlowBox, ein Rectangle und eine weitere CastTextFlowBox. 6 illustriert die graphische Hierarchie dieser HBox. Diese besondere HBox kann die vertikalen Ursprünge der Komponentenobjekte ausrichten. Rectangle erzeugt eine Elastizität, die einen Ursprung an der unteren linken Ecke des Rechtecks verlangt, während Text eine Elastizität erzeugt, die einen Ursprung am linken Ende des Textes und mit der Grundlinie des Textes ausgerichtet ist, verlangt. Daher, wenn diese drei Objekte innerhalb dieser HBox angezeigt werden, ist die Unterseite des Rectangle mit der Grundlinie des Textes ausgerichtet, die im allgemeinen die Ausrichtung ist, die erwünscht wäre. Die Verwendung von Ursprüngen ermöglicht diese Ausrichtung, selbst wenn die Unterseite jedes Textblocks unterhalb der Grundlinie des Textblocks ist, wie es durch die Positionen der Absteiger-Buchstaben "y" und "g" in den Textblöcken illustriert ist.
  • 7 illustriert eine VBox, die mehrere Objekte enthält, die anhand ihrer horizontalen Ursprünge ausgerichtet wurden. Wie diese Figur illustriert, ist der Abgleich anhand von Dezimalpunkten in einer Spalte von Zahlen eine Anwendung zur Ausrichtung horizontaler Ursprünge. 8 zeigt die graphische Hierarchie entsprechend 8 in vollständiger Expansion, so dass alle in 7 erscheinenden Objekte explizit in 8 gezeigt werden. In Curl wäre es möglich, ein graphisches Objekt zu erzeugen, das Text enthält, dessen Ursprung genau links vom Dezimalpunkt für alle Textzeichenketten lokalisiert wäre, die die Dezimalzahlen repräsentieren. Da aber kein solches Objekt in Curl eingebaut ist, wird jede Reihe von Ziffern als eine HBox konstruiert, die zwei Textblöcke enthält, wobei der erste Textblock das Material links vom Dezimalpunkt enthält, und der zweite den Dezimalpunkt und das Material rechts davon enthält, falls es existiert. Jede HBox wurde so eingerichtet, um ihren Ursprung an das rechte Ende des ersten Textblocks zu legen. Das Rule-Objekt ist verantwortlich für das Anzeigen der horizontalen Linie direkt unter "33.333". Das Rule-Objekt ist eingerichtet, eine feste Höhe von 1/72 Inch zu haben, aber seine Breite ist streckbar, so dass es seine Breite automatisch der Breite der VBox selbst angleicht.
  • In einem Szenario, so wie dem aus 5, wird die linke Ausdehnungselastizität der HBox einfach die linke Ausdehnungselastizität der ersten Komponente sein. Die rechte Ausdehnungselastizität der HBox wird berechnet, indem man die elastische Addierungsoperation verwendet, um die rechte Ausdehnungselastizität der ersten Komponente mit den linken und rechten Ausdehnungselastizitäten aller verbleibenden Komponenten zu kombinieren. Die Aufstiegselastizität der HBox wird berechnet, indem man die elastische Max-Operation verwendet, um die Aufstiegselastizitäten aller Komponenten der HBox zu kombinieren, und die Abstiegselastizität der HBox wird gleichermaßen berechnet, indem man die elastische Max-Operation verwendet, um die Abstiegselastizitäten aller Komponenten der HBox zu kombinieren.
  • Die obige Diskussion erklärt, wie die Elastizitäten, die Größenpräferenzen einer HBox beschreiben, aus den Elastizitäten berechnet werden, die die Größenpräferenzen der graphischen Kinder der HBox beschreiben. Der andere Teil des Bildes ist die Verwendung dieser Elastizitäten, um Layout-Entscheidungen zu machen. In einer Breite-Zuerst-Layout-Verhandlung, nachdem eine HBox ihre Breitenelastizitäten berechnet, wird das graphische Elternteil der HBox schließlich numerische Werte für die linken und rechten Ausdehnungen der HBox bestimmen und diese Werte an die HBox kommunizieren. Die HBox verwendet diese Information in Kombination mit den vorher aus den graphischen Kindern der HBox erhaltenen Breitenelastizitäten, um die linken und rechten Ausdehnungen zu berechnen, sowie den Ort des horizontalen Ursprungs für jedes der graphischen Kinder der HBox.
  • Die linke Ausdehnung des ersten Kindes der HBox wird leicht berechnet, da es genau gleich der linken Ausdehnung der HBox selbst ist, aber das Berechnen der verbleibenden linken und rechten Ausdehnungen der Kinder der HBox ist eine komplexere Aufgabe. Man betrachte den Fall einer HBox mit drei graphischen Kindern A, B und C, wie in 9 gezeigt. Der Ursprung jedes Objekts ist durch einen "*" markiert.
  • Die linken Ausdehnungen von A, B und C werden durch al, bl bzw. cl bezeichnet, und die rechten Ausdehnungen von A, B und C werden durch ar, br bzw. cr bezeichnet. Die Symbole AL, AR etc. stehen für die entsprechenden Elastizitäten, die die Breitenpräferenzen von A, B und C beschreiben, die zur Berechnung der Ausdehnung verwendet wurden.
  • Wie vorher festgehalten, ist al gleich der linken Ausdehnung der HBox als ein Ganzes, aber die Summe ar+bl+br+cl+cr muss mit der rechten Ausdehnung der HBox gleichgemacht werden. Es gibt mehrere Verfahren, um diese Werte zu berechnen. Ein einfaches Verfahren geht von rechts nach links mittels sukzessiver Anwendungen der elastischen Dividiere-Operation vor. Die erste solche Dividiere-Operation berechnet cr=dividiere(CR,AR+BL+BR+CL,r),wobei r die rechte Ausdehnung der HBox ist, und AR+BL+BR+CL die elastische Summe der vier Elastizitäten AR, BL, BR und CL. Die zweite Dividiere-Operation berechnet cl=dividiere(CL,AR+BL+BR,r-cr)
  • Die dritte berechnet br=dividiere(BR,AR+BL,r-cr-cl)und die Berechnung fährt auf diese Weise fort, bis alle der benötigten Ausdehnungen berechnet worden sind. Diese Prozedur verallgemeinert in der offensichtlichen Weise auf HBoxen, die mehr oder weniger als drei graphische Kinder haben.
  • Ein alternatives Verfahren unterscheidet sich von diesem Verfahren, erzeugt aber dasselbe Ergebnis. Das alternative Verfahren berechnet zunächst cl+cr als cl+cr=dividiere(CL+CR,AR+BL+BR,r) und zerlegt dann dieses Ergebnis in seine Komponenten cl+cr wie folgt: cl=dividiere(CL,CR,cl+cr) cr=(cl+cr)-cr
  • Weitere Iterationen desselben Verfahren erzeugen bl+br gefolgt von bl und br usw. Dieses Verfahren vereinfacht geringfügig die später beschriebenen Berechnungen, anhand derer eine HBox die Menge an Füllung berechnet, die, falls nötig, um in der HBox enthaltene, vergleichsweise starre graphische Objekte herum eingesetzt wird.
  • Dennoch sind andere Berechnungsreihenfolgen möglich. Das Flussdiagramm aus 18 illustriert z. B. ein Verfahren, in dem Ausdehnungen von links nach rechts berechnet werden.
  • Curl hat auch einen Container, bekannt als VBox, der genauso wie HBox arbeitet, wobei aber die Rollen der horizontalen und vertikalen Ausdehnungen vertauscht sind.
  • Warum die HBox und VBox elastischen Berechnungen korrekt arbeiten Die Motivation für die Besonderheiten der oben gegebenen Definitionen der elastischen Addierungs- und Dividiere-Operationen können aus dem oben beschriebenen Grundsatz hergeleitet werden, um die horizontalen Ausdehnungen von Komponentenobjekten in einer HBox zu berechnen. Man betrachte z. B. die Situation, falls alle fünf der Elastizitäten AR, BL, BR, CL und CR in obigem Beispiel gleich sind. Es ist dann intuitiv wünschenswert, dass alle fünf der Ausdehnungen ar, bl, br, cl und cr gleich sind. Damit dies wahr ist, muss die Operation cr=dividiere(CR,AR+BL+BR+CL,r)ein Ergebnis erzeugen, das 1/5 des Wertes von r ist, und ähnlich muss die Operation cl+cr=dividiere(CL+CR,AR+BL+BR,r) ein Ergebnis erzeugen, das 2/5 des Wertes von r ist. Diese gewünschten Ergebnisse werden in der Tat mittels der oben gegebenen Definitionen von addiere und dividiere wegen dreier Haupteigenschaften der Elastizität erreicht, die von einer Addierungsoperation herrührt:
    • 1. Die bevorzugte Größe des Ergebnisses ist die Summe der bevorzugten Größen der Operanden.
    • 2. Wenn die Streckordnungen der Operanden gleich sind, ist der Streckbarkeitskoeffizient des Ergebnisses die Summe der Streckbarkeitskoeffizienten der Operanden.
    • 3. Wenn die Stauchordnungen der Operanden gleich sind, ist der Stauchbarkeitskoeffizient des Ergebnisses die Summe der Stauchbarkeitskoeffizienten der Operanden.
  • Folglich sind in einer Summme aus N gleichen Elastizitäten die bevorzugte Größe der Summe, Streckbarkeitskoeffizient und Stauchbarkeitskoeffizient jeweils N mal der Wert der entsprechenden Eigenschaft der Operandenelastizitäten. Falls der Wert r in einer Dividiere-Operation dividiere(A,B,r) größer ist als die Summe s der bevorzugten Größen von A und B, und die Streckordnungen von A und B gleich sind, dann wird die Dividiere-Operation das Übermaß s-r zwischen A und B ihren Streckbarkeitskoeffizienten proportional zuweisen. Die analoge Eigenschaft gilt, wenn eine Dividiere-Operation ein Defizit an Platz zwischen Elastizitäten mit gleichen Stauchordnungen aufteilen muss. Diese Eigenschaften der Dividiere-Operation kombinieren mit der Weise, auf die die Addierungsoperation bevorzugte Größen, Streckbarkeitskoeffizienten und Stauchbarkeitskoeffizienten berechnet, um sicherzugehen, dass die obigen Berechnungen in der Tat die intuitiv wünschenswerten Resultate erzeugen. Falls Elastizitäten keine Streckbarkeits- oder Stauchbarkeitskoeffizienten hätten, könnten diese Ergebnisse nicht erzeugt werden, da es für die Dividere-Operation kein allgemeines Verfahren gäbe, um zu verstehen, dass die Summe AR+BL+BR+CL vier Einheiten enthält, unter denen Platz zugewiesen wird, wohingegen die Summe AR+BL+BR nur drei enthält.
  • Für ein anderes Beispiel betrachte man den Fall, bei dem alle besagten Elastizitäten gleich sind, außer dass CL eine größere Streckordnung als all die anderen hat. Man nehme ferner an, dass der Abstand r in dem Beispiel größer als die bevorzugte Größe von AR+BL+BR+CL+CR ist, so dass es ein Übermaß an zuzuweisenden Platz geben wird. Intuitiv ist es wünschenswert, dass der gesamte Übermaßplatz an CL zugewiesen wird, da es eine größere Streckordnung als all die anderen Elastizitäten hat. In diesem Fall kann aus der Definition der elastischen Addierungsoperation gesehen werden, dass eine beliebige elastische CL einschließende Summe, wie z. B. CL+CR oder AR+BL+BR+CL, dieselbe Streckordnung wie CL und einen Streckbarkeitskoeffizienten gleich dem von CL haben wird. Andererseits wird eine elastische Summe, die CL nicht einschließt, wie z. B. AR+BL+BR, eine kleinere Streckordnung und einen Streckbarkeitskoeffizienten proportional zur Anzahl summierter Elastizitäten, wie oben erklärt, haben. In diesem Fall werden die Dividiere-Operationen wie z. B. cr=dividiere(CR,AR+BL+BR+CL,r),wobei CL im rechten Operanden enthalten ist, den gesamten Übermaßplatz dem rechten Operanden zuweisen und folglich wird cr gleich der bevorzugten Größe von CR sein. Dividiere-Operationen jedoch wie z. B. cl=dividiere(CL,AR+BL+BR,r-cr),wobei CL in dem linken Operanden enthalten ist, werden den gesamten Übermaßplatz dem linken Operanden zuweisen, und folglich wird cl gleich der bevorzugten Größe plus der Menge an Übermaßplatz, der zugewiesen wird, sein. Schließlich werden Dividiere-Operationen wie z. B. br=dividiere(BR,AR+BL,r-cr-cl),die CL umfassen, in keinem Operanden wie vorher beschrieben agieren. Indem man dieser Logik folgt, kann man sehen, dass der Entwurf der Addierungs- und Dividie rungsoperationen zusammenarbeiten, um sicherzustellen, dass das intuitiv wünschenswerte Ergebnis des Zuweisens des gesamten Übermaßplatzes an CL erfolgen wird, egal welche Ordnung der Dividierungsoperationen verwendet wird, um einen Abstand zwischen einer Menge summierter Elastizitäten zuzuweisen, egal, ob der erste Schritt z. B. ist cr=dividiere(CR,AR+BL+BR+CL,r) cl+cr=dividiere(CL+CR,AR+BL+BR,r)
  • Dieselbe Schlussfolgerung folgt aus den vielen anderen Beispielen dieser Beschaffenheit, die konstruiert werden könnten.
  • Gitter und Tabellen
  • Komplexe graphische Layouts können erzeugt werden, indem man HBoxen und VBoxen ineinander verschachtelt. Curl hat auch Gitter- und Tabellencontainer, die verwendet werden können, um Layouts wie z. B. in 10 zu erzeugen, bei denen die vertikale Ausrichtung von A und C (und B und D) aufrechterhalten werden muss, sowie die horizontale Ausrichtung von A und B (und C und D). Solche Layouts können nicht einfach erzeugt werden, indem man HBoxen und VBoxen verschachtelt. Obwohl Gitter und Tabelle reichhaltigere Sammlungen geometrischer Einschränkungen als HBox und Vbox durchsetzen können, wird ihre Geometrie auch durch sukzessive Anwendungen der grundlegenden elastischen Operationen berechnet.
  • Füllobjekte
  • Es ist häufig sinnvoll, wenn man graphische Layouts herstellt, Füllobjekte zu verwenden, die keine Zeichenoperationen durchführen, aber dennoch Höhen- und Breitenpräferenzen haben und Platz einnehmen. Starre Füllobjekte können innerhalb HBoxen und VBoxen verwendet werden, um Füllplatz und/oder Einrückungen um andere graphische Objekte herum zu setzen. Dehnbare Füllobjekte können für Justierungs- und Zentrierungswecke verwendet werden. Man nehme z. B. an, dass jemand wünscht, ein Inhaltsverzeichnis wie das folgende zu erzeugen:
    • A Midsummer Night's Dream 5 The Tempest 89 The Two Gentlemen of Verona 173
  • In Curl kann dieses Layout als eine VBox spezifiziert werden, die ein Objekt für jede Zeile des Inhaltsverzeichnisses enthält. Jede Zeile ist wiederum eine HBox, die drei Objekte enthält. ein Textobjekt, das einen Titel enthält, ein Füllobjekt, dessen Breitenpräferenz eine größere Streckordnung als die des Textobjekts hat und ein Textobjekt, das eine Seitenzahl enthält. Die VBox wird dieselbe Breite an alle ihre Kind-HBoxen zuweisen, und jede HBox wird wiederum den Titel linksbündig und die Seitenzahl rechtsbündig platzieren, wobei man die gesamte Übermaßbreite dem Füllobjekt zuweist, weil die Streckordnung seiner Breitenpräferenz die größte unter den Breitenstreckordnungen all der graphischen Kinder der HBox ist.
  • Dehnbare Füllobjekte können auch verwendet werden, um ein graphisches Objekt innerhalb eines graphischen Containers, der größer ist als das zu zentrierende graphische Objekt, zentriert werden. In diesem Fall wird ein dehnbares Füllobjekt auf jede Seite des zu zentrierenden Objekts platziert, wie in dem folgenden Curl-Ausdruck:

    {HBox {Fill}, object, {Fill}}
  • Da die Füllobjekte eine größere Streckordnung als die anderen Objekte haben, wird die gesamte Übermaßbreite den Füllobjekten zugewiesen. Falls beide Füllobjekte identische Streckordnungen und Streckbarkeitskoeffizienten haben, wird das Übermaß gleichmäßig zwischen ihnen verteilt. Als ein Resultat wird jedes Füllobjekt dieselbe Breite haben, und das graphische Objekt wird innerhalb des von der HBox eingenommenen Platzs zentriert. Falls die beiden Füllobjekte dieselbe Streckordnung haben, aber nicht dieselbe Streckbarkeit, wird der Übermaßplatz in Anteil an deren Streckbarkeiten zugewiesen, wobei andere Layouts wie z. B. eines, in dem der linken Seite eines Objekts zugewiesene Platz halb so breit ist wie der der rechten Seite zugewiesene Platz.
  • Die Tatsache, dass die Elastizitäten von Curl Streckordnungen und Streckbarkeitskoeffizienten haben, ist entscheidend für den Erfolg der obigen Techniken. Ohne Streckordnungen gäbe es keine Möglichkeit, die gesamte Übermaßbreite an die Füllobjekte zuzuweisen, und zwangsläufig würde ein gewisse Bruchteil der Übermaßbreite an die zentrierten oder justierten Objekte zugewiesen werden, wobei man sie zumindest leicht deformieren würde.
  • Auffüllungselastizitäten
  • Bestimmte Objekte werden intuitiv als "starr" angesehen, was bedeutet, dass sie nicht gestreckt oder gestaucht werden, außer unter den extremsten Umständen. 11 zeigt z. B. drei Rechtecke verschiedener Höhen, die in einer HBox enthalten sind. Die Höhe der HBox ist gleich der des größten Rechtecks, aber selbst wenn dies der Fall ist, wäre es nicht wünschenswert, die anderen Rechtecke zu strecken, um mit der Höhe der HBox übereinzustimmen, weil Rechtecke normalerweise als starre Objekte angesehen werden. Andererseits wäre es wünschenswert, falls ein dehnbares Objekt wie z. B. ein Füllobjekt in der gleichen HBox enthalten wäre, dass das dehnbare Objekt sich über die volle Höhe der HBox erstreckt.
  • Diese Ziele werden in Curl erreicht, indem man Auffüllungselastizitäten verwendet, um die Flächen zu füllen, in die starre Objekte nicht hineingestreckt werden sollten. Auffüllungselastizität wird z. B. überhalb jedes der Rechtecke in 11 verwendet.
  • Die Auffüllungselastizität hat eine Streckordnung, deren Wert als Auffüllungs-Schwellwert-Streckordnung bekannt ist. Alle Objekte, deren Streckordnung kleiner als Auffüllung-Schwellwert-Streckordnung ist, werden daher als starr angesehen (weil sich die Auffüllung vorzugsweise zum Strecken des Objekts strecken wird). Damit die Breiten- und Höhenpräferenzen der HBox genau jene der Kinder der HBox wiederspiegeln, wird die Auffüllungselastizität nicht bei Berechnung der Breiten- und Höhenpräferenzen der HBox verwendet. Wenn jedoch die Zeit kommt, die der HBox zugewiesene Breite und Höhe unter den Kindern der HBox zuzuweisen, wird die Auffüllungselastizität als eine Vorrichtung zur Vermeidung der Streckung starrer Objekte verwendet.
  • Das Beispiel in 11 richtet Objekte anhand ihrer Unterseite aus, so dass Ausfüllungselastizität nur überhalb der Objekte benötigt wird. In anderen Fällen, wie z. B. in 12, wo die Objekte anhand ihrer Mittelpunkte ausgerichtet werden, wird Auffüllung sowohl überhalb als auch unterhalb eines jeden Objekts benötigt.
  • Eine ähnliche Auffüllungsstrategie wird von VBox und anderen Containern verwendet, die sonst das Potential hätten, starre Objekte, die innerhalb diesen enthalten sind, zu strecken. Einige graphische Container in Curl haben eine Option, die verwendet werden kann, um die Verwendung von Auffüllung in speziellen Situationen, in denen das Strecken starrer Objekte zu unterbinden, aber durch die Standardeinstellung die Auffüllung verwendet wird.
  • Die Verwendung von Elastizitäten durch TextFlowBoxes
  • Curls TextFlowBox-Container ist das Mittel, um Textabsätze, die auf Zeilen einer gegebenen Länge formatiert sind, darzustellen. Obwohl eine einzelne TextFlowBox viele Textabsätze enthalten kann, sind TextFlowBoxes, die einen einzelnen Absatz enthalten, ein wichtiger Spezialfall, weil viele graphische Anzeigen, wie z. B. Tabellen, Textblöcke enthalten, die wie ein einzelner Absatz behandelt werden können. Die Wahl, Elastizitäten zu verwenden, um Breiten- und Höhenpräferenzen zu beschreiben, erfüllt drei Zielen:
    • 1. In der Abwesenheit anderer Einschränkungen sollte sich eine TextFlowBox weit genug horizontal erstrecken, so dass jede ihrer Absätze auf einer einzelnen Zeile dargestellt werden kann.
    • 2. Falls mehrere TextFlowBoxes in einer HBox oder einem ähnlichen Container enthalten sind (wie z. B. einer Zeile einer Tabelle) und es nicht genug verfügbaren Platz für sie alle gibt, um so wie in (1) dargestellt zu werden, dann sollte der zur Verfügung stehende Platz unter den TextFlowBoxes in einer Weise aufgeteilt werden, die veranlasst, dass ihre Höhen ungefähr gleich gemacht werden.
    • 3. Falls mehrere TextFlowBoxes in einer VBox oder einem ähnlichen Container (wie z. B. einer Spalte einer Tabelle) enthalten sind, sollten die Breitenpräferen zen der VBox durch die TextFlowBox, die am breitesten wäre, wenn sie wie in (1) dargestellt würde, bestimmt werden.
  • Man nehme an, dass eine VBox zwei TextFlowBoxes enthält, wovon eine einen langen Abschnitt enthält und eine davon einen sehr kurzen Abschnitt wie z. B. ein paar Wörter enthält. Dieses Prinzip besagt, dass in der Abwesenheit anderer Einschränkungen der kurze Abschnitt nicht die horizontalen Grenzen der VBox in einer Weise "einziehen" sollte, die den langen Abschnitt zwingt, als mehrere Textzeilen dargestellt zu werden.
  • Diese Entwurfsziele werden erreicht, indem man eine Breitenelastizität einer TextFlowBox wie folgt berechnet. (Breitenpräferenzen einer TextFlowBox verlangen, dass der Ursprung der TextFlowBox entlang ihres linken Randes platziert wird, so dass die Elastizität für die linke Ausdehnung der TextFlowBox eine hochgradig starre Elastizität ist, deren bevorzugte Größe 0 ist. Deshalb ist die unten beschriebene Breitenelastizität die Elastizität, die der rechten Ausdehnung der TextFlowBox entspricht.)
    • 1. Die minimale Größe ist die Breite des längsten nicht unterbrechbaren Textelements (typischerweise ein Textwort) innerhalb der TextFlowBox.
    • 2. Die bevorzugte Größe ist die Breite, die benötigt werden würde, so dass der längste Absatz innerhalb der TextFlowBox als eine einzelne Textzeile dargestellt werden könnte und damit obiges Ziel (1) erreicht.
    • 3. Der Stauchbarkeitskoeffizient ist proportional zur Gesamtmenge an Text in dem längsten Abschnitt der TextFlowBox – mit anderen Worten die Länge des längsten Abschnitts, ohne dass irgendwelche festen linken oder rechten Einrückungen für Ränder und dergleichen enthalten sind.
    • 4. Die Stauchordnung ist ein Standardwert, der als Text-Fluß-Stauchordnung bekannt ist.
    • 5. Der Streckbarkeitskoeffizient ist gleich dem Stauchbarkeitskoeffizient.
    • 6. Die Streckordnung ist ein Standardwert, der als Text-Fluß-Streckordnung bekannt ist. Im wesentlichen ist die Text-Fluß-Streckordnung größer als die Text-Fluß-Stauchordnung und ist kleiner als die Füllung-Schwellwert-Streckordnung.
  • Die Tatsache, dass Text-Fluß-Streckordnung größer ist als die Text-Fluß-Stauchordnung erfüllt obiges Ziel (3). Man betrachte einen Fall, bei dem zwei oder mehr TextFlowBoxes unterschiedlicher Größen in einer VBox oder einem ähnlichen Container enthalten sind, wie in der Beschreibung des Ziels (3) spezifiziert ist. Die elastische Max-Operation wird auf den Breitenelastizitäten dieser TextFlowBoxes ausgeführt. Da die Streckbarkeit jeder TextFlowBox unendlich viel größer als die Stauchbarkeit einer beliebigen der TextFlowBoxes, (weil ihre Streckordnungen größer sind als ihre Stauchordnungen,) diktieren die Regeln für die elastische Max-Operation, dass das Ergebnis gleich der Breitenelastizität sein wird, welche die der TextFlowBox sein wird, die den längsten Absatz enthält.
  • Die Tatsache, dass die Text-Fluß-Streckordnung kleiner ist als die Füllungs-Schwellwert-Streckordnung bedeutet, dass TextFlowBoxes als starre Objekte agieren in dem oben beschriebenen Sinn in der Diskussion der Füllungselastizität. Folglich, falls eine TextFlowBox in einem Kontext erscheint, in dem mehr Platz zur Verfügung steht als die bevorzugte Breite der TextFlowBox, wird die TextFlowBox nicht horizontal gestreckt, wenn die Verwendung von Füllung nicht ausgeschaltet wurde. Dieser Grundsatz entspricht normalen Vorstellungen davon, wie man Text behandelt, obwohl dieser, falls gewünscht, verändert werden könnte, indem man einer Text-FlowBox eine größere Elastizität mit einer Streckordnung größer als Füllungs-Schwellwert-Streckordnung gibt.
  • Der Stauchbarkeitskoeffizient in der Breitenelastizität der TextFlowBox ist der Parameter, der die Erfüllung des oben genannten Ziels (2) ermöglicht. Der Spezialfall, den wir wählen, um das Ziel zu erreichen, ist der Fall, bei dem jede der besagten TextFlowBoxes aus einem einzelnen Textabschnitt besteht. Auf diesen Fall wird abgezielt, weil er bei weitem der am häufigsten vorkommende Fall in praktischen Situationen ist, in denen gewünscht wird, die Höhe benachbarter TextFlowBoxes gleich zu machen, insbesondere, wenn solche TextFlowBoxes als Komponenten einer Tabelle erscheinen.
  • Dieser Stauchbarkeitskoeffizient wird hergeleitet basierend auf der Annahme, dass ein gegebener Textblock eine konstante Fläche auf der Anzeige belegt – mit anderen Worten, falls die Breite verkleinert wird, wird sich die Höhe vergrößern, um das Produkt aus Breite mal Höhe näherungsweise konstant zu halten, und umgekehrt. Es gibt mehrere Gründe, warum Text nicht genau diesem Modell folgt, aber das Modell ist eine ziemlich brauchbare Annäherung. Man betrachte zwei Textblöcke P und Q, die diesem Modell gehorchen, so dass die bevorzugte Breite von P p ist und die bevorzugte Breite von Q q ist. Man betrachte ferner, dass diese beiden Textblöcke in einem Platz mit Gesamtbreite w dargestellt werden müssen, wobei w < p+q. Wir müssen das Defizit d = (p+q)-w zwischen P und Q derart aufteilen, dass die Höhen von P und Q gleichgemacht werden. Sobald die bevorzugten Breiten von P und Q proportional zu ihren Flächen sind – was in dem Fall wahr ist, den wir betrachtet haben, in dem jeder von P und Q einen einzelnen Textabschnitt enthält – kann gezeigt werden, dass diese gewünschte Aufteilung das Defizit zwischen P und Q in Anteil an ihre Flächen belegt. Falls P z. B. eine größere Fläche hat als Q, dann sollte ein proportional größerer Anteil des Defizits d an P zugewiesen werden.
  • Die Erfüllung des Ziels (2) durch die aktuelle Curl-Implementierung ist in 14, 15 und 16 illustriert, die das Aussehen einer graphischen Hierarchie zeigen, die die in 13 illustrierte Struktur hat, wenn sie auf jede der drei verschiedenen Breiten eingeschränkt ist. Wie in 13 gezeigt wird, ist die in 14-16 dargestellte Struktur eine HBox, die drei TextFlowBoxes enthält, von denen jede einen einzelnen Abschnitt einer anderen Länge hat. Wenn sie in bevorzugten Breite dargestellt wird, ergibt sich die resultierende Erscheinung wie in 14. Jeder TextFlow-Box wurde genau der Platz gegeben, der benötigt wird, um sie auf einer einzelnen Zeile darzustellen, was die bevorzugte Erscheinung einer TextFlowBox ist, die einen einzelnen Abschnitt enthält. Wenn die verfügbare Breite reduziert wird, wird die Reduzierung unter den einzelnen TextFlowBoxes in Anteil an ihre Stauchbarkeitskoeffi zienten, (d. h. in Anteil an der Länge des Textes, den sie enthalten) aufgeteilt. 15 illustriert die Situation, die sich ergibt, wenn die Breitenreduzierung gemäßigt ist, wobei sie zeigt, wie die Aufteilung dieser Breitenreduzierung auf jede TextFlowBox zu dem gewünschten Layout führt, in dem alle drei Boxen vergleichbare Höhen haben. 16 illustriert das Ergebnis, wenn die Breitenreduzierung strenger ist, wobei sie einmal mehr illustriert, wie die Aufteilung der Reduzierung dazu neigt, die Höhen der TextFlowBoxes gleich zu halten.
  • Weil Wörter in der Länge variieren und Zeilenumbrüche nur zwischen Wörtern (oder vielleicht an bestimmten Positionen innerhalb von Bindestrich-Wörtern) stattfinden können, wird dieser Grundsatz nicht immer die Höhen der TextFlowBoxes genau gleich machen: man trifft ziemlich häufig auf Randsituationen, in denen eine TextFlowBox sich kaum auf eine weitere Textzeile ausgedehnt hat, während andere TextFlowBoxes das nicht getan haben. Auch wenn einmal die Breite einer TextFlow-Box auf einen Wert gleich oder kleiner als die Breite ihres längsten Wortes (oder anderer unteilbarer Objekte) reduziert worden ist, sind Abweichungen vom Idealverhalten häufiger geworden. Nichtsdestotrotz verhält sich die hier beschriebene Text-F1owBox-Breiten-Elastizität über ein breites Spektrum hinweg gut beim Gleichhalten der TextFlowBox-Höhen.
  • In einer Breite-Zuerst-Layout-Verhandlung geschieht das Ausdrücken der Höhenpräferenz einer TextFlowBox geradlinig, weil die Breite für den Text bereits bekannt ist, bevor die Höhenpräferenz berechnet werden muss. Als ein Ergebnis ist die Höhenpräferenz der TextFlowBox genau eine starre Elastizität, deren minimale und bevorzugte Größen beide gleich der Höhe sind, die benötigt wird, um den gesamten Text anzuzeigen.
  • Obiges Ziel (2) ist schwierig zu erfüllen, wenn die Höhe-Zuerst-Layout-Verhandlung verwendet wird, so dass in diesem Fall Größenpräferenzen einer Text-FlowBox einfach basierend auf der Annahme berechnet werden, dass es ein starres Objekt der Ausdehnungen ist, die benötigt werden würden, um den enthaltenen Text, wie für Ziel (1) oben beschrieben, darzustellen.
  • Einfache starre Objekte
  • TextFlowBoxes sind ein Beispiel für ein graphisches Objekt, dessen Breite und Höhe näherungsweise umgekehrt proportional zueinander sind, aber es gibt viel einfachere graphische Objekte, wie z. B. Polygone und Ellipsen, die einfach eine bestimmte natürliche Größe haben und normalerweise nicht deformiert werden sollten. Die Breiten- und Höhenpräferenzen dieser starren Objekte werden mittels Elastizitäten folgender Beschaffenheit ausgedrückt:
    • 1. Die minimale Größe ist die natürliche Größe (Breite oder Höhe, wie geeignet) des Objekts.
    • 2. Die bevorzugte Größe ist gleich der minimalen Größe.
    • 3. Der Stauchbarkeitskoeffizient ist ein Standardwert, wie z. B. 1.
    • 4. Die Stauchordnung ist ein Standardwert, der als Minimale-Größe-Streckordnung bekannt ist. Minimale-Größe-Streckordnung ist kleiner als Text-Fluß-Stauchordnung und wird als die Stauchordnung aller Elastizitäten verwendet, bei denen die bevorzugten und minimalen Größen gleich sind. In Wahrheit macht es wenig aus, welche Stauchordnung oder 5tauchbarkeitskoeffizient in einer solchen Elastizität verwendet wird, weil die elastische Dividiere-Operation nur einer Elastizität einen Platz kleiner als ihre minimale Größe unter extremen Bedingungen zuweisen wird, egal was die Stauchordnung der Elastizität und der Stauchbarkeitskoeffizient sind.
    • 5. Der Streckbarkeitskoeffizient ist ein Standardwert wie z. B. 1.
    • 6. Die Streckordnung ist gleich der Text-Fluß-Streckordnung.
  • Die Schlüsseleigenschaften dieser Elastizität sind
    • 1. Sie widersetzt sich stark einer Stauchung unter die natürliche Größe des Objekts.
    • 2. Da ihre Streckordnung kleiner als die Füllungs-Schwellwert-Streckordnung ist, wird sie nicht über ihre natürliche Größe gestreckt, wenn sie innerhalb eines Containers wie z. B. HBox oder VBox platziert wird, der Füllungselastizität verwendet.
    • 3. Da die Streckordnung eines starren Objekts größer als die Stauchordnung einer TextFlowBox (und gleichermaßen die Streckordnung einer TextFlowBox größer als die Stauchordnung eines starren Objekts) ist, falls eine VBox einige Kombinationen von TextFlowBoxes und starren Objekten enthält, wird keines der in der VBox enthaltenen Objekte irgendein anderes Objekt innerhalb der VBox veranlassen, auf weniger als seine bevorzugte Breite gestaucht zu werden.
  • Während Breite-Zuerst-Layout-Verhandlung wird die Höhenpräferenz einer Text-FlowBox als eine starre Elastizität ausgedrückt, deren natürliche Größe die Höhe ist, die benötigt wird, um den in der TextFlowBox enthaltenen Text darzulegen, wenn die dieser TextFlowBox zugewiesene Breite gegeben ist.
  • Konstante-Seitenverhältnis Objekte
  • Eine dritte Familie von Objekten umfasst Graphiken wie z. B. Bilder, die in verschiedenen Größen dargestellt werden können, aber die für gutes Erscheinen unter einem spezifizierten "Seitenverhältnis" (das Verhältnis von Höhe zu Breite) dargestellt werden müssen. Falls die gewünschte Höhe und Breite im Voraus bekannt sind, können solche Objekte genau wie starre Objekte behandelt werden. Es ist jedoch manchmal passend, die Höhe und Breite variabel zu lassen, so dass die Größe des Objekts sich seiner Umgebung anpassen kann. Dies kann in dem Curl-Layout-System erreicht werden, indem man eine dehnbare Elastizität während des ersten Durchgangs durch die Layout-Verhandlung zur Verfügung stellt (z. B. Bereitstellen einer dehnbaren Elastizität als Breitenpräferenz während einer Breite-Zuerst-Layout-Verhandlung). Diese dehnbare Elastizität kann egal welche Parameter haben und wird zu dem gewünschten Anpassungslevel an die umgebenden Graphiken führen. Während des zweiten Durchgangs durch die Layout-Verhandlung wird die Größe, die während des ersten Durchgangs durch die Layout-Verhandlung zugewiesen wurde (z. B. die Breite, in dem Fall einer Breite-Zuerst-Layout-Verhandlung), bekannt sein. Die Größenpräferenz, die während des zweiten Durchgangs durch die Layout-Verhandlung zurückgegeben wurde, kann folglich eine starre Elastizität sein, deren natürlich Größe unter Verwendung des Seitenverhältnis-Objekts und der Größe berechnet wird, die während des ersten Durchgangs durch die Layout-Verhandlung zugewiesen wurde.
  • Aufhebende Elastizitäten
  • Es ist manchmal sinnvoll, die Standard Breiten- oder Höhenpräferenz eines graphischen Objekts aufzuheben. Die aufgehobenen Werte können verwendet werden, wenn ein graphisches Objekt seine eigenen Präferenzen an ein elterliches graphisches Objekt berichtet und dabei graphische Beziehungen kommuniziert, die das Aufheben bis zu dem elterlichen graphischen Objekt geschaffen hat. In Curl können Aufhebungen leicht mittels der "Breiten"- und "Höhen"optionen durchgeführt werden, folglich:

    {Fill width =2 cm, height = 1 cm}
  • Die für diese Optionen spezifizierten Werte können entweder lineare Messungen (wie z. B. "2 cm" in obigem Beispiel) oder andere elastische Werte sein. Falls der bereitgestellte Breiten- oder Höhenwert ein OriginElastic ist, wird er direkt als eine Ersetzung für die Breiten- oder Höhenpräferenz verwendet, die ansonsten von dem graphischen Objekt zur Verfügung gestellt würde. Falls jedoch der zur Verfügung gestellte Wert kein OriginElastic ist, ist es notwendig, den zur Verfügung gestellten Wert als eine Richtlinie beim Modifizieren der OriginElastic zu verwenden, welche von dem Objekt zurückgegeben wurde, um die Aufhebe-OriginElastic zu berechnen, die eigentlich für Layout-Zwecke von dem graphischen Elternteil des Objekts (z. B. ein HBox-Container) verwendet wird.
  • Falls der bereitgestellte Breiten- oder Höhenwert eine lineare Messung wie z. B. 2 cm ist, wird er in eine starre Elastizität umgewandelt (wie oben beschrieben unter "Einfache starre Objekte"), deren natürliche Größe gleich der linearen Messung ist.
  • Folglich gibt es nur zwei Fälle zu betrachten, wenn man die Aufhebe-OriginiElastic für ein graphisches Objekt bestimmt:
    • 1. Der bereits oben betrachtete Fall, in dem der Aufhebe-Breiten- oder Höhenwert als OriginElastic bereitgestellt wird.
    • 2. Der Fall, in dem der bereitgestellte Wert eine Elastizität ist.
  • Im ersteren Fall speichert das graphische Objekt die bereitgestellte Aufhebe-OriginElastic und gibt sie einfach zurück, wenn sie nach ihrer OriginElastic gefragt wird.
  • In dem letzteren Fall ist es wünschenswert, eine Aufhebe-OriginElastic zu berechnen, die zwei Eigenschaften hat:
    • 1. Die Summe der beiden Komponentenelastizitäten der Aufhebe-OriginElastic (unter Verwendung der elastischen Addierungsoperation) ist gleich dem zur Verfügung gestellten Breiten- oder Höhenwert.
    • 2. An Einschränkung (1) gebunden, entspricht die Beziehung zwischen den beiden Komponentenelastizitäten der Aufhebe-OriginElastic möglichst genau der Beziehung zwischen den beiden Komponentenelastizitäten der ursprünglichen OriginElastic, die von dem Objekt bereitgestellt wird, um seine Breite- oder Höhenpräferenz zu beschreiben.
  • 23 illustriert die horizontale Anordnung zweier Textboxen und ihre entsprechenden Elastizitäten. Zwei Textboxen, X und Y, sind in dem graphischen Objekt HBox enthalten. Für die Zwecke dieses Beispiels nimmt man an, dass Textboxen (X und Y) so konfiguriert werden, dass der Ursprung der HBox an der Linie liegt, die die beiden Textboxen (X und Y) voneinander trennt. Die ursprüngliche OriginElastic, die zurückgegeben würde, ist durch die Zeile, die A und B enthält, repräsentiert. Die ursprüngliche OriginElastic wird zurückgegeben, wenn der Breitenwert nicht aufgehoben wurde. T repräsentiert die Situation, bei der Breitenwert nicht aufgehoben wurde. Wie oben festgehalten, kann der Aufhe be-Wert ein Optionswert (vielleicht durch eine starre Elastizität repräsentiert) oder eine OriginElastic sein. Falls der Aufhebe-Wert eine OriginElastic ist, muss keine Berechnung durchgeführt werden, um eine Aufhebe-OriginElastic zurückzugeben; die bereitgestellte OriginElastic wird einfach zurückgegeben. Falls der Aufhebe-Wert nicht bereitgestellt ist, muss eine Aufhebe-OriginElastic berechnet werden.
  • Da insbesondere Eigenschaft (2) ein einigermaßen subjektives Kriterium ist, gibt es mehrere verschiedene Wege, eine Aufhebe-OriginElastic zu berechnen, von der gesagt werden kann, dass sie diese Eigenschaften hat. Das unten dargelegte Verfahren ist das Verfahren, das tatsächlich in der Curl-Implementierung verwendet wird und hat bewiesen, Werte zu berechnen, die sinnvoll für praktische Verwendung sind. In der folgenden Beschreibung stellen A und B (23) die "ersten" und "letzten" Komponenten der ursprünglichen OriginElastic dar. T repräsentiert die Elastizität, die als Breitenoptionswert zur Verfügung gestellt wird. AA und BB repräsentieren die ersten und letzten Komponenten der resultierenden Aufhebe-OriginElastic. Das Verfahren wird unter Verwendung der Curl-Programmierungsnotation beschrieben. Der Code verwendet zwei Prozeduren (Subroutinen) distribute-stretch-to-components und distribute-stretch-to-first. Zeilen, die mit "|" vertikalen Balken beginnen, enthalten Kommentare.
  • Figure 00390001
  • Figure 00400001
  • Figure 00410001
  • Figure 00420001
  • Figure 00430001
  • Figure 00440001
  • 24 illustriert die Hierarchie graphischer Objekte, die in 23 angezeigt werden. Das graphische Containerobjekt, Hbox 150, ist die Wurzel einer Hierarchie, die die graphischen Objekte X und Y 156 enthält. Jedes graphische Objekt hat ein zugeordnetes Layout-Objekt 154; Layout-Objekte beschreiben die Positionen und Größen von Objekten, die dargestellt werden. Die Aufhebung 152, entweder als eine Elastic oder OriginElastic, wird ebenfalls in der graphischen Hierarchie gespeichert.
  • 25 ist ein Flussdiagramm, das eine Methode zum Bereitstellen von Aufhebungen für mit Elastizitäten definierte graphische Objekte illustriert. Der Prozess beginnt bei Schritt 160. Die ursprüngliche OriginElastic wird zunächst aus dem graphischen Objekt (Schritt 162) bestimmt. Die ursprüngliche OriginElastic wird für ein zusammengesetztes graphisches Objekt berechnet und wird einfach für ein einfaches graphisches Objekt gespeichert. Falls keine Aufhebung mit einem graphischen Objekt (Schritt 164) zugeordnet ist, wird die ursprüngliche OriginElastic zu der resultierenden OriginElastic (Schritt 166) kapiert. Falls eine Aufhebung vorliegt, wird die resultierende Aufhebe-OriginElastic (siehe unter Verwendung der Curl-Programmierungsnotation oben beschriebenes Verfahren) aus der ursprünglichen OriginElastic und der gespeicherten Aufhebe-Elastic (Schritt 168) berechnet. Die resultierende OriginElastic (aus Schritt 166 oder Schritt 168) wird dann in Schritt 170 zurückgegeben. Der Prozess endet bei Schritt 172.
  • Das Aufheben von Elastizitäten ist ein effektiver Mechanismus, um die Anzeige-Besonderheiten graphischer Objekte zu verändern, während man bestimmte Anzeige-Beziehungen einhält. Insbesondere ist die Beziehung zwischen den beiden Komponentenelastizitäten in der resultierenden OriginElastic nahe an der Beziehung zwischen den beiden Komponentenelastizitäten in der ursprünglichen OriginElastic.
  • Curls dreistufiger Layout-Verhandlungsalgorithmus
  • Wie vorher diskutiert unterstützt Curl zwei Layout-Verhandlungsordnungen: Breite-Zuerst und Höhe-Zuerst. Für Anwendungen, in denen Text in erster Linie in horizontalen Zeilen (z. B. wenn man westliche Sprachen verwendet) formatiert ist, erzeugt eine Breite-Zuerst-Verhandlung im allgemeinen bessere Resultate, wie in der obigen Diskussion der Breitenpräferenzen für TextFlowBoxes illustriert ist. Die folgende Diskussion beschreibt Breite-Zuerst-Layoutverhandlung; die Details für Höhe-Zuerst-Verhandlung sind vollständig analog, außer dass die Rollen von Breite und Höhe vertauscht sind.
  • Breite-Zuerst-Layoutverhandlung mit einem Objekt g beginnt, wenn der Elternteil des Objekts die get-width-preference Methode von g aufruft. Diese Methode ist verantwortlich dafür, ein Paar von Elastizitäten (oder Information, die in ein Paar von Elastizitäten verwandelt werden kann) zurückzugeben, wobei man die Präferenzen für die verfügbare Fläche, die seinen linken und rechten Ausdehnungen zugewiesen wird, beschreibt. Falls g eine Box ist, wird diese Information im allgemeinen hergeleitet, indem man die get-width-preference Methode für jedes der graphischen Kinder von g aufruft und die Resultate in einer geeigneten Weise kombiniert.
  • Der nächste Schritt in Breite-Zuerst-Layoutverhandlung mit g geschieht, wenn die constrain-width Methode von g aufgerufen wird. Diese Methode nimmt als Argumente die linken und rechten Ausdehnungswerte, die für g berechnet wurden und ist verantwortlich dafür, ein Paar von Elastizitäten (oder Information, die in ein Paar von Elastizitäten verwandelt werden kann) zurückzugeben, die g's Präferenzen für die verfügbare Fläche beschreiben, die seinem Aufstieg und Abstieg zugewiesen wird. Falls g eine Box ist, wird diese Methode im allgemeinen die linken und rechten Ausdehnungen für jedes graphische Kind von g berechnen und dann die constrain-width Methode eines jeden Kindes aufrufen, um für jedes Kind eine Höhenpräferenz zu erhalten. Diese Höhenpräferenzen werden dann auf eine geeignete Weise kombiniert, um g's Höhenpräferenz zu erzeugen.
  • Der letzte Schritt in der Layoutverhandlung mit g geschieht, wenn g's set-size Methode aufgerufen wird. Diese Methode erhält als ihr Argument eine Beschreibung der linken und rechten Ausdehnungen, sowie den Aufstieg und Abstieg, die g zugewiesen wurden. g kann diese Information für zukünftige Bezugnahme festhalten. Falls g eine Box ist, wird sie erwartungsgemäß die set-size Methode auf jedes ihrer graphischen Kinder mit geeigneten Argumenten aufrufen.
  • Da diese Layoutverhandlungsstrategie keine Information über Höhenpräferenzen benötigt, bis nachdem Breitenentscheidungen gemacht worden sind, bietet sie eine Gelegenheit für Objekte wie z. B. Textblöcke und Bilder, um das Entscheiden ihrer Höhenpräferenzen, bis nachdem ihre Breitenzuweisungen bekannt sind, aufzuschieben. Auf diese Weise können Absätze mit Wortumbruch und Bilder mit konstanten Seitenverhältnissen intelligenter formatiert werden.
  • 17, 18 und 19 stellen Flussdiagramme dar, die erklären, wie HBox, ein stellvertretender graphischer Container, mit Layout umgeht. Jedes Flussdiagramm zeigt, wie sich HBox während eines der drei Durchgänge einer dreistufigen Breite-Zuerst-Layoutverhandlung verhält. Das Verhalten während einer Höhe-Zuerst-Layoutverhandlung ist ähnlich, obwohl die detaillierte Abfolge von Operationen anders ist.
  • Die Methoden von HBox, die während der drei Stufen der Layoutverhandlung aufgerufen werden, sind wie folgt:
    • Erster Durchgang: {HBox.get-width-preference}
    • Zweiter Durchgang: {HBox.constrain-width lextent:float, rextent: float}
    • Dritter Durchgang: {HBox. set-size bounds: GRect}
  • Die HBox.get-width-preference Methode gibt eine OriginElastic zurück, die die Breitenpräferenz der HBox repräsentiert, und die HBox. constrain-width Methode gibt eine OriginElastic zurück, die die Höhenpräferenz der HBox repräsentiert. Die lextent und rextent Argumente an HBox. constrain-width geben die linken und rechten Ausdehnungen an, die für Zwecke der Berechnung der Höhenpräferenz der HBox angenommen werden sollten. Das GRect-Objekt, das als ein Argument zur HBox. set-size Methode zur Verfügung gestellt wird, enthält vier Gleitkommazahlen, die die linken und rechten Ausdehnungen, sowie die Aufstiegs- und Abstiegswerte, angeben, die die der HBox zugewiesene rechteckige Fläche repräsentieren.
  • Die Flussdiagramme aus 17, 18 und 19 werden nun beschrieben. Es wird erkannt, dass, da das graphische Layout ein komplexer Baum sein kann, jedes Objekt ein Elternteilobjekt sein kann, das eine Anzahl an Kindkomponenten hat, und jede dieser Kindkomponenten ist vielleicht selbst ein Elternteil zu seinen Kindkomponenten und so weiter bis an die Blätter des Baumes. Jedes der Flussdiagramme der 17 bis 19 repräsentiert den Prozess in einem Kind, wenn die entsprechende Routine von seinem Elternteil aufgerufen wird. Innerhalb jeder Routine macht das Kind denselben Aufruf an jedes seiner Kinder. Folglich wird der Aufruf von der Wurzel des Baumes bis an die Blätter des Baumes weitergereicht, die ihre jeweiligen Ergebnisse zurück an die Wurzel des Baumes zurückgeben.
  • Die Flussdiagramme sind auf den Fall beschränkt, in dem die HBox die Ursprünge der enthaltenen Objekte ausrichtet und nicht die Logik beinhaltet, die benötigt wird, um Unterseiten, Oberseiten oder Mittelpunkte auszurichten. Das Spezifizieren der Logik für eine HBox mit diesen hinzugefügten Fähigkeiten ist eine geradlinige Aufgabe. Die Flussdiagramme werden relativ zu dem einfachen Beispiel aus 9 beschrieben, wo ein Aufruf an eine HBox gemacht wird, die wiederum die Aufrufe an ihre drei Kinder A, B und C macht.
  • Die Berechnung wird unter Verwendung mehrerer Variablen beschrieben, die als privat zu der HBox vereinbart sind, einschließlich der folgenden:
    • A, D, L und R Elastizitäten, die für interne Berechnungen verwendet werden. P, eine Elastizität, die für das Auffüllen verwendet wird.
    • C, ein Zeiger auf ein graphisches Kindobjekt, das gegenwärtig von Interesse ist. I, eine ganzzahlige Indexvariable.
    • CWE, ein Feld von OriginElastic, das die aus Kindobjekten erhaltenen Breitenpräferenzen speichert.
    • CHE, ein Feld von OriginElastic, das die aus Kindobjekten erhaltenen Höhenpräferenzen speichert.
    • RR, ein Feld von Elastizitäten, das zur Akkumulierung der Breitenpräferenz der HBox verwendet wird.
    • lextent, rextent, ascent, descent, casc, cdesc, cp, after und cspace, Zahlen, die zur Bezeichnung von Größen oder Positionen graphischer Objekte verwendet werden.
    • CLEX und CREX, Felder von linken bzw. rechten Ausdehnungswerten, die für Kindobjekte berechnet wurden.
    • XPOS, ein Feld von x-Koordinaten der Ursprünge der Kindobjekte. CBOUNDS, ein GRect-Objekt.
  • Wenn der Elternteil der HBox die get-width-preference (17) aufruft, gibt die HBox in diesem Beispiel eine Breitenpräferenz WE zurück, die linke und rechte Elastizitäten L und R umfasst. Die linke Elastizität der HBox ist die linke Elastizität des Objekts A, und die rechte Elastizität ist die Summation der verbleibenden Elastizitäten AR, BL, BR, CL und CR, wie in 20 illustriert. Zu diesem Zweck macht die HBox selbst den get-width-preference Aufruf an jedes ihrer Kinder A, B und C, um ihre jeweiligen linken und rechten Elastizitäten zu erhalten. Genauer gesagt werden in Schritt 102 die linken und rechten Elastizitäten der HBox zu Beginn auf Null gesetzt, und die Zahl der Kinder i der HBox wird auf 3 gesetzt. In Schritt 104 ist i anfangs drei und folglich größer als Null, so dass das System mit Schritt 106 fortfährt. In 106 macht die HBox den get-width-preference Aufruf an ihr Kind C (i=3), um CL und CR zu erhalten. Die rechte Elastizität, immer noch Null, wird in R[3] für Bezugnahme in einer folgenden Methode gespeichert. Die gesamte Breitenpräferenz des Kindes C ist auch in CWE[3] für Bezugnahme in einer folgenden Methode gespeichert. Die rechte Komponente CR des Kindes C wird zu dem Wert R addiert, der als ein Akkumulator für die rechte Elastizität der HBox dient. (In dem Flussdiagramm beziehen sich die Ausdrücke letzte Komponente/erste Komponente auf die rechte Ausdehnung/linke Ausdehnung bzw. Abstieg/Aufstieg abhängig davon, ob ein Breite-Zuerst oder Höhe-Zuerst Prozess gerade ausgeführt wird. In diesem Beispiel entspricht letzte/erste linke/rechte.)
  • Im Schritt 108 i=3 verarbeitet man immer noch Kind C, so dass die linke Komponente CL des Kindes C zur rechten Komponente R der HBox in Schritt 110 addiert wird. Der Index i wird in Schritt 112 dekrementiert und in 104 mit Null verglichen. In der nächsten Schleife werden in den Schritten 106 und 110 BR und BL auf ähnliche Weise zu R addiert, und der Wert RR[2] wird abgespeichert. Insbesondere ist RR[2] die Summe der linken und rechten Elastizitäten des Kindes C.
  • In der abschließenden Schleife dieses Beispiels wird Kind A verarbeitet. Der Wert RR[1] ist die Summe der linken und rechten Elastizitäten der Kinder B und C. Rechte Elastizität AR wird zur rechten Elastizität R der HBox in Schritt 106 addiert, aber in Schritt 108 geht das System zu Schritt 114. Folglich wird die linke Elastizität AL des letzten Kindes A die linke Elastizität der HBox. Schließlich, nachdem i in Schritt 112 auf Null dekrementiert worden ist, konstruieren die linken und rechten Elastizitäten L und R die OriginElastic WE. Diese OriginElastic für die HBox wird an sein Elternteil zurückgegeben. Der Wert wird den Baum hinauf durch die get-width-preference Routine der Eltern an die Wurzel des Baumes zurückgereicht.
  • Die Breiteneinschränkungen werden dann durch den Baum hinunter durch den constrain-width Aufruf (18) zurückgereicht, der veranlasst, dass die HBox eine aus einem berechneten Aufstieg und Abstieg konstruierte OriginElastic HE zurückgibt.
  • Auf Erhalt des constrain-width Aufrufs führt die HBox die Methode von 18 durch. Basierend auf den linken und rechten Elastizitäten, die in der Methode der 17 berechnet wurden, und einer Auffüllungselastizität für die HBox wird in Schritt 118 die Auffüllung aus dem lextent und rextent durch die Dividiere-Operation entfernt (linker und rechter Ausdehnungsabstand im Elternaufruf eingeschlossen). Ein Aufstieg und ein Abstieg werden auf Null initialisiert, genauso wie der Cursorpositionswert cp. Der constrain-width Prozess verarbeitet Kinder von links nach rechts, und cp definiert den linken Rand der nächsten Region, die zugewiesen wird, wobei man rechts vom Ursprung der HBox aus zählt. Der Kind-Index i wird zur Verarbeitung von links nach rechts auf 1 gesetzt. Der Wert "after" ist ein Abstand, der unter den Kindern aufgeteilt wird und anfangs auf rextent (21A) gesetzt wird.
  • In Schritt 120 ist i kleiner als die Zahl 3 der Kinder der HBox und das System fährt fort mit Schritt 122. Im Schritt 122 werden die linken und rechten Elastizitäten des Kindes A in L und R gespeichert. Im Schritt 124 i=1 für das erste Kind A, und das System geht zu 126. In Schritt 126 berechnet die HBox den lextent CLEX[1] und rextent CREX[1], die an das Kind A in einem constrain-width Aufruf weitergeleitet werden. Der lextent, der an das erste Kind A weitergereicht wird, ist der von der HBox empfangene lextent. Mit lextent, der CLEX[1] zugewiesen wurde, wird cp von lextent inkrementiert. Der rextent, der an das Kind A weitergeleitet wird, ist ein Wert cspace, der mittels der Dividiere-Operation berechnet wird. Wie in 21A illustriert, muss der "after" Abstand, der an diesem Punkt in der Methode gleich dem empfangenen rextent ist, zwi schen der rechten Elastizität R des Kindes A und der akkumulierten Breitenpräferenz RR[1] der Kinder B und C aufgeteilt werden, die im ersten Durchgang bestimmt wurden. Der Anteil von "after", der der Elastizität R zugewiesen worden ist, ist der Wert cspace.
  • Der Wert cspace wird dann an das Kind A als sein eingeschränkter rextent weitergeleitet. Zurückgegeben aus dem Kind A wird die Kind-Höhe OriginElastic, die die Aufstiegs- und Abstiegselastizitäten A und D definiert. Ein Wert XPOS[1], der den Abstand des Kindursprungs relativ zum HBox-Ursprung setzt, wird für Kind A auf Null gesetzt, da der Ursprung einer HBox per definitionem derselbe wie der Ursprung des linkesten Kindes ist.
  • In 128 wird der Cursorzeiger cp von cspace auf den linken Rand von A inkrementiert, und der Kind-Index i wird um Eins inkrementiert. Der Abstand "after", der noch zugewiesen werden muss, wird berechnet, indem man cspace aus 21A von "after" dieser Figur subtrahiert, um einen Abstand bereitzustellen, der unter den linken und rechten Ausdehnungen von B und C zugewiesen wird, wie in 21B illustriert ist.
  • Aus Schritt 120 kehrt die Methode zu 122 zurück, um das zweite Kind B zu verarbeiten. Die linken und rechten Elastizitäten für Kind B, die in der Methode von 17 berechnet wurden, definieren L und R (21B). Da das erste Kind verarbeitet worden ist, fährt die Methode von 124 bis 130 fort. Der cspace, der zugewiesen wird, wird dann berechnet, indem man den Abstand "after" zwischen L+R und RR[2] aufteilt. Der Wert cspace wird dann entsprechend der linken und rechten Elastizitäten L und R des Kindes B geteilt, um CLEX(2] zu definieren, und die Differenz zwischen cspace und CLEX[2] definiert CREX[2]. Die Position des Ursprungs von Kind B XPOS[2] wird definiert, indem man CLEX[2] zum linken Rand des Kindes B addiert, der durch cp definiert ist. Die HBox stellt dem Kind B ebenfalls einen constrain-width Aufruf zur Verfügung, um Kind B auf die berechneten CLEX[2] und CREX[2] einzuschränken und um aus Kind B ihre Aufstiegs- und Abstiegselastizitäten zu erhalten. Die Aufstiegs- und Abstiegselastizitäten A und D für die HBox werden dann durch die Max-Operation definiert, die auf die vorliegenden Aufstiegs- und Abstiegswerte A und B der HBox und die vom Kind B zurückgegebenen Aufstiegs- und Abstiegswerte angewendet wurde.
  • In der nächsten Schleife verarbeitet die Methode in den Schritten 122 und 130 das dritte Kind C auf ähnliche Weise. Die HBox gibt dann ihre Höhen-OriginElastic zurück, die der maximale Aufstieg und maximale Abstieg für die drei Kinder A, B und C ist.
  • 19 illustriert die set-size Methode, durch die die HBox mit den Werten ihrer linken Ausdehnung, rechten Ausdehnung, Aufstieg und Abstieg ausgestattet wird und durch die die HBox die geeigneten Werte an jedes ihrer Kinder weiterreicht. In 134 wird die geeignete Auffüllung für die HBox in P gespeichert. Aufstieg und Abstieg werden von den Komponenten genommen, die im Aufruf von der Eltern zur Verfügung gestellt werden, und der Kind-Index wird auf 1 gesetzt. Für das erste Kind geht das Verfahren durch die Entscheidung 136 bis 138. In 138 werden die Aufstiegs- und Abstiegselastizitäten A und D für das Kind mittels der entsprechenden Komponenten der Kind-Höhenelastizität definiert, die aus der Berechnung der 18 abgespeichert wurden. Der Kind-Aufstieg und Kind-Abstieg casc und cdesc werden dann von der Dividiere-Operation berechnet, die den beschränkten Aufstieg und Abstieg entsprechend der Aufstiegs-, Abstiegs- und Füllungselastizitäten teilt (22). Die Kind-Begrenzungen werden dann für das Kind aus den vorher in der constrain-width Methode (18) eingeschränkten Ausdehnungen und dem gerade berechneten Kind-Aufstieg und -Abstieg definiert. Diese Begrenzungen werden dann dem Kind durch einen set-size Aufruf präsentiert, und der Kind-Index wird um Eins inkrementiert. Wenn das Kind erst einmal begrenzt worden ist, kehrt die Methode zum Elternteil aus Entscheidung 136 zurück.
  • Während diese Erfindung mit Bezugnahme auf bevorzugte Ausführungsformen besonders dargestellt und beschrieben wurde, würde es für Fachleute klar sein, dass zahlreiche Veränderungen in der Form und in Einzelheiten darin gemacht werden können, ohne den Bereich der angefügten Ansprüche zu verlassen.

Claims (26)

  1. Verfahren zum Verarbeiten Inhalt aufweisender graphischer Objekte (1,44,59–78,80–85,87–89) zur Erstellung des Layouts der graphischen Objekte, umfassend: Definieren von Streckungseigenschaften der Inhalt aufweisenden graphischen Objekte; Definieren von Stauchungseigenschaften der Inhalt aufweisenden graphischen Objekte; und Verarbeiten von Eigenschaften der Inhalt aufweisenden graphischen Objekte, einschließlich der Streckungs- und Stauchungseigenschaften, um individuelle Layouts der graphischen Objekte innerhalb eines allgemeinen graphischen Layouts zu definieren, dadurch gekennzeichnet, daß die Stauchungseigenschaften von den Streckungseigenschaften verschieden sind, und wobei die Streckungseigenschaften Streckungskoeffizienten (tstretch) umfassen, die auf Größen, welche für die graphischen Objekte bestimmt sind, angewendet werden, und die Stauchungseigenschaften Stauchungskoeffizienten (tcompress) umfassen, die auf die Größen, die für die graphischen Objekte bestimmt sind, angewendet werden.
  2. Verfahren nach Anspruch 1, wobei die Streckungseigenschaften und Stauchungseigenschaften Streckungsordnungen (torders) bzw. Stauchungsordnungen (torderc) umfassen, um wesentliche Relativunterschiede zwischen Streckung und Stauchung relativ zu anderen graphischen Objekten anzuzeigen.
  3. Verfahren nach Anspruch 2, welches außerdem folgendes umfaßt: Definieren bevorzugter Größen (tpref) der graphischen Objekte und minimaler Größen (tmin), die unabhängig von den Streckungs- und Stauchungseigenschaften festgelegt sind, und Verarbeiten der minimalen und bevorzugten Größen, um individuelle Layouts zu definieren.
  4. Verfahren nach Anspruch 3, welches außerdem folgendes umfaßt: Definieren von Streckungs- und Stauchungseigenschaften der graphischen Objekte durch kompakte Darstellungen graphischer Objekte, die ähnliche oder gleiche Streckungs- und Stauchungseigenschaften teilen.
  5. Verfahren nach Anspruch 2, wobei der Verarbeitungsschritt ein Ausführen einer Additionsoperation umfaßt, in welcher die Streckungs- (tstretch) und Stauchungskoeffizienten (tcompress) mehrerer graphischer Objekte abhängig von den relativen Streckungs- (torders) und Stauchungsordnungen (torderc) summiert werden.
  6. Verfahren nach Anspruch 6, wobei die Streckungs- (tstretch) bzw. Stauchungskoeffizienten (tcompress) summiert werden, falls die zugehörigen Streckungs(torders) und Stauchungsordnungen (torderc) gleich sind und, falls die zugehörigen Streckungs- (torders) und Stauchungsordnungen (torderc) nicht gleich sind, die Streckungs- (tstretch) und Stauchungskoeffizienten (tcompress) des graphischen Objekts, von den Streckungs- (torders) und Stauchungsordnungen (torderc) als am meisten elastisch angezeigt, als Addierungsergebnis genommen werden.
  7. Verfahren nach Anspruch 6, wobei die Streckungs- (torders) bzw. Stauchungsordnungen (torderc), welche die größte Elastizität haben, als Addierungsergebnis genommen werden.
  8. Verfahren nach Anspruch 5, wobei die Streckungs-(torders) bzw. Stauchungsordnungen (torderc), welche die größte Elastizität haben, als Addierungsergebnis genommen werden.
  9. Verfahren nach Anspruch 2, wobei der Verarbeitungsschritt ein Ausführen einer Max-Operation umfaßt, welche eine Größe von zwei graphischen Objekten auswählt, welche von der relativen Stauchung und Streckung der graphischen Objekte abhängig ist.
  10. Verfahren nach Anspruch 9, wobei ein Ergebnis der Max-Operation die Größe des graphischen Objekts ist, dessen Elastizität gegenüber der anderen Größe am geringsten ist.
  11. Verfahren nach Anspruch 10, wobei die Streckungs- und Stauchungseigenschaften des Max-Ergebnisses von dem graphischen Objekt ausgewählt werden, dessen Größe ausgewählt wurde oder, falls die Größe der zwei graphischen Objekte das Gleiche ist, von dem graphischen Objekt, welches am wenigsten elastisch war.
  12. Datenstruktur in einem Datenverarbeitungssystem, welche Elastizitäten für ein Layout eines Inhalt aufweisenden graphischen Objekts (1,44,59–78,80–85,87–89) definiert, umfassend: einen Größenwert des Inhalt aufweisenden graphischen Objekts; eine Streckungseigenschaft des Inhalt aufweisenden graphischen Objekts; und eine Stauchungseigenschaft des Inhalt aufweisenden graphischen Objekts, dadurch gekennzeichnet, daß die Stauchungseigenschaft von der Streckungseigenschaft unabhängig ist und wobei die Streckungs- und Stauchungseigenschaften Streckungs- (tstretch) und Stauchungskoeffizienten (tcompress) und Streckungs- (torder) und Stauchungsordnungen (torderc), die wesentliche Relativunterschiede in der Elastizität zwischen graphischen Objekten anzeigen, umfassen.
  13. Datenstruktur nach Anspruch 12, welche außerdem eine bevorzugte Größe (tpref) und eine Minimalgröße (tmin) umfaßt, unabhängig festgelegt von den Streckungs- und Stauchungseigenschaften.
  14. Datenstruktur nach Anspruch 13, welche folgendes umfaßt: eine kompakte Darstellung von Streckung und Stauchung von graphischen Objekten, welche gemeinsame Streckungs- (tstretch) und Stauchungskoeffizienten (tcompress) teilen.
  15. Datenstruktur nach Anspruch 12, welche außerdem sowohl minimale (tmin) als auch bevorzugte (tpref) Größenwerte umfaßt.
  16. Datenverarbeitungssystem umfassend: Mittel zum Definieren von Streckungseigenschaften von Inhalt aufweisenden graphischen Objekten (1,44,59–78,80–85,87–89); Mittel zum Definieren von Stauchungseigenschaften von den Inhalt aufweisenden graphischen Objekten; und Mittel zum Verarbeiten von Eigenschaften der Inhalt aufweisenden graphischen Objekte, einschließlich der Streckungs- und Stauchungseigenschaften, um individuelle Layouts der graphischen Objekte innerhalb eines allgemeinen graphischen Layouts zu definieren, dadurch gekennzeichnet, daß die Stauchungseigenschaften von den Streckungseigenschaften verschieden sind, und wobei die Streckungseigenschaften Streckungskoeffizienten (tstretch) umfassen, die auf Größen, welche für die graphischen Objekte bestimmt sind, angewendet werden, und die Stauchungseigenschaften Stauchungskoeffizienten (tcompress) umfassen, die auf die Größen, die für das graphische Objekt bestimmt sind, angewendet werden.
  17. System nach Anspruch 16, wobei die Streckungseigenschaften und Stauchungseigenschaften Streckungsordnungen (torders) bzw. Stauchungsordnungen (torderc) umfassen, um wesentliche Relativunterschiede zwischen Streckung und Stauchung relativ zu anderen graphischen Objekten anzuzeigen.
  18. System nach Anspruch 17, welches außerdem folgendes umfaßt: Mittel zum Definieren bevorzugter Größen (tpref) der graphischen Objekte und minimaler Größen (tmin), die unabhängig von den Streckungs- und Stauchungseigenschaften festgelegt sind, und Mittel zum Verarbeiten der minimalen (tmin) und bevorzugten (tpref) Größen, um individuelle Layouts zu definieren.
  19. System nach Anspruch 18, welches außerdem folgendes umfaßt: Mittel zum Definieren von Streckungs- und Stauchungseigenschaften der graphischen Objekte durch kompakte Darstellungen graphischer Objekte, die ähnliche oder gleiche Streckungs- und Stauchungseigenschaften teilen.
  20. System nach Anspruch 16, wobei der Verarbeitungsschritt eine Ausführung einer Additionsoperation umfaßt, in welcher die Streckungs- (tstretch) und Stauchungskoeffizienten (tcompress) mehrerer graphischer Objekte abhängig von den relativen Streckungs- (torders) und Stauchungsordnungen (torderc) summiert werden.
  21. System nach Anspruch 20, wobei die Streckungs- (tstretch) bzw. Stauchungskoeffizienten (tcompress) summiert werden, falls die zugehörigen Streckungs(torder) und Stauchungsordnungen (torderc) gleich sind und, falls die zugehörigen Streckungs- (torders) und Stauchungsordnungen (torderc) nicht gleich sind, die Streckungs(tstretch) und Stauchungskoeffizienten (tcompress) des graphischen Objekts, von den Streckungs- (torders) und Stauchungsordnungen (torderc) als am meisten elastisch angezeigt, als Addierungsergebnis genommen werden.
  22. System nach Anspruch 21, wobei die Streckungs- (torder) bzw. Stauchungsordnungen (torderc), welche die größte Elastizität haben, in das Addierungsergebnis einbezogen werden.
  23. System nach Anspruch 20, wobei die Streckungs- (torder) bzw. Stauchungsordnungen (torderc), welche die größte Elastizität haben, als Addierungsergebnis genommen werden.
  24. System nach Anspruch 16, wobei die Mittel für ein Verarbeiten Mittel für ein Ausführen einer Max-Operation umfassen, welche eine Größe von zwei graphischen Objekten auswählt, welche von der relativen Stauchung und Streckung der graphischen Objekte abhängig ist.
  25. System nach Anspruch 24, wobei ein Ergebnis der Max-Operation die Größe des graphischen Objekts ist, dessen Elastizität gegenüber der anderen Größe am geringsten ist.
  26. System nach Anspruch 25, wobei die Streckungs- und Stauchungseigenschaften des Max-Ergebnisses von dem graphischen Objekt ausgewählt werden, dessen Größe ausgewählt wurde oder, falls die Größe der zwei graphischen Objekte das Gleiche ist, von dem graphischen Objekt, welches am wenigsten elastisch ist.
DE60010272T 1999-07-30 2000-07-20 Graphische objekte mit streck- und kompressionseigenschaften Expired - Lifetime DE60010272T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/364,700 US6473093B1 (en) 1999-07-30 1999-07-30 Processing of graphical objects with distinct stretch and compression properties
US364700 1999-07-30
PCT/US2000/019876 WO2001009835A1 (en) 1999-07-30 2000-07-20 Graphical objects with stretch and compression properties

Publications (2)

Publication Number Publication Date
DE60010272D1 DE60010272D1 (de) 2004-06-03
DE60010272T2 true DE60010272T2 (de) 2005-05-25

Family

ID=23435688

Family Applications (1)

Application Number Title Priority Date Filing Date
DE60010272T Expired - Lifetime DE60010272T2 (de) 1999-07-30 2000-07-20 Graphische objekte mit streck- und kompressionseigenschaften

Country Status (7)

Country Link
US (1) US6473093B1 (de)
EP (1) EP1200934B1 (de)
AT (1) ATE265721T1 (de)
AU (1) AU6359800A (de)
CA (1) CA2380697A1 (de)
DE (1) DE60010272T2 (de)
WO (1) WO2001009835A1 (de)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6793927B1 (en) * 1993-12-06 2004-09-21 The United States Of America As Represented By The Secretary Of The Department Of Agriculture Construction of Pasteurella haemolytica vaccines
US6750887B1 (en) * 2000-06-02 2004-06-15 Sun Microsystems, Inc. Graphical user interface layout manager
US6919890B2 (en) * 2000-09-28 2005-07-19 Curl Corporation Grid and table layout using elastics
US20020111969A1 (en) * 2000-09-28 2002-08-15 Halstead Robert H. System and method for processing graphical objects for layout using an elastic difference operation
US6825860B1 (en) * 2000-09-29 2004-11-30 Rockwell Automation Technologies, Inc. Autoscaling/autosizing user interface window
US7398478B2 (en) * 2003-11-14 2008-07-08 Microsoft Corporation Controlled non-proportional scaling display
US9330187B2 (en) * 2004-06-22 2016-05-03 International Business Machines Corporation Persuasive portlets
US20060218087A1 (en) * 2005-03-24 2006-09-28 Zimmerman Jeffrey P Automated aggregation and comparison of individual spending relative to population of similar users
US20060218088A1 (en) * 2005-03-24 2006-09-28 Flora John R Intelligent auto-fill transaction data
US20060218086A1 (en) * 2005-03-24 2006-09-28 Heather Campbell Payee aliasing
US20060224558A1 (en) * 2005-03-24 2006-10-05 Flora John R Associating multiple categories with single payee or payor in financial software application
US8177121B2 (en) * 2006-01-13 2012-05-15 Intuit Inc. Automated aggregation and comparison of business spending relative to similar businesses
US7656404B1 (en) 2006-03-21 2010-02-02 Intuit Inc. Line trimming and arrow head placement algorithm
US8185453B1 (en) 2006-03-21 2012-05-22 Intuit Inc. Contextual access to workflow functionality
US7719531B2 (en) * 2006-05-05 2010-05-18 Microsoft Corporation Editing text within a three-dimensional graphic
US20090264198A1 (en) * 2006-05-26 2009-10-22 Camelot Co., Ltd. 3d game display system, display method, and display program
US9692810B2 (en) * 2014-04-09 2017-06-27 Sap Se Dynamic user interface layout algorithm
US10175959B2 (en) 2014-04-09 2019-01-08 Sap Se Generation of user interfaces by considering field importance and using smart controls and layouts

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4799172A (en) 1986-04-30 1989-01-17 Gerber Scientific Products, Inc. Apparatus and method for automatic layout of sign text
US5148520A (en) 1988-12-30 1992-09-15 Chipsoft Ca, Corp. Determining the locations of the contents of bordered areas of a generic form
US5208906A (en) 1988-12-30 1993-05-04 Chipsoft Ca, Corp. Method and apparatus for representing bordered areas of a generic form with records
US5953735A (en) 1991-03-20 1999-09-14 Forcier; Mitchell D. Script character processing method and system with bit-mapped document editing
US5649216A (en) * 1991-05-17 1997-07-15 Joseph S. Sieber Method and apparatus for automated layout of text and graphic elements
US5721848A (en) * 1994-02-04 1998-02-24 Oracle Corporation Method and apparatus for building efficient and flexible geometry management widget classes
US5754873A (en) * 1995-06-01 1998-05-19 Adobe Systems, Inc. Method and apparatus for scaling a selected block of text to a preferred absolute text height and scaling the remainder of the text proportionately
US6125385A (en) * 1996-08-01 2000-09-26 Immersion Corporation Force feedback implementation in web pages
US5796401A (en) * 1996-08-09 1998-08-18 Winer; Peter W. System for designing dynamic layouts adaptable to various display screen sizes and resolutions
US6144974A (en) 1996-12-13 2000-11-07 Adobe Systems Incorporated Automated layout of content in a page framework
US6154757A (en) * 1997-01-29 2000-11-28 Krause; Philip R. Electronic text reading environment enhancement method and apparatus
US5973692A (en) * 1997-03-10 1999-10-26 Knowlton; Kenneth Charles System for the capture and indexing of graphical representations of files, information sources and the like

Also Published As

Publication number Publication date
EP1200934B1 (de) 2004-04-28
CA2380697A1 (en) 2001-02-08
ATE265721T1 (de) 2004-05-15
WO2001009835A1 (en) 2001-02-08
AU6359800A (en) 2001-02-19
US6473093B1 (en) 2002-10-29
DE60010272D1 (de) 2004-06-03
EP1200934A1 (de) 2002-05-02

Similar Documents

Publication Publication Date Title
DE60015359T2 (de) Graphische gegenstände deren ursprünge mit elastizitätwerten definiert sind
DE60010272T2 (de) Graphische objekte mit streck- und kompressionseigenschaften
DE69534331T2 (de) Verfahren und Vorrichtung zur Hervorhebung der Einzelheit einer Baumstruktur
DE69400230T2 (de) Objektorientiertes konstruktivflaechensystem
DE69312505T2 (de) Polygonaufrasterung
DE60310331T2 (de) Verfahren, Vorrichtung, Programm und Datenträger zur Bearbeitung von Bilddaten
EP1203349B1 (de) Graphische objekte mit minimaler und bevorzugter grösse
DE69831385T2 (de) Verfahren und Anordnung zum Mischen von graphischen Objekten mit Planarkarten
DE69830767T2 (de) Verfahren und Vorrichtung zum Zusammensetzen geschichteter synthetischer graphischer Filter
DE69017118T2 (de) Verfahren zur Steuerung der Konstruktion von veränderlichen Fenstern auf einem Anzeigebildschirm.
DE69025117T2 (de) Benutzer wählbares elektronisches Postverwaltungsverfahren
DE112019000687T5 (de) Fotorealistische dreidimensionale texturierung unter verwendung kanonischer ansichten und eines zweistufigen ansatzes
DE102016015156A1 (de) Optimieren eines Bildzuschnitts
DE19806985B4 (de) Organisationsverfahren für volumetrische Daten, das effiziente Cache-Aufbereitungsbeschleunigungen und einen effizienten Graphik-Hardwareentwurf ermöglicht
DE3022454A1 (de) Optisches abbildesystem mit computererzeugtem bild fuer einen bodenfesten flugsimulator
DE112006002366T5 (de) Zwei-dimensionale Grafik zum Darstellen auf drei-dimensionalen Objekten
CA2380734A1 (en) Using elastic values for graphical objects
DE102004004641A1 (de) Dreidimensionale Reprojektions- und Rückprojektionsverfahren und Algorithmen zum Durchführen derselben
DE102020007465A1 (de) Steuern bzw. Regeln eines neuronalen Netzwerkes durch zwischengeschaltete Latenträume
EP1536377A1 (de) Verfahren zur Veränderung der Abmessungen eines elektronisch gespeicherten Bildes
DE102022119422A1 (de) Verfahren zum Erzeugen einer hierarchischen Datenstruktur, hierarchische Datenstruktur sowie Verfahren zum Streamen von dreidimensionalen Objekten
DE69830766T2 (de) Verfahren und Vorrichtung zum Bestimmen des Anwendungsumfangs geschichteter synthetischer graphischer Filter
DE10017551C2 (de) Verfahren zur zyklischen, interaktiven Bildanalyse sowie Computersystem und Computerprogramm zur Ausführung des Verfahrens
DE60127801T2 (de) System und Methode zum Durchstöbern von knotenverbundenen Strukturen basierend auf einem geschätzten Interessegrad
DE68926952T2 (de) Verfahren zur Ausführung von interaktiven Bildverarbeitungsoperationen auf grossen Bildern

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
R082 Change of representative

Ref document number: 1200934

Country of ref document: EP

Representative=s name: SAMSON & PARTNER, PATENTANWAELTE, 80538 MUENCHEN,