Publi

Representar imágenes a pantalla completa con GTK+ en C (y romperles la pantalla del portátil)

crackedscreen1440x900

Aunque muchos de mis proyectos con GTK+ son en C++, cuando es algo pequeño, es más corto hacerlo en C (aunque una vez que te acostumbras a los objetos, es poco intuitivo).

Lo que vamos a hacer es crear una ventana, introducir una imagen dentro redimensionada para ocupar la pantalla y poner la ventana a pantalla completa (ojo, no en todos los window managers funciona, pero en casi todos). Al final, lo que conseguimos es poner de fondo la imagen que ilustra el post en cualquier pantalla de portátil para conseguir dar un susto al dueño.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <gtk/gtk.h>

int main(int argc, char **argv)
{
  GtkWindow *window;
  GdkPixbuf *pixbuf;
  GtkWidget *picture;
  GdkScreen *screen;

  gtk_init(&argc, &argv);

  /* Creamos una ventana en el nivel superior */
  window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
  /* Obtenemos la información de pantalla */
  screen = gtk_window_get_screen(window);
  /* Cargamos la imagen */
  pixbuf = gdk_pixbuf_new_from_file_at_scale("CrackedScreen1440x900.jpg", /* nombre de fichero */
                         gdk_screen_get_width(screen), /* ancho de la pantalla */
                         gdk_screen_get_height(screen), /* alto de la pantalla */
                         FALSE, /* No respetar aspecto */
                         NULL);

  /* Cuando cerremos la ventana, salimos de la aplicación */
  gtk_signal_connect (GTK_OBJECT (window), "destroy",
              GTK_SIGNAL_FUNC (gtk_main_quit), NULL);

  /* Metemos la imagen dentro de la ventana */
  picture=gtk_image_new_from_pixbuf(pixbuf);
  gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(picture));

  /* Mostramos todo */
  gtk_widget_show_all(GTK_WIDGET(window));

  /* Hacemos pantalla completa */
  gtk_window_fullscreen(window);

  /* Comenzamos */
  gtk_main();

  return 0;
}

Es importante ver cómo obtenemos los parámetros de la pantalla: una vez tenemos la ventana, podemos obtener la pantalla (screen) donde se encuentra, con ese elemento podemos acceder a sus dimensiones y pasárselas a la función de carga de la imagen para que la redimensione con esas características.
Al final, cuando tenemos todo preparado llamamos a gtk_window_fullscreen() pasándole la ventana actual. Si usáis GTKmm el método es Gdk::Window::fullscreen()

También es importante que, aunque sea para una tontería como esta, se capture la señal “destroy” ya que aunque se cierre la ventana, el programa seguirá en ejecución de forma indefinida, y no queremos eso.

Para compilar el ejemplo directamente:

$ gcc -o fsfoto fsfoto.c `pkg-config –cflags gtk+-2.0` `pkg-config –libs gtk+-2.0`

También podría interesarte...

There are 4 comments left Ir a comentario

  1. Pingback: Bitacoras.com /

  2. Pingback: BlogESfera.com /

  3. Trojan Solutions /
    Usando Mozilla Firefox Mozilla Firefox 14.0.1 en Windows Windows 7

    ¡Genial! Gracias por el aporte. Trabajo para una la empresa informática Barcelona haciendo mantenimiento informatico Barcelona y tus post me ayudan a tener un recreo del trabajo y sin embargo, seguir haciendo lo que me gusta. Gracias.

    1. Gaspar Fernández / Post Author
      Usando Mozilla Firefox Mozilla Firefox 13.0.1 en Ubuntu Linux Ubuntu Linux

      Muchas gracias!! Comentarios como el tuyo me animan bastante a seguir !

Leave a Reply