annotate src/xs_curve.c @ 984:2b6184fa7e4a

Updated.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 31 Mar 2013 11:43:27 +0300
parents 79f20427c99d
children ede5374e9294
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
554
b37c7f430c3f Copyright header.
Matti Hamalainen <ccr@tnsp.org>
parents: 545
diff changeset
1 /*
b37c7f430c3f Copyright header.
Matti Hamalainen <ccr@tnsp.org>
parents: 545
diff changeset
2 XMMS-SID - SIDPlay input plugin for X MultiMedia System (XMMS)
b37c7f430c3f Copyright header.
Matti Hamalainen <ccr@tnsp.org>
parents: 545
diff changeset
3
b37c7f430c3f Copyright header.
Matti Hamalainen <ccr@tnsp.org>
parents: 545
diff changeset
4 XSCurve, a custom Gtk+ spline widget for representing SIDPlay2/reSID
b37c7f430c3f Copyright header.
Matti Hamalainen <ccr@tnsp.org>
parents: 545
diff changeset
5 filter curves in the configuration GUI. Implementation based heavily
602
b6c7c26569cc Updates from curve branch.
Matti Hamalainen <ccr@tnsp.org>
parents: 554
diff changeset
6 on GtkCurve from Gtk+ 1.2.10 (C) 1997 David Mosberger & Gtk-team.
554
b37c7f430c3f Copyright header.
Matti Hamalainen <ccr@tnsp.org>
parents: 545
diff changeset
7 Spline formula from reSID 0.16 (C) 2004 Dag Lem.
b37c7f430c3f Copyright header.
Matti Hamalainen <ccr@tnsp.org>
parents: 545
diff changeset
8
b37c7f430c3f Copyright header.
Matti Hamalainen <ccr@tnsp.org>
parents: 545
diff changeset
9 Programmed by Matti 'ccr' Hamalainen <ccr@tnsp.org>
723
9321ffa2ea7e Update copyright years.
Matti Hamalainen <ccr@tnsp.org>
parents: 702
diff changeset
10 (C) Copyright 2006-2009 Tecnic Software productions (TNSP)
554
b37c7f430c3f Copyright header.
Matti Hamalainen <ccr@tnsp.org>
parents: 545
diff changeset
11
b37c7f430c3f Copyright header.
Matti Hamalainen <ccr@tnsp.org>
parents: 545
diff changeset
12 This program is free software; you can redistribute it and/or modify
b37c7f430c3f Copyright header.
Matti Hamalainen <ccr@tnsp.org>
parents: 545
diff changeset
13 it under the terms of the GNU General Public License as published by
b37c7f430c3f Copyright header.
Matti Hamalainen <ccr@tnsp.org>
parents: 545
diff changeset
14 the Free Software Foundation; either version 2 of the License, or
b37c7f430c3f Copyright header.
Matti Hamalainen <ccr@tnsp.org>
parents: 545
diff changeset
15 (at your option) any later version.
b37c7f430c3f Copyright header.
Matti Hamalainen <ccr@tnsp.org>
parents: 545
diff changeset
16
b37c7f430c3f Copyright header.
Matti Hamalainen <ccr@tnsp.org>
parents: 545
diff changeset
17 This program is distributed in the hope that it will be useful,
b37c7f430c3f Copyright header.
Matti Hamalainen <ccr@tnsp.org>
parents: 545
diff changeset
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
b37c7f430c3f Copyright header.
Matti Hamalainen <ccr@tnsp.org>
parents: 545
diff changeset
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b37c7f430c3f Copyright header.
Matti Hamalainen <ccr@tnsp.org>
parents: 545
diff changeset
20 GNU General Public License for more details.
b37c7f430c3f Copyright header.
Matti Hamalainen <ccr@tnsp.org>
parents: 545
diff changeset
21
b37c7f430c3f Copyright header.
Matti Hamalainen <ccr@tnsp.org>
parents: 545
diff changeset
22 You should have received a copy of the GNU General Public License along
b37c7f430c3f Copyright header.
Matti Hamalainen <ccr@tnsp.org>
parents: 545
diff changeset
23 with this program; if not, write to the Free Software Foundation, Inc.,
b37c7f430c3f Copyright header.
Matti Hamalainen <ccr@tnsp.org>
parents: 545
diff changeset
24 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
b37c7f430c3f Copyright header.
Matti Hamalainen <ccr@tnsp.org>
parents: 545
diff changeset
25 */
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
26 #include <stdlib.h>
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
27 #include <string.h>
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
28 #include <math.h>
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
29 #include <stdio.h>
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
30 #include "xs_curve.h"
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
31 #include <gtk/gtkdrawingarea.h>
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
32 #include <gtk/gtkmain.h>
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
33 #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
34
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
35
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
36 #define CP_RADIUS 3 /* radius of the control points */
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
37 #define CP_RADIUS2 (CP_RADIUS * 2)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
38 #define CP_MIN_DISTANCE 7 /* min distance between control points */
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
39
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
40
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
41 #define GRAPH_MASK ( \
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
42 GDK_EXPOSURE_MASK | \
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
43 GDK_POINTER_MOTION_MASK | \
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
44 GDK_POINTER_MOTION_HINT_MASK | \
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
45 GDK_ENTER_NOTIFY_MASK | \
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
46 GDK_BUTTON_PRESS_MASK | \
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
47 GDK_BUTTON_RELEASE_MASK | \
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
48 GDK_BUTTON1_MOTION_MASK)
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
49
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
50 #define GET_X(i) curve->ctlpoints[i].x
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
51 #define GET_Y(i) curve->ctlpoints[i].y
514
982cec405ef0 Cleaned up the drawing function a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 502
diff changeset
52
982cec405ef0 Cleaned up the drawing function a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 502
diff changeset
53
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
54 enum {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
55 ARG_0,
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
56 ARG_MIN_X,
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
57 ARG_MAX_X,
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
58 ARG_MIN_Y,
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
59 ARG_MAX_Y
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
60 };
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
61
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
62 static GtkDrawingAreaClass *parent_class = NULL;
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
63
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
64 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
65 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
66 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
67 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
68 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
69 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
70 static void xs_curve_size_graph(XSCurve * curve);
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
71
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
72
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
73 GtkType xs_curve_get_type(void)
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
74 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
75 static GtkType curve_type = 0;
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
76
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
77 if (!curve_type)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
78 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
79 static const GtkTypeInfo curve_info =
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
80 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
81 "XSCurve",
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
82 sizeof(XSCurve),
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
83 sizeof(XSCurveClass),
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
84 (GtkClassInitFunc) xs_curve_class_init,
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
85 (GtkObjectInitFunc) xs_curve_init,
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
86 /* reserved_1 */ NULL,
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
87 /* reserved_2 */ NULL,
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
88 (GtkClassInitFunc) NULL,
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
89 };
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
90
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
91 curve_type = gtk_type_unique(GTK_TYPE_DRAWING_AREA, &curve_info);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
92 }
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
93 return curve_type;
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
94 }
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
95
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
96
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
97 static void xs_curve_class_init(XSCurveClass *class)
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
98 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
99 GtkObjectClass *object_class;
359
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
100
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
101 parent_class = gtk_type_class(GTK_TYPE_DRAWING_AREA);
359
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
102
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
103 object_class = (GtkObjectClass *) class;
359
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
104
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
105 object_class->set_arg = xs_curve_set_arg;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
106 object_class->get_arg = xs_curve_get_arg;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
107 object_class->finalize = xs_curve_finalize;
359
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
108
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
109 gtk_object_add_arg_type("XSCurve::min_x", GTK_TYPE_FLOAT, GTK_ARG_READWRITE, ARG_MIN_X);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
110 gtk_object_add_arg_type("XSCurve::max_x", GTK_TYPE_FLOAT, GTK_ARG_READWRITE, ARG_MAX_X);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
111 gtk_object_add_arg_type("XSCurve::min_y", GTK_TYPE_FLOAT, GTK_ARG_READWRITE, ARG_MIN_Y);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
112 gtk_object_add_arg_type("XSCurve::max_y", GTK_TYPE_FLOAT, GTK_ARG_READWRITE, ARG_MAX_Y);
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
113 }
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
114
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
115
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
116 static void xs_curve_init(XSCurve *curve)
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
117 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
118 gint old_mask;
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
119
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
120 curve->pixmap = NULL;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
121 curve->grab_point = -1;
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
122
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
123 curve->nctlpoints = 0;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
124 curve->ctlpoints = NULL;
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
125
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
126 curve->min_x = 0.0;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
127 curve->max_x = 2047.0;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
128 curve->min_y = 0.0;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
129 curve->max_y = 24000.0;
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
130
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
131 old_mask = gtk_widget_get_events(GTK_WIDGET(curve));
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
132 gtk_widget_set_events(GTK_WIDGET(curve), old_mask | GRAPH_MASK);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
133 gtk_signal_connect(GTK_OBJECT(curve), "event", (GtkSignalFunc) xs_curve_graph_events, curve);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
134 xs_curve_size_graph(curve);
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
135 }
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
136
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
137
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
138 static void xs_curve_set_arg(GtkObject *object, GtkArg *arg, guint arg_id)
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
139 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
140 XSCurve *curve = XS_CURVE(object);
359
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
141
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
142 switch (arg_id)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
143 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
144 case ARG_MIN_X:
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
145 xs_curve_set_range(curve, GTK_VALUE_FLOAT(*arg), curve->max_x, curve->min_y, curve->max_y);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
146 break;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
147 case ARG_MAX_X:
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
148 xs_curve_set_range(curve, curve->min_x, GTK_VALUE_FLOAT(*arg), curve->min_y, curve->max_y);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
149 break;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
150 case ARG_MIN_Y:
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
151 xs_curve_set_range(curve, curve->min_x, curve->max_x, GTK_VALUE_FLOAT(*arg), curve->max_y);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
152 break;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
153 case ARG_MAX_Y:
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
154 xs_curve_set_range(curve, curve->min_x, curve->max_x, curve->min_y, GTK_VALUE_FLOAT(*arg));
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
155 break;
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
156 }
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
157 }
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
158
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
159
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
160 static void xs_curve_get_arg(GtkObject *object, GtkArg *arg, guint arg_id)
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
161 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
162 XSCurve *curve = XS_CURVE(object);
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
163
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
164 switch (arg_id)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
165 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
166 case ARG_MIN_X:
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
167 GTK_VALUE_FLOAT(*arg) = curve->min_x;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
168 break;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
169 case ARG_MAX_X:
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
170 GTK_VALUE_FLOAT(*arg) = curve->max_x;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
171 break;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
172 case ARG_MIN_Y:
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
173 GTK_VALUE_FLOAT(*arg) = curve->min_y;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
174 break;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
175 case ARG_MAX_Y:
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
176 GTK_VALUE_FLOAT(*arg) = curve->max_y;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
177 break;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
178 default:
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
179 arg->type = GTK_TYPE_INVALID;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
180 break;
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
181 }
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
182 }
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
183
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
184
374
58079c6180a0 More removal of original curve code.
Matti Hamalainen <ccr@tnsp.org>
parents: 370
diff changeset
185 static int xs_project(gfloat value, gfloat min, gfloat max, int norm)
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
186 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
187 return (norm - 1) * ((value - min) / (max - min)) + 0.5;
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
188 }
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
189
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
190
374
58079c6180a0 More removal of original curve code.
Matti Hamalainen <ccr@tnsp.org>
parents: 370
diff changeset
191 static gfloat xs_unproject(gint value, gfloat min, gfloat max, int norm)
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
192 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
193 return value / (gfloat) (norm - 1) * (max - min) + min;
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
194 }
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
195
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
196
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
197 static inline void xs_cubic_coeff(gfloat x1, gfloat y1,
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
198 gfloat x2, gfloat y2,
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
199 gfloat k1, gfloat k2,
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
200 gfloat *a, gfloat *b,
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
201 gfloat *c, gfloat *d)
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
202 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
203 gfloat dx = x2 - x1, dy = y2 - y1;
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
204
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
205 *a = ((k1 + k2) - 2 * dy / dx) / (dx * dx);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
206 *b = ((k2 - k1) / dx - 3 * (x1 + x2) * (*a)) / 2;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
207 *c = k1 - (3 * x1 * (*a) + 2 * (*b)) * x1;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
208 *d = y1 - ((x1 * (*a) + (*b)) * x1 + (*c)) * x1;
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
209 }
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
210
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
211
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
212 static void xs_curve_draw(XSCurve *curve, gint width, gint height)
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
213 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
214 gfloat res = 5.0f;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
215 GtkStateType state;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
216 GtkStyle *style;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
217 gint i, ox = -1, oy = -1;
702
b5b6b13a6d85 Renamed some types.
Matti Hamalainen <ccr@tnsp.org>
parents: 660
diff changeset
218 xs_point_t *p0, *p1, *p2, *p3;
359
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
219
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
220 if (!curve->pixmap)
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
221 return;
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
222
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
223 state = GTK_STATE_NORMAL;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
224 if (!GTK_WIDGET_IS_SENSITIVE(GTK_WIDGET(curve)))
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
225 state = GTK_STATE_INSENSITIVE;
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
226
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
227 style = GTK_WIDGET(curve)->style;
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
228
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
229 /* Clear the pixmap */
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
230 gtk_paint_flat_box(style, curve->pixmap,
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
231 GTK_STATE_NORMAL, GTK_SHADOW_NONE,
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
232 NULL, GTK_WIDGET(curve), "curve_bg",
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
233 0, 0,
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
234 width + CP_RADIUS2,
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
235 height + CP_RADIUS2);
374
58079c6180a0 More removal of original curve code.
Matti Hamalainen <ccr@tnsp.org>
parents: 370
diff changeset
236
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
237
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
238 /* Draw the grid */
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
239 for (i = 0; i < 5; i++)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
240 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
241 gdk_draw_line(curve->pixmap, style->dark_gc[state],
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
242 CP_RADIUS, i * (height / 4.0) + CP_RADIUS,
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
243 width + CP_RADIUS, i * (height / 4.0) + CP_RADIUS);
374
58079c6180a0 More removal of original curve code.
Matti Hamalainen <ccr@tnsp.org>
parents: 370
diff changeset
244
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
245 gdk_draw_line(curve->pixmap, style->dark_gc[state],
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
246 i * (width / 4.0) + CP_RADIUS, CP_RADIUS,
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
247 i * (width / 4.0) + CP_RADIUS, height + CP_RADIUS);
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
248 }
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
249
520
81481e59e195 Almost working.
Matti Hamalainen <ccr@tnsp.org>
parents: 514
diff changeset
250 #if 1
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
251 /* Draw the spline/curve itself */
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
252 p0 = curve->ctlpoints;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
253 p1 = p0;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
254 p2 = p1; p2++;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
255 p3 = p2; p3++;
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
256
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
257 /* Draw each curve segment */
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
258 if (curve->nctlpoints > 5)
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
259 for (i = 0; i < curve->nctlpoints; i++, ++p0, ++p1, ++p2, ++p3)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
260 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
261 gfloat k1, k2, a, b, c, d, x;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
262
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
263 if (p1->x == p2->x)
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
264 continue;
514
982cec405ef0 Cleaned up the drawing function a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 502
diff changeset
265
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
266 if (p0->x == p1->x && p2->x == p3->x)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
267 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
268 k1 = k2 = (p2->y - p1->y) / (p2->x - p1->x);
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
269 }
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
270 else if (p0->x == p1->x)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
271 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
272 k2 = (p3->y - p1->y) / (p3->x - p1->x);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
273 k1 = (3 * (p2->y - p1->y) / (p2->x - p1->x) - k2) / 2;
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
274 }
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
275 else if (p2->x == p3->x)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
276 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
277 k1 = (p2->y - p0->y) / (p2->x - p0->x);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
278 k2 = (3 * (p2->y - p1->y) / (p2->x - p1->x) - k1) / 2;
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
279 }
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
280 else
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
281 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
282 k1 = (p2->y - p0->y) / (p2->x - p0->x);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
283 k2 = (p3->y - p1->y) / (p3->x - p1->x);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
284 }
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
285
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
286 xs_cubic_coeff(p1->x, p1->y, p2->x, p2->y, k1, k2, &a, &b, &c, &d);
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
287
936
79f20427c99d Remove unused variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 908
diff changeset
288 for (x = p1->x; x <= p2->x; x += res)
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
289 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
290 gfloat y = ((a * x + b) * x + c) * x + d;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
291 gint qx, qy;
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
292 qx = CP_RADIUS + xs_project(x, curve->min_x, curve->max_x, width);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
293 qy = CP_RADIUS + xs_project(y, curve->min_y, curve->max_y, height);
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
294
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
295 if (ox != -1)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
296 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
297 gdk_draw_line(curve->pixmap, style->fg_gc[state],
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
298 ox, oy, qx, qy);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
299 }
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
300 ox = qx; oy = qy;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
301 }
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
302 }
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
303
520
81481e59e195 Almost working.
Matti Hamalainen <ccr@tnsp.org>
parents: 514
diff changeset
304 #endif
81481e59e195 Almost working.
Matti Hamalainen <ccr@tnsp.org>
parents: 514
diff changeset
305
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
306 /* Draw control points */
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
307 for (i = 0; i < curve->nctlpoints; ++i)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
308 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
309 gint x, y;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
310 GtkStateType cstate;
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
311
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
312 if (GET_X(i) < curve->min_x || GET_Y(i) < curve->min_y ||
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
313 GET_X(i) >= curve->max_x || GET_Y(i) >= curve->max_y)
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
314 continue;
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
315
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
316 x = xs_project(GET_X(i), curve->min_x, curve->max_x, width);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
317 y = xs_project(GET_Y(i), curve->min_y, curve->max_y, height);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
318
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
319 if (i == curve->grab_point)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
320 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
321 cstate = GTK_STATE_SELECTED;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
322 gdk_draw_line(curve->pixmap, style->fg_gc[cstate],
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
323 x + CP_RADIUS, CP_RADIUS, x + CP_RADIUS, height + CP_RADIUS);
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
324 gdk_draw_line(curve->pixmap, style->fg_gc[cstate],
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
325 CP_RADIUS, y + CP_RADIUS, width + CP_RADIUS, y + CP_RADIUS);
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
326 } else
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
327 cstate = state;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
328
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
329 gdk_draw_arc(curve->pixmap, style->fg_gc[cstate], TRUE,
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
330 x, y, CP_RADIUS2, CP_RADIUS2, 0, 360 * 64);
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
331 }
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
332
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
333 /* Draw pixmap in the widget */
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
334 gdk_draw_pixmap(GTK_WIDGET(curve)->window,
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
335 style->fg_gc[state], curve->pixmap,
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
336 0, 0, 0, 0,
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
337 width + CP_RADIUS2,
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
338 height + CP_RADIUS2);
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
339 }
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
340
502
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 static gint xs_curve_graph_events(GtkWidget *widget, GdkEvent *event, XSCurve *curve)
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
343 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
344 GdkCursorType new_type = curve->cursor_type;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
345 GdkEventButton *bevent;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
346 GtkWidget *w;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
347 gint i, width, height, x, y, tx, ty, cx, closest_point = 0, min_x;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
348 guint distance;
359
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
349
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
350 w = GTK_WIDGET(curve);
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
351 width = w->allocation.width - CP_RADIUS2;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
352 height = w->allocation.height - CP_RADIUS2;
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
353
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
354 if ((width < 0) || (height < 0))
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
355 return FALSE;
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
356
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
357 /* get the pointer position */
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
358 gdk_window_get_pointer(w->window, &tx, &ty, NULL);
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
359 x = CLAMP((tx - CP_RADIUS), 0, width - 1);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
360 y = CLAMP((ty - CP_RADIUS), 0, height - 1);
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
361 min_x = curve->min_x;
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
362
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
363 distance = ~0U;
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
364 for (i = 0; i < curve->nctlpoints; ++i)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
365 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
366 cx = xs_project(GET_X(i), min_x, curve->max_x, width);
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
367 if ((guint) abs(x - cx) < distance)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
368 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
369 distance = abs(x - cx);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
370 closest_point = i;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
371 }
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
372 }
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
373
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
374 /* Act based on event type */
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
375 switch (event->type)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
376 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
377 case GDK_CONFIGURE:
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
378 if (curve->pixmap)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
379 gdk_pixmap_unref(curve->pixmap);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
380 curve->pixmap = 0;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
381
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
382 /* fall through */
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
383
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
384 case GDK_EXPOSE:
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
385 if (!curve->pixmap)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
386 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
387 curve->pixmap = gdk_pixmap_new(w->window,
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
388 w->allocation.width, w->allocation.height, -1);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
389 }
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
390 xs_curve_draw(curve, width, height);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
391 break;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
392
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
393 case GDK_BUTTON_PRESS:
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
394 gtk_grab_add(widget);
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
395
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
396 bevent = (GdkEventButton *) event;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
397 new_type = GDK_TCROSS;
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
398
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
399 if (distance > CP_MIN_DISTANCE)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
400 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
401 /* insert a new control point */
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
402 if (curve->nctlpoints > 0)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
403 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
404 cx = xs_project(GET_X(closest_point), min_x, curve->max_x, width);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
405 if (x > cx) closest_point++;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
406 }
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
407
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
408 curve->nctlpoints++;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
409
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
410 curve->ctlpoints = g_realloc(curve->ctlpoints,
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
411 curve->nctlpoints * sizeof(*curve->ctlpoints));
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
412
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
413 for (i = curve->nctlpoints - 1; i > closest_point; --i)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
414 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
415 memcpy(curve->ctlpoints + i,
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
416 curve->ctlpoints + i - 1,
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
417 sizeof(*curve->ctlpoints));
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
418 }
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
419 }
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
420
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
421 curve->grab_point = closest_point;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
422 GET_X(curve->grab_point) = xs_unproject(x, min_x, curve->max_x, width);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
423 GET_Y(curve->grab_point) = xs_unproject(y, curve->min_y, curve->max_y, height);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
424
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
425 xs_curve_draw(curve, width, height);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
426 break;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
427
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
428 case GDK_BUTTON_RELEASE:
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
429 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
430 gint src, dst;
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
431
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
432 gtk_grab_remove(widget);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
433
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
434 /* delete inactive points: */
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
435 for (src = dst = 0; src < curve->nctlpoints; ++src)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
436 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
437 if (GET_X(src) >= min_x)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
438 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
439 memcpy(curve->ctlpoints + dst,
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
440 curve->ctlpoints + src,
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
441 sizeof(*curve->ctlpoints));
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
442 dst++;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
443 }
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
444 }
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
445
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
446 if (dst < src)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
447 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
448 curve->nctlpoints -= (src - dst);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
449 if (curve->nctlpoints <= 0)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
450 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
451 curve->nctlpoints = 1;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
452 GET_X(0) = min_x;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
453 GET_Y(0) = curve->min_y;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
454 xs_curve_draw(curve, width, height);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
455 }
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
456 curve->ctlpoints = g_realloc(curve->ctlpoints,
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
457 curve->nctlpoints * sizeof(*curve->ctlpoints));
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
458 }
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
459
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
460 new_type = GDK_FLEUR;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
461 curve->grab_point = -1;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
462 }
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
463 xs_curve_draw(curve, width, height);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
464 break;
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
465
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
466 case GDK_MOTION_NOTIFY:
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
467 if (curve->grab_point == -1)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
468 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
469 /* if no point is grabbed... */
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
470 if (distance <= CP_MIN_DISTANCE)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
471 new_type = GDK_FLEUR;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
472 else
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
473 new_type = GDK_TCROSS;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
474 } else {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
475 gint leftbound, rightbound;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
476
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
477 /* drag the grabbed point */
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
478 new_type = GDK_TCROSS;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
479
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
480 leftbound = -CP_MIN_DISTANCE;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
481 if (curve->grab_point > 0)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
482 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
483 leftbound = xs_project(
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
484 GET_X(curve->grab_point-1),
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
485 min_x, curve->max_x, width);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
486 }
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
487
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
488 rightbound = width + CP_RADIUS2 + CP_MIN_DISTANCE;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
489 if (curve->grab_point + 1 < curve->nctlpoints)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
490 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
491 rightbound = xs_project(
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
492 GET_X(curve->grab_point+1),
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
493 min_x, curve->max_x, width);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
494 }
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
495
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
496 if ((tx <= leftbound) || (tx >= rightbound) ||
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
497 (ty > height + CP_RADIUS2 + CP_MIN_DISTANCE) || (ty < -CP_MIN_DISTANCE)) {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
498 GET_X(curve->grab_point) = min_x - 1.0;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
499 }
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
500 else
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
501 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
502 GET_X(curve->grab_point) =
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
503 xs_unproject(x, min_x, curve->max_x, width);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
504 GET_Y(curve->grab_point) =
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
505 xs_unproject(y, curve->min_y, curve->max_y, height);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
506 }
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
507
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
508 xs_curve_draw(curve, width, height);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
509 }
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
510
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
511 /* See if cursor type was changed and update accordingly */
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
512 if (new_type != (GdkCursorType) curve->cursor_type)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
513 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
514 GdkCursor *cursor;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
515 curve->cursor_type = new_type;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
516 cursor = gdk_cursor_new(curve->cursor_type);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
517 gdk_window_set_cursor(w->window, cursor);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
518 gdk_cursor_destroy(cursor);
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
519 }
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
520 break;
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
521
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
522 default:
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
523 break;
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
524 }
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
525
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
526 return FALSE;
359
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
527 }
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
528
502
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 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
531 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
532 gint width, height;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
533 gfloat aspect;
359
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
534
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
535 width = (curve->max_x - curve->min_x) + 1;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
536 height = (curve->max_y - curve->min_y) + 1;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
537 aspect = width / (gfloat) height;
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
538
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
539 if (width > gdk_screen_width() / 4)
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
540 width = gdk_screen_width() / 4;
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
541
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
542 if (height > gdk_screen_height() / 4)
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
543 height = gdk_screen_height() / 4;
359
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
544
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
545 if (aspect < 1.0)
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
546 width = height * aspect;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
547 else
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
548 height = width / aspect;
359
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
549
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
550 gtk_drawing_area_size(GTK_DRAWING_AREA(curve), width + CP_RADIUS2, height + CP_RADIUS2);
359
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
551 }
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
552
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
553
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
554 static void xs_curve_update(XSCurve *curve)
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
555 {
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
556 if (curve->pixmap)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
557 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
558 gint width, height;
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
559
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
560 width = GTK_WIDGET(curve)->allocation.width - CP_RADIUS2;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
561 height = GTK_WIDGET(curve)->allocation.height - CP_RADIUS2;
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
562 xs_curve_draw(curve, width, height);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
563 }
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
564 }
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
565
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
566
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
567 void xs_curve_reset(XSCurve *curve)
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
568 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
569 if (curve->ctlpoints)
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
570 g_free(curve->ctlpoints);
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
571
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
572 curve->nctlpoints = 4;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
573 curve->ctlpoints = g_malloc(curve->nctlpoints * sizeof(curve->ctlpoints[0]));
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
574
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
575 GET_X(0) = curve->min_x;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
576 GET_Y(0) = curve->min_y;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
577 GET_X(1) = curve->min_x;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
578 GET_Y(1) = curve->min_y;
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
579
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
580 GET_X(2) = curve->max_x;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
581 GET_Y(2) = curve->max_y;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
582 GET_X(3) = curve->max_x;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
583 GET_Y(3) = curve->max_y;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
584
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
585 xs_curve_update(curve);
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
586 }
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
587
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
588
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
589 void xs_curve_set_range(XSCurve *curve, gfloat min_x, gfloat min_y, gfloat max_x, gfloat max_y)
359
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
590 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
591 curve->min_x = min_x;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
592 curve->max_x = max_x;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
593
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
594 curve->min_y = min_y;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
595 curve->max_y = max_y;
359
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
596
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
597 xs_curve_size_graph(curve);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
598 xs_curve_reset(curve);
359
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
599 }
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
600
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
601
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
602 gboolean xs_curve_realloc_data(XSCurve *curve, gint npoints)
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
603 {
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
604 if (npoints != curve->nctlpoints)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
605 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
606 curve->nctlpoints = npoints;
702
b5b6b13a6d85 Renamed some types.
Matti Hamalainen <ccr@tnsp.org>
parents: 660
diff changeset
607 curve->ctlpoints = (xs_point_t *) g_realloc(curve->ctlpoints,
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
608 curve->nctlpoints * sizeof(*curve->ctlpoints));
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
609
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
610 if (curve->ctlpoints == NULL)
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
611 return FALSE;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
612 }
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
613
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
614 return TRUE;
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
615 }
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
616
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
617
702
b5b6b13a6d85 Renamed some types.
Matti Hamalainen <ccr@tnsp.org>
parents: 660
diff changeset
618 void xs_curve_get_data(XSCurve *curve, xs_point_t ***points, gint **npoints)
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
619 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
620 *points = &(curve->ctlpoints);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
621 *npoints = &(curve->nctlpoints);
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
622 }
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
623
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
624
702
b5b6b13a6d85 Renamed some types.
Matti Hamalainen <ccr@tnsp.org>
parents: 660
diff changeset
625 gboolean xs_curve_set_points(XSCurve *curve, xs_int_point_t *points, gint npoints)
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
626 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
627 gint i;
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
628
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
629 if (!xs_curve_realloc_data(curve, npoints + 4))
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
630 return FALSE;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
631
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
632 GET_X(0) = curve->min_x;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
633 GET_Y(0) = curve->min_y;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
634 GET_X(1) = curve->min_x;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
635 GET_Y(1) = curve->min_y;
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
636
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
637 for (i = 0; i < npoints; i++)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
638 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
639 GET_X(i+2) = points[i].x;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
640 GET_Y(i+2) = points[i].y;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
641 }
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
642
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
643 GET_X(npoints+2) = curve->max_x;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
644 GET_Y(npoints+2) = curve->max_y;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
645 GET_X(npoints+3) = curve->max_x;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
646 GET_Y(npoints+3) = curve->max_y;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
647
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
648 xs_curve_update(curve);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
649 return TRUE;
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
650 }
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
651
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
652
702
b5b6b13a6d85 Renamed some types.
Matti Hamalainen <ccr@tnsp.org>
parents: 660
diff changeset
653 gboolean xs_curve_get_points(XSCurve *curve, xs_int_point_t **points, gint *npoints)
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
654 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
655 gint i, n;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
656
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
657 n = curve->nctlpoints - 4;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
658
702
b5b6b13a6d85 Renamed some types.
Matti Hamalainen <ccr@tnsp.org>
parents: 660
diff changeset
659 *points = g_malloc(n * sizeof(xs_int_point_t));
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
660 if (*points == NULL)
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
661 return FALSE;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
662
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
663 *npoints = n;
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
664 for (i = 2; i < curve->nctlpoints - 2; i++)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
665 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
666 (*points)[i].x = GET_X(i);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
667 (*points)[i].y = GET_Y(i);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
668 }
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
669
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
670 return TRUE;
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
671 }
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
672
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
673
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
674 GtkWidget *xs_curve_new(void)
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
675 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
676 return gtk_type_new(xs_curve_get_type());
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
677 }
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
678
374
58079c6180a0 More removal of original curve code.
Matti Hamalainen <ccr@tnsp.org>
parents: 370
diff changeset
679
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
680 static void xs_curve_finalize(GtkObject *object)
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
681 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
682 XSCurve *curve;
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
683
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
684 g_return_if_fail(object != NULL);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
685 g_return_if_fail(XS_IS_CURVE(object));
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
686
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
687 curve = XS_CURVE(object);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
688 if (curve->pixmap)
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
689 gdk_pixmap_unref(curve->pixmap);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
690 if (curve->ctlpoints)
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
691 g_free(curve->ctlpoints);
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
692
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
693 (*GTK_OBJECT_CLASS(parent_class)->finalize) (object);
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
694 }