1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
|
/** @file
* @brief Clone tiling dialog
*/
/* Authors:
* bulia byak <buliabyak@users.sf.net>
*
* Copyright (C) 2004 Authors
* Released under the GNU GPL, read the file 'COPYING' for more information
*/
#ifndef __SP_CLONE_TILER_H__
#define __SP_CLONE_TILER_H__
#include "ui/widget/panel.h"
#include <glib.h>
#include <gtk/gtk.h>
#include "ui/dialog/desktop-tracker.h"
#include "ui/widget/color-picker.h"
#include "sp-root.h"
namespace Inkscape {
namespace UI {
namespace Dialog {
class CloneTiler : public Widget::Panel {
public:
CloneTiler();
virtual ~CloneTiler();
static CloneTiler &getInstance() { return *new CloneTiler(); }
protected:
GtkWidget * clonetiler_new_tab(GtkWidget *nb, const gchar *label);
GtkWidget * clonetiler_table_x_y_rand(int values);
GtkWidget * clonetiler_spinbox(const char *tip, const char *attr, double lower, double upper, const gchar *suffix, bool exponent = false);
GtkWidget * clonetiler_checkbox(const char *tip, const char *attr);
void clonetiler_table_attach(GtkWidget *table, GtkWidget *widget, float align, int row, int col);
static void clonetiler_symgroup_changed(GtkComboBox *cb, gpointer /*data*/);
static void clonetiler_remove(GtkWidget */*widget*/, GtkWidget *dlg, bool do_undo = true);
static void on_picker_color_changed(guint rgba);
static void clonetiler_trace_hide_tiled_clones_recursively(SPObject *from);
static void clonetiler_checkbox_toggled(GtkToggleButton *tb, gpointer *data);
static void clonetiler_pick_switched(GtkToggleButton */*tb*/, gpointer data);
static void clonetiler_do_pick_toggled(GtkToggleButton *tb, GtkWidget *dlg);
static void clonetiler_pick_to(GtkToggleButton *tb, gpointer data);
static void clonetiler_xy_changed(GtkAdjustment *adj, gpointer data);
static void clonetiler_fill_width_changed(GtkAdjustment *adj, GtkWidget *u);
static void clonetiler_fill_height_changed(GtkAdjustment *adj, GtkWidget *u);
static void clonetiler_switch_to_create(GtkToggleButton */*tb*/, GtkWidget *dlg);
static void clonetiler_switch_to_fill(GtkToggleButton */*tb*/, GtkWidget *dlg);
static void clonetiler_keep_bbox_toggled(GtkToggleButton *tb, gpointer /*data*/);
static void clonetiler_apply(GtkWidget */*widget*/, GtkWidget *dlg);
static void clonetiler_unclump(GtkWidget */*widget*/, void *);
static void clonetiler_change_selection(Inkscape::Application * /*inkscape*/, Inkscape::Selection *selection, GtkWidget *dlg);
static void clonetiler_external_change(Inkscape::Application * /*inkscape*/, GtkWidget *dlg);
static void clonetiler_disconnect_gsignal(GObject *widget, gpointer source);
static void clonetiler_reset(GtkWidget */*widget*/, GtkWidget *dlg);
static guint clonetiler_number_of_clones(SPObject *obj);
static void clonetiler_trace_setup(SPDocument *doc, gdouble zoom, SPItem *original);
static guint32 clonetiler_trace_pick(Geom::Rect box);
static void clonetiler_trace_finish();
static bool clonetiler_is_a_clone_of(SPObject *tile, SPObject *obj);
static Geom::Rect transform_rect(Geom::Rect const &r, Geom::Affine const &m);
static double randomize01(double val, double rand);
static void clonetiler_value_changed(GtkAdjustment *adj, gpointer data);
static void clonetiler_reset_recursive(GtkWidget *w);
static Geom::Affine clonetiler_get_transform( // symmetry group
int type,
// row, column
int i, int j,
// center, width, height of the tile
double cx, double cy,
double w, double h,
// values from the dialog:
// Shift
double shiftx_per_i, double shifty_per_i,
double shiftx_per_j, double shifty_per_j,
double shiftx_rand, double shifty_rand,
double shiftx_exp, double shifty_exp,
int shiftx_alternate, int shifty_alternate,
int shiftx_cumulate, int shifty_cumulate,
int shiftx_excludew, int shifty_excludeh,
// Scale
double scalex_per_i, double scaley_per_i,
double scalex_per_j, double scaley_per_j,
double scalex_rand, double scaley_rand,
double scalex_exp, double scaley_exp,
double scalex_log, double scaley_log,
int scalex_alternate, int scaley_alternate,
int scalex_cumulate, int scaley_cumulate,
// Rotation
double rotate_per_i, double rotate_per_j,
double rotate_rand,
int rotate_alternatei, int rotate_alternatej,
int rotate_cumulatei, int rotate_cumulatej
);
private:
CloneTiler(CloneTiler const &d);
CloneTiler& operator=(CloneTiler const &d);
GtkWidget *dlg;
SPDesktop *desktop;
DesktopTracker deskTrack;
Inkscape::UI::Widget::ColorPicker *color_picker;
GtkSizeGroup* table_row_labels;
sigc::connection desktopChangeConn;
sigc::connection selectChangedConn;
sigc::connection subselChangedConn;
sigc::connection selectModifiedConn;
sigc::connection color_changed_connection;
/**
* Can be invoked for setting the desktop. Currently not used.
*/
void setDesktop(SPDesktop *desktop);
/**
* Is invoked by the desktop tracker when the desktop changes.
*/
void setTargetDesktop(SPDesktop *desktop);
};
enum {
PICK_COLOR,
PICK_OPACITY,
PICK_R,
PICK_G,
PICK_B,
PICK_H,
PICK_S,
PICK_L
};
enum {
TILE_P1,
TILE_P2,
TILE_PM,
TILE_PG,
TILE_CM,
TILE_PMM,
TILE_PMG,
TILE_PGG,
TILE_CMM,
TILE_P4,
TILE_P4M,
TILE_P4G,
TILE_P3,
TILE_P31M,
TILE_P3M1,
TILE_P6,
TILE_P6M
};
} // namespace Dialog
} // namespace UI
} // namespace Inkscape
#endif
/*
Local Variables:
mode:c++
c-file-style:"stroustrup"
c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
indent-tabs-mode:nil
fill-column:99
End:
*/
// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
|