Mercurial > hg > xmms-sid
annotate src/xs_curve.c @ 502:54d86ee98b98
Alpha/preliminary curve widget code merged.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sat, 27 Jan 2007 02:52:02 +0000 |
parents | 0f255a575720 |
children | 982cec405ef0 |
rev | line source |
---|---|
358 | 1 #include <stdlib.h> |
2 #include <string.h> | |
3 #include <math.h> | |
4 | |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
5 #include <stdio.h> |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
6 |
358 | 7 #include "xs_curve.h" |
8 #include <gtk/gtkdrawingarea.h> | |
9 #include <gtk/gtkmain.h> | |
10 #include <gtk/gtksignal.h> | |
370
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
11 |
358 | 12 |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
13 #define GET_X(i) curve->ctlpoints[i].x |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
14 #define GET_Y(i) curve->ctlpoints[i].y |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
15 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
16 |
358 | 17 #define RADIUS 3 /* radius of the control points */ |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
18 #define RADIUS2 (RADIUS * 2) |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
19 |
358 | 20 #define MIN_DISTANCE 8 /* min distance between control points */ |
21 | |
22 #define GRAPH_MASK (GDK_EXPOSURE_MASK | \ | |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
23 GDK_POINTER_MOTION_MASK | \ |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
24 GDK_POINTER_MOTION_HINT_MASK | \ |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
25 GDK_ENTER_NOTIFY_MASK | \ |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
26 GDK_BUTTON_PRESS_MASK | \ |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
27 GDK_BUTTON_RELEASE_MASK | \ |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
28 GDK_BUTTON1_MOTION_MASK) |
358 | 29 |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
30 enum { |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
31 ARG_0, |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
32 ARG_CURVE_TYPE, |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
33 ARG_MIN_X, |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
34 ARG_MAX_X, |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
35 ARG_MIN_Y, |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
36 ARG_MAX_Y |
358 | 37 }; |
38 | |
39 static GtkDrawingAreaClass *parent_class = NULL; | |
40 | |
370
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
41 static void xs_curve_class_init(XSCurveClass * class); |
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
42 static void xs_curve_init(XSCurve * curve); |
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
43 static void xs_curve_set_arg(GtkObject * object, GtkArg * arg, guint arg_id); |
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
44 static void xs_curve_get_arg(GtkObject * object, GtkArg * arg, guint arg_id); |
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
45 static void xs_curve_finalize(GtkObject * object); |
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
46 static gint xs_curve_graph_events(GtkWidget * widget, GdkEvent * event, XSCurve * c); |
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
47 static void xs_curve_size_graph(XSCurve * curve); |
358 | 48 |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
49 |
370
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
50 GtkType xs_curve_get_type(void) |
358 | 51 { |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
52 static GtkType curve_type = 0; |
358 | 53 |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
54 if (!curve_type) { |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
55 static const GtkTypeInfo curve_info = { |
370
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
56 "XSCurve", |
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
57 sizeof(XSCurve), |
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
58 sizeof(XSCurveClass), |
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
59 (GtkClassInitFunc) xs_curve_class_init, |
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
60 (GtkObjectInitFunc) xs_curve_init, |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
61 /* reserved_1 */ NULL, |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
62 /* reserved_2 */ NULL, |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
63 (GtkClassInitFunc) NULL, |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
64 }; |
358 | 65 |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
66 curve_type = gtk_type_unique(GTK_TYPE_DRAWING_AREA, &curve_info); |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
67 } |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
68 return curve_type; |
358 | 69 } |
70 | |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
71 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
72 static void xs_curve_class_init(XSCurveClass *class) |
358 | 73 { |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
74 GtkObjectClass *object_class; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
75 |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
76 parent_class = gtk_type_class(GTK_TYPE_DRAWING_AREA); |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
77 |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
78 object_class = (GtkObjectClass *) class; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
79 |
370
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
80 object_class->set_arg = xs_curve_set_arg; |
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
81 object_class->get_arg = xs_curve_get_arg; |
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
82 object_class->finalize = xs_curve_finalize; |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
83 |
370
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
84 gtk_object_add_arg_type("XSCurve::min_x", GTK_TYPE_FLOAT, GTK_ARG_READWRITE, ARG_MIN_X); |
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
85 gtk_object_add_arg_type("XSCurve::max_x", GTK_TYPE_FLOAT, GTK_ARG_READWRITE, ARG_MAX_X); |
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
86 gtk_object_add_arg_type("XSCurve::min_y", GTK_TYPE_FLOAT, GTK_ARG_READWRITE, ARG_MIN_Y); |
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
87 gtk_object_add_arg_type("XSCurve::max_y", GTK_TYPE_FLOAT, GTK_ARG_READWRITE, ARG_MAX_Y); |
358 | 88 } |
89 | |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
90 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
91 static void xs_curve_init(XSCurve *curve) |
358 | 92 { |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
93 gint old_mask; |
358 | 94 |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
95 curve->pixmap = NULL; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
96 curve->height = 0; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
97 curve->grab_point = -1; |
358 | 98 |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
99 curve->num_ctlpoints = 0; |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
100 curve->ctlpoints = NULL; |
358 | 101 |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
102 curve->min_x = 0.0; |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
103 curve->max_x = 2048.0; |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
104 curve->min_y = 0.0; |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
105 curve->max_y = 22000.0; |
358 | 106 |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
107 old_mask = gtk_widget_get_events(GTK_WIDGET(curve)); |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
108 gtk_widget_set_events(GTK_WIDGET(curve), old_mask | GRAPH_MASK); |
370
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
109 gtk_signal_connect(GTK_OBJECT(curve), "event", (GtkSignalFunc) xs_curve_graph_events, curve); |
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
110 xs_curve_size_graph(curve); |
358 | 111 } |
112 | |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
113 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
114 static void xs_curve_set_arg(GtkObject *object, GtkArg *arg, guint arg_id) |
358 | 115 { |
370
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
116 XSCurve *curve = XS_CURVE(object); |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
117 |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
118 switch (arg_id) { |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
119 case ARG_MIN_X: |
370
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
120 xs_curve_set_range(curve, GTK_VALUE_FLOAT(*arg), curve->max_x, curve->min_y, curve->max_y); |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
121 break; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
122 case ARG_MAX_X: |
370
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
123 xs_curve_set_range(curve, curve->min_x, GTK_VALUE_FLOAT(*arg), curve->min_y, curve->max_y); |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
124 break; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
125 case ARG_MIN_Y: |
370
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
126 xs_curve_set_range(curve, curve->min_x, curve->max_x, GTK_VALUE_FLOAT(*arg), curve->max_y); |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
127 break; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
128 case ARG_MAX_Y: |
370
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
129 xs_curve_set_range(curve, curve->min_x, curve->max_x, curve->min_y, GTK_VALUE_FLOAT(*arg)); |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
130 break; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
131 } |
358 | 132 } |
133 | |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
134 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
135 static void xs_curve_get_arg(GtkObject *object, GtkArg *arg, guint arg_id) |
358 | 136 { |
370
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
137 XSCurve *curve = XS_CURVE(object); |
358 | 138 |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
139 switch (arg_id) { |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
140 case ARG_MIN_X: |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
141 GTK_VALUE_FLOAT(*arg) = curve->min_x; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
142 break; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
143 case ARG_MAX_X: |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
144 GTK_VALUE_FLOAT(*arg) = curve->max_x; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
145 break; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
146 case ARG_MIN_Y: |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
147 GTK_VALUE_FLOAT(*arg) = curve->min_y; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
148 break; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
149 case ARG_MAX_Y: |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
150 GTK_VALUE_FLOAT(*arg) = curve->max_y; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
151 break; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
152 default: |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
153 arg->type = GTK_TYPE_INVALID; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
154 break; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
155 } |
358 | 156 } |
157 | |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
158 |
374
58079c6180a0
More removal of original curve code.
Matti Hamalainen <ccr@tnsp.org>
parents:
370
diff
changeset
|
159 static int xs_project(gfloat value, gfloat min, gfloat max, int norm) |
358 | 160 { |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
161 return (norm - 1) * ((value - min) / (max - min)) + 0.5; |
358 | 162 } |
163 | |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
164 |
374
58079c6180a0
More removal of original curve code.
Matti Hamalainen <ccr@tnsp.org>
parents:
370
diff
changeset
|
165 static gfloat xs_unproject(gint value, gfloat min, gfloat max, int norm) |
358 | 166 { |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
167 return value / (gfloat) (norm - 1) * (max - min) + min; |
358 | 168 } |
169 | |
170 | |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
171 static inline void xs_cubic_coeff(gfloat x1, gfloat y1, |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
172 gfloat x2, gfloat y2, |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
173 gfloat k1, gfloat k2, |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
174 gfloat *a, gfloat *b, |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
175 gfloat *c, gfloat *d) |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
176 { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
177 gfloat dx = x2 - x1, dy = y2 - y1; |
358 | 178 |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
179 *a = ((k1 + k2) - 2 * dy / dx) / (dx * dx); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
180 *b = ((k2 - k1) / dx - 3 * (x1 + x2) * (*a)) / 2; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
181 *c = k1 - (3 * x1 * (*a) + 2 * (*b)) * x1; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
182 *d = y1 - ((x1 * (*a) + (*b)) * x1 + (*c)) * x1; |
358 | 183 } |
184 | |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
185 #define x(val) val->x |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
186 #define y(val) val->y |
358 | 187 |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
188 static void xs_curve_draw(XSCurve *curve, gint width, gint height) |
358 | 189 { |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
190 gfloat res = 10.0f; |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
191 GtkStateType state; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
192 GtkStyle *style; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
193 gint i; |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
194 t_xs_point *p0, *p1, *p2, *p3; |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
195 |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
196 if (!curve->pixmap) |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
197 return; |
358 | 198 |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
199 state = GTK_STATE_NORMAL; |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
200 if (!GTK_WIDGET_IS_SENSITIVE(GTK_WIDGET(curve))) |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
201 state = GTK_STATE_INSENSITIVE; |
358 | 202 |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
203 style = GTK_WIDGET(curve)->style; |
358 | 204 |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
205 /* Clear the pixmap */ |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
206 gtk_paint_flat_box(style, curve->pixmap, |
374
58079c6180a0
More removal of original curve code.
Matti Hamalainen <ccr@tnsp.org>
parents:
370
diff
changeset
|
207 GTK_STATE_NORMAL, GTK_SHADOW_NONE, |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
208 NULL, GTK_WIDGET(curve), "curve_bg", |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
209 0, 0, |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
210 width + RADIUS2, |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
211 height + RADIUS2); |
374
58079c6180a0
More removal of original curve code.
Matti Hamalainen <ccr@tnsp.org>
parents:
370
diff
changeset
|
212 |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
213 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
214 /* Draw the grid */ |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
215 for (i = 0; i < 5; i++) { |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
216 gdk_draw_line(curve->pixmap, style->dark_gc[state], |
374
58079c6180a0
More removal of original curve code.
Matti Hamalainen <ccr@tnsp.org>
parents:
370
diff
changeset
|
217 RADIUS, i * (height / 4.0) + RADIUS, |
58079c6180a0
More removal of original curve code.
Matti Hamalainen <ccr@tnsp.org>
parents:
370
diff
changeset
|
218 width + RADIUS, i * (height / 4.0) + RADIUS); |
58079c6180a0
More removal of original curve code.
Matti Hamalainen <ccr@tnsp.org>
parents:
370
diff
changeset
|
219 |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
220 gdk_draw_line(curve->pixmap, style->dark_gc[state], |
374
58079c6180a0
More removal of original curve code.
Matti Hamalainen <ccr@tnsp.org>
parents:
370
diff
changeset
|
221 i * (width / 4.0) + RADIUS, RADIUS, |
58079c6180a0
More removal of original curve code.
Matti Hamalainen <ccr@tnsp.org>
parents:
370
diff
changeset
|
222 i * (width / 4.0) + RADIUS, height + RADIUS); |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
223 } |
358 | 224 |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
225 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
226 /* Draw the spline/curve itself */ |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
227 p0 = curve->ctlpoints; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
228 p1 = p0; p1++; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
229 p2 = p1; p2++; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
230 p3 = p2; p3++; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
231 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
232 /* Draw each curve segment */ |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
233 fprintf(stderr, "npoints = %d\n", curve->num_ctlpoints); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
234 for (i = 0; i < curve->num_ctlpoints; i++, ++p0, ++p1, ++p2, ++p3) { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
235 gfloat k1, k2, a, b, c, d, x; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
236 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
237 /* p1 and p2 equal; single point */ |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
238 if (x(p1) == x(p2)) |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
239 continue; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
240 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
241 /* Both end points repeated; straight line */ |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
242 if (x(p0) == x(p1) && x(p2) == x(p3)) { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
243 k1 = k2 = (y(p2) - y(p1)) / (x(p2) - x(p1)); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
244 } |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
245 /* p0 and p1 equal; use f''(x1) = 0 */ |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
246 else if (x(p0) == x(p1)) { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
247 k2 = (y(p3) - y(p1)) / (x(p3) - x(p1)); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
248 k1 = (3 * (y(p2) - y(p1)) / (x(p2) - x(p1)) - k2) / 2; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
249 } |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
250 /* p2 and p3 equal; use f''(x2) = 0 */ |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
251 else if (x(p2) == x(p3)) { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
252 k1 = (y(p2) - y(p0)) / (x(p2) - x(p0)); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
253 k2 = (3 * (y(p2) - y(p1)) / (x(p2) - x(p1)) - k1) / 2; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
254 } |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
255 /* Normal curve */ |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
256 else { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
257 k1 = (y(p2) - y(p0)) / (x(p2) - x(p0)); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
258 k2 = (y(p3) - y(p1)) / (x(p3) - x(p1)); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
259 } |
370
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
260 |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
261 xs_cubic_coeff(x(p1), y(p1), x(p2), y(p2), k1, k2, &a, &b, &c, &d); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
262 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
263 fprintf(stderr, "--seg[%1.3f, %1.3f]=>[%1.3f, %1.3f]--\n", |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
264 x(p1), y(p1), x(p2), y(p2)); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
265 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
266 for (x = x(p1); x <= x(p2); x += res) { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
267 gfloat y = ((a * x + b) * x + c) * x + d; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
268 gint qx, qy; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
269 qx = RADIUS + xs_project(x, curve->min_x, curve->max_x, width); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
270 qy = RADIUS + xs_project(y, curve->min_y, curve->max_y, height); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
271 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
272 fprintf(stderr, "[%1.3f, %1.3f] -> %d, %d\n", x, y, qx, qy); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
273 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
274 gdk_draw_point(curve->pixmap, style->fg_gc[state], |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
275 RADIUS + xs_project(x, curve->min_x, curve->max_x, width), |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
276 RADIUS + xs_project(y, curve->min_y, curve->max_y, height) |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
277 ); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
278 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
279 } |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
280 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
281 fprintf(stderr, "-------\n"); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
282 } |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
283 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
284 /* Draw control points */ |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
285 for (i = 0; i < curve->num_ctlpoints; ++i) { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
286 gint x, y; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
287 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
288 if (GET_X(i) < curve->min_x || GET_Y(i) < curve->min_y || |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
289 GET_X(i) >= curve->max_x || GET_Y(i) >= curve->max_y) |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
290 continue; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
291 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
292 x = xs_project(GET_X(i), curve->min_x, curve->max_x, width); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
293 y = xs_project(GET_Y(i), curve->min_y, curve->max_y, height); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
294 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
295 gdk_draw_arc(curve->pixmap, style->fg_gc[state], TRUE, |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
296 x, y, RADIUS2, RADIUS2, 0, 360 * 64); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
297 } |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
298 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
299 /* Draw pixmap in the widget */ |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
300 gdk_draw_pixmap(GTK_WIDGET(curve)->window, |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
301 style->fg_gc[state], curve->pixmap, |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
302 0, 0, 0, 0, |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
303 width + RADIUS2, |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
304 height + RADIUS2); |
358 | 305 } |
306 | |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
307 #undef x |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
308 #undef y |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
309 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
310 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
311 static gint xs_curve_graph_events(GtkWidget *widget, GdkEvent *event, XSCurve *curve) |
358 | 312 { |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
313 GdkCursorType new_type = curve->cursor_type; |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
314 GdkEventButton *bevent; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
315 GdkEventMotion *mevent; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
316 GtkWidget *w; |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
317 gint i, width, height, x, y, tx, ty, cx, closest_point = 0, min_x; |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
318 guint distance; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
319 |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
320 w = GTK_WIDGET(curve); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
321 width = w->allocation.width - RADIUS2; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
322 height = w->allocation.height - RADIUS2; |
358 | 323 |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
324 if ((width < 0) || (height < 0)) |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
325 return FALSE; |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
326 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
327 /* get the pointer position */ |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
328 gdk_window_get_pointer(w->window, &tx, &ty, NULL); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
329 x = CLAMP((tx - RADIUS), 0, width - 1); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
330 y = CLAMP((ty - RADIUS), 0, height - 1); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
331 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
332 min_x = curve->min_x; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
333 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
334 distance = ~0U; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
335 for (i = 0; i < curve->num_ctlpoints; ++i) { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
336 cx = xs_project(GET_X(i), min_x, curve->max_x, width); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
337 if ((guint) abs(x - cx) < distance) { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
338 distance = abs(x - cx); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
339 closest_point = i; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
340 } |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
341 } |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
342 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
343 /* Act based on event type */ |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
344 switch (event->type) { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
345 case GDK_CONFIGURE: |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
346 if (curve->pixmap) |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
347 gdk_pixmap_unref(curve->pixmap); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
348 curve->pixmap = 0; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
349 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
350 /* fall through */ |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
351 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
352 case GDK_EXPOSE: |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
353 if (!curve->pixmap) { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
354 curve->pixmap = gdk_pixmap_new(w->window, |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
355 w->allocation.width, w->allocation.height, -1); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
356 } |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
357 xs_curve_draw(curve, width, height); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
358 break; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
359 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
360 case GDK_BUTTON_PRESS: |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
361 gtk_grab_add(widget); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
362 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
363 bevent = (GdkEventButton *) event; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
364 new_type = GDK_TCROSS; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
365 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
366 if (distance > MIN_DISTANCE) { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
367 /* insert a new control point */ |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
368 if (curve->num_ctlpoints > 0) { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
369 cx = xs_project(GET_X(closest_point), min_x, curve->max_x, width); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
370 if (x > cx) closest_point++; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
371 } |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
372 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
373 curve->num_ctlpoints++; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
374 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
375 curve->ctlpoints = g_realloc(curve->ctlpoints, curve->num_ctlpoints * sizeof(*curve->ctlpoints)); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
376 for (i = curve->num_ctlpoints - 1; i > closest_point; --i) { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
377 memcpy(curve->ctlpoints + i, curve->ctlpoints + i - 1, sizeof(*curve->ctlpoints)); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
378 } |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
379 } |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
380 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
381 curve->grab_point = closest_point; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
382 GET_X(curve->grab_point) = xs_unproject(x, min_x, curve->max_x, width); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
383 GET_Y(curve->grab_point) = xs_unproject(y, curve->min_y, curve->max_y, height); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
384 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
385 xs_curve_draw(curve, width, height); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
386 break; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
387 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
388 case GDK_BUTTON_RELEASE: |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
389 { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
390 gint src, dst; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
391 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
392 gtk_grab_remove(widget); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
393 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
394 /* delete inactive points: */ |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
395 for (src = dst = 0; src < curve->num_ctlpoints; ++src) |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
396 if (GET_X(src) >= min_x) { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
397 memcpy(curve->ctlpoints + dst, curve->ctlpoints + src, sizeof(*curve->ctlpoints)); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
398 dst++; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
399 } |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
400 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
401 if (dst < src) { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
402 curve->num_ctlpoints -= (src - dst); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
403 if (curve->num_ctlpoints <= 0) { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
404 curve->num_ctlpoints = 1; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
405 GET_X(0) = min_x; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
406 GET_Y(0) = curve->min_y; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
407 xs_curve_draw(curve, width, height); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
408 } |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
409 curve->ctlpoints = g_realloc(curve->ctlpoints, curve->num_ctlpoints * sizeof(*curve->ctlpoints)); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
410 } |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
411 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
412 new_type = GDK_FLEUR; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
413 curve->grab_point = -1; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
414 } |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
415 break; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
416 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
417 case GDK_MOTION_NOTIFY: |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
418 mevent = (GdkEventMotion *) event; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
419 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
420 if (curve->grab_point == -1) { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
421 /* if no point is grabbed... */ |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
422 if (distance <= MIN_DISTANCE) |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
423 new_type = GDK_FLEUR; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
424 else |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
425 new_type = GDK_TCROSS; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
426 } else { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
427 gint leftbound, rightbound; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
428 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
429 /* drag the grabbed point */ |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
430 new_type = GDK_TCROSS; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
431 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
432 leftbound = -MIN_DISTANCE; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
433 if (curve->grab_point > 0) { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
434 leftbound = xs_project( |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
435 GET_X(curve->grab_point-1), |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
436 min_x, curve->max_x, width); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
437 } |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
438 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
439 rightbound = width + RADIUS2 + MIN_DISTANCE; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
440 if (curve->grab_point + 1 < curve->num_ctlpoints) { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
441 rightbound = xs_project( |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
442 GET_X(curve->grab_point+1), |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
443 min_x, curve->max_x, width); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
444 } |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
445 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
446 if ((tx <= leftbound) || (tx >= rightbound) || |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
447 (ty > height + RADIUS2 + MIN_DISTANCE) || (ty < -MIN_DISTANCE)) { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
448 GET_X(curve->grab_point) = min_x - 1.0; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
449 } else { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
450 GET_X(curve->grab_point) = |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
451 xs_unproject(x, min_x, curve->max_x, width); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
452 GET_Y(curve->grab_point) = |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
453 xs_unproject(y, curve->min_y, curve->max_y, height); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
454 } |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
455 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
456 xs_curve_draw(curve, width, height); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
457 } |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
458 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
459 if (new_type != (GdkCursorType) curve->cursor_type) { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
460 GdkCursor *cursor; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
461 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
462 curve->cursor_type = new_type; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
463 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
464 cursor = gdk_cursor_new(curve->cursor_type); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
465 gdk_window_set_cursor(w->window, cursor); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
466 gdk_cursor_destroy(cursor); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
467 } |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
468 break; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
469 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
470 default: |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
471 break; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
472 } |
374
58079c6180a0
More removal of original curve code.
Matti Hamalainen <ccr@tnsp.org>
parents:
370
diff
changeset
|
473 |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
474 return FALSE; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
475 } |
358 | 476 |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
477 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
478 static void xs_curve_size_graph(XSCurve *curve) |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
479 { |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
480 gint width, height; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
481 gfloat aspect; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
482 |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
483 width = (curve->max_x - curve->min_x) + 1; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
484 height = (curve->max_y - curve->min_y) + 1; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
485 aspect = width / (gfloat) height; |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
486 |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
487 if (width > gdk_screen_width() / 4) |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
488 width = gdk_screen_width() / 4; |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
489 |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
490 if (height > gdk_screen_height() / 4) |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
491 height = gdk_screen_height() / 4; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
492 |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
493 if (aspect < 1.0) |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
494 width = height * aspect; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
495 else |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
496 height = width / aspect; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
497 |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
498 gtk_drawing_area_size(GTK_DRAWING_AREA(curve), width + RADIUS2, height + RADIUS2); |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
499 } |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
500 |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
501 |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
502 void xs_curve_reset(XSCurve *curve) |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
503 { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
504 if (curve->ctlpoints) |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
505 g_free(curve->ctlpoints); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
506 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
507 curve->num_ctlpoints = 4; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
508 curve->ctlpoints = g_malloc(curve->num_ctlpoints * sizeof(curve->ctlpoints[0])); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
509 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
510 GET_X(0) = curve->min_x; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
511 GET_Y(0) = curve->min_y; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
512 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
513 GET_X(1) = curve->min_x; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
514 GET_Y(1) = curve->min_y; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
515 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
516 GET_X(2) = curve->max_x; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
517 GET_Y(2) = curve->max_y; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
518 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
519 GET_X(3) = curve->max_x; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
520 GET_Y(3) = curve->max_y; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
521 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
522 if (curve->pixmap) { |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
523 gint width, height; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
524 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
525 width = GTK_WIDGET(curve)->allocation.width - RADIUS2; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
526 height = GTK_WIDGET(curve)->allocation.height - RADIUS2; |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
527 xs_curve_draw(curve, width, height); |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
528 } |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
529 } |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
530 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
531 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
532 void xs_curve_set_range(XSCurve *curve, gfloat min_x, gfloat max_x, gfloat min_y, gfloat max_y) |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
533 { |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
534 curve->min_x = min_x; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
535 curve->max_x = max_x; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
536 curve->min_y = min_y; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
537 curve->max_y = max_y; |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
538 |
370
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
539 xs_curve_size_graph(curve); |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
540 xs_curve_reset(curve); |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
541 } |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
542 |
358 | 543 |
370
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
544 GtkWidget *xs_curve_new(void) |
358 | 545 { |
370
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
546 return gtk_type_new(xs_curve_get_type()); |
358 | 547 } |
548 | |
374
58079c6180a0
More removal of original curve code.
Matti Hamalainen <ccr@tnsp.org>
parents:
370
diff
changeset
|
549 |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
550 static void xs_curve_finalize(GtkObject *object) |
358 | 551 { |
370
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
552 XSCurve *curve; |
358 | 553 |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
554 g_return_if_fail(object != NULL); |
370
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
555 g_return_if_fail(XS_IS_CURVE(object)); |
358 | 556 |
370
df6f12a00305
Work on filter curve widget begins, based on GtkCurve widget from Gtk+ 1.2.10.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
557 curve = XS_CURVE(object); |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
558 |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
559 if (curve->pixmap) |
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
560 gdk_pixmap_unref(curve->pixmap); |
502
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
561 |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
562 if (curve->ctlpoints) |
54d86ee98b98
Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents:
378
diff
changeset
|
563 g_free(curve->ctlpoints); |
358 | 564 |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
358
diff
changeset
|
565 (*GTK_OBJECT_CLASS(parent_class)->finalize) (object); |
358 | 566 } |
374
58079c6180a0
More removal of original curve code.
Matti Hamalainen <ccr@tnsp.org>
parents:
370
diff
changeset
|
567 |