summaryrefslogtreecommitdiff
path: root/src/Fl_x.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/Fl_x.cxx')
-rw-r--r--src/Fl_x.cxx41
1 files changed, 22 insertions, 19 deletions
diff --git a/src/Fl_x.cxx b/src/Fl_x.cxx
index 3193024ce..69db31b8c 100644
--- a/src/Fl_x.cxx
+++ b/src/Fl_x.cxx
@@ -327,7 +327,10 @@ extern "C" {
}
}
+
+#if !(USE_XFT || FLTK_USE_CAIRO)
extern char *fl_get_font_xfld(int fnum, int size);
+#endif
void Fl_X11_Screen_Driver::new_ic()
{
@@ -343,7 +346,7 @@ void Fl_X11_Screen_Driver::new_ic()
int sarea = 0;
XIMStyles* xim_styles = NULL;
-#if USE_XFT
+#if USE_XFT || FLTK_USE_CAIRO
#if defined(__GNUC__)
// FIXME: warning XFT support here
@@ -662,7 +665,7 @@ int Fl_X11_Screen_Driver::get_mouse_unscaled(int &mx, int &my) {
Window root = RootWindow(fl_display, fl_screen);
Window c; int cx,cy; unsigned int mask;
XQueryPointer(fl_display, root, &root, &c, &mx, &my, &cx, &cy, &mask);
-#if USE_XFT
+#if USE_XFT || FLTK_USE_CAIRO
int screen = screen_num_unscaled(mx, my);
return screen >= 0 ? screen : 0;
#else
@@ -1012,7 +1015,7 @@ static void set_event_xy(Fl_Window *win) {
send_motion = 0;
# endif
float s = 1;
-#if USE_XFT
+#if USE_XFT || FLTK_USE_CAIRO
s = Fl::screen_driver()->scale(Fl_Window_Driver::driver(win)->screen_num());
#endif
Fl::e_x_root = fl_xevent->xbutton.x_root/s;
@@ -1206,7 +1209,7 @@ static KeySym fl_KeycodeToKeysym(Display *d, KeyCode k, unsigned i) {
#if USE_XRANDR
static void react_to_screen_reconfiguration() {
-#if USE_XFT
+#if USE_XFT || FLTK_USE_CAIRO
// memorize previous screen sizes and scales
int old_count = Fl::screen_count();
int (*sizes)[4] = new int[old_count][4];
@@ -1215,9 +1218,9 @@ static void react_to_screen_reconfiguration() {
Fl::screen_xywh(sizes[screen][0], sizes[screen][1], sizes[screen][2], sizes[screen][3], screen);
scales[screen] = Fl::screen_scale(screen);
}
-#endif // USE_XFT
+#endif // USE_XFT || FLTK_USE_CAIRO
Fl::call_screen_init(); // compute new screen sizes
-#if USE_XFT
+#if USE_XFT || FLTK_USE_CAIRO
// detect whether screen sizes were unchanged
bool nochange = (old_count == Fl::screen_count());
if (nochange) {
@@ -1248,11 +1251,11 @@ static void react_to_screen_reconfiguration() {
}
}
delete[] scales;
-#endif // USE_XFT
+#endif // USE_XFT || FLTK_USE_CAIRO
}
#endif // USE_XRANDR
-#if USE_XFT
+#if USE_XFT || FLTK_USE_CAIRO
static void after_display_rescale(float *p_current_xft_dpi) {
Display *new_dpy = XOpenDisplay(XDisplayString(fl_display));
if (!new_dpy) return;
@@ -1269,7 +1272,7 @@ static void after_display_rescale(float *p_current_xft_dpi) {
}
XCloseDisplay(new_dpy);
}
-#endif // USE_XFT
+#endif // USE_XFT || FLTK_USE_CAIRO
static Window *xid_vector = NULL; // list of FLTK-created xid's (see issue #935)
@@ -1347,9 +1350,9 @@ int fl_handle(const XEvent& thisevent)
if (xevent.type == PropertyNotify && xevent.xproperty.atom == fl_NET_WORKAREA) {
Fl_X11_Screen_Driver *d = (Fl_X11_Screen_Driver*)Fl::screen_driver();
d->init_workarea();
-#if USE_XFT
+#if USE_XFT || FLTK_USE_CAIRO
after_display_rescale(&(d->current_xft_dpi));
-#endif // USE_XFT
+#endif // USE_XFT || FLTK_USE_CAIRO
}
switch (xevent.type) {
@@ -1713,7 +1716,7 @@ int fl_handle(const XEvent& thisevent)
in_a_window = true;
fl_dnd_source_window = data[0];
float s = 1;
-#if USE_XFT
+#if USE_XFT || FLTK_USE_CAIRO
if (window) s = Fl::screen_driver()->scale(Fl_Window_Driver::driver(window)->screen_num());
#endif
Fl::e_x_root = (data[2]>>16)/s;
@@ -1788,7 +1791,7 @@ int fl_handle(const XEvent& thisevent)
case GraphicsExpose:
{
-#if USE_XFT
+#if USE_XFT || FLTK_USE_CAIRO
int ns = Fl_Window_Driver::driver(window)->screen_num();
float s = Fl::screen_driver()->scale(ns);
window->damage(FL_DAMAGE_EXPOSE, xevent.xexpose.x/s, xevent.xexpose.y/s,
@@ -2208,7 +2211,7 @@ int fl_handle(const XEvent& thisevent)
Window cr; int X, Y, W = actual.width, H = actual.height;
XTranslateCoordinates(fl_display, fl_xid(window), actual.root,
0, 0, &X, &Y, &cr);
-#if USE_XFT // detect when window centre changes screen
+#if USE_XFT || FLTK_USE_CAIRO // detect when window centre changes screen
Fl_X11_Screen_Driver *d = (Fl_X11_Screen_Driver*)Fl::screen_driver();
Fl_X11_Window_Driver *wd = Fl_X11_Window_Driver::driver(window);
int olds = wd->screen_num();
@@ -2230,13 +2233,13 @@ int fl_handle(const XEvent& thisevent)
Fl::remove_timeout(Fl_X11_Window_Driver::resize_after_screen_change, window);
Fl_X11_Window_Driver::data_for_resize_window_between_screens_.busy = false;
}
-#else // ! USE_XFT
+#else // ! (USE_XFT || FLTK_USE_CAIRO)
Fl_Window_Driver::driver(window)->screen_num( Fl::screen_num(X, Y, W, H) );
-#endif // USE_XFT
+#endif // USE_XFT || FLTK_USE_CAIRO
// tell Fl_Window about it and set flag to prevent echoing:
resize_bug_fix = window;
-#if USE_XFT
+#if USE_XFT || FLTK_USE_CAIRO
if (!Fl_X11_Window_Driver::data_for_resize_window_between_screens_.busy &&
( ceil(W/s) != window->w() || ceil(H/s) != window->h() ) ) {
window->resize(rint(X/s), rint(Y/s), ceil(W/s), ceil(H/s));
@@ -2267,7 +2270,7 @@ int fl_handle(const XEvent& thisevent)
// tell Fl_Window about it and set flag to prevent echoing:
if ( !wasXExceptionRaised() ) {
resize_bug_fix = window;
-#if USE_XFT
+#if USE_XFT || FLTK_USE_CAIRO
int ns = Fl_Window_Driver::driver(window)->screen_num();
float s = Fl::screen_driver()->scale(ns);
#else
@@ -2659,7 +2662,7 @@ void Fl_X::make_xid(Fl_Window* win, XVisualInfo *visual, Colormap colormap)
#endif // (ENABLE_BOXCHEAT)
float s = 1;
-#if USE_XFT
+#if USE_XFT || FLTK_USE_CAIRO
//compute adequate screen where to put the window
int nscreen = 0;
if (win->parent()) {