-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathimpressionistUI.h
175 lines (140 loc) · 5.27 KB
/
impressionistUI.h
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
//
// impressionistUI.h
//
// The header file for the UI part
//
#ifndef ImpressionistUI_h
#define ImpressionistUI_h
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_File_Chooser.H> // FLTK file chooser
#include <FL/Fl_Menu_Bar.H>
#include <FL/Fl_Value_Slider.H>
#include <FL/Fl_Choice.H>
#include <FL/Fl_Button.H>
#include <FL/Fl_Light_Button.H>
#include <FL/Fl_Color_Chooser.H>
#include <FL/Fl_Float_Input.H>
#include "impressionist.h"
#include "originalView.h"
#include "paintView.h"
#include "impBrush.h"
#include <cstdlib>
#include <algorithm>
const int FLT_WIDTH = 5;
const int FLT_HEIGHT = 5;
class ImpressionistUI {
public:
ImpressionistUI();
~ImpressionistUI();
// The FLTK widgets
Fl_Window* m_mainWindow;
Fl_Menu_Bar* m_menubar;
PaintView* m_paintView;
OriginalView* m_origView;
// for brush dialog
Fl_Window* m_brushDialog;
Fl_Choice* m_BrushTypeChoice;
Fl_Choice* m_AngleTypeSelector;
Fl_Choice* m_FilterTypeChoice;
Fl_Slider* m_BrushSizeSlider;
Fl_Button* m_ClearCanvasButton;
Fl_Slider* m_BrushAngleSlider;
Fl_Button* m_transparentBackgroundButton;
Fl_Button* m_edgeImageButton;
// for filter dialog
Fl_Window* m_filterDialog;
Fl_Button* m_ApplyFilterButton;
Fl_Button* m_PreviewFilterButton;
Fl_Button* m_CancelFilterButton;
// Member functions
void setDocument(ImpressionistDoc* doc);
ImpressionistDoc* getDocument();
void show();
void resize_windows(int w, int h);
// Interface to get attribute
int getSize();
void setSize(int size);
int getAngle();
void setAngle(int angle);
int getAlpha();
// Callbacks for the image filter dialogue (different from
// the other callbacks because they aren't static)
void initFltDesignUI(void);
void updateFilter(void);
void cancelFilter(void);
void applyFilter(void);
void previewFilter(void);
double* getFilterKernel();
private:
ImpressionistDoc* m_pDoc; // pointer to document to communicate with the document
// All attributes here
int m_nSize;
int m_nAngle;
int m_nAlpha;
int m_nBackgroundAlpha;
// These attributes are set by the filter kernel UI
double fltKernel[FLT_WIDTH*FLT_HEIGHT]; //the kernel of the image filter
double m_nScale;
double m_nOffset; //the divisor and offset parameter,
//applied after convolving to transform
//the filtered image into the range [0,255]
// Static class members
static Fl_Menu_Item menuitems[];
static Fl_Menu_Item brushTypeMenu[NUM_BRUSH_TYPE+1];
static Fl_Menu_Item angleChoiceMenu[4+1];
static Fl_Menu_Item filterChoiceMenu[2+1];
static ImpressionistUI* whoami(Fl_Menu_* o);
// All callbacks here. Callbacks are declared
// static
static void cb_load_image(Fl_Menu_* o, void* v);
static void cb_save_image(Fl_Menu_* o, void* v);
static void cb_brushes(Fl_Menu_* o, void* v);
static void cb_filter_kernel(Fl_Menu_* o, void* v);
static void cb_clear_canvas(Fl_Menu_* o, void* v);
static void cb_exit(Fl_Menu_* o, void* v);
static void cb_about(Fl_Menu_* o, void* v);
static void cb_brushChoice(Fl_Widget* o, void* v);
static void cb_clear_canvas_button(Fl_Widget* o, void* v);
static void cb_sizeSlides(Fl_Widget* o, void* v);
static void cb_angleSlides(Fl_Widget* o, void* v);
static void cb_angleChoice(Fl_Widget* o, void* v);
static void cb_filter(Fl_Menu_* o, void* v);
static void cb_alphaSlides(Fl_Widget* o, void* v);
static void cb_filterChoice(Fl_Widget* o, void* v);
static void cb_transparentBackground(Fl_Widget* o, void* v);
static void cb_backgroundAlphaSlides(Fl_Widget* o, void* v);
static void cb_edgeImage(Fl_Widget* o, void* v);
//filter callbacks
static void cb_apply_filter_button(Fl_Widget* o, void* v);
static void cb_preview_filter_button(Fl_Widget* o, void* v);
static void cb_cancel_filter_button(Fl_Widget* o, void* v);
static void cb_scaleInput(Fl_Widget* o, void* v);
static void cb_offsetInput(Fl_Widget* o, void* v);
static void cb_filterInput_00(Fl_Widget* o, void* v);
static void cb_filterInput_01(Fl_Widget* o, void* v);
static void cb_filterInput_02(Fl_Widget* o, void* v);
static void cb_filterInput_03(Fl_Widget* o, void* v);
static void cb_filterInput_04(Fl_Widget* o, void* v);
static void cb_filterInput_10(Fl_Widget* o, void* v);
static void cb_filterInput_11(Fl_Widget* o, void* v);
static void cb_filterInput_12(Fl_Widget* o, void* v);
static void cb_filterInput_13(Fl_Widget* o, void* v);
static void cb_filterInput_14(Fl_Widget* o, void* v);
static void cb_filterInput_20(Fl_Widget* o, void* v);
static void cb_filterInput_21(Fl_Widget* o, void* v);
static void cb_filterInput_22(Fl_Widget* o, void* v);
static void cb_filterInput_23(Fl_Widget* o, void* v);
static void cb_filterInput_24(Fl_Widget* o, void* v);
static void cb_filterInput_30(Fl_Widget* o, void* v);
static void cb_filterInput_31(Fl_Widget* o, void* v);
static void cb_filterInput_32(Fl_Widget* o, void* v);
static void cb_filterInput_33(Fl_Widget* o, void* v);
static void cb_filterInput_34(Fl_Widget* o, void* v);
static void cb_filterInput_40(Fl_Widget* o, void* v);
static void cb_filterInput_41(Fl_Widget* o, void* v);
static void cb_filterInput_42(Fl_Widget* o, void* v);
static void cb_filterInput_43(Fl_Widget* o, void* v);
static void cb_filterInput_44(Fl_Widget* o, void* v);
};
#endif