home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 2002 April / pcpro0402.iso / essentials / graphics / Gimp / gimp-src-20001226.exe / src / gimp / plug-ins / fp / fp_gdk.c next >
Encoding:
C/C++ Source or Header  |  2000-11-08  |  4.2 KB  |  169 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #include <gtk/gtk.h>
  5.  
  6. #include "libgimp/gimp.h"
  7.  
  8. #include "fp.h"
  9.  
  10. extern AdvancedWindow AW;
  11. extern FP_Params Current;
  12.  
  13.  
  14. extern gint nudgeArray[256];
  15.  
  16.  
  17. void
  18. slider_erase (GdkWindow *window,
  19.           int        xpos)
  20. {
  21.   gdk_window_clear_area (window, MARGIN + xpos - (RANGE_HEIGHT - 1) / 2, 0,
  22.              RANGE_HEIGHT, RANGE_HEIGHT);
  23. }
  24.  
  25. void
  26. draw_slider(GdkWindow *window,
  27.         GdkGC     *border_gc,
  28.         GdkGC     *fill_gc,
  29.         int        xpos)
  30. {
  31.   gint i;
  32.  
  33.   for (i = 0; i < RANGE_HEIGHT; i++)
  34.     gdk_draw_line (window, fill_gc, MARGIN + xpos-i/2, i, MARGIN + xpos+i/2,i);
  35.   
  36.   gdk_draw_line (window, border_gc, MARGIN + xpos, 0,
  37.          MARGIN + xpos - (RANGE_HEIGHT - 1) / 2, RANGE_HEIGHT - 1);
  38.  
  39.   gdk_draw_line (window, border_gc, MARGIN + xpos, 0,
  40.          MARGIN + xpos + (RANGE_HEIGHT - 1) / 2, RANGE_HEIGHT - 1);
  41.  
  42.   gdk_draw_line (window, border_gc, MARGIN + xpos-(RANGE_HEIGHT-1)/2,RANGE_HEIGHT-1,
  43.          MARGIN + xpos + (RANGE_HEIGHT-1)/2, RANGE_HEIGHT-1);
  44. }
  45.  
  46.  
  47. void
  48. draw_it (GtkWidget *widget)
  49. {
  50.   draw_slider (AW.aliasingGraph->window,
  51.            AW.aliasingGraph->style->black_gc,
  52.            AW.aliasingGraph->style->dark_gc[GTK_STATE_NORMAL],
  53.            Current.Cutoffs[SHADOWS]);
  54.  
  55.   draw_slider (AW.aliasingGraph->window,
  56.            AW.aliasingGraph->style->black_gc,
  57.            AW.aliasingGraph->style->dark_gc[GTK_STATE_NORMAL],
  58.            Current.Cutoffs[MIDTONES]);
  59.  
  60.   draw_slider (AW.aliasingGraph->window,
  61.            AW.aliasingGraph->style->black_gc,
  62.            AW.aliasingGraph->style->dark_gc[GTK_STATE_SELECTED],
  63.            Current.Offset);
  64.  
  65. gint     
  66. FP_Range_Change_Events  (GtkWidget *widget, 
  67.              GdkEvent  *event, 
  68.              FP_Params *current)
  69. {
  70.   GdkEventButton *bevent;
  71.   GdkEventMotion *mevent;
  72.   gint shad, mid, offset, min;
  73.   static guchar  *new;
  74.   gint  x;
  75.  
  76.   switch (event->type)
  77.     {
  78.     case GDK_EXPOSE:
  79.       draw_it (NULL);
  80.       break;
  81.     
  82.     case GDK_BUTTON_PRESS:
  83.       bevent= (GdkEventButton *) event;
  84.  
  85.       shad   =  abs (bevent->x - Current.Cutoffs[SHADOWS]);
  86.       mid    =  abs (bevent->x - Current.Cutoffs[MIDTONES]);
  87.       offset =  abs (bevent->x - Current.Offset);
  88.     
  89.       min = MIN (MIN (shad, mid), offset);
  90.     
  91.       if (bevent->x >0 && bevent->x<256)
  92.     {
  93.       if (min == shad) 
  94.         new = &Current.Cutoffs[SHADOWS];
  95.       else if (min == mid) 
  96.         new = &Current.Cutoffs[MIDTONES];
  97.       else 
  98.         new = &Current.Offset;
  99.  
  100.       slider_erase (AW.aliasingGraph->window, *new);
  101.       *new=bevent->x;
  102.     }
  103.  
  104.       draw_it (NULL);
  105.   
  106.       if (Current.RealTime)
  107.     {
  108.       fp_range_preview_spill (AW.rangePreview, Current.ValueBy);
  109.       update_range_labels ();
  110.       fp_create_smoothness_graph (AW.aliasingPreview);
  111.       refreshPreviews (Current.VisibleFrames);
  112.     }
  113.       break;
  114.  
  115.     case GDK_BUTTON_RELEASE:
  116.       if (!Current.RealTime)
  117.     {
  118.       fp_range_preview_spill (AW.rangePreview, Current.ValueBy);
  119.       update_range_labels ();
  120.       fp_create_smoothness_graph (AW.aliasingPreview);
  121.       refreshPreviews (Current.VisibleFrames);
  122.     }
  123.       break;
  124.  
  125.     case GDK_MOTION_NOTIFY:
  126.       mevent = (GdkEventMotion *) event;
  127.       gdk_window_get_pointer (widget->window, &x, NULL, NULL);
  128.  
  129.       if (x >= 0 && x < 256)
  130.     {
  131.       slider_erase (AW.aliasingGraph->window, *new);
  132.       *new = x;
  133.       draw_it (NULL);
  134.       if (Current.RealTime)
  135.         {
  136.           fp_range_preview_spill (AW.rangePreview, Current.ValueBy);
  137.           update_range_labels ();
  138.           fp_create_smoothness_graph (AW.aliasingPreview);
  139.           refreshPreviews (Current.VisibleFrames);
  140.         }
  141.     }
  142.       break;
  143.  
  144.     default:
  145.       break;
  146.     }
  147.  
  148.   return FALSE;
  149. }
  150.  
  151. void
  152. update_range_labels (void)
  153. {
  154.   guchar buffer[3];
  155.   
  156.   gtk_label_set_text (GTK_LABEL(Current.rangeLabels[1]),"0");
  157.  
  158.   g_snprintf (buffer, sizeof (buffer), "%d", Current.Cutoffs[SHADOWS]);
  159.   gtk_label_set_text (GTK_LABEL (Current.rangeLabels[3]), buffer);
  160.   gtk_label_set_text (GTK_LABEL (Current.rangeLabels[5]), buffer);
  161.  
  162.   g_snprintf (buffer, sizeof (buffer), "%d", Current.Cutoffs[MIDTONES]);
  163.   gtk_label_set_text (GTK_LABEL (Current.rangeLabels[7]), buffer);
  164.   gtk_label_set_text (GTK_LABEL (Current.rangeLabels[9]), buffer);
  165.  
  166.   gtk_label_set_text (GTK_LABEL(Current.rangeLabels[11]), "255");
  167. }
  168.