X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fgnome%2FGUIRunTime.C;h=ccd1d48d8dba25142a98b2e449f48cbfcdddc672;hb=3e39bef2c13125023f3b72532d90575bbe307335;hp=24b53c20d22a304bcf274b0d6364294bd9c0f869;hpb=eff9b6b7c993861880ef7800f3732b32cf694f57;p=lyx.git diff --git a/src/frontends/gnome/GUIRunTime.C b/src/frontends/gnome/GUIRunTime.C index 24b53c20d2..ccd1d48d8d 100644 --- a/src/frontends/gnome/GUIRunTime.C +++ b/src/frontends/gnome/GUIRunTime.C @@ -1,8 +1,8 @@ /* This file is part of * ====================================================== - * + * * LyX, The Document Processor - * + * * Copyright 2000 The LyX Team. * *======================================================*/ @@ -19,14 +19,75 @@ #include "debug.h" #include +#include + +// For now we use the xforms image loader if we can. +// In the future, this will be replaced by a gnome equivalent. +#if defined(HAVE_FLIMAGE_DUP) && defined(HAVE_FLIMAGE_TO_PIXMAP) +#include "xforms/xformsGImage.h" +#else +#include "graphics/GraphicsImageXPM.h" +#endif using std::endl; +// I keep these here so that it will be processed as early in +// the compilation process as possible. +#if !defined(FL_REVISION) || FL_REVISION < 88 || FL_VERSION != 0 +#error LyX will not compile with this version of XForms.\ + Please get version 0.89.\ + If you want to try to compile anyway, delete this test in src/frontends/gnome/GUIRunTime.C. +#endif + extern bool finished; -void GUIRunTime::processEvents() +namespace { + +int const xforms_include_version = FL_INCLUDE_VERSION; + +} // namespace anon + + +int GUIRunTime::initApplication(int &, char * argv[]) { - while(Gnome::Main::instance()->events_pending()) + // Check the XForms version in the forms.h header against + // the one in the libforms. If they don't match quit the + // execution of LyX. Better with a clean fast exit than + // a strange segfault later. + // I realize that this check have to be moved when we + // support several toolkits, but IMO all the toolkits + // should try to have the same kind of check. This could + // be done by having a CheckHeaderAndLib function in + // all the toolkit implementations, this function is + // responsible for notifing the user. + // if (!CheckHeaderAndLib()) { + // // header vs. lib version failed + // return 1; + // } + int xforms_lib_version = fl_library_version(0, 0); + if (xforms_include_version != xforms_lib_version) { + cerr << "You are either running LyX with wrong " + "version of a dynamic XForms library\n" + "or you have build LyX with conflicting header " + "and library (different\n" + "versions of XForms. Sorry but there is no point " + "in continuing executing LyX!" << endl; + return 1; + } + + // I belive that this should be done at a later stage, in + // lyx_gui, the same place as xforms does the same. (Lgb) + string app_id(PACKAGE); + string app_version(VERSION); + static Gnome::Main a(app_id, app_version, 1, argv); + glade_gnome_init(); // Initialize the glade library. + + return 0; +} + +void GUIRunTime::processEvents() +{ + while (Gnome::Main::instance()->events_pending()) Gnome::Main::instance()->iteration(FALSE); } @@ -37,8 +98,89 @@ void GUIRunTime::runTime() while (!finished) { processEvents(); if (fl_check_forms() == FL_EVENT) { - lyxerr << "LyX: This shouldn't happen..." << endl; fl_XNextEvent(&ev); + lyxerr << "Received unhandled X11 event" << endl; + lyxerr << "Type: 0x" << hex << ev.xany.type << + "Target: 0x" << hex << ev.xany.window << endl; } } } + + +void GUIRunTime::setDefaults() +{ + FL_IOPT cntl; + cntl.buttonFontSize = FL_NORMAL_SIZE; + cntl.browserFontSize = FL_NORMAL_SIZE; + cntl.labelFontSize = FL_NORMAL_SIZE; + cntl.choiceFontSize = FL_NORMAL_SIZE; + cntl.inputFontSize = FL_NORMAL_SIZE; + cntl.menuFontSize = FL_NORMAL_SIZE; + cntl.borderWidth = -1; + cntl.vclass = FL_DefaultVisual; + fl_set_defaults(FL_PDVisual + | FL_PDButtonFontSize + | FL_PDBrowserFontSize + | FL_PDLabelFontSize + | FL_PDChoiceFontSize + | FL_PDInputFontSize + | FL_PDMenuFontSize + | FL_PDBorderWidth, &cntl); +} + + +#include "XFormsView.h" +LyXView * GUIRunTime::createMainView(int w, int h) +{ + return new XFormsView(w, h); +} + + +// Called by the graphics cache to connect the appropriate frontend +// image loading routines to the LyX kernel. +void GUIRunTime::initialiseGraphics() +{ + using namespace grfx; + using SigC::slot; + +#if defined(HAVE_FLIMAGE_DUP) && defined(HAVE_FLIMAGE_TO_PIXMAP) + // connect the image loader based on the xforms library + GImage::newImage.connect(slot(&xformsGImage::newImage)); + GImage::loadableFormats.connect(slot(&xformsGImage::loadableFormats)); +#else + // connect the image loader based on the XPM library + GImage::newImage.connect(slot(&GImageXPM::newImage)); + GImage::loadableFormats.connect(slot(&GImageXPM::loadableFormats)); +#endif +} + + +Display * GUIRunTime::x11Display() +{ + return fl_get_display(); +} + + +int GUIRunTime::x11Screen() +{ + return fl_screen; +} + + +Colormap GUIRunTime::x11Colormap() +{ + return fl_state[fl_get_vclass()].colormap; +} + + +int GUIRunTime::x11VisualDepth() +{ + return fl_get_visual_depth(); +} + +float GUIRunTime::getScreenDPI() +{ + Screen * scr = ScreenOfDisplay(fl_get_display(), fl_screen); + return ((HeightOfScreen(scr) * 25.4 / HeightMMOfScreen(scr)) + + (WidthOfScreen(scr) * 25.4 / WidthMMOfScreen(scr))) / 2; +}