Changeset 70

Show
Ignore:
Timestamp:
10/16/07 21:32:39 (1 year ago)
Author:
inz
Message:

Add possibility to grab with delay.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • mh-shot-tool/trunk/debian/changelog

    r64 r70  
     1mh-shot-tool (0.0.2) mistral; urgency=low 
     2 
     3  * Add possibility to grab with delay. 
     4 
     5 -- Santtu Lakkala <inz@inz.fi>  Tue, 16 Oct 2007 21:32:10 +0300 
     6 
    17mh-shot-tool (0.0.1) mistral; urgency=low 
    28 
  • mh-shot-tool/trunk/shot.c

    r64 r70  
    394394} 
    395395 
     396struct GrabbedData { 
     397        GdkPixbuf *buf; 
     398        GtkWidget *image; 
     399        GtkWidget *window; 
     400        GtkWidget *spinner; 
     401}; 
     402 
     403static gboolean do_grab(struct GrabbedData *grab) 
     404{ 
     405        GdkPixbuf *thumb; 
     406        grab->buf = gdk_pixbuf_get_from_drawable(NULL, 
     407                                                 GDK_DRAWABLE(gdk_get_default_root_window()), 
     408                                                 gdk_colormap_get_system(), 
     409                                                 0, 0, 
     410                                                 0, 0, 
     411                                                 gdk_screen_width(), 
     412                                                 gdk_screen_height()); 
     413        thumb = gdk_pixbuf_scale_simple(grab->buf, 
     414                                        gdk_screen_width() / 4, 
     415                                        gdk_screen_height() / 4, 
     416                                        GDK_INTERP_BILINEAR); 
     417 
     418        gtk_image_set_from_pixbuf(GTK_IMAGE(grab->image), 
     419                             thumb); 
     420        g_object_unref(thumb); 
     421 
     422        gtk_widget_show_all(grab->window); 
     423 
     424        return FALSE; 
     425} 
     426 
     427static void _regrab(GtkWidget *button, struct GrabbedData *grab) 
     428{ 
     429        (void)button; 
     430 
     431        g_object_unref(grab->buf); 
     432        g_timeout_add(gtk_spin_button_get_value(GTK_SPIN_BUTTON(grab->spinner)) * 1000, 
     433                      (GSourceFunc)do_grab, 
     434                      grab); 
     435        gtk_widget_hide(grab->window); 
     436} 
     437 
    396438int main(int argc, char **argv) 
    397439{ 
    398         GtkWidget *window; 
    399         GtkWidget *image; 
     440        struct GrabbedData grab; 
    400441        GtkWidget *combo; 
    401         GdkPixbuf *buf; 
    402         GdkPixbuf *buf2; 
    403442        GtkWidget *vbox; 
    404443        GtkWidget *hbox; 
     
    415454                               FALSE, NULL); 
    416455#ifdef HILDON 
    417         window = hildon_window_new(); 
     456        grab.window = hildon_window_new(); 
    418457#else 
    419         window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
     458        grab.window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
    420459#endif 
    421         g_signal_connect(window, "delete-event", 
     460        g_signal_connect(grab.window, "delete-event", 
    422461                         G_CALLBACK(gtk_main_quit), NULL); 
    423         gtk_window_set_title(GTK_WINDOW(window), "Take screenshot"); 
     462        gtk_window_set_title(GTK_WINDOW(grab.window), "Take screenshot"); 
    424463        vbox = gtk_vbox_new(FALSE, 0); 
     464 
     465        grab.image = gtk_image_new(); 
     466        gtk_container_add(GTK_CONTAINER(vbox), grab.image); 
     467 
     468        hbox = gtk_hbox_new(FALSE, HILDON_MARGIN_DEFAULT); 
     469        button = gtk_button_new_with_label("Re-grab"); 
     470        g_signal_connect(button, "clicked", G_CALLBACK(_regrab), &grab); 
     471        gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); 
     472        gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("with"), FALSE, FALSE, 0); 
     473        grab.spinner = gtk_spin_button_new_with_range(0.0, 3600.0, 0.5); 
     474        gtk_spin_button_set_value(GTK_SPIN_BUTTON(grab.spinner), 5.0); 
     475        gtk_box_pack_start(GTK_BOX(hbox), grab.spinner, FALSE, FALSE, 0); 
     476        gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("second interval"), FALSE, FALSE, 0); 
     477        gtk_container_add(GTK_CONTAINER(vbox), hbox); 
     478         
    425479        hbox = gtk_hbox_new(FALSE, HILDON_MARGIN_DEFAULT); 
    426480        button = gtk_button_new_with_label("Ok"); 
     
    435489        gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); 
    436490                                              
    437         buf = gdk_pixbuf_get_from_drawable(NULL, 
    438                                            GDK_DRAWABLE(gdk_get_default_root_window()), 
    439                                            gdk_colormap_get_system(), 
    440                                            0, 0, 
    441                                            0, 0, 
    442                                            gdk_screen_width(), 
    443                                            gdk_screen_height()); 
    444         buf2 = gdk_pixbuf_scale_simple(buf, 
    445                                        gdk_screen_width() / 4, 
    446                                        gdk_screen_height() / 4, 
    447                                        GDK_INTERP_BILINEAR); 
    448  
    449         image = gtk_image_new_from_pixbuf(buf2); 
    450         g_object_unref(buf2); 
    451  
    452491        combo = gtk_combo_box_new_text(); 
    453492        for (i = 0; handlers[i].name; i++) { 
     
    457496        gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0); 
    458497 
    459         gtk_container_add(GTK_CONTAINER(vbox), image); 
    460498        gtk_container_add(GTK_CONTAINER(vbox), combo); 
    461499        gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); 
    462         gtk_container_add(GTK_CONTAINER(window), vbox); 
    463         gtk_widget_show_all(window); 
     500        gtk_container_add(GTK_CONTAINER(grab.window), vbox); 
     501 
     502        (void)do_grab(&grab); 
    464503 
    465504        gtk_main(); 
     
    468507        { 
    469508        case SHOT_RESPONSE_OK: 
    470                 handlers[gtk_combo_box_get_active(GTK_COMBO_BOX(combo))].save(buf, GTK_WINDOW(window), osso); 
     509                handlers[gtk_combo_box_get_active(GTK_COMBO_BOX(combo))].save(grab.buf, GTK_WINDOW(grab.window), osso); 
    471510                break; 
    472511        case SHOT_RESPONSE_CANCEL: 
     
    474513                break; 
    475514        } 
    476         g_object_unref(buf); 
     515        g_object_unref(grab.buf); 
    477516        osso_deinitialize(osso); 
    478517