Hello,

More data ;-)

Thanks for the test case,
Kind regard
Sylvain Le Gall

On Sat, Aug 19, 2006 at 05:17:37PM +0200, A Mennucc wrote:
> Package: unison-gtk
> Version: 2.13.16-5
> Followup-For: Bug #318132
> 
> hi
> 
> here in attachment is a file that is triggering the bug for me
> 
> this file had only "props" changed , but I hit "diff" anyway, and 
> this triggered the bug
> 
> a.
> 
> 
> -- System Information:
> Debian Release: testing/unstable
>   APT prefers testing
>   APT policy: (500, 'testing')
> Architecture: i386 (i686)
> Shell:  /bin/sh linked to /bin/bash
> Kernel: Linux 2.6.16-1-k7
> Locale: LANG=it_IT.UTF-8, LC_CTYPE=it_IT.UTF-8 (charmap=UTF-8)
> 
> Versions of packages unison-gtk depends on:
> ii  libatk1.0-0                  1.12.1-1    The ATK accessibility toolkit
> ii  libc6                        2.3.6-16    GNU C Library: Shared libraries
> ii  libcairo2                    1.2.2-1     The Cairo 2D vector graphics 
> libra
> ii  libfontconfig1               2.3.2-7     generic font configuration 
> library
> ii  libglib2.0-0                 2.10.3-3    The GLib library of C routines
> ii  libgtk2.0-0                  2.8.18-1    The GTK+ graphical user 
> interface 
> ii  libpango1.0-0                1.12.3-1+b1 Layout and rendering of 
> internatio
> ii  libx11-6                     2:1.0.0-8   X11 client-side library
> ii  libxcursor1                  1.1.5.2-5   X cursor management library
> ii  libxext6                     1:1.0.0-4   X11 miscellaneous extension 
> librar
> ii  libxi6                       1:1.0.0-5   X11 Input extension library
> ii  libxinerama1                 1:1.0.1-4   X11 Xinerama extension library
> ii  libxrandr2                   2:1.1.0.2-4 X11 RandR extension library
> ii  libxrender1                  1:0.9.0.2-4 X Rendering Extension client 
> libra
> 
> Versions of packages unison-gtk recommends:
> ii  openssh-client [ssh-client]   1:4.3p2-3  Secure shell client, an 
> rlogin/rsh
> ii  ssh-askpass-gnome [ssh-askpas 1:4.3p2-3  under X, asks user for a 
> passphras
> 
> -- no debconf information
> 
> -- 
> Andrea Mennucc
>  "E' un mondo difficile. Che vita intensa!" (Tonino Carotone)

> #include "stdio.h"
> #include <string.h> //strlen
> 
> #ifdef HAVE_CONFIG_H
> #  include <config.h>
> #endif
> 
> #include <gtk/gtk.h>
> 
> #ifdef USE_IMLIB
> #include <gdk_imlib.h>
> #else
> #include <gdk-pixbuf/gdk-pixbuf.h>
> #endif
> 
> 
> 
> #include "gtk-meta.h"
> 
> #include <math.h>
> 
> #include "gtktopdata.h"
> #include "gtk_subimagesel.h"
> #include "main.h"
> 
> #include "callbacks.h"
> #include "interface.h"
> #include "guide.h"
> #include "support.h"
> //#include "pixmaps.h"
> 
> #ifndef IS_PLYMORPH
> #include "mesh-gtk.h"
> #include "utils.h"
> #include "feature.h"
> #include "../libmorph/relax.h"
> #endif
> 
> #include "mag.h"
> #include "fourier.hh"
> #include "dialogs.h"
> #include "callbacks_fs.h"
> 
> #include "loadsave.h"
> 
> #ifndef IS_PLYMORPH
> #include "loadsave_mesh.h"
> #else
> #include "loadsave_ply.h"
> #endif
> 
> #include "callbacks_subimg.h" //redraw_spins
> 
> /* some code was taken from the gtk-tutorial , the "scribble" example */
> 
> 
> /*******************************************************************
> ******************************************************************
> 
>                     main window 
> 
> **********************************************************************
> **********************************************************************
> 
> */
> 
> 
> 
> 
> 
> gboolean
> on_window_main_delete                  (GtkWidget       *widget,
>                                         GdkEvent        *event,
>                                         gpointer         user_data)
> {
>   if(guide_callback("delete_event",MAIN_WIN)) {
>     gtk_widget_hide(widget);  
>     return TRUE;
>   }
>   else
>     {
>       on_quit1_activate(NULL,NULL);
>       return TRUE;
>     }
> }
> 
> 
> void 
> on_quit1_activate                      (GtkMenuItem     *menuitem,
>                                       gpointer         user_data) 
> { 
>   int lp; char s[MAX_WINS*5+10];
>   s[0]=0;
>   /* FIXME < or <= ?? */
>   for(lp=1;lp<=MAX_WINS; lp++) {
>     if(   sp->im_widget[lp] && 
> #ifdef IS_PLYMORPH
>         sp->im_ply_labels_unsaved[lp]
> #else
>         sp->im_mesh[lp].changed>0
> #endif
>         ) {
>       int l=strlen(s); sprintf(s+l," %d",lp);
>     }
>   }
>   if ( s[0]) {
>     GtkWidget *q=create_question(), *b;
>     char *z=g_strdup_printf
>       (_("the mesh(es) %s were not saved! do you want to exit anyway?"),s);
>     //gtk_window_set_title(GTK_WINDOW(q),z);
>     
>     gtk_widget_show(q);
>     b=lookup_widget(q,"yes");
>     gtk_signal_connect (GTK_OBJECT (b), "clicked",
>                       GTK_SIGNAL_FUNC (gtk_main_quit),
>                       NULL);
>     b=lookup_widget(q,"no");
>     gtk_signal_connect (GTK_OBJECT (b), "clicked",
>                       GTK_SIGNAL_FUNC (gtk_widget_destroy),
>                       q);
>     b=lookup_widget(q,"questionlabel"); 
>     gtk_label_set_text(GTK_LABEL(b),z);
> 
>     g_free(z);
>   }
>   else
>     gtk_main_quit();
> }
> 
> 
> 
> 
> void
> on_resulting_image_size_activate       (GtkMenuItem     *menuitem,
>                                         gpointer         user_data)
> {
>   GtkWidget* hb= lookup_widget  ( sp->im_widget[MAIN_WIN]  ,
>                                 "handlebox_res_size");
>   g_assert(hb);
>   gtk_widget_show(hb);
> }
> 
> 
> void
> on_show_morph_factors_activate         (GtkMenuItem     *menuitem,
>                                         gpointer         user_data)
> {
>     int lp;
>   for(lp=1 ; lp <= MAX_WINS;  lp ++)
>     if(sp->im_widget[lp] != NULL) {      
>       //set_editview(lp,EDITVIEW_SHOWMESHES );
>       setup_handlebox_factor(lp,TRUE);
>     }
> }
> 
> 
> 
> //void
> //on_logtext_realize                     (GtkWidget       *widget,
> //                                        gpointer         user_data)
> //{
> //
> //}
> 
> 
> 
> /*
>   main menus callbacks 
> 
>  */
> #include <time.h>
> 
> gchar *session_name=NULL;
> void
> on_load_session_activate               (GtkMenuItem     *menuitem,
>                                         gpointer         user_data)
> {
>   fileselection_hook=load_session;
>   fileselection1_for_image_num_g=MAIN_WIN;
>   show_fs(//GTK_WIDGET(menuitem), 
>         _("load session") 
> #if GTK_MAJOR_VERSION >= 2
>         , GTK_FILE_CHOOSER_ACTION_OPEN
> #endif
>         );
>   if(session_name)
>     gtk_file_selection_set_filename ((fileselection_g),session_name);
> }
> 
> 
> void
> on_save_session_activate               (GtkMenuItem     *menuitem,
>                                         gpointer         user_data)
> {  
>   fileselection_hook=save_session;
>   fileselection1_for_image_num_g=MAIN_WIN;
>   show_fs(//GTK_WIDGET(menuitem),
>         _("save session") 
> #if GTK_MAJOR_VERSION >= 2
>         , GTK_FILE_CHOOSER_ACTION_SAVE
> #endif
>         );
>   if(!session_name){
> #if GLIB_MAJOR_VERSION == 1 
>     session_name=g_strdup_printf("gtkmorph.session");
> #else
>     GDate D;
>     g_date_set_time (&D, time (NULL));
>     session_name=g_strdup_printf("%d-%02d-%02d.session",
>                                g_date_get_year (&D),g_date_get_month (&D),
>                                g_date_get_day (&D));
> #endif
>   }
>   gtk_file_selection_set_filename ((fileselection_g),session_name);
> }
> 
> 
> 
> void
> on_add_an_image_activate               (GtkMenuItem     *menuitem,
>                                         gpointer         user_data)
> {
>     int lp;
>     for(lp=1 ; lp <= MAX_WINS;  lp ++)
>       if(sp->im_widget[lp] == NULL)
>       {
>         /* we set this before, 
>            otherwise the "factor_normalize" goes berseker */
>         sp->max_wins++;
> 
>         create_and_show_image_win(lp);        
>         setup_handlebox_factor(lp,FALSE);
>         return; 
>       }
> }
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> void
> on_view_images1_activate               (GtkMenuItem     *menuitem,
>                                         gpointer         user_data)
> {
>   int lp;
>   for(lp=1 ; lp <= MAIN_WIN ; lp ++)
>     {
>       if(sp->im_widget[lp] != NULL)
>       gtk_widget_show (sp->im_widget[lp]);
>     }
> }
> 
> 
> 
> double
> tot_mixing_factors()
> {
>   double  totdiss;
>   int lp;
>   totdiss=0;
>   for ( lp =1; lp <= MAX_WINS; lp++)
>     if(sp->im_widget[lp] != NULL)
>       totdiss += sp->mf.im_dissolve_factor[lp];
>   // FIXME this is not shown
>   sp->mf.im_dissolve_factor[MAIN_WIN]=totdiss; 
>   
>   return totdiss;
> }
> 
> double
> tot_mixing_factors_nice()
> {
>   double totdiss=tot_mixing_factors();
>   int lp;
>   if ( ABS(totdiss) < 0.001)
>     {
>       show_warning( _("\
> to blend the images, the sum of the all `image mixing factors' must be 
> nonzero\
> \nI have put default values for you"));
>       
>       for ( lp =1; lp <= MAX_WINS; lp++)
>       if(sp->im_widget[lp] != NULL) {
>         sp->mf.im_dissolve_factor[lp]=1.0/(double)sp->max_wins;
>         //gtk_widget_get_data_top(sp->im_widget[lp],"imagenum")
>       }
>       totdiss =1;
>       redraw_spins(-3);
>     }
>   return totdiss;
> }
> 
> 
> /********************************
> does the actual morphing 
> ********************************/
> 
> #define PRINT_MORPH_TIME
> 
> void
> on_morph_images1_activate              (GtkMenuItem     *menuitem,
>                                         gpointer         user_data)
> {
>   int lp;
>   //double  totdiss=tot_mixing_factors_nice();
> 
> #ifdef PRINT_MORPH_TIME
>   GTimeVal bef,aft;
>   g_get_current_time(&bef);
> #endif
> 
>   if( sp->max_wins<=1)
>     {
>       show_error( _("\
> to morph, you must have at least two input images"));
>       return;
>     }
> 
>   on_interpolate_meshes1_activate (NULL,NULL);
> 
> 
>   for ( lp =1; lp <= MAX_WINS; lp++)
>     if(sp->im_widget[lp] != NULL
> #ifndef IS_PLYMORPH  
>        && !sp->im_widget_is_difference_mesh[lp]
> #endif
>        )
>       {
> #ifdef IS_PLYMORPH   
>       extern int reference_ply_surface_n;
>       g_return_if_fail(reference_ply_surface_n>0);
>       if( lp !=  reference_ply_surface_n && 
> ABS(sp->mf.im_dissolve_factor[lp]) < 0.001 )      
> #else
>       if(ABS(sp->mf.im_dissolve_factor[lp]) < 0.001 )      
> #endif
>         g_message("NOT morphing image %d to resultin mesh", lp);
>       else
>         {
>           g_message("warping image %d to resulting mesh", lp);
>           //      do_warp_an_image_old(lp,r,g,b);
>           do_warp_an_image_new(lp);
>         }
>       }
> 
>   on_do_mixing_clicked(NULL,NULL);
> #ifdef PRINT_MORPH_TIME
>   g_get_current_time(&aft);
>   g_message("morph time %.2f",(double)(aft.tv_sec-bef.tv_sec) +
>           (double)(aft.tv_usec -bef.tv_usec) /1e6 );
> #endif
> 
> #ifdef IS_PLYMORPH
>   __after_morph_ply_callback();
> #endif
>   
>   if(settings_get_value( "show warp after warp"))
>     set_editview(MAIN_WIN, EDITVIEW_SHOW);
> 
>   MY_GTK_DRAW (sp->im_widget[MAIN_WIN]);
> }
> 
> 
> 
> 
> 
> 
> /***********************************************************
>  *
>  *************************** file selection  ************
>  *
>  **********************************************************
> 
>  the following hook is set 
>  so that the same fileselection dialog will be used for many
>  different purposes
> 
> */
> 
> 
> void
> on_ok_button1_realize                  (GtkWidget       *widget,
>                                         gpointer         user_data)
> {
> //  GtkWidget       *widget_f=  gtk_widget_get_toplevel (widget);
> // doesnt work
> //  gtk_container_add (GTK_CONTAINER (widget_f), 
> //                 menu_image_num_g);
> 
> //  gtk_menu_item_set_submenu(widget,create_menu_image_num_g );
> }
> 
> 
> 
> void
> on_ok_button1_clicked         (GtkButton       *button,
>                              gpointer         user_data)
> {  
>   const char *file=
>     gtk_file_selection_get_filename    ( fileselection_g);
> 
>   g_assert(fileselection1_for_image_num_g > 0);
> 
>   if( //e.g.   fileselection_hook=load_image_from_file
>      fileselection_hook  (fileselection1_for_image_num_g,
>                         file))
>     {
>       //gtk_widget_hide(GTK_WIDGET(fileselection_g));
>       //gtk_file_selection_complete     (fileselection_g,"");
>       gtk_widget_show( sp-> im_widget[fileselection1_for_image_num_g]);  
> 
>       guide_callback("file",fileselection1_for_image_num_g);
>       // lets be nasty
>       fileselection1_for_image_num_g=-2;
>       fileselection_hook=NULL;      
>       gtk_widget_destroy(GTK_WIDGET(fileselection_g));
>       fileselection_g=NULL;
>     }
> }
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> #if HAVE_WAILI
> #include "wavelet.hh"
> GNode *l2_warped_stats[MAX_WINS],  *l2_subimage_stats[MAX_WINS];
> #endif
> 
> #ifndef IS_PLYMORPH
> void
> on_wavelet_equalize_activate           (GtkMenuItem     *menuitem,
>                                         gpointer         user_data)
> {
> #if HAVE_WAILI
>  int lp;
>  GNode *l2_tmp=NULL;
>  double fact=0;
>  for ( lp =1; lp <= MAX_WINS; lp++)      
>    if(sp->im_widget[lp] != NULL && sp-> im_subimage_pixbuf[lp] ) 
>      fact +=1;
>  fact = 1/fact;
>  for ( lp =1; lp <= MAX_WINS; lp++)      
>    if(sp->im_widget[lp] != NULL && sp-> im_subimage_pixbuf[lp] ) {
>      g_debug(" ----- wavelet L2 energies for subimage image %d\n",lp);
>      l2_subimage_stats[lp]=wavelet_stats( sp-> im_subimage_pixbuf[lp]);
>      if(!l2_tmp)
>        l2_tmp=wavelet_stats_clone(l2_subimage_stats[lp]);
>      wavelet_stats_sum(l2_tmp,l2_subimage_stats[lp],fact);
>    }
> 
>  for ( lp =1; lp <= MAX_WINS; lp++)      
>    if(sp->im_widget[lp] != NULL && sp-> im_subimage_pixbuf[lp] ) {
>      g_debug(" --- equalizing wavelet L2 energies for image %d\n",lp);     
>      wavelet_equalize(sp-> im_subimage_pixbuf[lp],l2_tmp);
>    }
> #else
>  show_error(_("gtkmorph was not linked with Waili wavelet library"));
> #endif
> }
> #endif
> 
> static int round_and_dither( double v)
> {
>   static double delta=0; double nv;
>   v=v+delta;
>   nv=floor(v+0.5);
>   delta=v-nv;
>   return (int)nv;
> }
> 
> void
> on_do_mixing_clicked                   (GtkButton       *button,
>                                         gpointer         user_data)
> {
>   int lp;
>   double  totdiss=tot_mixing_factors_nice();
>   guint         w=sp->resulting_width, h=sp->resulting_height;    
>   int effective_wins=0, max_win=0;
>   guchar *data[MAX_WINS+2];
>  
>   g_debug("blending textures of warped images");  
>   
>   for ( lp =1; lp <= MAX_WINS; lp++)   {
>     if(sp->im_widget[lp] != NULL &&     
> #ifndef IS_PLYMORPH  
>         !sp->im_widget_is_difference_mesh[lp] &&
> #endif
>        ABS(sp->mf.im_dissolve_factor[lp]) >= 0.0001 && lp != MAIN_WIN ) {
>       effective_wins++; max_win=lp;
>       data[lp] =      gdk_pixbuf_get_pixels(sp-> im_warped_pixbuf[lp]);
>       g_assert( data[lp] != NULL);
>     } else
>       data[lp]=NULL;
>   }
> 
>   if( effective_wins <=1) {
>     //simply copy
>     if(sp-> im_warped_pixbuf[MAIN_WIN])
>       gdk_pixbuf_unref(sp-> im_warped_pixbuf[MAIN_WIN]);
>     sp-> im_warped_pixbuf[MAIN_WIN]=
>         gdk_pixbuf_copy(sp-> im_warped_pixbuf[max_win]);
> #ifndef IS_PLYMORPH
>     render_pixmap(MAIN_WIN, PIXWARPED);    
>     set_editview(MAIN_WIN,  settings_get_value( "show warp after warp")); 
>     MY_GTK_DRAW(sp->im_widget[MAIN_WIN] );      
> #endif
>     return;
>   }
> 
>   {
>     /* we precompute some data */
>     double fact[max_win+1];
>     guint rowstride[max_win+1];
>     guint channels[max_win+1];
> #if HAVE_WAILI
>     GNode       *l2_average_stat=NULL;
> #endif
>     
>     for ( lp =1; lp <= max_win; lp++)   
>       if(data[lp]) {
>       fact[lp] = sp->mf.im_dissolve_factor[lp] / totdiss;
>       rowstride[lp]= gdk_pixbuf_get_rowstride(sp-> im_warped_pixbuf[lp]);
>       channels[lp]= gdk_pixbuf_get_n_channels(sp-> im_warped_pixbuf[lp]);
>       }
>     
> #if HAVE_WAILI
>     if(   settings_get_value ("wavelet equalization")) {
>       g_message("collecting wavelet statistics");
>       for ( lp =1 ; lp <= max_win ; lp++) {
>       if (data[lp] != NULL){    
>         if(NULL==l2_warped_stats[lp]) {
>           g_debug(" ----- wavelet L2 energies for image %d\n",lp);
>           l2_warped_stats[lp]=wavelet_stats( sp-> im_warped_pixbuf[lp]);
>         }
>         if(NULL==l2_average_stat)
>           l2_average_stat=wavelet_stats_clone(l2_warped_stats[lp]);
>         wavelet_stats_sum(l2_average_stat, l2_warped_stats[lp] , fact[lp] );
>       }
>       }}
> #endif
>     {
>       GdkPixbuf *dpb = sp-> im_warped_pixbuf[MAIN_WIN];
>       if(dpb==NULL) {
> #ifdef IS_PLYMORPH    
>       dpb = sp-> im_warped_pixbuf[MAIN_WIN]=
>         gdk_pixbuf_new(GDK_COLORSPACE_RGB,//GdkColorspace colorspace,
>                      TRUE,//gboolean has_alpha,
>                      8,//int bits_per_sample,
>                      w,h);//int width,    int height);
>       
> #else
>       create__pixbuf(MAIN_WIN, PIXWARPED);
>       dpb = sp-> im_warped_pixbuf[MAIN_WIN];
> #endif
> 
>       }
>       guchar  *ddata = gdk_pixbuf_get_pixels(dpb);    
>       guint drowstride= gdk_pixbuf_get_rowstride (dpb) ;    
>       guint dchannels= gdk_pixbuf_get_n_channels(dpb);
>       guint i,j;      
>       double val; int v;
>       guint dps[max_win+1];      long dp=0; /* data position */       
>       //we clear the old image
>       gdk_pixbuf_clear(dpb);
>       
>       //FIXME 
>       for ( lp =max_win ; lp >= 1 ; lp--)
>       if (data[lp] != NULL)
>         if( dchannels != channels[lp]  ) {
>           show_error( _("the input images have different numbers of channels: 
> cannot blend"));
>           return;
>         }
>       
>       for( j=0; j<  h ; j++) {
>       dp= drowstride * j;
>       for ( lp =max_win ; lp >= 1 ; lp--)
>         if (data[lp] != NULL) 
>           dps[lp]=rowstride[lp] * j;
>       /* this interpolates also the alpha value, if any  */
>       for( i=0; i< dchannels*w ; i++) {
>         val = 0 ;   
>         for ( lp =max_win ; lp >= 1 ; lp--) {
>           if (data[lp] != NULL) {
>             val +=  fact[lp] * (double) (data[lp])[dps[lp] + i ]  ;
>           }}
>         /* FIXME if the image is not 8 bit */ 
>         v=round_and_dither(val);
>         ddata[dp + i] = CLAMP(v, 0, 255);
>       }
>       }
> #if HAVE_WAILI
>       if(   settings_get_value ("wavelet equalization")) {
>       g_message("wavelet equalization");
>       wavelet_equalize(dpb,l2_average_stat);      
>       }
> #endif
>     }
>   }
> #ifndef IS_PLYMORPH
>   render_pixmap(MAIN_WIN, PIXWARPED);
>   set_editview(MAIN_WIN,  settings_get_value( "show warp after warp")); 
> #endif
>   MY_GTK_DRAW(sp->im_widget[MAIN_WIN] );  
> }
> 
> void do_mesh_factors_equal()
> {
>   int lp;
>   for ( lp =1; lp <= MAX_WINS; lp++)
>     if( sp->im_widget[lp] != NULL)
>       sp->mf.im_warp_factor[lp]=1.0/ (double)sp->max_wins;
> }
> 
> 
> 
> 
> 
> 
> /*
> **********************************************************************
> 
> ************** resulting image,  spinbuttons      ********************
> 
> **********************************************************************
> */
> 
> #include "movies.h"
> 
> 
> void
> on_resulting_apply_clicked             (GtkButton       *button,
>                                         gpointer         user_data)
> {
>   double w=sp->resulting_width,h=sp->resulting_height ;
>   sp->resulting_width =  sp->resulting_width_sp;
>   sp->resulting_height = sp->resulting_height_sp;
>   {
>     GtkWidget* hb= lookup_widget  ( sp->im_widget[MAIN_WIN]  ,
>                                   "handlebox_res_size");
>     g_assert(hb);
>     gtk_widget_hide(hb);
>   }
>   int lp;
> #ifndef IS_PLYMORPH
> #ifdef  ANIMATE_INTERNALLY
>   int movie_pixmap_free();
> #endif
>   for( lp =1; lp <= MAIN_WIN; lp++)
>    if ( sp->im_widget[lp] )      {
>       destroy_image_win_pixbufs(lp,1);
>        //alloc_image_win_data(lp,1);
>        {
>        int j ; 
>        for (j=2;j>=1;j--) {
>          create__pixbuf(lp,j);   
>          // can't do this now-- need a window --create__pixmap(lp,j);
>        }}
>        {
>        int j ; 
>        for (j=2;j>=1;j--) {
>          //  do this now-- need a window --
>          create__pixmap(lp,j);
>        }
>        }
>        subimage2affines(lp);
>        reload_and_scale_image(lp);
>        meshScaleFreeformat( &(sp->im_mesh[lp]),
>                           (double)sp->resulting_width/w, 
>                           (double)sp->resulting_height/h);
>      }
>   guide_callback("resulting size",MAIN_WIN);
> #endif
>   for( lp =1; lp <= MAIN_WIN; lp++)
>     if ( sp->im_widget[lp] ) {
>        drawingarea_configure(lp);
>        MY_GTK_DRAW( sp-> im_widget[lp]);  
>     }
> }
> 
> 
> void spinbutton_res_set()
> {
>   GtkWidget *widget=lookup_widget(sp->im_widget[MAIN_WIN],
>                                 "spinbutton_reswidth");
>   gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget),
>                            sp->resulting_width_sp );
>   widget=lookup_widget(sp->im_widget[MAIN_WIN],"spinbutton_resheight");
>   gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget),
>                            sp->resulting_height_sp );
> }
> 
> void
> on_spinbutton_reswidth_changed         (my_GtkSpinButton   
> *spinbutton,//GtkEditable     *editable,
>                                         gpointer         user_data)
> {
>   //  GtkSpinButton *spin = GTK_SPIN_BUTTON (editable);
>   sp->resulting_width_sp =gtk_spin_button_get_value_as_float (spinbutton);
> }
> 
> 
> void
> on_spinbutton_resheight_changed        (my_GtkSpinButton   
> *spinbutton,//GtkEditable     *editable,
>                                         gpointer         user_data)
> {
>   //  GtkSpinButton *spin = GTK_SPIN_BUTTON (editable);
>   sp->resulting_height_sp =gtk_spin_button_get_value_as_float (spinbutton);
> }
> 
> 
> 
> 
> 
> void
> on_double_size_clicked                 (GtkButton       *button,
>                                         gpointer         user_data)
> {
>   if( sp->resulting_height_sp <= 5000 &&  sp->resulting_width_sp <= 5000 ) {
>     sp->resulting_height_sp *= 2;
>     sp->resulting_width_sp *=2;
>     spinbutton_res_set();
>     MY_GTK_DRAW( sp-> im_widget[MAIN_WIN]);  
>   }
> }
> 
> 
> void
> on_halve_size_clicked                  (GtkButton       *button,
>                                         gpointer         user_data)
> {
>   if( sp->resulting_height_sp > 8 &&  sp->resulting_width_sp > 8 ) {
>     sp->resulting_height_sp /= 2;
>     sp->resulting_width_sp /= 2;
>     spinbutton_res_set();
>      MY_GTK_DRAW( sp-> im_widget[MAIN_WIN]); 
>   }
> }
> 
> 
> 
> /***********************************************************************
> **********************************************************************
> 
> image windows callbacks
> 
> 
>  note: many callbacks are shared with the "resulting image window"
> 
> **********************************************************************
> */
> 
> 
> gboolean
> on_image_win_1_delete_event            (GtkWidget       *widget,
>                                         GdkEvent        *event,
>                                         gpointer         user_data)
> {  
>   int i=
>     GPOINTER_TO_UINT(gtk_widget_get_data_top(widget,"imagenum")); 
> 
> #ifndef IS_PLYMORPH
>   mag_xy_track(MAIN_WIN,0,0);
> #endif
> 
>   destroy_image_win_data(i);
> 
>   sp->mf.im_warp_factor[i]=0;
>   sp->mf.im_dissolve_factor[i]=0;
> 
>   return FALSE;
> }
> 
> 
> gboolean
> on_diff_window_delete_event            (GtkWidget       *widget,
>                                         GdkEvent        *event,
>                                         gpointer         user_data)
> {
>   int i=
>     GPOINTER_TO_UINT(gtk_widget_get_data_top(widget,"imagenum")); 
>   
>   destroy_image_win_data(i);
> 
>   sp->mf.im_warp_factor[i]=0;
>   sp->mf.im_dissolve_factor[i]=0;
> 
>   return FALSE;
> }
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> void
> on_load_example_session_activate       (GtkMenuItem     *menuitem,
>                                         gpointer         user_data)
> 
> {
>   int lp;
>   for(lp=1;lp<=MAX_WINS; lp++) {
>     if(   sp->im_widget[lp] && 
> #ifdef IS_PLYMORPH
>         sp->im_ply_labels_unsaved[lp]
> #else
>         sp->im_mesh[lp].changed>0
> #endif
>         ) {
>       show_error(_("Loading the example session may ruin your current 
> session. Please properly save all meshes and retry."));
>       return;
>     }  
>   }
>   gchar *P=NULL;
> #ifdef  __WIN32__ 
>   extern gchar *program_install_dir;
>   gchar *pp[]={".",program_install_dir,NULL};
>   gchar *ee[]={"example/ad/gtkmorph.session",
>              "example/AD/gtkmorph.session",NULL};
>   lp=0; int le=0;
>   while(P == NULL && ee[le]) {
>     while(P == NULL && pp[lp]) {
>       if(P==NULL) {
>       P= g_build_filename(pp[lp],ee[le],NULL);
>       if(!g_file_test(P,  G_FILE_TEST_IS_REGULAR)) {  
>         g_free(P);P=NULL;
>       }
>       }
>       lp++;
>     }
>     le++;
>   }    
> #else    
>   if(P==NULL &&
>      g_file_test(DATADIR "/" PACKAGE "/example/AD/gtkmorph.session",  
> G_FILE_TEST_IS_REGULAR))
>     P=g_strdup(DATADIR "/" PACKAGE "/example/AD/gtkmorph.session");
>   if(P==NULL) {
>     gchar *s;
>     if(g_file_test("/etc/debian_version", G_FILE_TEST_IS_REGULAR)) 
>       
>       s=g_strdup_printf(_("The 'example' directory should be in '%s' but is 
> not.\nInstall the 'gtkmorph-example' debian package."),
>                       DATADIR "/" PACKAGE );
>     else
>       s=g_strdup_printf(_("The 'example' directory should be in '%s' but is 
> not."),
>                       DATADIR "/" PACKAGE);
>     show_error(s); g_free(s);
>   }
> #endif
>   if(P) {
>     g_debug("loading example session from '%s'",P);
>     load_session(0,P);
>     g_free(P);
>   } else g_warning("could not locate example session!");    
> }





-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to