home *** CD-ROM | disk | FTP | other *** search
/ ftp.sunet.sepub/pictures / 2014.11.ftp.sunet.se-pictures.tar / ftp.sunet.se / pub / pictures / ACiD-artpacks / programs / unix / editors / gimp-plugins-unstable-0_99_23_tar.gz / gimp-plugins-unstable-0_99_23_tar / gimp-plugins-unstable-0.99.23 / fp / fp_gtk.c < prev    next >
C/C++ Source or Header  |  1998-02-19  |  34KB  |  1,102 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include "gtk/gtk.h"
  5. #include "libgimp/gimp.h"
  6. #include "fp.h"
  7. #include "fp_hsv.h"
  8.  
  9. AdvancedWindow AW={NULL,NULL,NULL,NULL,NULL,NULL,NULL};
  10.  
  11. extern FP_Params Current;
  12.  
  13. extern GDrawable *drawable, *mask;
  14.  
  15. FP_Intensity ShMidHi[]   ={SHADOWS,MIDTONES,HIGHLIGHTS};
  16. int          HueSatVal[] ={BY_HUE,BY_SAT,BY_VAL};
  17.  
  18. gint nudgeArray[256];
  19.  
  20. GtkWidget *origPreview, *curPreview;
  21. GtkWidget *rPreview, *gPreview, *bPreview;
  22. GtkWidget *cPreview, *yPreview, *mPreview;
  23. GtkWidget *centerPreview;
  24. GtkWidget *darkerPreview, *lighterPreview, *middlePreview;
  25. GtkWidget *allOrSell, *dlg;
  26. GtkWidget *plusSatPreview, *SatPreview, *minusSatPreview;
  27.  
  28. struct
  29. {
  30.   GtkWidget *bna,
  31.     *palette,
  32.     *rough,
  33.     *range,
  34.     *show,
  35.     *lnd,
  36.     *pixelsBy,
  37.     *frameSelect,
  38.     *satur;
  39. } fpFrames;
  40.  
  41.  
  42. fpInterface FPint =
  43. {
  44.   FALSE   /*  run  */
  45. };
  46. ReducedImage *reduced;
  47.  
  48. /***********************************************************/
  49. /************   Main Dialog Window   ******************/
  50. /***********************************************************/
  51.  
  52. GtkWidget *fp_create_bna(void)
  53. {
  54.   GtkWidget *frame, *blabel, *alabel, *bframe, *aframe, *table;
  55.  
  56.   Create_A_Preview(&origPreview,&bframe, reduced->width, reduced->height);
  57.   Create_A_Preview(&curPreview,&aframe, reduced->width, reduced->height);
  58.  
  59.   frame = gtk_frame_new ("Before And After");
  60.   gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
  61.   gtk_container_border_width (GTK_CONTAINER (frame), 5);
  62.  
  63.   /* All the previews */
  64.   alabel=gtk_label_new("Current:");
  65.   gtk_widget_show(alabel);
  66.   gtk_misc_set_alignment(GTK_MISC(alabel), 0.0, 0.5);
  67.  
  68.   blabel=gtk_label_new("Original:");
  69.   gtk_widget_show(blabel);
  70.   gtk_misc_set_alignment(GTK_MISC(blabel), 0.0, 0.5);
  71.  
  72.   table=gtk_table_new(2,2,FALSE);
  73.   gtk_container_border_width(GTK_CONTAINER(table),10);
  74.   gtk_table_set_row_spacings(GTK_TABLE(table),0);
  75.   gtk_table_set_col_spacings(GTK_TABLE(table),20);
  76.  
  77.   gtk_container_add (GTK_CONTAINER (frame), table);
  78.  
  79.   gtk_table_attach(GTK_TABLE(table),blabel,0,1,0,1,
  80.            0,
  81.            GTK_EXPAND|GTK_FILL,
  82.            0,0);
  83.   gtk_table_attach(GTK_TABLE(table),alabel,1,2,0,1,
  84.            0,
  85.            GTK_EXPAND|GTK_FILL,
  86.            0,0);
  87.   gtk_table_attach(GTK_TABLE(table),bframe,0,1,1,2,
  88.            GTK_EXPAND,
  89.            GTK_EXPAND,
  90.            0,0);
  91.   gtk_table_attach(GTK_TABLE(table),aframe,1,2,1,2,
  92.            GTK_EXPAND,
  93.            GTK_EXPAND,
  94.            0,0);
  95.  
  96.   gtk_widget_show(table);
  97.   gtk_widget_show (frame);
  98.   return frame;
  99. }
  100.  
  101. GtkWidget *fp_create_circle_palette(void)
  102. {
  103.   GtkWidget *frame, *table;
  104.   GtkWidget *rVbox, *rFrame;
  105.   GtkWidget *gVbox, *gFrame;
  106.   GtkWidget *bVbox, *bFrame;
  107.   GtkWidget *cVbox, *cFrame;
  108.   GtkWidget *yVbox, *yFrame;
  109.   GtkWidget *mVbox, *mFrame;
  110.   GtkWidget *centerVbox, *centerFrame;
  111.  
  112.   frame = gtk_frame_new ("Palette Circle");
  113.   gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
  114.   gtk_container_border_width (GTK_CONTAINER (frame), 5);
  115.   gtk_widget_show (frame);
  116.  
  117.   table = gtk_table_new(11,11,FALSE);
  118.   gtk_container_border_width(GTK_CONTAINER(table),0);
  119.   gtk_table_set_row_spacings(GTK_TABLE(table),0);
  120.   gtk_table_set_col_spacings(GTK_TABLE(table),3);
  121.   gtk_widget_show (table);
  122.  
  123.   gtk_container_add (GTK_CONTAINER (frame), table);
  124.  
  125.   Create_A_Preview(&rPreview,&rFrame, reduced->width, reduced->height);
  126.   Create_A_Preview(&gPreview,&gFrame, reduced->width, reduced->height);
  127.   Create_A_Preview(&bPreview,&bFrame, reduced->width, reduced->height);
  128.   Create_A_Preview(&cPreview,&cFrame, reduced->width, reduced->height);
  129.   Create_A_Preview(&yPreview,&yFrame, reduced->width, reduced->height);
  130.   Create_A_Preview(&mPreview,&mFrame, reduced->width, reduced->height);
  131.   Create_A_Preview(¢erPreview,¢erFrame, reduced->width, reduced->height);
  132.  
  133.   Create_A_Table_Entry(&rVbox,rFrame,"Red:");
  134.   Create_A_Table_Entry(&gVbox,gFrame,"Green:");
  135.   Create_A_Table_Entry(&bVbox,bFrame,"Blue:");
  136.   Create_A_Table_Entry(&cVbox,cFrame,"Cyan:");
  137.   Create_A_Table_Entry(&yVbox,yFrame,"Yellow:");
  138.   Create_A_Table_Entry(&mVbox,mFrame,"Magenta:");
  139.   Create_A_Table_Entry(¢erVbox,centerFrame,"Current:");
  140.  
  141.   gtk_table_attach( GTK_TABLE(table), rVbox,8,11,4,7,
  142.             GTK_EXPAND , GTK_EXPAND,0,0);
  143.   gtk_table_attach( GTK_TABLE(table), gVbox,2,5,0,3,
  144.             GTK_EXPAND, GTK_EXPAND,0,0);
  145.   gtk_table_attach( GTK_TABLE(table), bVbox,2,5,8,11,
  146.             GTK_EXPAND, GTK_EXPAND,0,0);
  147.   gtk_table_attach( GTK_TABLE(table), cVbox,0,3,4,7,
  148.             GTK_EXPAND, GTK_EXPAND,0,0);
  149.   gtk_table_attach( GTK_TABLE(table), yVbox,6,9,0,3,
  150.             GTK_EXPAND, GTK_EXPAND,0,0);
  151.   gtk_table_attach( GTK_TABLE(table), mVbox,6,9,8,11,
  152.             GTK_EXPAND, GTK_EXPAND,0,0);
  153.   gtk_table_attach( GTK_TABLE(table), centerVbox,4,7,4,7,
  154.             GTK_EXPAND, GTK_EXPAND,0,0);
  155.  
  156.   return frame;
  157. }
  158.  
  159. GtkWidget *fp_create_rough(void)
  160. {
  161.   GtkWidget *frame, *scale, *vbox;
  162.   GtkObject *data;
  163.  
  164.   frame = gtk_frame_new ("Roughness");
  165.   gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
  166.   gtk_container_border_width (GTK_CONTAINER (frame), 5);
  167.   gtk_widget_show (frame);
  168.  
  169.   data = gtk_adjustment_new (Current.Rough,
  170.                  0, 1.0, 0.05, 0.01, 0.0);
  171.   Current.roughnessScale=
  172.   scale = gtk_hscale_new (GTK_ADJUSTMENT (data));
  173.  
  174.   gtk_widget_set_usize (scale, 120, 0);
  175.   gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_TOP);
  176.   gtk_scale_set_digits (GTK_SCALE (scale), 2);
  177.   gtk_signal_connect (GTK_OBJECT (data), "value_changed",
  178.               (GtkSignalFunc) fp_scale_update,
  179.               &Current.Rough);
  180.   gtk_widget_show (scale);
  181.  
  182.   vbox=gtk_vbox_new(FALSE,5);
  183.   gtk_container_border_width(GTK_CONTAINER(vbox),10);
  184.   gtk_widget_show(vbox);
  185.   gtk_box_pack_start (GTK_BOX(vbox), scale,TRUE,TRUE,0);
  186.   gtk_container_add (GTK_CONTAINER(frame), vbox);
  187.  
  188.   return frame;
  189. }
  190.  
  191. GtkWidget *fp_create_range(void)
  192. {
  193.   GtkWidget *frame, *vbox;
  194.   GSList *group=NULL;
  195.  
  196.   frame = gtk_frame_new ("Affected Range");
  197.   gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
  198.   gtk_container_border_width (GTK_CONTAINER (frame), 5);
  199.  
  200.   gtk_widget_show (frame);
  201.  
  202.   /********THE THREE RANGES*************/
  203.   vbox=gtk_vbox_new(FALSE,5);
  204.   gtk_container_add(GTK_CONTAINER(frame),vbox);
  205.   gtk_container_border_width(GTK_CONTAINER(vbox),5);
  206.   gtk_widget_show(vbox);
  207.  
  208.   group=Button_In_A_Box(vbox,group,"Shadows",
  209.              (GtkSignalFunc) fp_change_current_range,
  210.              ShMidHi+SHADOWS,
  211.              Current.Range==SHADOWS);
  212.   group=Button_In_A_Box(vbox,group,"Midtones",
  213.              (GtkSignalFunc) fp_change_current_range,
  214.              ShMidHi+MIDTONES,
  215.              Current.Range==MIDTONES);
  216.   group=Button_In_A_Box(vbox,group,"Highlights",
  217.              (GtkSignalFunc) fp_change_current_range,
  218.              ShMidHi+HIGHLIGHTS,
  219.              Current.Range==HIGHLIGHTS);
  220.   return frame;
  221. }
  222.  
  223. GtkWidget *fp_create_lnd()
  224. {
  225.   GtkWidget *frame, *table, *lighterFrame, *middleFrame, *darkerFrame;
  226.   GtkWidget *lighterVbox, *middleVbox, *darkerVbox;
  227.  
  228.   Create_A_Preview(&lighterPreview,&lighterFrame, reduced->width, reduced->height);
  229.   Create_A_Preview(&middlePreview,&middleFrame, reduced->width, reduced->height);
  230.   Create_A_Preview(&darkerPreview,&darkerFrame, reduced->width, reduced->height);
  231.  
  232.   Create_A_Table_Entry(&lighterVbox,lighterFrame,"Lighter:");
  233.   Create_A_Table_Entry(&middleVbox,middleFrame,"Current:");
  234.   Create_A_Table_Entry(&darkerVbox,darkerFrame,"Darker:");
  235.  
  236.   frame = gtk_frame_new ("Lighter and Darker");
  237.   gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
  238.   gtk_container_border_width (GTK_CONTAINER (frame), 5);
  239.   gtk_widget_show (frame);
  240.  
  241.   table = gtk_table_new(11,1,FALSE);
  242.   gtk_container_border_width(GTK_CONTAINER(table),0);
  243.   gtk_table_set_row_spacings(GTK_TABLE(table),0);
  244.   gtk_table_set_col_spacings(GTK_TABLE(table),3);
  245.   gtk_widget_show (table);
  246.  
  247.  
  248.   gtk_table_attach( GTK_TABLE(table), lighterVbox,0,1,0,3,
  249.             GTK_EXPAND , GTK_EXPAND,0,0);
  250.   gtk_table_attach( GTK_TABLE(table), middleVbox,0,1,4,7,
  251.             GTK_EXPAND, GTK_EXPAND,0,0);
  252.   gtk_table_attach( GTK_TABLE(table), darkerVbox,0,1,8,11,
  253.             GTK_EXPAND, GTK_EXPAND,0,0);
  254.   gtk_container_add (GTK_CONTAINER (frame), table);
  255.  
  256.   return frame;
  257. }
  258.  
  259. GtkWidget *fp_create_msnls()
  260. {
  261.  
  262.   GtkWidget *frame, *table, *lessFrame, *middleFrame, *moreFrame;
  263.   GtkWidget *lessVbox, *middleVbox, *moreVbox;
  264.  
  265.   Create_A_Preview(&minusSatPreview,&lessFrame, reduced->width, reduced->height);
  266.   Create_A_Preview(&SatPreview,&middleFrame, reduced->width, reduced->height);
  267.   Create_A_Preview(&plusSatPreview,&moreFrame, reduced->width, reduced->height);
  268.  
  269.   Create_A_Table_Entry(&moreVbox,moreFrame,"More Saturated:");
  270.   Create_A_Table_Entry(&middleVbox,middleFrame,"Current:");
  271.   Create_A_Table_Entry(&lessVbox,lessFrame,"Less Saturated:");
  272.  
  273.   frame = gtk_frame_new ("Saturation");
  274.   gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
  275.   gtk_container_border_width (GTK_CONTAINER (frame), 5);
  276.  
  277.   table = gtk_table_new(11,1,FALSE);
  278.   gtk_container_border_width(GTK_CONTAINER(table),0);
  279.   gtk_table_set_row_spacings(GTK_TABLE(table),0);
  280.   gtk_table_set_col_spacings(GTK_TABLE(table),3);
  281.   gtk_widget_show (table);
  282.  
  283.  
  284.   gtk_table_attach( GTK_TABLE(table), moreVbox,0,1,0,3,
  285.             GTK_EXPAND , GTK_EXPAND,0,0);
  286.   gtk_table_attach( GTK_TABLE(table), middleVbox,0,1,4,7,
  287.             GTK_EXPAND, GTK_EXPAND,0,0);
  288.   gtk_table_attach( GTK_TABLE(table), lessVbox,0,1,8,11,
  289.             GTK_EXPAND, GTK_EXPAND,0,0);
  290.   gtk_container_add (GTK_CONTAINER (frame), table);
  291.  
  292.   return frame;
  293. }
  294. GtkWidget *fp_create_pixels_select_by()
  295. {
  296.   GtkWidget *frame, *vbox;
  297.   GSList *group=NULL;
  298.  
  299.   frame = gtk_frame_new ("Select Pixels By");
  300.   gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
  301.   gtk_container_border_width (GTK_CONTAINER (frame), 5);
  302.  
  303.   vbox=gtk_vbox_new(FALSE,5);
  304.   gtk_container_add(GTK_CONTAINER(frame),vbox);
  305.   gtk_container_border_width(GTK_CONTAINER(vbox),5);
  306.   gtk_widget_show(vbox);
  307.  
  308.   group=Button_In_A_Box(vbox,group,"Hue",
  309.              (GtkSignalFunc) fp_change_current_pixels_by,
  310.              HueSatVal+0,
  311.              Current.ValueBy==BY_HUE);
  312.  
  313.   group=Button_In_A_Box(vbox,group,"Saturation",
  314.              (GtkSignalFunc) fp_change_current_pixels_by,
  315.              HueSatVal+1,
  316.              Current.ValueBy==BY_SAT);
  317.  
  318.   group=Button_In_A_Box(vbox,group,"Value",
  319.              (GtkSignalFunc) fp_change_current_pixels_by,
  320.              HueSatVal+2,
  321.              Current.ValueBy==BY_VAL);
  322.   return frame;
  323. }
  324.  
  325. GtkWidget *fp_create_show()
  326. {
  327.   GtkWidget *frame, *vbox;
  328.   GSList *group=NULL;
  329.  
  330.   frame=gtk_frame_new("Show");
  331.   gtk_container_border_width (GTK_CONTAINER (frame), 5);
  332.   gtk_widget_show(frame);
  333.  
  334.   vbox=gtk_vbox_new(FALSE,5);
  335.   gtk_container_add(GTK_CONTAINER(frame),vbox);
  336.   gtk_container_border_width(GTK_CONTAINER(vbox),5);
  337.   gtk_widget_show(vbox);
  338.  
  339.  
  340.   group=Button_In_A_Box(vbox,group,"Entire Image",
  341.              (GtkSignalFunc) fp_entire_image,
  342.              &Current.SlctnOnly,
  343.              FALSE);
  344.  
  345.   group=Button_In_A_Box(vbox,group,"Selection Only",
  346.              (GtkSignalFunc) fp_selection_only,
  347.              &Current.SlctnOnly,
  348.              TRUE);
  349.  
  350.   group=Button_In_A_Box(vbox,group,"Selection In Context",
  351.              (GtkSignalFunc) fp_selection_in_context,
  352.              &Current.SlctnOnly,
  353.              FALSE);
  354.   return frame;
  355. }
  356. GtkWidget *fp_create_frame_select()
  357. {
  358.   GtkWidget *frame, *box;
  359.  
  360.   frame=gtk_frame_new("Display");
  361.   gtk_container_border_width (GTK_CONTAINER (frame), 5);
  362.   gtk_widget_show(frame);
  363.  
  364.   box=gtk_hbox_new(FALSE,15);
  365.   gtk_container_add(GTK_CONTAINER(frame),box);
  366.   gtk_container_border_width(GTK_CONTAINER(box),5);
  367.   gtk_widget_show(box);
  368.  
  369.   Check_Button_In_A_Box (box,"CirclePalette",
  370.               (GtkSignalFunc) fp_show_hide_frame,
  371.               fpFrames.palette,TRUE);
  372.   Check_Button_In_A_Box (box,"Lighter And Darker",
  373.               (GtkSignalFunc) fp_show_hide_frame,
  374.               fpFrames.lnd,TRUE);
  375.   Check_Button_In_A_Box (box,"Saturation",
  376.               (GtkSignalFunc) fp_show_hide_frame,
  377.               fpFrames.satur,FALSE);
  378.   return frame;
  379. }
  380.  
  381. void Create_A_Preview (GtkWidget  **preview,
  382.                GtkWidget  **frame,
  383.                int        previewWidth,
  384.                int        previewHeight)
  385. {
  386.   *frame=gtk_frame_new(NULL);
  387.   gtk_frame_set_shadow_type (GTK_FRAME (*frame), GTK_SHADOW_IN);
  388.   gtk_container_border_width (GTK_CONTAINER(*frame),0);
  389.   gtk_widget_show(*frame);
  390.  
  391.   *preview=gtk_preview_new (Current.Color?GTK_PREVIEW_COLOR
  392.                              :GTK_PREVIEW_GRAYSCALE);
  393.   gtk_preview_size (GTK_PREVIEW (*preview), previewWidth, previewHeight);
  394.   gtk_widget_show(*preview);
  395.   gtk_container_add(GTK_CONTAINER(*frame),*preview);
  396. }
  397.  
  398.  
  399. GSList *  Button_In_A_Box        (GtkWidget  *vbox,
  400.                       GSList     *group,
  401.                       guchar     *label,
  402.                       GtkSignalFunc function,
  403.                       gpointer   data,
  404.                       int        clicked)
  405. {
  406.   GtkWidget *button;
  407.  
  408.   button=gtk_radio_button_new_with_label(group,label);
  409.   gtk_signal_connect (GTK_OBJECT (button), "clicked",
  410.               (GtkSignalFunc) function,
  411.               data);
  412.   gtk_widget_show(button);
  413.   gtk_box_pack_start (GTK_BOX(vbox),button, TRUE, TRUE, 0);
  414.   if (clicked)
  415.     gtk_button_clicked(GTK_BUTTON(button));
  416.   return gtk_radio_button_group(GTK_RADIO_BUTTON(button));
  417. }
  418.  
  419.  
  420.  
  421.  
  422. void Check_Button_In_A_Box       (GtkWidget  *vbox,
  423.                       guchar     *label,
  424.                       GtkSignalFunc function,
  425.                       gpointer   data,
  426.                       int        clicked)
  427. {
  428.   GtkWidget *button;
  429.  
  430.  
  431.   button=gtk_check_button_new_with_label(label);
  432.   gtk_signal_connect (GTK_OBJECT (button), "clicked",
  433.               (GtkSignalFunc) function,
  434.               data);
  435.   gtk_box_pack_start (GTK_BOX(vbox),button, TRUE, TRUE, 0);
  436.   gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (button),clicked);
  437.  
  438.   gtk_widget_show(button);
  439. }
  440.  
  441.  
  442. void Create_A_Table_Entry    (GtkWidget  **box,
  443.                      GtkWidget  *SmallerFrame,
  444.                      char       *description)
  445. {
  446.   GtkWidget *label, *button, *table;
  447.   *box = gtk_vbox_new(FALSE,1);
  448.   gtk_container_border_width (GTK_CONTAINER (*box),PR_BX_BRDR);
  449.   gtk_widget_show (*box);
  450.   label = gtk_label_new(description);
  451.   gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
  452.   gtk_widget_show (label);
  453.  
  454.   table=gtk_table_new(2,1,FALSE);
  455.   gtk_widget_show(table);
  456.  
  457.   gtk_box_pack_start (GTK_BOX(*box),table, TRUE, TRUE, 0);
  458.  
  459.   gtk_table_attach(GTK_TABLE(table),label,0,1,0,1,0,0,0,0);
  460.  
  461.   if (strcmp(description,"Current:")) {
  462.     button = gtk_button_new();
  463.     gtk_signal_connect (GTK_OBJECT (button), "clicked",
  464.                       (GtkSignalFunc) selectionMade,
  465.                       description);
  466.  
  467.     gtk_container_add(GTK_CONTAINER(button),SmallerFrame);
  468.     gtk_container_border_width (GTK_CONTAINER (button),0);
  469.     gtk_widget_show(button);
  470.     gtk_table_attach(GTK_TABLE(table), button, 0,1,1,2,0,0,0,5);
  471.   }
  472.   else
  473.     gtk_table_attach(GTK_TABLE(table), SmallerFrame, 0,1,1,2,0,0,0,5);
  474. }
  475.  
  476.  
  477. void
  478. fp_entire_image    (GtkWidget *button,
  479.             gpointer  data   )
  480. {
  481.   if (!GTK_TOGGLE_BUTTON(button)->active)
  482.     return;
  483.   Current.SlctnOnly = 0;
  484.   reduced=Reduce_The_Image(drawable,mask,
  485.                Current.PreviewSize,
  486.                Current.SlctnOnly);
  487.   Adjust_Preview_Sizes(reduced->width,reduced->height);
  488.   refreshPreviews(Current.VisibleFrames);
  489.   gtk_widget_queue_resize(GTK_WIDGET(dlg));
  490.   gtk_widget_draw(dlg,NULL);
  491. }
  492.  
  493.  
  494. void
  495. fp_selection_only  (GtkWidget *button,
  496.             gpointer  data )
  497. {
  498.   static int notFirstTime=0;
  499.  
  500.   if (!(notFirstTime++))  return;
  501.  
  502.   if (!GTK_TOGGLE_BUTTON(button)->active)
  503.     return;
  504.   Current.SlctnOnly = 1;
  505.   reduced=Reduce_The_Image(drawable,mask,
  506.                Current.PreviewSize,
  507.                Current.SlctnOnly);
  508.   Adjust_Preview_Sizes(reduced->width,reduced->height);
  509.   refreshPreviews(Current.VisibleFrames);
  510.   gtk_widget_queue_resize(GTK_WIDGET(dlg));
  511.   gtk_widget_draw(dlg,NULL);
  512. }
  513.  
  514.  
  515. void
  516. fp_selection_in_context  (GtkWidget *button,
  517.               gpointer  data )
  518. {
  519.   if (!GTK_TOGGLE_BUTTON(button)->active)
  520.     return;
  521.   Current.SlctnOnly = 2;
  522.   reduced=Reduce_The_Image(drawable,mask,
  523.                Current.PreviewSize,
  524.                Current.SlctnOnly);
  525.   Adjust_Preview_Sizes(reduced->width,reduced->height);
  526.   refreshPreviews(Current.VisibleFrames);
  527.   gtk_widget_queue_resize(GTK_WIDGET(dlg));
  528.   gtk_widget_draw(dlg,NULL);
  529. }
  530.  
  531. void fp_show_hide_frame (GtkWidget *button,
  532.              GtkWidget *frame)
  533. {
  534.   int prev=Current.VisibleFrames;
  535.   if (frame == NULL) return;
  536.   if (GTK_TOGGLE_BUTTON(button)->active)
  537.     if (!GTK_WIDGET_VISIBLE(frame)) {
  538.       gtk_widget_show(frame);
  539.       if (frame==fpFrames.palette)
  540.     Current.VisibleFrames |= HUE;
  541.       else if (frame==fpFrames.satur)
  542.     Current.VisibleFrames |= SATURATION;
  543.       else if (frame==fpFrames.lnd)
  544.     Current.VisibleFrames |= VALUE;
  545.       refreshPreviews(Current.VisibleFrames & ~prev);
  546.     }
  547.     else ;
  548.  
  549.   else
  550.     if (GTK_WIDGET_VISIBLE(frame)) {
  551.       gtk_widget_hide(frame);
  552.       if (frame==fpFrames.palette)
  553.     Current.VisibleFrames &= ~HUE;
  554.       else if (frame==fpFrames.satur)
  555.     Current.VisibleFrames &= ~SATURATION;
  556.       else if (frame==fpFrames.lnd)
  557.     Current.VisibleFrames &= ~VALUE;
  558.     }
  559. }
  560.  
  561.  
  562. void Adjust_Preview_Sizes(int width, int height)
  563. {
  564.   gtk_preview_size (GTK_PREVIEW (origPreview),    width, height);
  565.   gtk_preview_size (GTK_PREVIEW (curPreview),     width, height);
  566.   gtk_preview_size (GTK_PREVIEW (rPreview),       width, height);
  567.   gtk_preview_size (GTK_PREVIEW (gPreview),       width, height);
  568.   gtk_preview_size (GTK_PREVIEW (bPreview),       width, height);
  569.   gtk_preview_size (GTK_PREVIEW (cPreview),       width, height);
  570.   gtk_preview_size (GTK_PREVIEW (yPreview),       width, height);
  571.   gtk_preview_size (GTK_PREVIEW (mPreview),       width, height);
  572.   gtk_preview_size (GTK_PREVIEW (centerPreview),  width, height);
  573.   gtk_preview_size (GTK_PREVIEW (lighterPreview), width, height);
  574.   gtk_preview_size (GTK_PREVIEW (darkerPreview),  width, height);
  575.   gtk_preview_size (GTK_PREVIEW (middlePreview),  width, height);
  576.   gtk_preview_size (GTK_PREVIEW (minusSatPreview), width, height);
  577.   gtk_preview_size (GTK_PREVIEW (SatPreview),      width, height);
  578.   gtk_preview_size (GTK_PREVIEW (plusSatPreview),  width, height);
  579. }
  580.  
  581.  
  582. void
  583. selectionMade         (GtkWidget *widget,
  584.                gpointer   data)
  585. {
  586.   Current.Touched[Current.ValueBy] = 1;
  587.  
  588.   if      (!strcmp("Red:",data))     Update_Current_FP( HUE, RED     );
  589.   else if (!strcmp("Green:",data))   Update_Current_FP( HUE, GREEN   );
  590.   else if (!strcmp("Blue:",data))    Update_Current_FP( HUE, BLUE    );
  591.   else if (!strcmp("Cyan:",data))    Update_Current_FP( HUE, CYAN    );
  592.   else if (!strcmp("Yellow:",data))  Update_Current_FP( HUE, YELLOW  );
  593.   else if (!strcmp("Magenta:",data)) Update_Current_FP( HUE, MAGENTA );
  594.   else if (!strcmp("Darker:",data))  Update_Current_FP( VALUE, DOWN );
  595.   else if (!strcmp("Lighter:",data)) Update_Current_FP( VALUE, UP   );
  596.   else if (!strcmp("More Saturated:",data))
  597.     Update_Current_FP( SATURATION, UP );
  598.   else if (!strcmp("Less Saturated:",data))
  599.     Update_Current_FP( SATURATION, DOWN );
  600.  
  601.   refreshPreviews(Current.VisibleFrames);
  602. }
  603.  
  604.  
  605. void refreshPreviews(gint which)
  606. {
  607.   fp_Create_Nudge(nudgeArray);
  608.   fp_render_preview( origPreview,     NONEATALL,  0       );
  609.   fp_render_preview( curPreview,      CURRENT,    0       );
  610.   if (which & HUE) {
  611.     fp_render_preview( rPreview,        HUE,        RED     );
  612.     fp_render_preview( gPreview,        HUE,        GREEN   );
  613.     fp_render_preview( bPreview,        HUE,        BLUE    );
  614.     fp_render_preview( cPreview,        HUE,        CYAN    );
  615.     fp_render_preview( yPreview,        HUE,        YELLOW  );
  616.     fp_render_preview( mPreview,        HUE,        MAGENTA );
  617.     fp_render_preview( centerPreview,   CURRENT,    0       );
  618.   }
  619.   if (which & VALUE) {
  620.     fp_render_preview( lighterPreview,  VALUE,      UP      );
  621.     fp_render_preview( middlePreview,   CURRENT,    0       );
  622.     fp_render_preview( darkerPreview,   VALUE,      DOWN    );
  623.   }
  624.   if (which & SATURATION) {
  625.     fp_render_preview( plusSatPreview,  SATURATION, UP      );
  626.     fp_render_preview( SatPreview,      CURRENT,    0       );
  627.     fp_render_preview( minusSatPreview, SATURATION, DOWN    );
  628.   }
  629.  
  630. }
  631.  
  632. void
  633. fp_close_callback (GtkWidget *widget,
  634.               gpointer   data)
  635. {
  636.   gtk_main_quit ();
  637. }
  638.  
  639. void
  640. fp_ok_callback (GtkWidget *widget,
  641.            gpointer   data)
  642. {
  643.   FPint.run = TRUE;
  644.   gtk_widget_destroy (GTK_WIDGET (data));
  645. }
  646.  
  647.  
  648. void
  649. fp_scale_update (GtkAdjustment *adjustment,
  650.          float         *scale_val)
  651. {
  652.   static float prevValue=.25;
  653.   *scale_val = adjustment->value;
  654.   if (prevValue != adjustment->value) {
  655.     fp_Create_Nudge(nudgeArray);
  656.     refreshPreviews(Current.VisibleFrames);
  657.     if (AW.window != NULL && GTK_WIDGET_VISIBLE (AW.window))
  658.       fp_create_smoothness_graph(AW.aliasingPreview);
  659.     prevValue = adjustment->value;
  660.   }
  661. }
  662.  
  663. void
  664. fp_change_current_range  (GtkAdjustment *button,
  665.                   gint          *Intensity)
  666. {
  667.   static FP_Intensity prevValue=MIDTONES;
  668.   static int notFirstTime=0;
  669.  
  670.   if (!(notFirstTime++))  return;
  671.   if (!GTK_TOGGLE_BUTTON(button)->active)  return;
  672.   if (*Intensity == prevValue) return;
  673.  
  674.   Current.Range = *Intensity;
  675.   refreshPreviews(Current.VisibleFrames);
  676.   if (AW.window != NULL && GTK_WIDGET_VISIBLE (AW.window))
  677.     fp_create_smoothness_graph(AW.aliasingPreview);
  678.   prevValue = *Intensity;
  679. }
  680.  
  681. void
  682. fp_change_current_pixels_by  (GtkWidget *button,
  683.                       gint      *valueBy)
  684. {
  685.   int prevValue=VALUE;
  686.   static int notFirstTime=0;
  687.  
  688.   if (!(notFirstTime++))  return;
  689.   if (!GTK_TOGGLE_BUTTON(button)->active)  return;
  690.   if (*valueBy == prevValue) return;
  691.  
  692.   Current.ValueBy = *valueBy;
  693.   refreshPreviews(Current.VisibleFrames);
  694.   if (AW.window != NULL && GTK_WIDGET_VISIBLE (AW.window) && AW.rangePreview != NULL)
  695.     fp_range_preview_spill(AW.rangePreview,Current.ValueBy);
  696.  
  697.   prevValue = *valueBy;
  698. }
  699.  
  700. void
  701. fp_advanced_call ()
  702. {
  703.   if (AW.window!=NULL)
  704.     if(GTK_WIDGET_VISIBLE(AW.window))
  705.       gtk_widget_hide(AW.window);
  706.     else
  707.       gtk_widget_show(AW.window);
  708.   else
  709.     fp_advanced_dialog();
  710. }
  711.  
  712. int fp_dialog()
  713. {
  714.   GtkWidget *bna;
  715.   GtkWidget *palette;
  716.   GtkWidget *lnd;
  717.   GtkWidget *show;
  718.   GtkWidget *rough;
  719.   GtkWidget *range;
  720.   GtkWidget *frameSelect;
  721.   GtkWidget *pixelsBy;
  722.   GtkWidget *satur;
  723.  
  724.   GtkWidget *table;
  725.   GtkWidget *OKbutton, *CANCELbutton, *OPTIONSbutton, *RESETbutton;
  726.   GtkWidget *buttonTable;
  727.  
  728.   guchar *color_cube;
  729.   gchar **argv;
  730.   gint argc;
  731.  
  732.  
  733.   reduced=Reduce_The_Image(drawable,mask,
  734.                Current.PreviewSize,
  735.                Current.SlctnOnly);
  736.  
  737.   argc = 1;
  738.   argv = g_new (gchar *, 1);
  739.   argv[0] = g_strdup ("fp");
  740.  
  741.   gtk_init (&argc, &argv);
  742.   gtk_rc_parse (gimp_gtkrc ());
  743.  
  744.   gtk_preview_set_gamma (gimp_gamma ());
  745.   gtk_preview_set_install_cmap (gimp_install_cmap ());
  746.   color_cube = gimp_color_cube ();
  747.   gtk_preview_set_color_cube (color_cube[0], color_cube[1],
  748.                               color_cube[2], color_cube[3]);
  749.  
  750.   gtk_widget_set_default_visual (gtk_preview_get_visual ());
  751.   gtk_widget_set_default_colormap (gtk_preview_get_cmap ());
  752.  
  753.   /********************************************************************/
  754.   /************************* All the Standard Stuff *******************/
  755.   dlg = gtk_dialog_new ();
  756.   gtk_window_set_title (GTK_WINDOW (dlg), "Filter Pack Simulation");
  757.   gtk_signal_connect (GTK_OBJECT (dlg), "destroy",
  758.               (GtkSignalFunc) fp_close_callback,
  759.               NULL);
  760.  
  761.  
  762.   OKbutton = gtk_button_new_with_label ("OK");
  763.   GTK_WIDGET_SET_FLAGS (OKbutton, GTK_CAN_DEFAULT);
  764.   gtk_signal_connect (GTK_OBJECT (OKbutton), "clicked",
  765.                       (GtkSignalFunc) fp_ok_callback,
  766.                       dlg);
  767.   gtk_widget_grab_default (OKbutton);
  768.   gtk_widget_show (OKbutton);
  769.  
  770.   CANCELbutton = gtk_button_new_with_label ("Cancel");
  771.   GTK_WIDGET_SET_FLAGS (CANCELbutton, GTK_CAN_DEFAULT);
  772.   gtk_signal_connect_object (GTK_OBJECT (CANCELbutton), "clicked",
  773.                  (GtkSignalFunc) gtk_widget_destroy,
  774.                  GTK_OBJECT (dlg));
  775.   gtk_widget_show (CANCELbutton);
  776.  
  777.  
  778.   OPTIONSbutton = gtk_button_new_with_label ("Advanced Options");
  779.   GTK_WIDGET_SET_FLAGS (OPTIONSbutton, GTK_CAN_DEFAULT);
  780.   gtk_signal_connect_object (GTK_OBJECT (OPTIONSbutton), "clicked",
  781.                  (GtkSignalFunc) fp_advanced_call,
  782.                  NULL);
  783.   gtk_widget_show (OPTIONSbutton);
  784.  
  785.   RESETbutton = gtk_button_new_with_label ("Reset");
  786.   GTK_WIDGET_SET_FLAGS (RESETbutton, GTK_CAN_DEFAULT);
  787.   gtk_signal_connect_object (GTK_OBJECT (RESETbutton), "clicked",
  788.                  (GtkSignalFunc) resetFilterPacks,
  789.                  NULL);
  790.   gtk_widget_show (RESETbutton);
  791.  
  792.  
  793.   buttonTable=gtk_table_new(1,7,TRUE);
  794.   gtk_container_border_width(GTK_CONTAINER(buttonTable),0);
  795.   gtk_table_set_col_spacings(GTK_TABLE(buttonTable),3);
  796.  
  797.  
  798.   gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->action_area), buttonTable, TRUE, TRUE, 0);
  799.  
  800.   gtk_table_attach( GTK_TABLE(buttonTable), OKbutton,0,1,0,1,
  801.             GTK_FILL|GTK_EXPAND,0,0,0);
  802.   gtk_table_attach( GTK_TABLE(buttonTable), CANCELbutton,1,2,0,1,
  803.             GTK_FILL|GTK_EXPAND,0,0,0);
  804.   gtk_table_attach( GTK_TABLE(buttonTable), RESETbutton,6,7,0,1,
  805.             GTK_FILL|GTK_EXPAND,0,0,0);
  806.   gtk_table_attach( GTK_TABLE(buttonTable), OPTIONSbutton,4,6,0,1,
  807.             GTK_FILL|GTK_EXPAND,0,0,0);
  808.  
  809.   gtk_widget_show (buttonTable);
  810.  
  811.   /********************************************************************/
  812.  
  813.   fpFrames.bna          = bna          = fp_create_bna();
  814.   fpFrames.rough        = rough        = fp_create_rough();
  815.   fpFrames.range        = range        = fp_create_range();
  816.   fpFrames.palette      = palette      = fp_create_circle_palette();
  817.   fpFrames.lnd          = lnd          = fp_create_lnd();
  818.   fpFrames.show         = show         = fp_create_show();
  819.   fpFrames.satur        = satur        = fp_create_msnls();
  820.   fpFrames.frameSelect  = frameSelect  = fp_create_frame_select();
  821.   fpFrames.pixelsBy     = pixelsBy     = fp_create_pixels_select_by();
  822.   /********************************************************************/
  823.   /********************   PUT EVRYTHING TOGETHER     ******************/
  824.  
  825.   table=gtk_table_new(4,4,FALSE);
  826.   gtk_table_attach(GTK_TABLE(table),
  827.            bna,0,1,0,2,
  828.            GTK_EXPAND|GTK_FILL,
  829.            GTK_EXPAND|GTK_FILL,
  830.            0,0);
  831.   gtk_table_attach(GTK_TABLE(table),
  832.            rough,2,3,2,3,
  833.            GTK_EXPAND|GTK_FILL,
  834.            GTK_EXPAND|GTK_FILL,
  835.            0,0);
  836.   gtk_table_attach(GTK_TABLE(table),
  837.            range,1,2,0,2,
  838.            GTK_EXPAND|GTK_FILL,
  839.            GTK_EXPAND|GTK_FILL,
  840.            0,0);
  841.   gtk_table_attach(GTK_TABLE(table),
  842.            frameSelect,0,2,2,3,
  843.            GTK_EXPAND|GTK_FILL,
  844.            GTK_EXPAND|GTK_FILL,
  845.            0,0);
  846.   gtk_table_attach(GTK_TABLE(table),
  847.            palette,0,2,3,4,
  848.            GTK_EXPAND|GTK_FILL,
  849.            GTK_EXPAND|GTK_FILL,
  850.            0,0);
  851.   gtk_table_attach(GTK_TABLE(table),
  852.            lnd,2,3,3,4,
  853.            GTK_EXPAND|GTK_FILL,
  854.            GTK_EXPAND|GTK_FILL,
  855.            0,0);
  856.    gtk_table_attach(GTK_TABLE(table),
  857.            satur,3,4,3,4,
  858.            GTK_EXPAND|GTK_FILL,
  859.            GTK_EXPAND|GTK_FILL,
  860.            0,0);
  861.   gtk_table_attach(GTK_TABLE(table),
  862.            show,2,3,0,2,
  863.            GTK_EXPAND|GTK_FILL,
  864.            GTK_EXPAND|GTK_FILL,
  865.            0,0);
  866.   gtk_table_attach(GTK_TABLE(table),
  867.            pixelsBy,3,4,0,2,
  868.            GTK_EXPAND|GTK_FILL,
  869.            GTK_EXPAND|GTK_FILL,
  870.            0,0);
  871.  
  872.   gtk_box_pack_start(GTK_BOX(GTK_DIALOG (dlg)->vbox), table, TRUE,TRUE,0);
  873.   gtk_widget_show(table);
  874.   gtk_widget_show (dlg);
  875.  
  876.   refreshPreviews(Current.VisibleFrames);
  877.   gtk_main ();
  878.   gdk_flush ();
  879.  
  880.   return FPint.run;
  881. }
  882.  
  883. /***********************************************************/
  884. /************   Advanced Options Window   ******************/
  885. /***********************************************************/
  886.  
  887. void fp_advanced_ok()
  888. {
  889.   gtk_widget_hide(AW.window);
  890. }
  891.  
  892.  
  893. void
  894. As_You_Drag           (GtkWidget *button)
  895. {
  896.   static int notFirstTime=0;
  897.   if (!(notFirstTime++))  return;
  898.  
  899.   if (GTK_TOGGLE_BUTTON(button)->active) {
  900.     Current.RealTime=TRUE;
  901.     gtk_range_set_update_policy (GTK_RANGE (Current.roughnessScale),0);
  902.     gtk_range_set_update_policy (GTK_RANGE (Current.aliasingScale),0);
  903.     gtk_range_set_update_policy (GTK_RANGE (Current.previewSizeScale),0);
  904.   }
  905.   else {
  906.     Current.RealTime=FALSE;
  907.     gtk_range_set_update_policy (GTK_RANGE (Current.roughnessScale),
  908.                  GTK_UPDATE_DELAYED);
  909.     gtk_range_set_update_policy (GTK_RANGE (Current.aliasingScale),
  910.                  GTK_UPDATE_DELAYED);
  911.     gtk_range_set_update_policy (GTK_RANGE (Current.previewSizeScale),
  912.                  GTK_UPDATE_DELAYED);
  913.   }
  914.  
  915.   return;
  916. }
  917.  
  918.  
  919. void
  920. preview_size_scale_update (GtkAdjustment *adjustment,
  921.                float         *scale_val)
  922. {
  923.   *scale_val = adjustment->value;
  924.   reduced=Reduce_The_Image(drawable,mask,
  925.                Current.PreviewSize,
  926.                Current.SlctnOnly);
  927.   Adjust_Preview_Sizes(reduced->width,reduced->height);
  928.   refreshPreviews(Current.VisibleFrames);
  929.   gtk_widget_queue_resize(GTK_WIDGET(dlg));
  930.   gtk_widget_draw(dlg,NULL);
  931. }
  932.  
  933.  
  934. gint fp_advanced_dialog()
  935. {
  936.   guchar *rangeNames[]={"Shadows:", "Midtones:", "Highlights:"};
  937.   GtkWidget *button;
  938.   GtkWidget *frame;
  939.   GtkObject *smoothnessData;
  940.   GtkWidget *graphFrame, *table, *scale;
  941.   GtkWidget *vbox, *label, *labelTable;
  942.   GtkWidget *optionsFrame;
  943.   int i;
  944.  
  945.   AW.window=gtk_dialog_new();
  946.   gtk_window_set_title(GTK_WINDOW(AW.window),"Advanced Filter Pack Options");
  947.   button = gtk_button_new_with_label ("OK");
  948.   GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
  949.   gtk_signal_connect (GTK_OBJECT (button), "clicked",
  950.                       (GtkSignalFunc) fp_advanced_ok,
  951.                       NULL);
  952.   gtk_widget_grab_default (button);
  953.   gtk_widget_show (button);
  954.   gtk_box_pack_start (GTK_BOX (GTK_DIALOG (AW.window)->action_area), button, TRUE, TRUE, 0);
  955.  
  956.  
  957.   /************************************************************/
  958.   frame = gtk_frame_new("Smoothness of Aliasing");
  959.   gtk_container_border_width(GTK_CONTAINER(frame),10);
  960.   gtk_widget_show(frame);
  961.  
  962.   gtk_box_pack_start(GTK_BOX (GTK_DIALOG (AW.window)->vbox),frame, TRUE, TRUE,0);
  963.  
  964.   table=gtk_table_new(3,1,FALSE);
  965.   gtk_widget_show(table);
  966.   gtk_container_add(GTK_CONTAINER(frame),table);
  967.  
  968.   graphFrame=gtk_frame_new(NULL);
  969.   gtk_frame_set_shadow_type (GTK_FRAME (graphFrame), GTK_SHADOW_IN);
  970.   gtk_container_border_width (GTK_CONTAINER(graphFrame),0);
  971.   gtk_widget_show(graphFrame);
  972.   gtk_table_attach(GTK_TABLE(table),graphFrame,0,1,0,1,
  973.            GTK_EXPAND,
  974.            0,
  975.            10,10);
  976.  
  977.   vbox=gtk_vbox_new(FALSE,0);
  978.   gtk_widget_show(vbox);
  979.   gtk_container_add(GTK_CONTAINER(graphFrame),vbox);
  980.  
  981.   AW.aliasingPreview=gtk_preview_new (GTK_PREVIEW_COLOR);
  982.   gtk_preview_size (GTK_PREVIEW (AW.aliasingPreview), 256, MAX_ROUGHNESS);
  983.   gtk_widget_show(AW.aliasingPreview);
  984.   gtk_box_pack_start(GTK_BOX(vbox),AW.aliasingPreview,TRUE,TRUE,0);
  985.   fp_create_smoothness_graph(AW.aliasingPreview);
  986.  
  987.   AW.rangePreview=gtk_preview_new (GTK_PREVIEW_COLOR);
  988.   gtk_preview_size (GTK_PREVIEW (AW.rangePreview), 256, RANGE_HEIGHT);
  989.   gtk_widget_show(AW.rangePreview);
  990.   gtk_box_pack_start(GTK_BOX(vbox),AW.rangePreview,TRUE,TRUE,0);
  991.   fp_range_preview_spill(AW.rangePreview,Current.ValueBy);
  992.  
  993.  
  994.   labelTable=gtk_table_new(3,4,FALSE);
  995.   gtk_widget_show(labelTable);
  996.   gtk_table_attach(GTK_TABLE(table),labelTable,0,1,1,2,
  997.            GTK_EXPAND,
  998.            0,
  999.            0,15);
  1000.  
  1001.   for (i=0; i<12; i++)
  1002.     {
  1003.       label=Current.rangeLabels[i]=gtk_label_new("-");
  1004.       gtk_widget_show(label);
  1005.       gtk_table_attach(GTK_TABLE(labelTable),label,i%4, i%4+1,i/4, i/4+1,
  1006.                GTK_EXPAND|GTK_FILL,0,5,0);
  1007.       if (!(i%4)) {
  1008.     gtk_label_set(GTK_LABEL(label),rangeNames[i/4]);
  1009.     gtk_misc_set_alignment(GTK_MISC(label),0.0,1.0);
  1010.       }
  1011.     }
  1012.   /************************************************************/
  1013.   /************************************************************/
  1014.   /************************************************************/
  1015.  
  1016.  
  1017.   AW.aliasingGraph = gtk_drawing_area_new();
  1018.   gtk_drawing_area_size (GTK_DRAWING_AREA (AW.aliasingGraph),
  1019.                256,
  1020.               15);
  1021.   gtk_box_pack_start(GTK_BOX(vbox), AW.aliasingGraph, TRUE, TRUE, 0);
  1022.   gtk_widget_show(AW.aliasingGraph);
  1023.   gtk_widget_set_events(AW.aliasingGraph,RANGE_ADJUST_MASK);
  1024.   gtk_signal_connect(GTK_OBJECT(AW.aliasingGraph),"event",
  1025.              (GtkSignalFunc) FP_Range_Change_Events,
  1026.              &Current);
  1027.  
  1028.  
  1029.   /************************************************************/
  1030.   /************************************************************/
  1031.   /************************************************************/
  1032.  
  1033.  
  1034.   smoothnessData = gtk_adjustment_new (Current.Alias, 0, 1.0, 0.05, 0.01, 0.0);
  1035.  
  1036.   Current.aliasingScale =
  1037.   scale=gtk_hscale_new (GTK_ADJUSTMENT (smoothnessData));
  1038.   gtk_widget_set_usize (scale, 200, 0);
  1039.   gtk_scale_set_digits (GTK_SCALE (scale), 2);
  1040.   gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_TOP);
  1041.   gtk_range_set_update_policy (GTK_RANGE (scale), 0);
  1042.   gtk_signal_connect (GTK_OBJECT (smoothnessData), "value_changed",
  1043.               (GtkSignalFunc) fp_scale_update,
  1044.               &Current.Alias);
  1045.   gtk_widget_show (scale);
  1046.   gtk_table_attach(GTK_TABLE(table),scale,0,1,2,3,0,0,0,15);
  1047.  
  1048.   /************************************************************/
  1049.   /******************* MISC OPTIONS ***************************/
  1050.   /************************************************************/
  1051.  
  1052.  
  1053.   optionsFrame=gtk_frame_new("Miscellaneous Options");
  1054.   gtk_container_border_width(GTK_CONTAINER(optionsFrame),10);
  1055.   gtk_widget_show(optionsFrame);
  1056.  
  1057.   gtk_box_pack_start(GTK_BOX (GTK_DIALOG (AW.window)->vbox),optionsFrame, TRUE, TRUE,0);
  1058.  
  1059.   table=gtk_table_new(2,2,FALSE);
  1060.   gtk_widget_show(table);
  1061.   gtk_container_add(GTK_CONTAINER(optionsFrame),table);
  1062.  
  1063.   vbox=gtk_vbox_new(FALSE,8);
  1064.   gtk_container_border_width(GTK_CONTAINER(vbox),10);
  1065.   gtk_widget_show(vbox);
  1066.   gtk_table_attach(GTK_TABLE(table),vbox,0,1,0,1,0,0,5,5);
  1067.  
  1068.   Check_Button_In_A_Box (vbox,"Preview As You Drag",
  1069.               (GtkSignalFunc) As_You_Drag,
  1070.               NULL,TRUE);
  1071.  
  1072.   Check_Button_In_A_Box (vbox,"Pixel Selection Menu",
  1073.               (GtkSignalFunc)fp_show_hide_frame,
  1074.               fpFrames.pixelsBy,FALSE);
  1075.  
  1076.  
  1077.   smoothnessData = gtk_adjustment_new (Current.PreviewSize,
  1078.                        50, MAX_PREVIEW_SIZE,
  1079.                        5, 5, 0.0);
  1080.  
  1081.  
  1082.   frame=gtk_frame_new("Preview Size");
  1083.   gtk_widget_show(frame);
  1084.   gtk_container_border_width(GTK_CONTAINER(frame),10);
  1085.  
  1086.   Current.previewSizeScale=
  1087.   scale=gtk_hscale_new (GTK_ADJUSTMENT (smoothnessData));
  1088.   gtk_container_add(GTK_CONTAINER(frame),scale);
  1089.   gtk_widget_set_usize (scale, 100, 0);
  1090.   gtk_scale_set_digits (GTK_SCALE (scale), 0);
  1091.   gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_TOP);
  1092.   gtk_range_set_update_policy (GTK_RANGE (scale), 0);
  1093.   gtk_signal_connect (GTK_OBJECT (smoothnessData), "value_changed",
  1094.               (GtkSignalFunc) preview_size_scale_update,
  1095.               &Current.PreviewSize);
  1096.   gtk_widget_show (scale);
  1097.   gtk_table_attach(GTK_TABLE(table),frame,0,1,1,2,GTK_FILL,0,5,5);
  1098.  
  1099.   gtk_widget_show(AW.window);
  1100.   return 1;
  1101. }
  1102.