home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 2002 April / pcpro0402.iso / essentials / graphics / Gimp / gimp-src-20001226.exe / src / gimp / plug-ins / gimpressionist / size.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-08-31  |  9.2 KB  |  229 lines

  1. #ifdef HAVE_CONFIG_H
  2. #include "config.h"
  3. #else
  4. #define HAVE_DIRENT_H
  5. #define HAVE_UNISTD_H
  6. #endif
  7.  
  8. #include <stdio.h>
  9. #include <string.h>
  10. #include <gtk/gtk.h>
  11. #include <sys/types.h>
  12. #ifdef HAVE_UNISTD_H
  13. #include <unistd.h>
  14. #endif
  15. #include "gimpressionist.h"
  16. #include "ppmtool.h"
  17. #include <libgimp/stdplugins-intl.h>
  18.  
  19. GtkObject *sizenumadjust = NULL;
  20. GtkObject *sizefirstadjust = NULL;
  21. GtkObject *sizelastadjust = NULL;
  22.  
  23. #define NUMSIZERADIO 8
  24.  
  25. GtkWidget *sizeradio[NUMSIZERADIO];
  26.  
  27. void sizechange(GtkWidget *wg, void *d, int num)
  28. {
  29.   int n;
  30.   if(wg) {
  31.     n = (long)d;
  32.     pcvals.sizetype = n;
  33.   } else {
  34.     int i;
  35.     n = num;
  36.     for(i = 0; i < NUMSIZERADIO; i++)
  37.       if(i != n)
  38.     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(sizeradio[i]), FALSE);
  39.     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(sizeradio[n]), TRUE);
  40.   }
  41. }
  42.  
  43. void create_sizepage(GtkNotebook *notebook)
  44. {
  45.   GtkWidget *box1, *box2, *box3, *box4, *thispage;
  46.   GtkWidget *labelbox, *menubox;
  47.   GtkWidget *tmpw;
  48.   int i;
  49.  
  50.   labelbox = gtk_hbox_new (FALSE, 0);
  51.   tmpw = gtk_label_new (_("Size"));
  52.   gtk_box_pack_start(GTK_BOX(labelbox), tmpw, FALSE, FALSE, 0);
  53.   gtk_widget_show_all(labelbox);
  54.  
  55.   menubox = gtk_hbox_new (FALSE, 0);
  56.   tmpw = gtk_label_new (_("Size"));
  57.   gtk_box_pack_start(GTK_BOX(menubox), tmpw, FALSE, FALSE, 0);
  58.   gtk_widget_show_all(menubox);
  59.  
  60.   thispage = gtk_vbox_new(FALSE, 0);
  61.   gtk_container_set_border_width (GTK_CONTAINER (thispage), 5);
  62.   gtk_widget_show(thispage);
  63.  
  64.   box1 = gtk_hbox_new (FALSE, 0);
  65.   gtk_box_pack_start(GTK_BOX(thispage), box1,FALSE,FALSE,0);
  66.   gtk_widget_show (box1);
  67.  
  68.   box2 = gtk_vbox_new (TRUE, 0);
  69.   gtk_box_pack_start(GTK_BOX(box1), box2,FALSE,FALSE,0);
  70.   gtk_widget_show (box2);
  71.  
  72.   tmpw = gtk_label_new( _("Sizes:"));
  73.   gtk_box_pack_start(GTK_BOX(box2), tmpw,FALSE,FALSE,0);
  74.   gtk_widget_show (tmpw);
  75.  
  76.   tmpw = gtk_label_new( _("Min size:"));
  77.   gtk_box_pack_start(GTK_BOX(box2), tmpw,FALSE,FALSE,0);
  78.   gtk_widget_show (tmpw);
  79.  
  80.   tmpw = gtk_label_new( _("Max size:"));
  81.   gtk_box_pack_start(GTK_BOX(box2), tmpw,FALSE,FALSE,0);
  82.   gtk_widget_show (tmpw);
  83.  
  84.  
  85.   box2 = gtk_vbox_new (TRUE, 0);
  86.   gtk_box_pack_start(GTK_BOX(box1), box2,FALSE,FALSE, 10);
  87.   gtk_widget_show (box2);
  88.  
  89.   sizenumadjust = gtk_adjustment_new(pcvals.sizenum, 1.0, 31.0, 1.0, 1.0, 1.0);
  90.   tmpw = gtk_hscale_new(GTK_ADJUSTMENT(sizenumadjust));
  91.   gtk_widget_set_usize (GTK_WIDGET(tmpw), 150, 30);
  92.   gtk_scale_set_draw_value (GTK_SCALE (tmpw), TRUE);
  93.   gtk_scale_set_digits(GTK_SCALE (tmpw), 0);
  94.   gtk_box_pack_start (GTK_BOX (box2), tmpw, FALSE, FALSE, 0);
  95.   gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips), tmpw, _("The number of directions (i.e. brushes) to use"), NULL);
  96.   gtk_widget_show (tmpw);
  97.  
  98.   sizefirstadjust = gtk_adjustment_new(pcvals.sizefirst, 0.0, 361.0, 1.0, 1.0, 1.0);
  99.   tmpw = gtk_hscale_new(GTK_ADJUSTMENT(sizefirstadjust));
  100.   gtk_widget_set_usize (GTK_WIDGET(tmpw), 150, 30);
  101.   gtk_scale_set_draw_value (GTK_SCALE (tmpw), TRUE);
  102.   gtk_scale_set_digits(GTK_SCALE (tmpw), 2);
  103.   gtk_box_pack_start (GTK_BOX (box2), tmpw, FALSE, FALSE, 0);
  104.   gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips), tmpw, _("The smallest brush to create"), NULL);
  105.   gtk_widget_show (tmpw);
  106.  
  107.   sizelastadjust = gtk_adjustment_new(pcvals.sizelast, 0.0, 361.0, 1.0, 1.0, 1.0);
  108.   tmpw = gtk_hscale_new(GTK_ADJUSTMENT(sizelastadjust));
  109.   gtk_widget_set_usize (GTK_WIDGET(tmpw), 150, 30);
  110.   gtk_scale_set_draw_value (GTK_SCALE (tmpw), TRUE);
  111.   gtk_scale_set_digits(GTK_SCALE (tmpw), 2);
  112.   gtk_box_pack_start (GTK_BOX (box2), tmpw, FALSE, FALSE, 0);
  113.   gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips), tmpw, _("The largest brush to create"), NULL);
  114.   gtk_widget_show (tmpw);
  115.  
  116.   box2 = gtk_hbox_new (FALSE, 0);
  117.   gtk_box_pack_start(GTK_BOX(thispage), box2,FALSE,FALSE,0);
  118.   gtk_widget_show (box2);
  119.  
  120.   tmpw = gtk_label_new( _("Size:"));
  121.   gtk_box_pack_start(GTK_BOX(box2), tmpw,FALSE,FALSE,0);
  122.   gtk_widget_show (tmpw);
  123.  
  124.   box3 = gtk_vbox_new(FALSE,0);
  125.   gtk_box_pack_start(GTK_BOX(box2), box3,FALSE,FALSE, 10);
  126.   gtk_widget_show(box3);
  127.  
  128.   i = pcvals.sizetype;
  129.  
  130.   sizeradio[0] = tmpw = gtk_radio_button_new_with_label(NULL, _("Value"));
  131.   gtk_box_pack_start(GTK_BOX(box3), tmpw, FALSE, FALSE, 0);
  132.   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tmpw), FALSE);
  133.   gtk_widget_show(tmpw);
  134.   gtk_signal_connect(GTK_OBJECT(tmpw), "clicked",
  135.              (GtkSignalFunc)sizechange, (void *)0);
  136.   gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips), tmpw, _("Let the value (brightness) of the region determine the size of the stroke"), NULL);
  137.   if(i == 0)
  138.     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tmpw), TRUE);
  139.  
  140.   sizeradio[1] = tmpw = gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(tmpw)), _("Radius"));
  141.   gtk_box_pack_start(GTK_BOX(box3), tmpw, FALSE, FALSE, 0);
  142.   gtk_widget_show(tmpw);
  143.   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tmpw), FALSE);
  144.   gtk_signal_connect(GTK_OBJECT(tmpw), "clicked",
  145.              (GtkSignalFunc)sizechange, (void *)1);
  146.   gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips), tmpw, _("The distance from the center of the image determines the size of the stroke"), NULL);
  147.   if(i == 1)
  148.     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tmpw), TRUE);
  149.     
  150.   sizeradio[2] = tmpw = gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(tmpw)), _("Random"));
  151.   gtk_box_pack_start(GTK_BOX(box3), tmpw, FALSE, FALSE, 0);
  152.   gtk_widget_show(tmpw);
  153.   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tmpw), FALSE);
  154.   gtk_signal_connect(GTK_OBJECT(tmpw), "clicked",
  155.              (GtkSignalFunc)sizechange, (void *)2);
  156.   gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips), tmpw, _("Selects a random size for each stroke"), NULL);
  157.   if(i == 2)
  158.     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tmpw), TRUE);
  159.  
  160.   sizeradio[3] = tmpw = gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(tmpw)), _("Radial"));
  161.   gtk_box_pack_start(GTK_BOX(box3), tmpw, FALSE, FALSE, 0);
  162.   gtk_widget_show(tmpw);
  163.   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tmpw), FALSE);
  164.   gtk_signal_connect(GTK_OBJECT(tmpw), "clicked",
  165.              (GtkSignalFunc)sizechange, (void *)3);
  166.   gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips), tmpw, _("Let the direction from the center determine the size of the stroke"), NULL);
  167.   if(i == 3)
  168.     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tmpw), TRUE);
  169.  
  170.   box3 = gtk_vbox_new(FALSE,0);
  171.   gtk_box_pack_start(GTK_BOX(box2), box3,FALSE,FALSE, 10);
  172.   gtk_widget_show(box3);
  173.  
  174.  
  175.   sizeradio[4] = tmpw = gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(tmpw)), _("Flowing"));
  176.   gtk_box_pack_start(GTK_BOX(box3), tmpw, FALSE, FALSE, 0);
  177.   gtk_widget_show(tmpw);
  178.   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tmpw), FALSE);
  179.   gtk_signal_connect(GTK_OBJECT(tmpw), "clicked",
  180.              (GtkSignalFunc)sizechange, (void *)4);
  181.   gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips), tmpw, _("The strokes follow a \"flowing\" pattern"), NULL);
  182.   if(i == 4)
  183.     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tmpw), TRUE);
  184.  
  185.  
  186.   sizeradio[5] = tmpw = gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(tmpw)), _("Hue"));
  187.   gtk_box_pack_start(GTK_BOX(box3), tmpw, FALSE, FALSE, 0);
  188.   gtk_widget_show(tmpw);
  189.   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tmpw), FALSE);
  190.   gtk_signal_connect(GTK_OBJECT(tmpw), "clicked",
  191.              (GtkSignalFunc)sizechange, (void *)5);
  192.   gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips), tmpw, _("The hue of the region determines the size of the stroke"), NULL);
  193.   if(i == 5)
  194.     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tmpw), TRUE);
  195.  
  196.   sizeradio[6] = tmpw = gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(tmpw)), _("Adaptive"));
  197.   gtk_box_pack_start(GTK_BOX(box3), tmpw, FALSE, FALSE, 0);
  198.   gtk_widget_show(tmpw);
  199.   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tmpw), FALSE);
  200.   gtk_signal_connect(GTK_OBJECT(tmpw), "clicked",
  201.              (GtkSignalFunc)sizechange, (void *)6);
  202.   gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips), tmpw, _("The brush-size that matches the original image the closest is selected"), NULL);
  203.   if(i == 6)
  204.     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tmpw), TRUE);
  205.  
  206.   box4 = gtk_hbox_new(FALSE, 0);
  207.   gtk_box_pack_start(GTK_BOX(box3), box4, FALSE, FALSE, 0);
  208.   gtk_widget_show(box4);
  209.  
  210.   sizeradio[7] = tmpw = gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(tmpw)), _("Manual"));
  211.   gtk_box_pack_start(GTK_BOX(box4), tmpw, FALSE, FALSE, 0);
  212.   gtk_widget_show(tmpw);
  213.   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tmpw), FALSE);
  214.   gtk_signal_connect(GTK_OBJECT(tmpw), "clicked",
  215.              (GtkSignalFunc)sizechange, (void *)7);
  216.   gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips), tmpw, _("Manually specify the stroke size"), NULL);
  217.   if(i == 7)
  218.     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tmpw), TRUE);
  219.  
  220.   tmpw = gtk_button_new_with_label( _("Edit..."));
  221.   gtk_box_pack_start(GTK_BOX(box4), tmpw, FALSE, FALSE, 0);
  222.   gtk_widget_show(tmpw);
  223.   gtk_signal_connect(GTK_OBJECT(tmpw), "clicked",
  224.              (GtkSignalFunc)create_sizemap_dialog, NULL);
  225.   gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips), tmpw, _("Opens up the Size Map Editor"), NULL);
  226.  
  227.   gtk_notebook_append_page_menu (notebook, thispage, labelbox, menubox);
  228. }
  229.