2001-12-29 21:26:29 +08:00
# include "config.h"
1999-08-27 06:29:37 +08:00
# include <stdio.h>
# include <stdlib.h>
# include <math.h>
# include <string.h>
2001-12-29 21:26:29 +08:00
# ifdef __GNUC__
# warning GTK_DISABLE_DEPRECATED
# endif
# undef GTK_DISABLE_DEPRECATED
1999-08-27 06:29:37 +08:00
# include <gtk/gtk.h>
2001-12-29 21:26:29 +08:00
2003-02-04 20:50:42 +08:00
# include <libgimp/gimp.h>
# include <libgimp/gimpui.h>
1999-08-27 06:29:37 +08:00
# include "gimpressionist.h"
# include "ppmtool.h"
2004-07-02 21:31:25 +08:00
# include "size.h"
# include "preview.h"
2001-12-29 21:26:29 +08:00
# include "libgimp/stdplugins-intl.h"
1999-08-27 06:29:37 +08:00
2003-11-06 23:27:05 +08:00
# define RESPONSE_APPLY 1
1999-08-27 06:29:37 +08:00
# define MAPFILE "data.out"
2002-12-18 04:18:16 +08:00
static GtkWidget * smwindow ;
2002-12-10 18:39:23 +08:00
static GtkWidget * smvectorprev ;
static GtkWidget * smpreviewprev ;
static GtkWidget * prev_button ;
static GtkWidget * next_button ;
static GtkWidget * add_button ;
static GtkWidget * kill_button ;
1999-08-27 06:29:37 +08:00
2004-07-02 21:31:25 +08:00
static GtkObject * smvectprevbrightadjust = NULL ;
1999-08-27 06:29:37 +08:00
2004-07-02 21:31:25 +08:00
static GtkObject * sizadjust = NULL ;
static GtkObject * smstradjust = NULL ;
static GtkObject * smstrexpadjust = NULL ;
static GtkWidget * sizevoronoi = NULL ;
1999-08-27 06:29:37 +08:00
# define OMWIDTH 150
# define OMHEIGHT 150
2002-12-10 18:39:23 +08:00
static smvector_t smvector [ MAXSIZEVECT ] ;
static int numsmvect = 0 ;
1999-08-27 06:29:37 +08:00
2004-07-02 21:31:25 +08:00
static double getsiz_from_gui ( double x , double y )
1999-08-27 06:29:37 +08:00
{
2004-07-02 21:31:25 +08:00
return getsiz_proto ( x , y , numsmvect , smvector ,
GTK_ADJUSTMENT ( smstrexpadjust ) - > value ,
GTK_TOGGLE_BUTTON ( sizevoronoi ) - > active ) ;
1999-08-27 06:29:37 +08:00
}
2004-07-02 21:31:25 +08:00
static void updatesmpreviewprev ( void )
1999-08-27 06:29:37 +08:00
{
2003-10-25 04:57:29 +08:00
gint x , y ;
static ppm_t nsbuffer ;
1999-08-30 05:06:26 +08:00
guchar black [ 3 ] = { 0 , 0 , 0 } ;
guchar gray [ 3 ] = { 120 , 120 , 120 } ;
1999-08-27 06:29:37 +08:00
2004-01-21 01:10:16 +08:00
if ( ! nsbuffer . col )
2003-10-25 04:57:29 +08:00
{
newppm ( & nsbuffer , OMWIDTH , OMHEIGHT ) ;
}
1999-08-30 05:06:26 +08:00
fill ( & nsbuffer , black ) ;
1999-08-27 06:29:37 +08:00
2003-10-25 04:57:29 +08:00
for ( y = 6 ; y < OMHEIGHT - 4 ; y + = 10 )
{
2004-01-21 01:10:16 +08:00
for ( x = 6 ; x < OMWIDTH - 4 ; x + = 10 )
2004-07-02 21:31:25 +08:00
{
gdouble siz = 5 * getsiz_from_gui ( x / ( double ) OMWIDTH ,
y / ( double ) OMHEIGHT ) ;
drawline ( & nsbuffer , x - siz , y - siz , x + siz , y - siz , gray ) ;
drawline ( & nsbuffer , x + siz , y - siz , x + siz , y + siz , gray ) ;
drawline ( & nsbuffer , x + siz , y + siz , x - siz , y + siz , gray ) ;
drawline ( & nsbuffer , x - siz , y + siz , x - siz , y - siz , gray ) ;
}
1999-08-27 06:29:37 +08:00
}
2003-10-25 04:57:29 +08:00
for ( y = 0 ; y < OMHEIGHT ; y + + )
1999-08-30 05:06:26 +08:00
gtk_preview_draw_row ( GTK_PREVIEW ( smpreviewprev ) , & nsbuffer . col [ y * nsbuffer . width * 3 ] , 0 , y , OMWIDTH ) ;
1999-08-27 06:29:37 +08:00
gtk_widget_draw ( smpreviewprev , NULL ) ;
}
2002-12-10 18:39:23 +08:00
static gint selectedsmvector = 0 ;
1999-08-27 06:29:37 +08:00
2004-07-02 21:31:25 +08:00
static void updatesmvectorprev ( void )
1999-08-27 06:29:37 +08:00
{
2002-11-20 04:25:57 +08:00
static ppm_t backup = { 0 , 0 , NULL } ;
static ppm_t sbuffer = { 0 , 0 , NULL } ;
1999-08-27 06:29:37 +08:00
static int ok = 0 ;
2003-10-25 04:57:29 +08:00
gint i , x , y ;
gdouble val ;
static gdouble lastval = 0.0 ;
1999-08-30 05:06:26 +08:00
guchar gray [ 3 ] = { 120 , 120 , 120 } ;
guchar red [ 3 ] = { 255 , 0 , 0 } ;
guchar white [ 3 ] = { 255 , 255 , 255 } ;
1999-08-27 06:29:37 +08:00
2003-07-24 19:35:41 +08:00
if ( smvectprevbrightadjust )
2002-12-10 18:39:23 +08:00
val = 1.0 - GTK_ADJUSTMENT ( smvectprevbrightadjust ) - > value / 100.0 ;
2003-07-24 19:35:41 +08:00
else
2002-12-10 18:39:23 +08:00
val = 0.5 ;
1999-08-27 06:29:37 +08:00
2004-01-21 01:10:16 +08:00
if ( ! ok | | ( val ! = lastval ) )
2003-10-25 04:57:29 +08:00
{
if ( ! infile . col )
2004-07-02 21:31:25 +08:00
updatepreview ( NULL , ( void * ) 2 ) ; /* Force grabarea() */
2003-10-25 04:57:29 +08:00
copyppm ( & infile , & backup ) ;
ppmbrightness ( & backup , val , 1 , 1 , 1 ) ;
if ( backup . width ! = OMWIDTH | | backup . height ! = OMHEIGHT )
2004-07-02 21:31:25 +08:00
resize_fast ( & backup , OMWIDTH , OMHEIGHT ) ;
2003-10-25 04:57:29 +08:00
ok = 1 ;
1999-08-27 06:29:37 +08:00
}
copyppm ( & backup , & sbuffer ) ;
2004-01-21 01:10:16 +08:00
for ( i = 0 ; i < numsmvect ; i + + )
2003-10-25 04:57:29 +08:00
{
x = smvector [ i ] . x * OMWIDTH ;
y = smvector [ i ] . y * OMHEIGHT ;
2004-07-02 21:31:25 +08:00
if ( i = = selectedsmvector )
{
drawline ( & sbuffer , x - 5 , y , x + 5 , y , red ) ;
drawline ( & sbuffer , x , y - 5 , x , y + 5 , red ) ;
}
else
{
drawline ( & sbuffer , x - 5 , y , x + 5 , y , gray ) ;
drawline ( & sbuffer , x , y - 5 , x , y + 5 , gray ) ;
2003-10-25 04:57:29 +08:00
}
putrgb ( & sbuffer , x , y , white ) ;
1999-08-27 06:29:37 +08:00
}
2003-10-25 04:57:29 +08:00
for ( y = 0 ; y < OMHEIGHT ; y + + )
1999-08-30 05:06:26 +08:00
gtk_preview_draw_row ( GTK_PREVIEW ( smvectorprev ) , & sbuffer . col [ y * sbuffer . width * 3 ] , 0 , y , OMWIDTH ) ;
1999-08-27 06:29:37 +08:00
gtk_widget_draw ( smvectorprev , NULL ) ;
2003-07-24 19:35:41 +08:00
gtk_widget_set_sensitive ( prev_button , ( numsmvect > 1 ) ) ;
gtk_widget_set_sensitive ( next_button , ( numsmvect > 1 ) ) ;
2002-12-10 18:39:23 +08:00
gtk_widget_set_sensitive ( add_button , ( numsmvect < MAXORIENTVECT ) ) ;
2003-07-24 19:35:41 +08:00
gtk_widget_set_sensitive ( kill_button , ( numsmvect > 1 ) ) ;
1999-08-27 06:29:37 +08:00
}
2002-11-20 04:25:57 +08:00
static gboolean smadjignore = FALSE ;
1999-08-27 06:29:37 +08:00
2004-07-02 21:31:25 +08:00
static void updatesmsliders ( void )
1999-08-27 06:29:37 +08:00
{
2002-11-20 04:25:57 +08:00
smadjignore = TRUE ;
1999-08-27 06:29:37 +08:00
gtk_adjustment_set_value ( GTK_ADJUSTMENT ( sizadjust ) ,
2004-07-02 21:31:25 +08:00
smvector [ selectedsmvector ] . siz ) ;
1999-08-27 06:29:37 +08:00
gtk_adjustment_set_value ( GTK_ADJUSTMENT ( smstradjust ) ,
2004-07-02 21:31:25 +08:00
smvector [ selectedsmvector ] . str ) ;
2002-11-20 04:25:57 +08:00
smadjignore = FALSE ;
1999-08-27 06:29:37 +08:00
}
2004-07-02 21:31:25 +08:00
static void smprevclick ( GtkWidget * w , gpointer data )
1999-08-27 06:29:37 +08:00
{
selectedsmvector - - ;
if ( selectedsmvector < 0 ) selectedsmvector = numsmvect - 1 ;
updatesmsliders ( ) ;
updatesmvectorprev ( ) ;
}
2004-07-02 21:31:25 +08:00
static void smnextclick ( GtkWidget * w , gpointer data )
1999-08-27 06:29:37 +08:00
{
selectedsmvector + + ;
if ( selectedsmvector = = numsmvect ) selectedsmvector = 0 ;
updatesmsliders ( ) ;
updatesmvectorprev ( ) ;
}
2002-11-20 04:25:57 +08:00
static void smaddclick ( GtkWidget * w , gpointer data )
1999-08-27 06:29:37 +08:00
{
smvector [ numsmvect ] . x = 0.5 ;
smvector [ numsmvect ] . y = 0.5 ;
smvector [ numsmvect ] . siz = 50.0 ;
smvector [ numsmvect ] . str = 1.0 ;
selectedsmvector = numsmvect ;
numsmvect + + ;
updatesmsliders ( ) ;
updatesmvectorprev ( ) ;
updatesmpreviewprev ( ) ;
}
2002-11-20 04:25:57 +08:00
static void smdeleteclick ( GtkWidget * w , gpointer data )
1999-08-27 06:29:37 +08:00
{
int i ;
2003-07-24 19:35:41 +08:00
for ( i = selectedsmvector ; i < numsmvect - 1 ; i + + )
2002-11-20 04:25:57 +08:00
{
smvector [ i ] = smvector [ i + 1 ] ;
}
1999-08-27 06:29:37 +08:00
numsmvect - - ;
if ( selectedsmvector > = numsmvect ) selectedsmvector = 0 ;
updatesmsliders ( ) ;
updatesmvectorprev ( ) ;
updatesmpreviewprev ( ) ;
}
2002-11-20 04:25:57 +08:00
static void smmapclick ( GtkWidget * w , GdkEventButton * event )
1999-08-27 06:29:37 +08:00
{
if ( event - > button = = 1 ) {
smvector [ selectedsmvector ] . x = event - > x / ( double ) OMWIDTH ;
smvector [ selectedsmvector ] . y = event - > y / ( double ) OMHEIGHT ;
} else if ( event - > button = = 2 ) {
if ( numsmvect + 1 = = MAXSIZEVECT ) return ;
smvector [ numsmvect ] . x = event - > x / ( double ) OMWIDTH ;
smvector [ numsmvect ] . y = event - > y / ( double ) OMHEIGHT ;
smvector [ numsmvect ] . siz = 0.0 ;
smvector [ numsmvect ] . str = 1.0 ;
selectedsmvector = numsmvect ;
numsmvect + + ;
updatesmsliders ( ) ;
2004-07-02 21:31:25 +08:00
}
#if 0
else if ( event - > button = = 3 ) {
1999-08-27 06:29:37 +08:00
double d ;
d = atan2 ( OMWIDTH * smvector [ selectedsmvector ] . x - event - > x ,
2004-07-02 21:31:25 +08:00
OMHEIGHT * smvector [ selectedsmvector ] . y - event - > y ) ;
1999-08-27 06:29:37 +08:00
smvector [ selectedsmvector ] . dir = radtodeg ( d ) ;
updatesmsliders ( ) ;
*/
}
2004-07-02 21:31:25 +08:00
# endif
1999-08-27 06:29:37 +08:00
updatesmvectorprev ( ) ;
updatesmpreviewprev ( ) ;
}
2002-11-20 04:25:57 +08:00
static void angsmadjmove ( GtkWidget * w , gpointer data )
1999-08-27 06:29:37 +08:00
{
2002-11-20 04:25:57 +08:00
if ( ! smadjignore )
{
smvector [ selectedsmvector ] . siz = GTK_ADJUSTMENT ( sizadjust ) - > value ;
updatesmvectorprev ( ) ;
updatesmpreviewprev ( ) ;
}
1999-08-27 06:29:37 +08:00
}
2002-11-20 04:25:57 +08:00
static void strsmadjmove ( GtkWidget * w , gpointer data )
1999-08-27 06:29:37 +08:00
{
2002-11-20 04:25:57 +08:00
if ( ! smadjignore )
{
smvector [ selectedsmvector ] . str = GTK_ADJUSTMENT ( smstradjust ) - > value ;
updatesmvectorprev ( ) ;
updatesmpreviewprev ( ) ;
}
1999-08-27 06:29:37 +08:00
}
2002-11-20 04:25:57 +08:00
static void smstrexpsmadjmove ( GtkWidget * w , gpointer data )
1999-08-27 06:29:37 +08:00
{
2002-11-20 04:25:57 +08:00
if ( ! smadjignore )
{
updatesmvectorprev ( ) ;
updatesmpreviewprev ( ) ;
}
1999-08-27 06:29:37 +08:00
}
2003-11-06 23:27:05 +08:00
static void
smresponse ( GtkWidget * widget ,
gint response_id ,
gpointer data )
1999-08-27 06:29:37 +08:00
{
2003-11-06 23:27:05 +08:00
switch ( response_id )
2002-11-20 04:25:57 +08:00
{
2003-11-06 23:27:05 +08:00
case RESPONSE_APPLY :
case GTK_RESPONSE_OK :
{
gint i ;
for ( i = 0 ; i < numsmvect ; i + + )
pcvals . sizevector [ i ] = smvector [ i ] ;
pcvals . numsizevector = numsmvect ;
pcvals . sizestrexp = GTK_ADJUSTMENT ( smstrexpadjust ) - > value ;
pcvals . sizevoronoi = GTK_TOGGLE_BUTTON ( sizevoronoi ) - > active ;
}
break ;
2002-11-20 04:25:57 +08:00
}
2002-12-10 18:39:23 +08:00
2003-11-06 23:27:05 +08:00
if ( response_id ! = RESPONSE_APPLY )
gtk_widget_hide ( widget ) ;
1999-08-27 06:29:37 +08:00
}
2004-07-02 21:31:25 +08:00
static void initsmvectors ( void )
1999-08-27 06:29:37 +08:00
{
2003-07-24 19:35:41 +08:00
if ( pcvals . numsizevector )
2002-11-20 04:25:57 +08:00
{
2003-10-25 04:57:29 +08:00
gint i ;
2002-11-20 04:25:57 +08:00
numsmvect = pcvals . numsizevector ;
2003-10-25 04:57:29 +08:00
for ( i = 0 ; i < numsmvect ; i + + )
2004-07-02 21:31:25 +08:00
{
smvector [ i ] = pcvals . sizevector [ i ] ;
}
2003-07-24 19:35:41 +08:00
}
else
2002-11-20 04:25:57 +08:00
{
/* Shouldn't happen */
numsmvect = 1 ;
smvector [ 0 ] . x = 0.5 ;
smvector [ 0 ] . y = 0.5 ;
smvector [ 0 ] . siz = 0.0 ;
smvector [ 0 ] . str = 1.0 ;
1999-08-27 06:29:37 +08:00
}
if ( selectedsmvector > = numsmvect )
selectedsmvector = numsmvect - 1 ;
}
2003-07-24 19:35:41 +08:00
#if 0
2002-11-20 04:25:57 +08:00
static void update_sizemap_dialog ( void )
1999-08-27 06:29:37 +08:00
{
2002-11-20 04:25:57 +08:00
if ( smwindow )
{
initsmvectors ( ) ;
1999-08-27 06:29:37 +08:00
2003-07-24 19:35:41 +08:00
gtk_adjustment_set_value ( GTK_ADJUSTMENT ( smstrexpadjust ) ,
2004-07-02 21:31:25 +08:00
pcvals . sizestrexp ) ;
2003-07-24 19:35:41 +08:00
gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( sizevoronoi ) ,
2004-07-02 21:31:25 +08:00
pcvals . sizevoronoi ) ;
1999-08-27 06:29:37 +08:00
2002-11-20 04:25:57 +08:00
updatesmvectorprev ( ) ;
updatesmpreviewprev ( ) ;
}
1999-08-27 06:29:37 +08:00
}
2003-07-24 19:35:41 +08:00
# endif
1999-08-27 06:29:37 +08:00
void create_sizemap_dialog ( void )
{
GtkWidget * tmpw , * tmpw2 ;
GtkWidget * table1 ;
GtkWidget * table2 ;
GtkWidget * hbox ;
initsmvectors ( ) ;
2003-11-06 23:27:05 +08:00
if ( smwindow )
{
updatesmvectorprev ( ) ;
updatesmpreviewprev ( ) ;
gtk_window_present ( GTK_WINDOW ( smwindow ) ) ;
return ;
}
1999-08-27 06:29:37 +08:00
2003-07-24 19:35:41 +08:00
smwindow =
2002-12-10 18:39:23 +08:00
gimp_dialog_new ( _ ( " Size Map Editor " ) , " gimpressionist " ,
2003-11-06 23:27:05 +08:00
NULL , 0 ,
2004-07-02 21:31:25 +08:00
gimp_standard_help_func , HELP_ID ,
1999-08-27 06:29:37 +08:00
2004-07-02 21:31:25 +08:00
GTK_STOCK_APPLY , RESPONSE_APPLY ,
GTK_STOCK_CANCEL , GTK_RESPONSE_CANCEL ,
GTK_STOCK_OK , GTK_RESPONSE_OK ,
1999-08-27 06:29:37 +08:00
2003-11-06 23:27:05 +08:00
NULL ) ;
1999-08-27 06:29:37 +08:00
2003-11-06 23:27:05 +08:00
g_signal_connect ( smwindow , " response " ,
G_CALLBACK ( smresponse ) ,
NULL ) ;
2003-01-07 14:16:02 +08:00
g_signal_connect ( smwindow , " destroy " ,
2004-07-02 21:31:25 +08:00
G_CALLBACK ( gtk_widget_destroyed ) ,
2003-11-06 23:27:05 +08:00
& smwindow ) ;
2002-12-10 18:39:23 +08:00
table1 = gtk_table_new ( 2 , 5 , FALSE ) ;
gtk_container_set_border_width ( GTK_CONTAINER ( table1 ) , 6 ) ;
gtk_container_add ( GTK_CONTAINER ( GTK_DIALOG ( smwindow ) - > vbox ) , table1 ) ;
gtk_widget_show ( table1 ) ;
1999-08-27 06:29:37 +08:00
1999-09-26 13:16:19 +08:00
tmpw2 = tmpw = gtk_frame_new ( _ ( " Smvectors " ) ) ;
2000-08-30 16:20:24 +08:00
gtk_container_set_border_width ( GTK_CONTAINER ( tmpw ) , 2 ) ;
1999-08-27 06:29:37 +08:00
gtk_table_attach ( GTK_TABLE ( table1 ) , tmpw , 0 , 1 , 0 , 1 , GTK_EXPAND , GTK_EXPAND , 0 , 0 ) ;
gtk_widget_show ( tmpw ) ;
tmpw = hbox = gtk_hbox_new ( FALSE , 0 ) ;
gtk_container_add ( GTK_CONTAINER ( tmpw2 ) , tmpw ) ;
gtk_widget_show ( tmpw ) ;
tmpw = gtk_event_box_new ( ) ;
2003-10-25 04:57:29 +08:00
gimp_help_set_help_data ( tmpw , _ ( " The smvector-field. Left-click to move selected smvector, Right-click to point it towards mouse, Middle-click to add a new smvector. " ) , NULL ) ;
1999-08-27 06:29:37 +08:00
gtk_box_pack_start ( GTK_BOX ( hbox ) , tmpw , FALSE , FALSE , 0 ) ;
tmpw2 = tmpw ;
tmpw = smvectorprev = gtk_preview_new ( GTK_PREVIEW_COLOR ) ;
gtk_preview_size ( GTK_PREVIEW ( tmpw ) , OMWIDTH , OMHEIGHT ) ;
gtk_container_add ( GTK_CONTAINER ( tmpw2 ) , tmpw ) ;
gtk_widget_show ( tmpw ) ;
2003-01-07 09:47:04 +08:00
gtk_widget_add_events ( tmpw2 , GDK_BUTTON_PRESS_MASK ) ;
2003-01-07 14:16:02 +08:00
g_signal_connect ( tmpw2 , " button_press_event " ,
2003-01-07 09:47:04 +08:00
G_CALLBACK ( smmapclick ) , NULL ) ;
1999-08-27 06:29:37 +08:00
gtk_widget_show ( tmpw2 ) ;
smvectprevbrightadjust = gtk_adjustment_new ( 50.0 , 0.0 , 100.0 , 1.0 , 1.0 , 1.0 ) ;
tmpw = gtk_vscale_new ( GTK_ADJUSTMENT ( smvectprevbrightadjust ) ) ;
gtk_scale_set_draw_value ( GTK_SCALE ( tmpw ) , FALSE ) ;
gtk_box_pack_start ( GTK_BOX ( hbox ) , tmpw , FALSE , FALSE , 0 ) ;
gtk_widget_show ( tmpw ) ;
2003-01-07 09:47:04 +08:00
g_signal_connect ( smvectprevbrightadjust , " value_changed " ,
G_CALLBACK ( updatesmvectorprev ) , NULL ) ;
2003-10-25 04:57:29 +08:00
gimp_help_set_help_data ( tmpw , _ ( " Adjust the preview's brightness " ) , NULL ) ;
1999-08-27 06:29:37 +08:00
1999-09-26 13:16:19 +08:00
tmpw2 = tmpw = gtk_frame_new ( _ ( " Preview " ) ) ;
2000-08-30 16:20:24 +08:00
gtk_container_set_border_width ( GTK_CONTAINER ( tmpw ) , 2 ) ;
1999-08-27 06:29:37 +08:00
gtk_table_attach ( GTK_TABLE ( table1 ) , tmpw , 1 , 2 , 0 , 1 , GTK_EXPAND , GTK_EXPAND , 0 , 0 ) ;
gtk_widget_show ( tmpw ) ;
tmpw = smpreviewprev = gtk_preview_new ( GTK_PREVIEW_COLOR ) ;
gtk_preview_size ( GTK_PREVIEW ( tmpw ) , OMWIDTH , OMHEIGHT ) ;
gtk_container_add ( GTK_CONTAINER ( tmpw2 ) , tmpw ) ;
gtk_widget_show ( tmpw ) ;
2002-12-10 18:39:23 +08:00
hbox = gtk_hbox_new ( TRUE , 0 ) ;
gtk_container_set_border_width ( GTK_CONTAINER ( hbox ) , 2 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table1 ) , hbox , 0 , 1 , 1 , 2 ) ;
gtk_widget_show ( hbox ) ;
1999-08-27 06:29:37 +08:00
2002-12-10 18:39:23 +08:00
prev_button = tmpw = gtk_button_new_with_mnemonic ( " _<< " ) ;
1999-08-27 06:29:37 +08:00
gtk_box_pack_start ( GTK_BOX ( hbox ) , tmpw , FALSE , TRUE , 0 ) ;
gtk_widget_show ( tmpw ) ;
2003-01-07 09:47:04 +08:00
g_signal_connect ( tmpw , " clicked " ,
G_CALLBACK ( smprevclick ) , NULL ) ;
2003-10-25 04:57:29 +08:00
gimp_help_set_help_data ( tmpw , _ ( " Select previous smvector " ) , NULL ) ;
1999-08-27 06:29:37 +08:00
2002-12-10 18:39:23 +08:00
next_button = tmpw = gtk_button_new_with_mnemonic ( " _>> " ) ;
1999-08-27 06:29:37 +08:00
gtk_box_pack_start ( GTK_BOX ( hbox ) , tmpw , FALSE , TRUE , 0 ) ;
gtk_widget_show ( tmpw ) ;
2003-01-07 14:16:02 +08:00
g_signal_connect ( tmpw , " clicked " ,
2004-07-02 21:31:25 +08:00
G_CALLBACK ( smnextclick ) , NULL ) ;
2003-10-25 04:57:29 +08:00
gimp_help_set_help_data ( tmpw , _ ( " Select next smvector " ) , NULL ) ;
1999-08-27 06:29:37 +08:00
2002-12-10 18:39:23 +08:00
add_button = tmpw = gtk_button_new_with_mnemonic ( _ ( " A_dd " ) ) ;
1999-08-27 06:29:37 +08:00
gtk_box_pack_start ( GTK_BOX ( hbox ) , tmpw , FALSE , TRUE , 0 ) ;
gtk_widget_show ( tmpw ) ;
2003-01-07 14:16:02 +08:00
g_signal_connect ( tmpw , " clicked " ,
2004-07-02 21:31:25 +08:00
G_CALLBACK ( smaddclick ) , NULL ) ;
2003-10-25 04:57:29 +08:00
gimp_help_set_help_data ( tmpw , _ ( " Add new smvector " ) , NULL ) ;
1999-08-27 06:29:37 +08:00
2002-12-10 18:39:23 +08:00
kill_button = tmpw = gtk_button_new_with_mnemonic ( _ ( " _Kill " ) ) ;
1999-08-27 06:29:37 +08:00
gtk_box_pack_start ( GTK_BOX ( hbox ) , tmpw , FALSE , TRUE , 0 ) ;
gtk_widget_show ( tmpw ) ;
2003-07-24 19:35:41 +08:00
g_signal_connect ( tmpw , " clicked " ,
2004-07-02 21:31:25 +08:00
G_CALLBACK ( smdeleteclick ) , NULL ) ;
2003-10-25 04:57:29 +08:00
gimp_help_set_help_data ( tmpw , _ ( " Delete selected smvector " ) , NULL ) ;
2002-12-10 18:39:23 +08:00
table2 = gtk_table_new ( 3 , 4 , FALSE ) ;
gtk_table_set_col_spacings ( GTK_TABLE ( table2 ) , 4 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table1 ) , table2 , 0 , 2 , 2 , 3 ) ;
gtk_widget_show ( table2 ) ;
2003-07-24 19:35:41 +08:00
sizadjust =
gimp_scale_entry_new ( GTK_TABLE ( table2 ) , 0 , 0 ,
2004-07-02 21:31:25 +08:00
_ ( " _Size: " ) ,
150 , 6 , 50.0 ,
0.0 , 100.0 , 1.0 , 10.0 , 1 ,
TRUE , 0 , 0 ,
_ ( " Change the angle of the selected smvector " ) ,
NULL ) ;
2003-07-24 19:35:41 +08:00
g_signal_connect ( sizadjust , " value_changed " , G_CALLBACK ( angsmadjmove ) ,
2004-07-02 21:31:25 +08:00
NULL ) ;
2002-12-10 18:39:23 +08:00
2003-07-24 19:35:41 +08:00
smstradjust =
gimp_scale_entry_new ( GTK_TABLE ( table2 ) , 0 , 1 ,
2004-07-02 21:31:25 +08:00
_ ( " S_trength: " ) ,
150 , 6 , 1.0 ,
0.1 , 5.0 , 0.1 , 0.5 , 1 ,
TRUE , 0 , 0 ,
_ ( " Change the strength of the selected smvector " ) ,
NULL ) ;
2003-07-24 19:35:41 +08:00
g_signal_connect ( smstradjust , " value_changed " , G_CALLBACK ( strsmadjmove ) ,
2004-07-02 21:31:25 +08:00
NULL ) ;
2002-12-10 18:39:23 +08:00
2003-07-24 19:35:41 +08:00
smstrexpadjust =
gimp_scale_entry_new ( GTK_TABLE ( table2 ) , 0 , 2 ,
2004-07-02 21:31:25 +08:00
_ ( " St_rength exp.: " ) ,
150 , 6 , 1.0 ,
0.1 , 10.9 , 0.1 , 0.5 , 1 ,
TRUE , 0 , 0 ,
_ ( " Change the exponent of the strength " ) ,
NULL ) ;
2003-07-24 19:35:41 +08:00
g_signal_connect ( smstrexpadjust , " value_changed " ,
2004-07-02 21:31:25 +08:00
G_CALLBACK ( smstrexpsmadjmove ) , NULL ) ;
2002-12-10 18:39:23 +08:00
sizevoronoi = tmpw = gtk_check_button_new_with_mnemonic ( _ ( " _Voronoi " ) ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table2 ) , tmpw , 3 , 4 , 0 , 1 ) ;
2000-08-30 16:20:24 +08:00
gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( tmpw ) , FALSE ) ;
1999-08-27 06:29:37 +08:00
gtk_widget_show ( tmpw ) ;
2002-12-10 18:39:23 +08:00
gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( tmpw ) , pcvals . sizevoronoi ) ;
2003-01-07 14:16:02 +08:00
g_signal_connect ( tmpw , " clicked " ,
2004-07-02 21:31:25 +08:00
G_CALLBACK ( smstrexpsmadjmove ) , NULL ) ;
2003-10-25 04:57:29 +08:00
gimp_help_set_help_data ( tmpw , _ ( " Voronoi-mode makes only the smvector closest to the given point have any influence " ) , NULL ) ;
2003-07-24 19:35:41 +08:00
1999-08-27 06:29:37 +08:00
gtk_widget_show ( smwindow ) ;
updatesmvectorprev ( ) ;
updatesmpreviewprev ( ) ;
}