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
|
//
// "$Id$"
//
// A base class for platform specific window handling code
// for the Fast Light Tool Kit (FLTK).
//
// Copyright 2010-2016 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/** \file Fl_Window_Driver.H
\brief declaration of classe Fl_Window_Driver.
*/
#ifndef FL_WINDOW_DRIVER_H
#define FL_WINDOW_DRIVER_H
#include <FL/Fl_Export.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Overlay_Window.H>
#include <stdlib.h>
class Fl_X;
class Fl_Image;
class Fl_Shared_Image;
class Fl_RGB_Image;
/**
\brief A base class for platform specific window handling code.
*/
class FL_EXPORT Fl_Window_Driver
{
friend class Fl_Window;
friend class Fl_X;
protected:
Fl_Window *pWindow;
struct shape_data_type;
shape_data_type *shape_data_; ///< non-null means the window has a non-rectangular shape
public:
Fl_Window_Driver(Fl_Window *);
virtual ~Fl_Window_Driver();
static Fl_Window_Driver *newWindowDriver(Fl_Window *);
// --- frequently used accessors to public window data
/** returns the x coordinate of the window. */
int x() const { return pWindow->x(); }
/** returns the y coordinate of the window. */
int y() const { return pWindow->y(); }
/** returns the width of the window. */
int w() const { return pWindow->w(); }
/** returns the width of the window. */
int h() const { return pWindow->h(); }
/** returns whether the window has a border. */
int border() const { return pWindow->border(); }
/** returns whether the window itself is visible(). */
int visible() const { return pWindow->visible(); }
/** returns whether the window and all its parents is visible(). */
int visible_r() const { return pWindow->visible_r(); }
/** returns whether the window is shown(). */
int shown() const { return pWindow->shown(); }
/** returns the parent of the window. */
Fl_Group *parent() const { return pWindow->parent(); }
// --- accessors to private window data
int minw();
int minh();
int maxw();
int maxh();
int fullscreen_screen_top();
int fullscreen_screen_bottom();
int fullscreen_screen_left();
int fullscreen_screen_right();
unsigned char size_range_set();
void force_position(int c);
void x(int X);
void y(int Y);
void current(Fl_Window *c);
/** for an Fl_Overlay_Window, returns the value of its overlay_ member variable */
Fl_Window *overlay() {
return pWindow->as_overlay_window() ? pWindow->as_overlay_window()->overlay_ : NULL;
}
/** for an Fl_Overlay_Window, sets the value of its overlay_ member variable */
void overlay(Fl_Window *o) {
if (pWindow->as_overlay_window()) pWindow->as_overlay_window()->overlay_ = o;
}
// --- window data
virtual int decorated_w() = 0;
virtual int decorated_h() = 0;
// --- window management
virtual void take_focus();
virtual void flush_double();
virtual void flush_overlay();
virtual void flush_single();
virtual void flush_menu();
virtual void erase_menu() {}
virtual void draw_begin();
virtual void draw_end();
void draw();
virtual void make_current();
virtual void label(const char *name, const char *mininame);
virtual Fl_X *makeWindow() { /* FIXME: move Fl_X::make(Fl_Window*) here for OSX, MSWin, and X11 */ return 0; }
virtual void wait_for_expose() {} // TODO: check
virtual void destroy_double_buffer(); // TODO: check
virtual void show();
virtual void show_menu();
virtual void resize(int X,int Y,int W,int H) {}
virtual void hide() {}
int hide_common();
virtual void map() {}
virtual void unmap() {}
virtual void fullscreen_on() {}
virtual void fullscreen_off(int X, int Y, int W, int H) {}
virtual void use_border();
virtual void size_range();
virtual void iconize() {}
virtual void decoration_sizes(int *top, int *left, int *right, int *bottom) {
*top = *left = *right = *bottom = 0; }
virtual void show_with_args_begin() {}
virtual void show_with_args_end(int argc, char **argv) {}
virtual int can_do_overlay();
virtual void redraw_overlay();
// --- window shape stuff
void shape_pixmap_(Fl_Image* pixmap); // TODO: check
virtual void shape(const Fl_Image* img) {} // TODO: check
virtual void shape_alpha_(Fl_Image* img, int offset) {} // TODO: check
// --- window icon stuff
virtual void icons(const Fl_RGB_Image *icons[], int count) {} // TODO: check
virtual const void *icon() const {return NULL;} // TODO: check
virtual void icon(const void * ic) {} // TODO: check
virtual void free_icons() {} // TODO: check
// each platform implements this its own way
static void default_icons(const Fl_RGB_Image *icons[], int count);
// --- window printing helper
virtual void capture_titlebar_and_borders(Fl_Shared_Image*& top, Fl_Shared_Image*& left,
Fl_Shared_Image*& bottom, Fl_Shared_Image*& right);
#if defined(FL_PORTING)
# pragma message "FL_PORTING: implement scrolling of the screen contents"
#endif
virtual int scroll(int src_x, int src_y, int src_w, int src_h, int dest_x, int dest_y,
void (*draw_area)(void*, int,int,int,int), void* data) { return 0; }
};
#endif // FL_WINDOW_DRIVER_H
//
// End of "$Id$".
//
|