annotate src/xs_curve.c @ 908:8b4c016802ea

Cosmetics.
author Matti Hamalainen <ccr@tnsp.org>
date Sat, 10 Nov 2012 11:58:59 +0200
parents 9321ffa2ea7e
children 79f20427c99d
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 gint n;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
262 gfloat k1, k2, a, b, c, d, x;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
263
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
264 if (p1->x == p2->x)
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
265 continue;
514
982cec405ef0 Cleaned up the drawing function a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 502
diff changeset
266
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
267 if (p0->x == p1->x && p2->x == p3->x)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
268 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
269 k1 = k2 = (p2->y - p1->y) / (p2->x - p1->x);
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
270 }
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
271 else if (p0->x == p1->x)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
272 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
273 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
274 k1 = (3 * (p2->y - p1->y) / (p2->x - p1->x) - k2) / 2;
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
275 }
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
276 else if (p2->x == p3->x)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
277 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
278 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
279 k2 = (3 * (p2->y - p1->y) / (p2->x - p1->x) - k1) / 2;
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
280 }
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
281 else
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
282 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
283 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
284 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
285 }
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
286
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
287 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
288
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
289 for (x = p1->x; x <= p2->x; x += res, n++)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
290 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
291 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
292 gint qx, qy;
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
293 qx = CP_RADIUS + xs_project(x, curve->min_x, curve->max_x, width);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
294 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
295
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
296 if (ox != -1)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
297 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
298 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
299 ox, oy, qx, qy);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
300 }
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
301 ox = qx; oy = qy;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
302 }
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
303 }
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
304
520
81481e59e195 Almost working.
Matti Hamalainen <ccr@tnsp.org>
parents: 514
diff changeset
305 #endif
81481e59e195 Almost working.
Matti Hamalainen <ccr@tnsp.org>
parents: 514
diff changeset
306
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
307 /* Draw control points */
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
308 for (i = 0; i < curve->nctlpoints; ++i)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
309 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
310 gint x, y;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
311 GtkStateType cstate;
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
312
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
313 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
314 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
315 continue;
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
316
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
317 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
318 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
319
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
320 if (i == curve->grab_point)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
321 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
322 cstate = GTK_STATE_SELECTED;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
323 gdk_draw_line(curve->pixmap, style->fg_gc[cstate],
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
324 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
325 gdk_draw_line(curve->pixmap, style->fg_gc[cstate],
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
326 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
327 } else
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
328 cstate = state;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
329
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
330 gdk_draw_arc(curve->pixmap, style->fg_gc[cstate], TRUE,
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
331 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
332 }
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
333
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
334 /* Draw pixmap in the widget */
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
335 gdk_draw_pixmap(GTK_WIDGET(curve)->window,
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
336 style->fg_gc[state], curve->pixmap,
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
337 0, 0, 0, 0,
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
338 width + CP_RADIUS2,
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
339 height + CP_RADIUS2);
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
340 }
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
341
502
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 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
344 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
345 GdkCursorType new_type = curve->cursor_type;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
346 GdkEventButton *bevent;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
347 GtkWidget *w;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
348 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
349 guint distance;
359
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
350
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
351 w = GTK_WIDGET(curve);
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
352 width = w->allocation.width - CP_RADIUS2;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
353 height = w->allocation.height - CP_RADIUS2;
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
354
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
355 if ((width < 0) || (height < 0))
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
356 return FALSE;
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
357
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
358 /* get the pointer position */
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
359 gdk_window_get_pointer(w->window, &tx, &ty, NULL);
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
360 x = CLAMP((tx - CP_RADIUS), 0, width - 1);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
361 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
362 min_x = curve->min_x;
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
363
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
364 distance = ~0U;
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
365 for (i = 0; i < curve->nctlpoints; ++i)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
366 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
367 cx = xs_project(GET_X(i), min_x, curve->max_x, width);
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
368 if ((guint) abs(x - cx) < distance)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
369 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
370 distance = abs(x - cx);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
371 closest_point = i;
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
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
375 /* Act based on event type */
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
376 switch (event->type)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
377 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
378 case GDK_CONFIGURE:
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
379 if (curve->pixmap)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
380 gdk_pixmap_unref(curve->pixmap);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
381 curve->pixmap = 0;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
382
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
383 /* fall through */
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
384
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
385 case GDK_EXPOSE:
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
386 if (!curve->pixmap)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
387 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
388 curve->pixmap = gdk_pixmap_new(w->window,
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
389 w->allocation.width, w->allocation.height, -1);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
390 }
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
391 xs_curve_draw(curve, width, height);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
392 break;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
393
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
394 case GDK_BUTTON_PRESS:
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
395 gtk_grab_add(widget);
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
396
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
397 bevent = (GdkEventButton *) event;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
398 new_type = GDK_TCROSS;
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
399
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
400 if (distance > CP_MIN_DISTANCE)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
401 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
402 /* insert a new control point */
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
403 if (curve->nctlpoints > 0)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
404 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
405 cx = xs_project(GET_X(closest_point), min_x, curve->max_x, width);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
406 if (x > cx) closest_point++;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
407 }
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
408
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
409 curve->nctlpoints++;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
410
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
411 curve->ctlpoints = g_realloc(curve->ctlpoints,
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
412 curve->nctlpoints * sizeof(*curve->ctlpoints));
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
413
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
414 for (i = curve->nctlpoints - 1; i > closest_point; --i)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
415 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
416 memcpy(curve->ctlpoints + i,
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
417 curve->ctlpoints + i - 1,
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
418 sizeof(*curve->ctlpoints));
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
419 }
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
420 }
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
421
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
422 curve->grab_point = closest_point;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
423 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
424 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
425
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
426 xs_curve_draw(curve, width, height);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
427 break;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
428
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
429 case GDK_BUTTON_RELEASE:
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
430 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
431 gint src, dst;
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
432
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
433 gtk_grab_remove(widget);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
434
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
435 /* delete inactive points: */
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
436 for (src = dst = 0; src < curve->nctlpoints; ++src)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
437 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
438 if (GET_X(src) >= min_x)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
439 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
440 memcpy(curve->ctlpoints + dst,
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
441 curve->ctlpoints + src,
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
442 sizeof(*curve->ctlpoints));
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
443 dst++;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
444 }
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
445 }
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
446
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
447 if (dst < src)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
448 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
449 curve->nctlpoints -= (src - dst);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
450 if (curve->nctlpoints <= 0)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
451 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
452 curve->nctlpoints = 1;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
453 GET_X(0) = min_x;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
454 GET_Y(0) = curve->min_y;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
455 xs_curve_draw(curve, width, height);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
456 }
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
457 curve->ctlpoints = g_realloc(curve->ctlpoints,
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
458 curve->nctlpoints * sizeof(*curve->ctlpoints));
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
459 }
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
460
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
461 new_type = GDK_FLEUR;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
462 curve->grab_point = -1;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
463 }
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
464 xs_curve_draw(curve, width, height);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
465 break;
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
466
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
467 case GDK_MOTION_NOTIFY:
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
468 if (curve->grab_point == -1)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
469 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
470 /* if no point is grabbed... */
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
471 if (distance <= CP_MIN_DISTANCE)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
472 new_type = GDK_FLEUR;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
473 else
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
474 new_type = GDK_TCROSS;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
475 } else {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
476 gint leftbound, rightbound;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
477
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
478 /* drag the grabbed point */
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
479 new_type = GDK_TCROSS;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
480
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
481 leftbound = -CP_MIN_DISTANCE;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
482 if (curve->grab_point > 0)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
483 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
484 leftbound = xs_project(
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
485 GET_X(curve->grab_point-1),
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
486 min_x, curve->max_x, width);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
487 }
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
488
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
489 rightbound = width + CP_RADIUS2 + CP_MIN_DISTANCE;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
490 if (curve->grab_point + 1 < curve->nctlpoints)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
491 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
492 rightbound = xs_project(
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
493 GET_X(curve->grab_point+1),
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
494 min_x, curve->max_x, width);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
495 }
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
496
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
497 if ((tx <= leftbound) || (tx >= rightbound) ||
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
498 (ty > height + CP_RADIUS2 + CP_MIN_DISTANCE) || (ty < -CP_MIN_DISTANCE)) {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
499 GET_X(curve->grab_point) = min_x - 1.0;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
500 }
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
501 else
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
502 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
503 GET_X(curve->grab_point) =
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
504 xs_unproject(x, min_x, curve->max_x, width);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
505 GET_Y(curve->grab_point) =
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
506 xs_unproject(y, curve->min_y, curve->max_y, height);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
507 }
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
508
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
509 xs_curve_draw(curve, width, height);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
510 }
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
511
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
512 /* See if cursor type was changed and update accordingly */
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
513 if (new_type != (GdkCursorType) curve->cursor_type)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
514 {
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
515 GdkCursor *cursor;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
516 curve->cursor_type = new_type;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
517 cursor = gdk_cursor_new(curve->cursor_type);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
518 gdk_window_set_cursor(w->window, cursor);
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
519 gdk_cursor_destroy(cursor);
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
520 }
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
521 break;
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
522
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
523 default:
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
524 break;
660
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
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
527 return FALSE;
359
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
528 }
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
529
502
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 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
532 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
533 gint width, height;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
534 gfloat aspect;
359
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
535
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
536 width = (curve->max_x - curve->min_x) + 1;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
537 height = (curve->max_y - curve->min_y) + 1;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
538 aspect = width / (gfloat) height;
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
539
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
540 if (width > gdk_screen_width() / 4)
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
541 width = gdk_screen_width() / 4;
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
542
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
543 if (height > gdk_screen_height() / 4)
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
544 height = gdk_screen_height() / 4;
359
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
545
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
546 if (aspect < 1.0)
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
547 width = height * aspect;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
548 else
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
549 height = width / aspect;
359
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
550
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
551 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
552 }
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
553
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
554
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
555 static void xs_curve_update(XSCurve *curve)
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
556 {
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
557 if (curve->pixmap)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
558 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
559 gint width, height;
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
560
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
561 width = GTK_WIDGET(curve)->allocation.width - CP_RADIUS2;
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
562 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
563 xs_curve_draw(curve, width, height);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
564 }
502
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
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
567
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
568 void xs_curve_reset(XSCurve *curve)
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
569 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
570 if (curve->ctlpoints)
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
571 g_free(curve->ctlpoints);
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
572
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
573 curve->nctlpoints = 4;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
574 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
575
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
576 GET_X(0) = curve->min_x;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
577 GET_Y(0) = curve->min_y;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
578 GET_X(1) = curve->min_x;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
579 GET_Y(1) = curve->min_y;
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
580
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
581 GET_X(2) = curve->max_x;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
582 GET_Y(2) = curve->max_y;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
583 GET_X(3) = curve->max_x;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
584 GET_Y(3) = curve->max_y;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
585
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
586 xs_curve_update(curve);
545
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
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
590 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
591 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
592 curve->min_x = min_x;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
593 curve->max_x = max_x;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
594
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
595 curve->min_y = min_y;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
596 curve->max_y = max_y;
359
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
597
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
598 xs_curve_size_graph(curve);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
599 xs_curve_reset(curve);
359
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
600 }
b1a858b8cb1a Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents: 358
diff changeset
601
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
602
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
603 gboolean xs_curve_realloc_data(XSCurve *curve, gint npoints)
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
604 {
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
605 if (npoints != curve->nctlpoints)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
606 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
607 curve->nctlpoints = npoints;
702
b5b6b13a6d85 Renamed some types.
Matti Hamalainen <ccr@tnsp.org>
parents: 660
diff changeset
608 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
609 curve->nctlpoints * sizeof(*curve->ctlpoints));
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
610
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
611 if (curve->ctlpoints == NULL)
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
612 return FALSE;
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
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
615 return TRUE;
545
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
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
618
702
b5b6b13a6d85 Renamed some types.
Matti Hamalainen <ccr@tnsp.org>
parents: 660
diff changeset
619 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
620 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
621 *points = &(curve->ctlpoints);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
622 *npoints = &(curve->nctlpoints);
545
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
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
625
702
b5b6b13a6d85 Renamed some types.
Matti Hamalainen <ccr@tnsp.org>
parents: 660
diff changeset
626 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
627 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
628 gint i;
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
629
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
630 if (!xs_curve_realloc_data(curve, npoints + 4))
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
631 return FALSE;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
632
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
633 GET_X(0) = curve->min_x;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
634 GET_Y(0) = curve->min_y;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
635 GET_X(1) = curve->min_x;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
636 GET_Y(1) = curve->min_y;
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
637
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
638 for (i = 0; i < npoints; i++)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
639 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
640 GET_X(i+2) = points[i].x;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
641 GET_Y(i+2) = points[i].y;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
642 }
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
643
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
644 GET_X(npoints+2) = curve->max_x;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
645 GET_Y(npoints+2) = curve->max_y;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
646 GET_X(npoints+3) = curve->max_x;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
647 GET_Y(npoints+3) = curve->max_y;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
648
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
649 xs_curve_update(curve);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
650 return TRUE;
545
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
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
653
702
b5b6b13a6d85 Renamed some types.
Matti Hamalainen <ccr@tnsp.org>
parents: 660
diff changeset
654 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
655 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
656 gint i, n;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
657
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
658 n = curve->nctlpoints - 4;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
659
702
b5b6b13a6d85 Renamed some types.
Matti Hamalainen <ccr@tnsp.org>
parents: 660
diff changeset
660 *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
661 if (*points == NULL)
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
662 return FALSE;
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
663
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
664 *npoints = n;
908
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
665 for (i = 2; i < curve->nctlpoints - 2; i++)
8b4c016802ea Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 723
diff changeset
666 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
667 (*points)[i].x = GET_X(i);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
668 (*points)[i].y = GET_Y(i);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
669 }
545
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
670
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
671 return TRUE;
545
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
425da926d310 Working on XSCurve widget implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 520
diff changeset
674
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
675 GtkWidget *xs_curve_new(void)
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
676 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
677 return gtk_type_new(xs_curve_get_type());
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
678 }
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
679
374
58079c6180a0 More removal of original curve code.
Matti Hamalainen <ccr@tnsp.org>
parents: 370
diff changeset
680
502
54d86ee98b98 Alpha/preliminary curve widget code merged.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
681 static void xs_curve_finalize(GtkObject *object)
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
682 {
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
683 XSCurve *curve;
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
684
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
685 g_return_if_fail(object != NULL);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
686 g_return_if_fail(XS_IS_CURVE(object));
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
687
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
688 curve = XS_CURVE(object);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
689 if (curve->pixmap)
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
690 gdk_pixmap_unref(curve->pixmap);
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
691 if (curve->ctlpoints)
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
692 g_free(curve->ctlpoints);
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
693
660
b0743dc9165d Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 629
diff changeset
694 (*GTK_OBJECT_CLASS(parent_class)->finalize) (object);
358
4f247b19c9ea Add new files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
695 }