mirror of https://github.com/GNOME/gimp.git
Various fixes/enhancements
* plug-ins/common/spheredesigner.c: Various fixes/enhancements * plug-ins/gimpressionist/Makefile.am * plug-ins/gimpressionist/ChangeLog * plug-ins/gimpressionist/*.[ch]: Added Color options (new file color.c)
This commit is contained in:
parent
d8498e3087
commit
6439161e80
|
@ -1,3 +1,11 @@
|
|||
Thu Sep 9 22:23:06 CET 1999 vidar@prosalg.no (Vidar Madsen)
|
||||
|
||||
* plug-ins/common/spheredesigner.c: Various fixes/enhancements
|
||||
|
||||
* plug-ins/gimpressionist/ChangeLog
|
||||
* plug-ins/gimpressionist/Makefile.am
|
||||
* plug-ins/gimpressionist/*.[ch]: Added Color options (new file color.c)
|
||||
|
||||
1999-09-09 Tomas Ogren <stric@ing.umu.se>
|
||||
|
||||
* app/Makefile.am: Add the path_tool* here, makes gimp compile
|
||||
|
|
|
@ -5,15 +5,18 @@
|
|||
* SphereDesigner v0.4 - creates textured spheres
|
||||
* by Vidar Madsen <vidar@prosalg.no>
|
||||
*
|
||||
* Status: Aug 31 1999 - Messy source, will clean up later.
|
||||
* Status: Last updated 1999-09-09
|
||||
*
|
||||
* Known issues:
|
||||
* - Crash if you click OK or Cancel before first preview is rendered
|
||||
* - Phong might look weird with transparent textures
|
||||
*
|
||||
* Todo:
|
||||
* - Editing of lights
|
||||
* - Saving / Loading of presets
|
||||
* - Transparency in textures (preliminary work started)
|
||||
* - Antialiasing
|
||||
* - Global controls: Gamma, ++
|
||||
* - Beautification of GUI
|
||||
* - Clean up messy source (lots of Glade remnants)
|
||||
* - (Probably more. ;-)
|
||||
*/
|
||||
|
||||
|
@ -118,6 +121,7 @@ typedef struct {
|
|||
vector color1, color2;
|
||||
gradient gradient;
|
||||
vector ambient, diffuse;
|
||||
double oscale;
|
||||
vector scale, translate, rotate;
|
||||
image image;
|
||||
vector reflection;
|
||||
|
@ -264,6 +268,7 @@ GtkWidget *texturelist = NULL;
|
|||
GtkObject *scalexscale,*scaleyscale,*scalezscale;
|
||||
GtkObject *rotxscale,*rotyscale,*rotzscale;
|
||||
GtkObject *posxscale,*posyscale,*poszscale;
|
||||
GtkObject *scalescale;
|
||||
GtkObject *turbulencescale;
|
||||
GtkObject *amountscale;
|
||||
GtkObject *expscale;
|
||||
|
@ -272,7 +277,6 @@ GtkWidget *texturemenu_menu;
|
|||
GtkWidget *typemenu;
|
||||
GtkWidget *texturemenu;
|
||||
|
||||
|
||||
#define DOT(a,b) (a[0] * b[0] + a[1] * b[1] + a[2] * b[2])
|
||||
|
||||
#define B 256
|
||||
|
@ -1029,6 +1033,7 @@ void objcolor(vector *col, vector *p, common *obj)
|
|||
case TRANSPARENT:
|
||||
case SMOKE:
|
||||
/* Silently ignore non-color textures */
|
||||
continue;
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "Warning: unknown texture %d\n", t->type);
|
||||
|
@ -1228,8 +1233,8 @@ void calclight(vector *col, vector *point, common *obj)
|
|||
if(obj->texture[j].type == PHONG) continue;
|
||||
if(obj->texture[j].type == REFLECTION) continue;
|
||||
if(obj->texture[j].type == REFRACTION) continue;
|
||||
if(obj->texture[i].type == TRANSPARENT) continue;
|
||||
if(obj->texture[i].type == SMOKE) continue;
|
||||
if(obj->texture[j].type == TRANSPARENT) continue;
|
||||
if(obj->texture[j].type == SMOKE) continue;
|
||||
vcopy(&lcol, &pcol);
|
||||
vvmul(&lcol, &world.light[i].color);
|
||||
vvmul(&lcol, &obj->texture[j].diffuse);
|
||||
|
@ -1364,8 +1369,11 @@ int traceray(ray *r, vector *col, int level, double imp)
|
|||
|
||||
if((world.quality >= 4) && ((bobj->texture[i].type == REFLECTION) || (bobj->texture[i].type == PHONG))) {
|
||||
|
||||
vector refcol, norm;
|
||||
vector refcol, norm, ocol;
|
||||
ray ref;
|
||||
|
||||
objcolor(&ocol, &p, bobj);
|
||||
|
||||
vcopy(&ref.v1, &p);
|
||||
vcopy(&ref.v2, &r->v1);
|
||||
ref.inside = r->inside;
|
||||
|
@ -1387,11 +1395,13 @@ int traceray(ray *r, vector *col, int level, double imp)
|
|||
if((world.quality >= 5) && (bobj->texture[i].type == REFLECTION)) {
|
||||
traceray(&ref, &refcol, level - 1, imp * vmax(&bobj->texture[i].reflection));
|
||||
vvmul(&refcol, &bobj->texture[i].reflection);
|
||||
refcol.w = ocol.w;
|
||||
vadd(col, &refcol);
|
||||
}
|
||||
if(bobj->texture[i].type == PHONG) {
|
||||
vcset(&refcol,0,0,0,0);
|
||||
calcphong(bobj, &ref, &refcol);
|
||||
refcol.w = ocol.w;
|
||||
vadd(col, &refcol);
|
||||
}
|
||||
|
||||
|
@ -1543,6 +1553,7 @@ void setdefaults(texture *t)
|
|||
vset(&t->scale,1,1,1);
|
||||
vset(&t->rotate,0,0,0);
|
||||
vset(&t->translate,0,0,0);
|
||||
t->oscale = 1.0;
|
||||
t->amount = 1.0;
|
||||
t->exp = 1.0;
|
||||
}
|
||||
|
@ -1609,6 +1620,8 @@ void setvals(texture *t)
|
|||
noupdate = 1;
|
||||
gtk_adjustment_set_value(GTK_ADJUSTMENT(amountscale), t->amount);
|
||||
|
||||
gtk_adjustment_set_value(GTK_ADJUSTMENT(scalescale), t->oscale);
|
||||
|
||||
gtk_adjustment_set_value(GTK_ADJUSTMENT(scalexscale), t->scale.x);
|
||||
gtk_adjustment_set_value(GTK_ADJUSTMENT(scaleyscale), t->scale.y);
|
||||
gtk_adjustment_set_value(GTK_ADJUSTMENT(scalezscale), t->scale.z);
|
||||
|
@ -1769,17 +1782,20 @@ void initworld(void)
|
|||
if(t->majtype == 0) { /* Normal texture */
|
||||
if(t->type == PHONG) {
|
||||
memcpy(&t->phongcolor, &t->color1, sizeof(t->color1));
|
||||
t->phongsize = t->scale.x / 25.0;
|
||||
t->phongsize = t->oscale / 25.0;
|
||||
}
|
||||
memcpy(&d->texture[d->numtexture],t,sizeof(texture));
|
||||
vmul(&d->texture[d->numtexture].scale, d->texture[d->numtexture].oscale);
|
||||
d->numtexture++;
|
||||
} else if(t->majtype == 1) { /* Bumpmap */
|
||||
memcpy(&d->normal[d->numnormal],t,sizeof(texture));
|
||||
vmul(&d->normal[d->numnormal].scale, d->texture[d->numnormal].oscale);
|
||||
d->numnormal++;
|
||||
} else if(t->majtype == 2) { /* Lightsource */
|
||||
light l;
|
||||
vcopy(&l.a, &t->translate);
|
||||
vcopy(&l.color, &t->color1);
|
||||
vmul(&l.color, t->amount);
|
||||
memcpy(&world.light[world.numlight], &l, sizeof(l));
|
||||
world.numlight++;
|
||||
}
|
||||
|
@ -1858,6 +1874,7 @@ void getscales(GtkWidget *wg, gpointer data)
|
|||
f = GTK_ADJUSTMENT(turbulencescale)->value;
|
||||
vset(&t->turbulence, f,f,f);
|
||||
|
||||
t->oscale = GTK_ADJUSTMENT(scalescale)->value;
|
||||
t->scale.x = GTK_ADJUSTMENT(scalexscale)->value;
|
||||
t->scale.y = GTK_ADJUSTMENT(scaleyscale)->value;
|
||||
t->scale.z = GTK_ADJUSTMENT(scalezscale)->value;
|
||||
|
@ -2049,7 +2066,7 @@ void sphere_ok(GtkWidget *widget, gpointer data)
|
|||
|
||||
void sphere_cancel(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
gtk_widget_destroy (GTK_WIDGET (data));
|
||||
gtk_widget_hide (GTK_WIDGET (data));
|
||||
gtk_main_quit();
|
||||
}
|
||||
|
||||
|
@ -2099,7 +2116,7 @@ GtkWidget* makewindow (void)
|
|||
gtk_object_set_data (GTK_OBJECT (window), "window", window);
|
||||
gtk_container_border_width (GTK_CONTAINER (window), 5);
|
||||
gtk_window_set_title (GTK_WINDOW (window), "SphereDesigner");
|
||||
gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE);
|
||||
gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, FALSE);
|
||||
|
||||
table1 = gtk_table_new (3, 3, FALSE);
|
||||
gtk_object_set_data (GTK_OBJECT (window), "table1", table1);
|
||||
|
@ -2195,7 +2212,7 @@ GtkWidget* makewindow (void)
|
|||
gtk_signal_connect (GTK_OBJECT (resetbutton), "clicked",
|
||||
GTK_SIGNAL_FUNC (sphere_reset), window);
|
||||
|
||||
frame4 = gtk_frame_new ("Properties");
|
||||
frame4 = gtk_frame_new ("Texture Properties");
|
||||
gtk_object_set_data (GTK_OBJECT (window), "frame4", frame4);
|
||||
gtk_widget_show (frame4);
|
||||
gtk_table_attach (GTK_TABLE (table1), frame4, 2, 3, 0, 1,
|
||||
|
@ -2258,6 +2275,23 @@ GtkWidget* makewindow (void)
|
|||
gtk_widget_show(tmpw);
|
||||
drawcolor2(tmpw);
|
||||
|
||||
label5 = gtk_label_new ("Scale:");
|
||||
gtk_object_set_data (GTK_OBJECT (window), "label5", label5);
|
||||
gtk_widget_show (label5);
|
||||
gtk_table_attach (GTK_TABLE (table2), label5, 0, 1, 3, 4,
|
||||
(GtkAttachOptions) GTK_EXPAND | GTK_FILL, (GtkAttachOptions) GTK_EXPAND | GTK_FILL, 0, 0);
|
||||
gtk_misc_set_alignment (GTK_MISC (label5), 0, 0.5);
|
||||
|
||||
_scalescale = gtk_hscale_new (GTK_ADJUSTMENT (scalescale = gtk_adjustment_new (1.0, 0.0, 5.1, 0.1, 0.1, 0.1)));
|
||||
gtk_widget_set_usize(_scalescale, 100, -1);
|
||||
gtk_object_set_data (GTK_OBJECT (window), "_scalescale", _scalescale);
|
||||
gtk_widget_show (_scalescale);
|
||||
gtk_table_attach (GTK_TABLE (table2), _scalescale, 1, 2, 3, 4,
|
||||
(GtkAttachOptions) GTK_EXPAND | GTK_FILL, (GtkAttachOptions) GTK_EXPAND, 0, 0);
|
||||
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
|
||||
gtk_signal_connect(GTK_OBJECT(scalescale), "value_changed",
|
||||
(GtkSignalFunc)getscales, NULL);
|
||||
|
||||
label5 = gtk_label_new ("Turbulence:");
|
||||
gtk_object_set_data (GTK_OBJECT (window), "label5", label5);
|
||||
gtk_widget_show (label5);
|
||||
|
@ -2266,6 +2300,7 @@ GtkWidget* makewindow (void)
|
|||
gtk_misc_set_alignment (GTK_MISC (label5), 0, 0.5);
|
||||
|
||||
_turbulencescale = gtk_hscale_new (GTK_ADJUSTMENT (turbulencescale = gtk_adjustment_new (0.0, 0.0, 5.1, 0.1, 0.1, 0.1)));
|
||||
gtk_widget_set_usize(_turbulencescale, 100, -1);
|
||||
gtk_object_set_data (GTK_OBJECT (window), "_turbulencescale", _turbulencescale);
|
||||
gtk_widget_show (_turbulencescale);
|
||||
gtk_table_attach (GTK_TABLE (table2), _turbulencescale, 1, 2, 4, 5,
|
||||
|
@ -2274,10 +2309,6 @@ GtkWidget* makewindow (void)
|
|||
gtk_signal_connect(GTK_OBJECT(turbulencescale), "value_changed",
|
||||
(GtkSignalFunc)getscales, NULL);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
label6 = gtk_label_new ("Scale X:");
|
||||
gtk_object_set_data (GTK_OBJECT (window), "label6", label6);
|
||||
gtk_widget_show (label6);
|
||||
|
@ -2286,6 +2317,7 @@ GtkWidget* makewindow (void)
|
|||
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
|
||||
|
||||
_scalescale = gtk_hscale_new (GTK_ADJUSTMENT (scalexscale = gtk_adjustment_new (1.0, 0.0, 5.1, 0.1, 0.1, 0.1)));
|
||||
gtk_widget_set_usize(_scalescale, 100, -1);
|
||||
gtk_object_set_data (GTK_OBJECT (window), "_scalescale", _scalescale);
|
||||
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
|
||||
gtk_widget_show (_scalescale);
|
||||
|
@ -2302,6 +2334,7 @@ GtkWidget* makewindow (void)
|
|||
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
|
||||
|
||||
_scalescale = gtk_hscale_new (GTK_ADJUSTMENT (scaleyscale = gtk_adjustment_new (1.0, 0.0, 5.1, 0.1, 0.1, 0.1)));
|
||||
gtk_widget_set_usize(_scalescale, 100, -1);
|
||||
gtk_object_set_data (GTK_OBJECT (window), "_scalescale", _scalescale);
|
||||
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
|
||||
gtk_widget_show (_scalescale);
|
||||
|
@ -2318,6 +2351,7 @@ GtkWidget* makewindow (void)
|
|||
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
|
||||
|
||||
_scalescale = gtk_hscale_new (GTK_ADJUSTMENT (scalezscale = gtk_adjustment_new (1.0, 0.0, 5.1, 0.1, 0.1, 0.1)));
|
||||
gtk_widget_set_usize(_scalescale, 100, -1);
|
||||
gtk_object_set_data (GTK_OBJECT (window), "_scalescale", _scalescale);
|
||||
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
|
||||
gtk_widget_show (_scalescale);
|
||||
|
@ -2336,6 +2370,7 @@ GtkWidget* makewindow (void)
|
|||
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
|
||||
|
||||
_rotscale = gtk_hscale_new (GTK_ADJUSTMENT (rotxscale = gtk_adjustment_new (1.0, 0.0, 360.1, 0.1, 0.1, 0.1)));
|
||||
gtk_widget_set_usize(_rotscale, 100, -1);
|
||||
gtk_object_set_data (GTK_OBJECT (window), "_rotscale", _rotscale);
|
||||
gtk_scale_set_digits (GTK_SCALE (_rotscale), 2);
|
||||
gtk_widget_show (_rotscale);
|
||||
|
@ -2352,6 +2387,7 @@ GtkWidget* makewindow (void)
|
|||
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
|
||||
|
||||
_rotscale = gtk_hscale_new (GTK_ADJUSTMENT (rotyscale = gtk_adjustment_new (1.0, 0.0, 360.1, 0.1, 0.1, 0.1)));
|
||||
gtk_widget_set_usize(_rotscale, 100, -1);
|
||||
gtk_object_set_data (GTK_OBJECT (window), "_rotscale", _rotscale);
|
||||
gtk_scale_set_digits (GTK_SCALE (_rotscale), 2);
|
||||
gtk_widget_show (_rotscale);
|
||||
|
@ -2368,6 +2404,7 @@ GtkWidget* makewindow (void)
|
|||
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
|
||||
|
||||
_rotscale = gtk_hscale_new (GTK_ADJUSTMENT (rotzscale = gtk_adjustment_new (1.0, 0.0, 360.1, 0.1, 0.1, 0.1)));
|
||||
gtk_widget_set_usize(_rotscale, 100, -1);
|
||||
gtk_object_set_data (GTK_OBJECT (window), "_rotscale", _rotscale);
|
||||
gtk_scale_set_digits (GTK_SCALE (_rotscale), 2);
|
||||
gtk_widget_show (_rotscale);
|
||||
|
@ -2376,8 +2413,6 @@ GtkWidget* makewindow (void)
|
|||
gtk_signal_connect(GTK_OBJECT(rotzscale), "value_changed",
|
||||
(GtkSignalFunc)getscales, NULL);
|
||||
|
||||
|
||||
|
||||
label6 = gtk_label_new ("Pos X:");
|
||||
gtk_object_set_data (GTK_OBJECT (window), "label6", label6);
|
||||
gtk_widget_show (label6);
|
||||
|
@ -2386,6 +2421,7 @@ GtkWidget* makewindow (void)
|
|||
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
|
||||
|
||||
_scalescale = gtk_hscale_new (GTK_ADJUSTMENT (posxscale = gtk_adjustment_new (0.0, -20.0, 20.1, 0.1, 0.1, 0.1)));
|
||||
gtk_widget_set_usize(_scalescale, 100, -1);
|
||||
gtk_object_set_data (GTK_OBJECT (window), "_scalescale", _scalescale);
|
||||
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
|
||||
gtk_widget_show (_scalescale);
|
||||
|
@ -2402,6 +2438,7 @@ GtkWidget* makewindow (void)
|
|||
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
|
||||
|
||||
_scalescale = gtk_hscale_new (GTK_ADJUSTMENT (posyscale = gtk_adjustment_new (1.0, -20.0, 20.1, 0.1, 0.1, 0.1)));
|
||||
gtk_widget_set_usize(_scalescale, 100, -1);
|
||||
gtk_object_set_data (GTK_OBJECT (window), "_scalescale", _scalescale);
|
||||
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
|
||||
gtk_widget_show (_scalescale);
|
||||
|
@ -2418,6 +2455,7 @@ GtkWidget* makewindow (void)
|
|||
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
|
||||
|
||||
_scalescale = gtk_hscale_new (GTK_ADJUSTMENT (poszscale = gtk_adjustment_new (1.0, -20.0, 20.1, 0.1, 0.1, 0.1)));
|
||||
gtk_widget_set_usize(_scalescale, 100, -1);
|
||||
gtk_object_set_data (GTK_OBJECT (window), "_scalescale", _scalescale);
|
||||
gtk_scale_set_digits (GTK_SCALE (_scalescale), 2);
|
||||
gtk_widget_show (_scalescale);
|
||||
|
@ -2426,11 +2464,6 @@ GtkWidget* makewindow (void)
|
|||
gtk_signal_connect(GTK_OBJECT(poszscale), "value_changed",
|
||||
(GtkSignalFunc)getscales, NULL);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
typemenu = gtk_option_menu_new ();
|
||||
gtk_object_set_data (GTK_OBJECT (window), "typemenu", typemenu);
|
||||
gtk_widget_show (typemenu);
|
||||
|
@ -2476,6 +2509,7 @@ GtkWidget* makewindow (void)
|
|||
gtk_misc_set_alignment (GTK_MISC (label7), 0, 0.5);
|
||||
|
||||
_amountscale = gtk_hscale_new (GTK_ADJUSTMENT (amountscale = gtk_adjustment_new (1.0, 0, 1.01, .01, .01, .01)));
|
||||
gtk_widget_set_usize(_amountscale, 100, -1);
|
||||
gtk_object_set_data (GTK_OBJECT (window), "_amountscale", _amountscale);
|
||||
gtk_widget_show (_amountscale);
|
||||
gtk_table_attach (GTK_TABLE (table2), _amountscale, 1, 2, 5, 6,
|
||||
|
@ -2492,6 +2526,7 @@ GtkWidget* makewindow (void)
|
|||
gtk_misc_set_alignment (GTK_MISC (label8), 0, 0.5);
|
||||
|
||||
_expscale = gtk_hscale_new (GTK_ADJUSTMENT (expscale = gtk_adjustment_new (1.0, 0, 1.01, .01, .01, .01)));
|
||||
gtk_widget_set_usize(_expscale, 100, -1);
|
||||
gtk_object_set_data (GTK_OBJECT (window), "_expscale", _expscale);
|
||||
gtk_widget_show (_expscale);
|
||||
gtk_table_attach (GTK_TABLE (table2), _expscale, 1, 2, 6, 7,
|
||||
|
|
|
@ -1,6 +1,20 @@
|
|||
(The events are in chronological order, latest first)
|
||||
|
||||
September 9 1999:
|
||||
- Added the Color page, with two color sampling schemes and
|
||||
color noise.
|
||||
|
||||
August 29 1999:
|
||||
- Big rewrite of many internals to get rid of the clumsy
|
||||
"struct rgbcolor"
|
||||
|
||||
August 26 1999:
|
||||
- GIMPressionist is included in the CVS GIMP-development tree
|
||||
- Fixed a //-style comment in repaint.c
|
||||
- Renamed buffer in sizemap.c (it was also declared in orientmap.c)
|
||||
|
||||
August 23 1999:
|
||||
- Released 0.99.5
|
||||
- Added the missing Shadow controls
|
||||
- Fixed the applybrush() function. (It was foobar with regards to
|
||||
shadow handling.) It's still shaky when using Tilable, though...
|
||||
|
|
|
@ -26,7 +26,8 @@ gimpressionist_SOURCES = \
|
|||
preview.c \
|
||||
repaint.c \
|
||||
size.c \
|
||||
sizemap.c
|
||||
sizemap.c \
|
||||
color.c
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-DDEFAULTPATH=\""~/$(gimpdir)/gimpressionist:$(gimpdatadir)/gimpressionist"\"
|
||||
|
|
|
@ -0,0 +1,127 @@
|
|||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#else
|
||||
#define HAVE_DIRENT_H
|
||||
#define HAVE_UNISTD_H
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <sys/types.h>
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#include "gimpressionist.h"
|
||||
#include "ppmtool.h"
|
||||
|
||||
|
||||
#define NUMCOLORRADIO 2
|
||||
|
||||
GtkWidget *colorradio[NUMCOLORRADIO];
|
||||
GtkObject *colornoiseadjust = NULL;
|
||||
|
||||
|
||||
void colorchange(GtkWidget *wg, void *d, int num)
|
||||
{
|
||||
int n;
|
||||
if(wg) {
|
||||
n = (long)d;
|
||||
pcvals.colortype = n;
|
||||
} else {
|
||||
int i;
|
||||
n = num;
|
||||
for(i = 0; i < NUMCOLORRADIO; i++)
|
||||
if(i != n)
|
||||
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON(colorradio[i]), FALSE);
|
||||
else
|
||||
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON(colorradio[n]), TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
void create_colorpage(GtkNotebook *notebook)
|
||||
{
|
||||
GtkWidget *box0, *box1, *box2, *box3, *thispage;
|
||||
GtkWidget *labelbox, *menubox;
|
||||
GtkWidget *tmpw;
|
||||
char title[100];
|
||||
int i;
|
||||
|
||||
sprintf(title, "Color");
|
||||
|
||||
labelbox = gtk_hbox_new (FALSE, 0);
|
||||
tmpw = gtk_label_new(title);
|
||||
gtk_box_pack_start(GTK_BOX(labelbox), tmpw, FALSE, FALSE, 0);
|
||||
gtk_widget_show_all(labelbox);
|
||||
|
||||
menubox = gtk_hbox_new (FALSE, 0);
|
||||
tmpw = gtk_label_new(title);
|
||||
gtk_box_pack_start(GTK_BOX(menubox), tmpw, FALSE, FALSE, 0);
|
||||
gtk_widget_show_all(menubox);
|
||||
|
||||
thispage = gtk_vbox_new(FALSE, 0);
|
||||
gtk_container_border_width (GTK_CONTAINER (thispage), 5);
|
||||
gtk_widget_show(thispage);
|
||||
|
||||
box0 = gtk_vbox_new (FALSE, 0);
|
||||
gtk_box_pack_start(GTK_BOX(thispage), box0,FALSE,FALSE,0);
|
||||
gtk_widget_show (box0);
|
||||
|
||||
box1 = gtk_hbox_new (FALSE, 0);
|
||||
gtk_box_pack_start(GTK_BOX(box0), box1,FALSE,FALSE,0);
|
||||
gtk_widget_show (box1);
|
||||
|
||||
box2 = gtk_vbox_new (TRUE, 0);
|
||||
gtk_box_pack_start(GTK_BOX(box1), box2,FALSE,FALSE,0);
|
||||
gtk_widget_show (box2);
|
||||
|
||||
tmpw = gtk_label_new("Color:");
|
||||
gtk_box_pack_start(GTK_BOX(box2), tmpw,FALSE,FALSE,0);
|
||||
gtk_widget_show (tmpw);
|
||||
|
||||
box3 = gtk_vbox_new(FALSE,0);
|
||||
gtk_box_pack_start(GTK_BOX(box1), box3,FALSE,FALSE, 10);
|
||||
gtk_widget_show(box3);
|
||||
|
||||
i = pcvals.colortype;
|
||||
|
||||
colorradio[0] = tmpw = gtk_radio_button_new_with_label(NULL, "Average under brush");
|
||||
gtk_box_pack_start(GTK_BOX(box3), tmpw, FALSE, FALSE, 0);
|
||||
gtk_widget_show(tmpw);
|
||||
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (tmpw), FALSE);
|
||||
gtk_signal_connect(GTK_OBJECT(tmpw), "clicked",
|
||||
(GtkSignalFunc)colorchange, (void *)0);
|
||||
gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips), tmpw, "Color is computed from the average of all pixels under the brush", NULL);
|
||||
if(i == 0)
|
||||
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (tmpw), TRUE);
|
||||
|
||||
colorradio[1] = tmpw = gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(tmpw)), "Center of brush");
|
||||
gtk_box_pack_start(GTK_BOX(box3), tmpw, FALSE, FALSE, 0);
|
||||
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (tmpw), FALSE);
|
||||
gtk_widget_show(tmpw);
|
||||
gtk_signal_connect(GTK_OBJECT(tmpw), "clicked",
|
||||
(GtkSignalFunc)colorchange, (void *)1);
|
||||
gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips), tmpw, "Samples the color from the pixel in the center of the brush", NULL);
|
||||
if(i == 1)
|
||||
gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (tmpw), TRUE);
|
||||
|
||||
|
||||
box1 = gtk_hbox_new (FALSE, 0);
|
||||
gtk_box_pack_start(GTK_BOX(box0), box1,FALSE,FALSE,0);
|
||||
gtk_widget_show (box1);
|
||||
|
||||
tmpw = gtk_label_new("Color noise:");
|
||||
gtk_box_pack_start(GTK_BOX(box1), tmpw,FALSE,FALSE,0);
|
||||
gtk_widget_show (tmpw);
|
||||
|
||||
colornoiseadjust = gtk_adjustment_new(pcvals.colornoise, 0.0, 101.0, 1.0, 1.0, 1.0);
|
||||
tmpw = gtk_hscale_new(GTK_ADJUSTMENT(colornoiseadjust));
|
||||
gtk_widget_set_usize (GTK_WIDGET(tmpw), 150, 30);
|
||||
gtk_scale_set_draw_value (GTK_SCALE (tmpw), TRUE);
|
||||
gtk_scale_set_digits(GTK_SCALE (tmpw), 1);
|
||||
gtk_box_pack_start (GTK_BOX (box1), tmpw, FALSE, FALSE, 10);
|
||||
gtk_widget_show (tmpw);
|
||||
gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips), tmpw, "Adds random noise to the color", NULL);
|
||||
|
||||
gtk_notebook_append_page_menu (notebook, thispage, labelbox, menubox);
|
||||
}
|
|
@ -72,7 +72,9 @@ gimpressionist_vals_t defaultpcvals = {
|
|||
0,
|
||||
|
||||
10,
|
||||
4
|
||||
4,
|
||||
|
||||
0, 0.0
|
||||
};
|
||||
|
||||
static GDrawable *drawable;
|
||||
|
|
|
@ -154,6 +154,7 @@ void storevals(void)
|
|||
pcvals.devthresh = GTK_ADJUSTMENT(devthreshadjust)->value;
|
||||
pcvals.placecenter = GTK_TOGGLE_BUTTON(placecenter)->active;
|
||||
pcvals.paperoverlay = GTK_TOGGLE_BUTTON(paperoverlay)->active;
|
||||
pcvals.colornoise = GTK_ADJUSTMENT(colornoiseadjust)->value;
|
||||
}
|
||||
|
||||
void restorevals(void)
|
||||
|
@ -197,6 +198,9 @@ void restorevals(void)
|
|||
|
||||
drawcolor(NULL);
|
||||
|
||||
gtk_adjustment_set_value(GTK_ADJUSTMENT(colornoiseadjust), pcvals.colornoise);
|
||||
colorchange(NULL, NULL, pcvals.colortype);
|
||||
|
||||
update_orientmap_dialog();
|
||||
}
|
||||
|
||||
|
@ -463,6 +467,7 @@ int create_dialog(void)
|
|||
create_orientationpage(GTK_NOTEBOOK (notebook));
|
||||
create_sizepage(GTK_NOTEBOOK (notebook));
|
||||
create_placementpage(GTK_NOTEBOOK (notebook));
|
||||
create_colorpage(GTK_NOTEBOOK (notebook));
|
||||
create_generalpage(GTK_NOTEBOOK (notebook));
|
||||
create_presetpage(GTK_NOTEBOOK (notebook));
|
||||
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
#include <gtk/gtk.h>
|
||||
|
||||
#include "libgimp/gimpmath.h"
|
||||
|
||||
#define PLUG_IN_NAME "plug_in_gimpressionist"
|
||||
#define PLUG_IN_VERSION "v0.99.6, August 1999"
|
||||
|
||||
|
@ -13,6 +11,14 @@
|
|||
#define MAXORIENTVECT 50
|
||||
#define MAXSIZEVECT 50
|
||||
|
||||
#ifndef M_PI
|
||||
#define M_PI 3.14159265358979323846
|
||||
#endif /* M_PI */
|
||||
|
||||
#ifndef M_PI_2
|
||||
#define M_PI_2 (M_PI / 2.0)
|
||||
#endif /* M_PI_2 */
|
||||
|
||||
/* Type declaration and definitions */
|
||||
|
||||
struct vector_t {
|
||||
|
@ -75,7 +81,8 @@ typedef struct {
|
|||
int generalshadowdepth;
|
||||
int generalshadowblur;
|
||||
|
||||
int coloracc;
|
||||
int colortype;
|
||||
double colornoise;
|
||||
} gimpressionist_vals_t;
|
||||
|
||||
/* Globals */
|
||||
|
@ -131,7 +138,9 @@ extern GtkObject *generalshadowadjust;
|
|||
extern GtkObject *generalshadowdepth;
|
||||
extern GtkObject *generalshadowblur;
|
||||
extern GtkObject *devthreshadjust;
|
||||
extern GtkObject *coloraccadjust;
|
||||
|
||||
extern GtkWidget *colortype;
|
||||
extern GtkObject *colornoiseadjust;
|
||||
|
||||
extern GtkWidget *placecenter;
|
||||
|
||||
|
@ -154,6 +163,7 @@ void create_sizepage(GtkNotebook *);
|
|||
void create_generalpage(GtkNotebook *);
|
||||
void create_presetpage(GtkNotebook *);
|
||||
void create_placementpage(GtkNotebook *);
|
||||
void create_colorpage(GtkNotebook *);
|
||||
|
||||
GtkWidget* create_preview();
|
||||
void updatepreviewprev(GtkWidget *wg, void *d);
|
||||
|
@ -170,6 +180,7 @@ void drawcolor(GtkWidget *w);
|
|||
void orientchange(GtkWidget *wg, void *d, int num);
|
||||
void sizechange(GtkWidget *wg, void *d, int num);
|
||||
void placechange(GtkWidget *wg, void *d, int num);
|
||||
void colorchange(GtkWidget *wg, void *d, int num);
|
||||
void generalbgchange(GtkWidget *wg, void *d, int num);
|
||||
|
||||
void reloadbrush(char *fn, struct ppm *p);
|
||||
|
|
|
@ -34,12 +34,12 @@ int numvect = 0;
|
|||
|
||||
double degtorad(double d)
|
||||
{
|
||||
return d/180.0*G_PI;
|
||||
return d/180.0*M_PI;
|
||||
}
|
||||
|
||||
double radtodeg(double d)
|
||||
{
|
||||
double v = d/G_PI*180.0;
|
||||
double v = d/M_PI*180.0;
|
||||
if(v < 0.0) v += 360;
|
||||
return v;
|
||||
}
|
||||
|
@ -117,18 +117,18 @@ double getdir(double x, double y, int from)
|
|||
} else if(vec[i].type == 1) {
|
||||
double a = atan2(vec[i].dy, vec[i].dx);
|
||||
a -= atan2(y-vec[i].y, x-vec[i].x);
|
||||
tx = sin(a+G_PI_2);
|
||||
ty = cos(a+G_PI_2);
|
||||
tx = sin(a+M_PI_2);
|
||||
ty = cos(a+M_PI_2);
|
||||
} else if(vec[i].type == 2) {
|
||||
double a = atan2(vec[i].dy, vec[i].dx);
|
||||
a += atan2(y-vec[i].y, x-vec[i].x);
|
||||
tx = sin(a+G_PI_2);
|
||||
ty = cos(a+G_PI_2);
|
||||
tx = sin(a+M_PI_2);
|
||||
ty = cos(a+M_PI_2);
|
||||
} else if(vec[i].type == 3) {
|
||||
double a = atan2(vec[i].dy, vec[i].dx);
|
||||
a -= atan2(y-vec[i].y, x-vec[i].x)*2;
|
||||
tx = sin(a+G_PI_2);
|
||||
ty = cos(a+G_PI_2);
|
||||
tx = sin(a+M_PI_2);
|
||||
ty = cos(a+M_PI_2);
|
||||
}
|
||||
|
||||
dst = dist(x,y,vec[i].x,vec[i].y);
|
||||
|
|
|
@ -332,7 +332,7 @@ void freerotate(struct ppm *p, double amount)
|
|||
double nx, ny;
|
||||
double R, a;
|
||||
struct ppm tmp = {0,0,NULL};
|
||||
double f = amount*G_PI*2/360.0;
|
||||
double f = amount*M_PI*2/360.0;
|
||||
int rowstride = p->width * 3;
|
||||
|
||||
a = p->width/(float)p->height;
|
||||
|
|
|
@ -245,6 +245,11 @@ void setval(char *key, char *val)
|
|||
pcvals.sizestrexp = atof(val);
|
||||
else if(!strcmp(key, "sizevoronoi"))
|
||||
pcvals.sizevoronoi = atoi(val);
|
||||
|
||||
else if(!strcmp(key, "colortype"))
|
||||
pcvals.colortype = atoi(val);
|
||||
else if(!strcmp(key, "colornoise"))
|
||||
pcvals.colornoise = atof(val);
|
||||
}
|
||||
|
||||
int loadpreset(char *fn)
|
||||
|
@ -497,6 +502,9 @@ void savepreset(GtkWidget *wg, GtkWidget *p)
|
|||
fprintf(f, "sizestrexp=%f\n", pcvals.sizestrexp);
|
||||
fprintf(f, "sizevoronoi=%d\n", pcvals.sizevoronoi);
|
||||
|
||||
fprintf(f, "colortype=%d\n", pcvals.colortype);
|
||||
fprintf(f, "colornoise=%f\n", pcvals.colornoise);
|
||||
|
||||
fclose(f);
|
||||
presetsrefresh();
|
||||
reselect(presetlist, fname);
|
||||
|
|
|
@ -85,7 +85,7 @@ void updatepreviewprev(GtkWidget *wg, void *d)
|
|||
|
||||
for(i = 0; i < PREVIEWSIZE; i++) {
|
||||
memset(buf,0,PREVIEWSIZE*3);
|
||||
/* for(j = 0; j < p.width; j++) */
|
||||
//for(j = 0; j < p.width; j++)
|
||||
gtk_preview_draw_row(GTK_PREVIEW(previewprev), (guchar *)&p.col[i*PREVIEWSIZE*3], 0, i, PREVIEWSIZE);
|
||||
}
|
||||
killppm(&p);
|
||||
|
|
|
@ -717,6 +717,7 @@ void repaint(struct ppm *p, struct ppm *a)
|
|||
thissum = brushsum[n];
|
||||
|
||||
/* Calculate color - avg. of in-brush pixels */
|
||||
if(runningvals.colortype == 0) {
|
||||
r = g = b = 0;
|
||||
for(y = 0; y < brush->height; y++) {
|
||||
guchar *row = &p->col[(ty+y)*p->width*3];
|
||||
|
@ -734,13 +735,24 @@ void repaint(struct ppm *p, struct ppm *a)
|
|||
r = r * 255.0 / thissum;
|
||||
g = g * 255.0 / thissum;
|
||||
b = b * 255.0 / thissum;
|
||||
|
||||
/* Color = center pixel - Looks bad... */
|
||||
/*
|
||||
r = p->col[ty+brush->height/2][tx+brush->width/2].r;
|
||||
g = p->col[ty+brush->height/2][tx+brush->width/2].g;
|
||||
b = p->col[ty+brush->height/2][tx+brush->width/2].b;
|
||||
*/
|
||||
} else if(runningvals.colortype == 1) {
|
||||
guchar *pixel = &p->col[(ty+brush->height/2)*p->width*3 + (tx+brush->width)*3];
|
||||
r = pixel[0];
|
||||
g = pixel[1];
|
||||
b = pixel[2];
|
||||
} else {
|
||||
/* No such colortype! */
|
||||
r = g = b = 0;
|
||||
}
|
||||
if(runningvals.colornoise > 0.0) {
|
||||
double v = runningvals.colornoise;
|
||||
r = r + rand() / (float)RAND_MAX * v - v/2;
|
||||
g = g + rand() / (float)RAND_MAX * v - v/2;
|
||||
b = b + rand() / (float)RAND_MAX * v - v/2;
|
||||
if(r < 0) r = 0; else if(r > 255) r = 255;
|
||||
if(g < 0) g = 0; else if(g > 255) g = 255;
|
||||
if(b < 0) b = 0; else if(b > 255) b = 255;
|
||||
}
|
||||
|
||||
applybrush(brush, shadow, &tmp, &atmp, tx,ty, r,g,b);
|
||||
if(runningvals.generaltileable && runningvals.generalpaintedges) {
|
||||
|
|
Loading…
Reference in New Issue