domingo, 20 de diciembre de 2009

Fondos dinámicos en Ubuntu

La verdad es que yo ni estaba enterado de que en GNOME se puede tener fondos de pantalla que cambien automáticamente al estilo Windows 7, ahora me pregunto quién tuvo esta característica primero... no, ¿qué importa? XD

GNOME background selection

Todo empezó cuando fui a cambiar el fondo de mi escritorio GNOME y noté que uno estaba representado diferente al resto, tenía un botón de "play" abajo y parecía una pila de imágenes en vez de una única imagen. Me llamó mucho la atención, de entrada eso me sugirió que cambiaba automáticamente así que lo apliqué y resultó que sí, al cabo de unos minutos cambió a otra imagen. Por supuesto, yo quería saber cómo crear estas transiciones para poder elegir mis imágenes favoritas como ya lo hago en Windows 7 para que se alternen cada tanto tiempo.

Busqué en google, no demasiado al decir verdad, y encontré foros en los que se preguntaba cómo hacer estos fondos dinámicos, y obtuve una lista de programas con interfaz gráfica que lo hacen posible, pero eso no era lo que yo buscaba, yo quería saber cómo se hacían.

Fui al directorio que contiene los fondos por defecto que se instalan con Ubuntu y allí encontré el siguiente archivo que no era una imagen: /usr/share/backgrounds/cosmos/background-1.xml

Por suerte entender su contenido es bastante sencillo para alguien que conoce el formato xml. A continuación pongo un par de tags y las conclusiones que saqué de ellas:

<background>
    <starttime>
        <year>2009</year>
        <month>08</month>
        <day>04</day>
        <hour>00</hour>
        <minute>00</minute>
        <second>00</second>
    </starttime>
<!-- This animation will start at midnight. -->
    <static>
        <duration>1795.0</duration>
        <file>/usr/share/backgrounds/cosmos/cloud.jpg</file>
    </static>
    <transition>
        <duration>5.0</duration>
        <from>/usr/share/backgrounds/cosmos/cloud.jpg</from>
        <to>/usr/share/backgrounds/cosmos/comet.jpg</to>
    </transition>

background es la raiz del documento. Este archivo empieza con <background> y termina con </background>.

starttime también es interesante. starttime define a partir de qué momento en el tiempo empieza la animación. Si analizamos el comportamiento del escritorio al cambiar de fondo vemos que a veces apagamos la pc teniendo un fondo y al prenderlo tenemos otro, eso es porque el fondo que se muestra en tiempo presente depende de un cálculo que se hace a partir de starttime. Es decir, para fondos dinámicos, nuestro escritorio segmenta el tiempo y determina qué fondo toca ahora contando los segmentos a partir de la fecha y hora indicados en starttime. Gracias a starttime podemos lograr comportamientos muy curiosos de nuestro fondo dinámico, por ejemplo: que se vuelva dinámico a partir de navidad, pero que antes de navidad muestre siempre una misma imagen, o que muestre varias, pero que se reserve la de "Papá Noel" para el 25 de diciembre y que esa sea la única imagen mostrada ese día.

static significa la imagen que se mostrará y cuánto tiempo durará en pantalla. La etiqueta duration dentro de static determina cuantos segundos se mostrará la imagen. La etiqueta file (que es fácil de deducir) indica qué archivo de imagen se usará durante ese tiempo.

transition también es self-descriptive. Define una transición de una imagen a la siguiente. La etiqueta duration define cuánto durará la transición. La etiqueta from indica el archivo actual (todavía no sé qué ocurre si se especifica otro archivo que no sea el actual, me da pereza hacer el experimento, pero algún día lo haré) y la etiqueta to define la siguiente imagen que quedará como fondo de escritorio después de ocurrida la transición. La transición debería ser una especie de fadeout pero por alguna razón no siempre ocurre. La conclusión que saqué de esto es que si el escritorio está obstruído o parcialmente obstruído por una ventana el sistema piensa que hacer el fadeout no es necesario así que pasa directamente de una imagen a la siguiente. No sé si esto realmente es así, quizá la condición que se tiene que cumplir para ver el fadeout no es esa.

En el archivo background-1.xml vemos que desde la primer etiqueta static las etiquetas static y transition se repiten una después de la otra varias veces hasta el final del archivo. Con esto, deducir cómo crear nuestro propio fondo dinámico es muy sencillo. Pero tener que estar creando un archivo xml y agregando la ruta completa de cada imagen en gedit es cansino, así que hice un pequeño programa en Lazarus que lo hace por mi. Este programa pide que el usuario especifique un directorio, filtra el contenido del directorio dependiendo de la extensión de los archivos y luego los usa para generar un archivo xml que puede guardarse, por ejemplo, en /home/[tu_usuario]/Imágenes. Luego se hace clic derecho en algún lugar libre del escritorio y luego clic en cambiar fondo del escritorio. El directorio que nos muestra por defecto es /usr/share/backgrounds, por lo que nuestro fondo dinámico no aparecerá entre las opciones disponibles, deberemos hacer clic en el botón "Añadir" y luego, en el cuadro de diálogo que aparece, especificar el directorio donde guardamos nuestro archivo xml, y por último cambiar el filtro de tipo de archivos (es el botón que está abajo a la derecha, que dice "Imágenes") para que diga "Todos los archivos" de lo contrario no mostrará nuestro archivo xml aunque estemos en el directorio correcto.

gsldmaker-lazarus

Este es mi programa. Lo llamo gsldmaker (gnome slide maker).

0 comentarios:

Publicar un comentario