QuickDraw GX fue un reemplazo para el motor de gráficos 2D QuickDraw (QD) y el Administrador de impresión dentro del Mac OS clásico . Su plataforma de dibujo subyacente era un sistema de modo retenido orientado a objetos independiente de la resolución , lo que facilitaba mucho a los programadores la realización de tareas comunes (en comparación con el QuickDraw original). Además, GX agregó varios comandos de dibujo de curvas que faltaban en QD, así como también introdujo TrueType como su sistema básico de fuentes.
Si bien GX ciertamente abordó muchos de los problemas que tenía QD, cuando estuvo disponible, la mayoría de los desarrolladores ya habían desarrollado sus propias soluciones a estos problemas de todos modos. GX también sufrió de causar una serie de incompatibilidades en los programas existentes, en particular aquellos que habían desarrollado sus propias extensiones QD. Esto, junto con la oposición de una fracción importante del mercado de desarrolladores, especialmente el propietario de PostScript Adobe, y la falta de comunicación de Apple sobre los beneficios de GX y por qué los usuarios deberían adoptarlo, llevaron a que la tecnología se dejara de lado.
QuickDraw GX vio poco desarrollo después de su lanzamiento inicial, y fue formalmente "mató" con la compra de NeXT y la eventual adopción del cuarzo modelo de imágenes en Mac OS X . Muchas de las características de sus componentes perduraron y ahora son estándar en la plataforma actual de Macintosh; TrueType GX en particular, con algunos ajustes, se ha convertido en un estándar moderno ampliamente utilizado en forma de fuentes variables OpenType .
Historia
Problemas con QuickDraw
A medida que avanzaban los años 80, las limitaciones arquitectónicas de QuickDraw comenzaron a imponer límites a los desarrolladores de Apple y de terceros. [1]
- Todas las estructuras de datos públicas de QuickDraw asumen un espacio de coordenadas enteras de 16 bits, sin previsión de coordenadas fraccionarias. [2]
- Agregar nuevas funciones a QuickDraw fue extremadamente difícil debido a la falta de ocultación de datos en la API. La estructura de datos central en QuickDraw era GrafPort, una estructura con todas las variables miembro expuestas. Peor aún, la estructura GrafPort fue diseñada para integrarse directamente en estructuras de datos de desarrolladores de terceros, por lo que Apple no pudo agregar nuevas variables. Color QuickDraw, introducido en 1987, fue un tremendo torpe sobre el QuickDraw original en blanco y negro. Esto aumentó la complejidad del desarrollo de aplicaciones de color para Mac. [2] Por ejemplo, QuickDraw no podía soportar fácilmente transformaciones gráficas avanzadas como rotaciones y cizallas, y era imposible introducir nuevos tipos de datos como curvas. [3]
Creando GX
GX parece haber comenzado de manera indirecta, originalmente como un sistema de fuentes de contorno que se agregaría al Mac OS. En el motor de representación de fuentes se incluyeron una serie de extensiones generalmente útiles, en particular un sistema de coordenadas de punto fijo y una variedad de comandos de dibujo de curvas. El sistema también incluyó un sistema para "envolver" las fuentes PostScript Type 1 existentes en su propio formato interno, que agregó versiones de vista previa de mapas de bits para una rápida representación en pantalla. Este proyecto asumió más tarde un papel ampliado cuando Apple y Microsoft acordaron trabajar juntos para formar una alternativa a las fuentes PostScript, que eran extremadamente caras, creando el esfuerzo TrueType basado en los esfuerzos existentes de Apple.
Otro proyecto, aparentemente sin relación al principio, intentó solucionar problemas con la conversión de QuickDraw a varios formatos de salida de impresora. Mientras que los desarrolladores se habían visto obligados anteriormente a escribir su propio código para convertir su visualización en pantalla QuickDraw a PostScript para imprimir, en la nueva arquitectura de impresora, el sistema operativo proporcionaría tales conversiones. Además, el nuevo sistema se diseñó deliberadamente para ser lo más flexible posible, y admitir no solo impresoras QD y PS, sino también potencialmente otros estándares como el PCL de Hewlett Packard . El sistema también admitía "impresoras de escritorio" (impresoras que aparecían como íconos en el escritorio del usuario), una característica largamente buscada que faltaba en QD, y agregó cuadros de diálogo y controles de impresión mejorados.
No está claro cuándo se fusionaron los proyectos, pero este era un tema común en Apple en ese momento. Los mandos intermedios estuvieron involucrados en una intensa guerra territorial durante gran parte de la década de 1980 y principios de la de 1990, reuniendo proyectos en "superproyectos" que contenían suficiente código importante para hacerlos "imposibles de matar". Lamentablemente, esto a menudo retrasó dramáticamente los proyectos; un componente que se retrasaba obligaba a retrasar toda la colección para poder publicarla "completa". QuickDraw GX fue una de esas víctimas, y los retrasos y cambios de dirección en TrueType y otros problemas retrasaron enormemente la introducción de GX.
Las discusiones sobre la tecnología GX comenzaron a aparecer en varias revistas comerciales alrededor de 1992, en particular, el desarrollo de Apple . En el momento en que pareció que la liberación era inminente, tal vez a fines de 1992 o principios de 1993.
Liberación y uso
GX se lanzó inicialmente alrededor de enero de 1994, como un paquete separado. La versión 1.1.1 se incluyó con System 7.5 ese mismo año. El sistema fue recibido con un ruido sordo. El paquete era lo suficientemente grande como para agotar la memoria de la mayoría de las computadoras Macintosh existentes en la época, y argumentos como "ahora puede imprimir en PostScript" fueron menos que impresionantes considerando que muchos programas existentes ya habían agregado dicho soporte. Los usuarios y desarrolladores generalmente ignoraron GX, y un "mercado" para el sistema simplemente nunca apareció.
No parece haber una sola razón para la falla de GX en el mercado, pero ciertamente varias de ellas conspiraron para disminuir su atractivo. Por un lado, GX era muy grande y por sí solo requería tanta memoria como el resto del sistema operativo. [4] La velocidad también fue un problema, limitándola a ejecutarse solo en Mac con un Motorola 68020 o mejor. Dado que la base de Mac instalada en ese momento todavía contenía una gran cantidad de máquinas basadas en 68000 como Mac Plus , estos requisitos restringían la cantidad de máquinas en las que podía ejecutarse. Cuando se lanzó por primera vez, una revisión señaló que "QuickDraw GX no es para todos y requiere más RAM de la que tienen muchas Mac". [5]
Además, la API del sistema era muy grande y llenaba varios libros. Implementar un programa GX no fue tarea fácil, aunque se suponía que el desarrollo sería mucho más fácil. Este no era un problema de la arquitectura GX en sí, sino un efecto secundario de la naturaleza "todo incluido" del sistema, un problema que padecían la mayoría de los productos Apple de la época (ver PowerTalk, por ejemplo). Como resultado, el atractivo de los desarrolladores fue limitado; se requeriría mucho esfuerzo para usar el sistema en programas, y la aplicación resultante solo podría ejecutarse en un subconjunto de la base instalada, y mucho menos en el próximo Windows 95 , que estaba entonces en medio de un bombardeo de medios sin precedentes. El número de programas basados en GX (a diferencia de los compatibles con GX ) podría contarse con una mano, un ejemplo de Pixar Typestry . [6]
Además, el cambio en los sistemas de impresión presentó serios problemas del mundo real. Si bien la impresión PostScript nunca había sido fácil, a lo largo de los años desde el lanzamiento del LaserWriter original, los desarrolladores habían creado una biblioteca de soluciones a problemas comunes. Con el cambio de arquitectura para GX, la mayoría de estos dejaron de funcionar. También se necesitaban nuevos "controladores GX" para las impresoras, y Apple no proporcionó controladores para todas sus propias impresoras, y mucho menos para las de terceros. Los problemas de impresión eran endémicos y tan difíciles de solucionar que los usuarios a menudo abandonaban el sistema por frustración.
La aceptación por parte de los usuarios de GX fue muy cercana a cero, como fue el caso de la mayoría de las nuevas tecnologías que Apple lanzó a principios de la década de 1990. Es posible que haya tenido un uso generalizado como parte del proyecto Copland , pero Copland nunca se lanzó. Aunque Apple continuó afirmando que GX era el futuro de los gráficos en Mac, en 1995 estaba claro que ya no lo estaban "presionando", frustrando a sus seguidores.
Mac OS 8 abandonó el soporte para la arquitectura de impresión GX, aunque sobrevivieron las arquitecturas de administración de texto y administración de color. Los elementos de la arquitectura de gestión de texto pasaron a formar parte de la especificación TrueType y los elementos de la arquitectura de gestión del color pasaron a formar parte de la especificación del International Color Consortium . Con el advenimiento de Mac OS X, partes de GX viven en Apple Type Services for Unicode Imaging (ATSUI) y en ColorSync , cuyo formato de archivo es idéntico al formato original desarrollado para GX.
Descripción
Gráficos
QuickDraw GX se basa en un modelo orientado a objetos en el que los objetos gráficos conocen y son responsables de su propio estado. A diferencia de QuickDraw, no existe un "estado" universal, cada comando de dibujo puede reconstruir el estado a partir de los datos almacenados en él o de varios objetos "principales". Por ejemplo, un programador podría construir un redBox
objeto que primero establezca el color rojo y luego dibuje un cuadrado. A partir de ese momento, el programa ya no tiene que establecer explícitamente el color antes de dibujar, el propio sistema GX siempre establecerá correctamente el color de dibujo cuando se le pida que dibuje a redBox
, y lo restablecerá cuando termine. Dado que este estado era privado y se enviaba a GX si era necesario, GX teóricamente permitía que Mac OS admitiera memoria protegida, ya que el estado ya no se compartía directamente entre los programas y el sistema de gráficos.
Esto contrasta fuertemente con el QuickDraw original, donde el programador era responsable de todos los cambios de estado. Por ejemplo, si se dibujara un cuadro rojo y luego una serie de líneas, las líneas también aparecerían en rojo a menos que el programador cambiara explícitamente el color primero. La ventaja de este enfoque es que minimiza el número de comandos necesarios para establecer el estado; el programador puede organizar el dibujo para dibujar grupos de objetos de estilo similar al mismo tiempo y así ahorrar tiempo. La desventaja de este enfoque es que es fácil "olvidar" el cambio de estado y terminar causando problemas, tan fácil que los programadores a menudo guardaban y restauraban el estado completo antes de cada comando de dibujo, lo que podría reducir el rendimiento.
El estado de dibujo bajo GX era jerárquico. Se creó un modo de dibujo predeterminado con cada ventana, como estaba en QD, y los objetos de dibujo sin otros cambios de estado utilizarían estos valores predeterminados. El programador podría entonces cambiar el estado de los objetos mismos, como en nuestro redBox
ejemplo, o cambiar alternativamente el estado de todos los dibujos estableciendo el estado en el objeto de ventana. Los objetos GX se pueden recopilar fácilmente en grupos, en sí mismos objetos, lo que permite establecer el estado de un objeto complejo completo.
Una parte del estado general del dibujo fue el gxMapping
. Esta era una matriz de 3 por 3 que podía expresar transformaciones lineales arbitrarias en dos dimensiones, incluidas las distorsiones de perspectiva . Todos los objetos GX tenían un mapeo asociado como parte de su estado de dibujo, lo que permitía cosas como rotaciones y traslaciones. Aunque todo este estado se mantuvo en el gxMapping
para ese objeto, GX también proporcionó comandos "envoltorios" como "rotar" para facilitar el uso de la API .
A diferencia de QuickDraw, QuickDraw GX permitió coordenadas fraccionarias. Sin embargo, estos eran valores de punto fijo , en lugar de punto flotante . En el momento en que se desarrolló GX (finales de la década de 1980 hasta principios de la de 1990), todavía existía una penalización significativa en el rendimiento al usar aritmética de punto flotante.
La arquitectura de gráficos GX se construyó en torno a una serie de tipos de objetos prefabricados, aunque había disponible un conjunto completo de llamadas API para examinarlos y manipularlos:
- un gxShape define la geometría básica de una forma (por ejemplo, las coordenadas de los puntos de control de una curva o el contenido de texto de un objeto de texto).
- un gxStyle definió elaboraciones de la geometría de forma básica, como el grosor de línea, estilos de tapa y unión, patrón de relleno y fuente de texto.
- a gxInk especificaba cómo se calcularían los valores de los píxeles al renderizar la forma: además de especificar un color básico para la forma, esto también incluía una estructura de modo de transferencia elaborada que podía definir una amplia variedad de funciones del valor de píxel de destino inicial y final.
- un gxFont representaba una fuente, ya sea una instalada para uso en todo el sistema, o una instalada sobre la marcha por la aplicación actual para su propio uso. Las llamadas a la API permitieron la interrogación de las propiedades de una fuente, incluida la determinación de qué codificaciones (Unicode, específicas del idioma, etc.) podría admitir.
- un gxProfile era una representación de un perfil de color ColorSync, utilizado como parte de la especificación de un color para dibujar. GX integró soporte completo para la coincidencia de colores en todas las etapas del proceso de dibujo, así como soporte para especificaciones de color que no sean RGB (como HSV , YUV y CIE XYZ).
- a gxTransform determinó la relación entre la forma y el dispositivo de visualización. Además del trazado de recorte y el gxMapping que transformó la forma antes de mostrarse en el dispositivo de salida, este objeto también especificó información de prueba de aciertos que controlaba las respuestas a los clics del usuario dentro del área de la forma.
- un gxViewDevice representaba un bloque de memoria de píxeles en el que se representaría el dibujo. Esto podría ser una visualización en pantalla real o un bloque de memoria fuera de la pantalla. GX admitió todos los diseños de píxeles de QuickDraw ; esto permitió que tanto un dispositivo de visualización GX como un QuickDraw GrafPort apuntasen a los mismos píxeles, permitiendo así que las aplicaciones mezclaran ambos conjuntos de llamadas de dibujo.
- un gxViewPort era un destino lógico para dibujar. Un gxTransform podría especificar una lista de más de uno de estos; la forma se dibujaría en todos ellos en una sola
GXDrawShape
llamada. - un gxViewGroup representaba la conexión entre los dispositivos de visualización y los puertos de visualización. Cada puerto de vista tenía un gxMapping que especificaba su relación con el sistema de coordenadas global del grupo de vista; y cada dispositivo de vista tenía un gxMapping que especificaba su ubicación y el tamaño de sus píxeles con respecto a las coordenadas del grupo de vista. Había un único grupo de vistas predefinido que contenía todos los dispositivos de visualización en pantalla (y cuyos puertos de visualización correspondían efectivamente a las ventanas en pantalla); las aplicaciones eran libres de crear sus propios grupos de vistas para dispositivos de visualización fuera de la pantalla y puertos de visualización.
- un gxTag permitía adjuntar información arbitraria definida por la aplicación a la mayoría de los tipos de objetos anteriores. Cada etiqueta tenía un código de tipo OSType , pero podría haber varias etiquetas del mismo tipo adjuntas al mismo objeto.
Tipos de formas
Las formas GX pueden ser de varios tipos:
- una línea recta definida por sus puntos finales.
- un rectángulo definido por sus límites izquierdo, derecho, superior e inferior.
- un polígono definido por una secuencia de coordenadas de vértice.
- una forma de curva era una única curva de Bézier cuadrática definida por tres puntos de control.
- una forma de camino que era una secuencia de curvas cuadráticas de Bézier . Cada punto de control tenía una bandera asociada que indicaba si estaba "dentro de la curva" o "fuera de la curva". Un punto dentro de la curva era un punto final Bézier, mientras que un punto fuera de la curva era un punto medio Bézier. Si se encontraban dos puntos fuera de curva sucesivos, se suponía que un punto implícito dentro de la curva se encontraba a mitad de camino entre ellos. Dos puntos sucesivos en la curva definieron un segmento en línea recta.
- una forma de mapa de bits contenía datos ráster en cualquiera de los formatos de píxeles admitidos.
- una forma de imagen era una agrupación de otras formas (posiblemente incluidas formas de imagen recursivas), con la opción de especificar transformaciones adicionales que se aplicaban a todo el grupo.
- los diversos tipos de formas tipográficas se describen en la sección Tipografía GX a continuación.
- tipos adicionales que tal vez no fueran directamente útiles para dibujar, pero que podrían combinarse con otras formas en los cálculos de geometría: la forma vacía (cuyo dibujo no hizo nada); la forma del punto que consiste en un solo punto; y la forma completa (de extensión infinita).
Tipografía
Las características tipográficas de GX se integraron en forma de 3 tipos de gxShape:
- Las formas de texto eran las más simples: contenían una sola ejecución de texto representado en un solo estilo de fuente.
- Las formas de glifos eran una forma de utilizar formas de caracteres (" glifos ") como geometría pura, por ejemplo, como trazados de recorte .
- Las formas de distribución eran las más elaboradas. Estos se pueden dividir en varias ejecuciones con diferentes estilos de fuente, incluso diferentes codificaciones de idioma y direcciones de texto. Por lo tanto, fue posible incrustar una secuencia de texto árabe, de derecha a izquierda, dentro de una secuencia externa de texto romano de izquierda a derecha. Las formas de diseño liberaron todo el poder de las sustituciones contextuales, el kerning, las variaciones y todas las demás capacidades de las fuentes TrueType GX. Su principal restricción era que estaban confinados a una sola línea de texto.
La API de GX también proporcionó funciones de prueba de aciertos, de modo que, por ejemplo, si el usuario hacía clic en una forma de diseño en medio de una ligadura , o en la región entre un cambio de dirección del texto, GX en sí mismo proporcionaría la inteligencia para determinar qué carácter la posición en el texto original correspondía al clic.
TrueType GX
Se trazó una distinción importante en GX entre un carácter y un glifo , una distinción que también se encuentra en el estándar Unicode. Un carácter era un símbolo abstracto del conjunto de caracteres de un sistema de escritura, como la letra "f" en los sistemas de escritura del alfabeto latino. Mientras que un glifo era una forma gráfica específica de una fuente en particular, ya sea que la forma representara un solo carácter o un conjunto de caracteres. Así, por ejemplo, la fuente Hoefler Text tenía glifos para representar las letras "f" y "l". También tenía otro glifo para representar la ligadura "fl", que podía componerse automáticamente (en lugar de los glifos individuales) siempre que los dos caracteres abstractos "f" y "l" aparecieran en secuencia en el texto fuente.
Esta distinción fue importante porque tales sustituciones contextuales ocurrieron en el momento de la renderización, sin ningún cambio en la cadena de caracteres de origen. Por lo tanto, no tuvieron ningún impacto en la edición o búsqueda del texto. Los archivos de fuentes PostScript Tipo 1 solo tienen mapeo uno a uno, y como las ligaduras son mapeos de muchos a uno, no se pueden insertar en la composición sin cambiar la cadena de caracteres de origen, por ejemplo, la ligadura ffi se coloca en la posición de la Y mayúscula en los productos de fuentes de Adobe, y "Oficinas de Adobe" se compone escribiendo "Adobe O"
Las sustituciones contextuales se pueden controlar habilitando o deshabilitando las opciones de composición de una fuente TrueType GX en WorldText en el CD de Mac OS 9 o en TextEdit en Mac OS X. Las fuentes comúnmente tienen características llamadas "ligaduras comunes" (como el ejemplo "fl" ), "ligaduras raras" (como las ligaduras ME y MD con inscripción), "s arcaicas no terminales" (para sustituir automáticamente la letra "s" por la forma arcaica que se parecía más a una "f", excepto en los extremos de palabras), e incluso opciones entre conjuntos de diseños de glifos completamente separados, como formas más y menos ornamentadas.
Las reglas para realizar sustituciones contextuales se implementan como máquinas de estado integradas en la fuente e interpretadas por LLM Line Layout Manager, la contraparte del módulo de gestión de color CMM para servicios ColorSync. La administración de texto en el sistema operativo permitió a QuickDraw GX aceptar cadenas de caracteres con cualquier combinación de sistemas de escritura y scripts, y componer las cadenas automáticamente, ya sea que la codificación fuera Unicode 1.0 o codificaciones de 8 bits y 8/16 bits.
Otra característica interesante fueron las "variaciones" de fuentes, que eran el equivalente GX de las fuentes " maestras múltiples " de Adobe . Mientras que las fuentes de Adobe requerían que el usuario creara explícitamente una "instancia" de la fuente especificando valores para los ejes de variación antes de poder usarla, GX le permitió al usuario especificar la fuente directamente para un estilo de diseño y luego variar dinámicamente los valores de los ejes y observe inmediatamente el efecto en el diseño del texto.
Esta tecnología se convirtió en el núcleo de lo que Microsoft y Adobe adoptarían en 2016, con su desarrollo de fuentes variables OpenType .
Desarrolladores
- Cary Clark fue el arquitecto y líder técnico. Había trabajado en Color QuickDraw y se convirtió en uno de los primeros miembros de Rocket Science Games y WebTV.
- Tom Dowdy
- Michael Fairman
- Keith McGreggor era el gerente del grupo de gráficos. Fue el desarrollador principal de la arquitectura de color para QuickDraw GX.
- David Van Brink
- Robert Johnson fue el matemático residente de QuickDraw GX.
- Chris Yerga
- Oliver Steele
- Dave bueno
- Pablo Fernicola
TrueType GX:
- Dave G. Opstad fue el arquitecto del motor de tipografía y las tablas de modelado en las fuentes de Apple. Luego se convirtió en líder tecnológico en Monotype Imaging.
- Eric Mader
- Sampo Kaasila
- Mike Reed
- Arlo
Referencias
- ↑ Engst, Tonya (12 de septiembre de 1994). "TidBITS: Primer práctico preliminar para QuickDraw GX, Parte I" . Db.tidbits.com . Consultado el 9 de noviembre de 2009 .
- ^ a b "Legado: referencia de QuickDraw" . Developer.apple.com . Consultado el 9 de noviembre de 2009 .
- ^ Xplain Corporation (6 de diciembre de 2004). "Septiembre 93 - QUICKDRAW GX PARA PROGRAMADORES POSTSCRIPT" . Mactech.com . Consultado el 9 de noviembre de 2009 .
- ^ "Computerworld 12 de diciembre de 1994" .
- ^ "TidBITS # 243/12-Sep-94" . Tidbits.com . Consultado el 9 de noviembre de 2009 .
- ^ Jim Feeley, "Nueva vida para QuickDraw GX", Macworld, julio de 1995, página 119
enlaces externos
- QuickDraw GX : documentación de Apple GX en la web