diff --git a/src/frontends/Application.C b/src/frontends/Application.C new file mode 100644 index 0000000000..d590e9d678 --- /dev/null +++ b/src/frontends/Application.C @@ -0,0 +1,104 @@ +/** + * \file frontend/Application.C + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author Abdelrazak Younes + * + * Full author contact details are available in file CREDITS. + */ + +#include + +#include "Application.h" + +#include "funcrequest.h" +#include "LyXAction.h" +#include "lyxrc.h" +#include "LyXView.h" + +#include "support/lstrings.h" +#include "support/os.h" +#include "support/package.h" + +#include + +using lyx::support::package; + +// FIXME: replace all occurence of lyxserver with theApp->server(). +LyXServer * lyxserver; +// FIXME: replace all occurence of lyxsocket with theApp->socket(). +LyXServerSocket * lyxsocket; + +namespace lyx { +namespace frontend { + + +Application::Application(int & argc, char ** argv) +{ +} + + +LyXFunc & Application::lyxFunc() +{ + return *lyxfunc_.get(); +} + + +LyXFunc const & Application::lyxFunc() const +{ + return *lyxfunc_.get(); +} + + +LyXServer & Application::server() +{ + return *lyx_server_.get(); +} + + +LyXServer const & Application::server() const +{ + return *lyx_server_.get(); +} + + +LyXServerSocket & Application::socket() +{ + return *lyx_socket_.get(); +} + + +LyXServerSocket const & Application::socket() const +{ + return *lyx_socket_.get(); +} + + +void Application::setBufferView(BufferView * buffer_view) +{ + buffer_view_ = buffer_view; +} + + +int Application::start(std::string const & batch) +{ + lyx_server_.reset(new LyXServer(lyxfunc_.get(), lyxrc.lyxpipes)); + lyx_socket_.reset(new LyXServerSocket(lyxfunc_.get(), + lyx::support::os::internal_path(package().temp_dir() + "/lyxsocket"))); + + // FIXME: these two lines should disappear soon (Abdel 20/09/71) + lyxserver = lyx_server_.get(); + lyxsocket = lyx_socket_.get(); + + // handle the batch commands the user asked for + if (!batch.empty()) { + lyxfunc_->dispatch(lyxaction.lookupFunc(batch)); + } + + return exec(); +} + + +} // namespace frontend +} // namespace lyx diff --git a/src/frontends/Application.h b/src/frontends/Application.h new file mode 100644 index 0000000000..a7efd78342 --- /dev/null +++ b/src/frontends/Application.h @@ -0,0 +1,89 @@ +/** + * \file frontend/Application.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author Abdelrazak Younes + * + * Full author contact details are available in file CREDITS. + */ + +#ifndef LYX_APPLICATION_H +#define LYX_APPLICATION_H + +#include "lyxfunc.h" +#include "lyxserver.h" +#include "lyxsocket.h" + +#include + +#include + +class BufferView; +class LyXView; + +namespace lyx { +namespace frontend { + +//class GuiWorkArea; +class Gui; + + +/// The main application class +/** +There should be only one instance of this class. No Qt object +initialisation should be done before the instanciation of this class. + +\todo The work areas handling could be moved to a base virtual class +comon to all frontends. +*/ +class Application +{ +public: + Application(int & argc, char ** argv); + + int start(std::string const & batch); + /// + virtual Gui & gui() = 0; + /// + virtual int const exec() = 0; + /// + virtual void exit(int status) = 0; + + /// + LyXFunc & lyxFunc(); + LyXFunc const & lyxFunc() const; + /// + LyXServer & server(); + LyXServer const & server() const; + /// + LyXServerSocket & socket(); + LyXServerSocket const & socket() const; + /// + void setBufferView(BufferView * buffer_view); + +protected: + /// + BufferView * buffer_view_; + + // FIXME: lyxfunc_ should be private. But the actual construction is done in + // GuiApplication for now. + + /// our function handler + boost::scoped_ptr lyxfunc_; + +private: + /// + boost::scoped_ptr lyx_server_; + /// + boost::scoped_ptr lyx_socket_; + +}; // Application + +} // namespace frontend +} // namespace lyx + +extern lyx::frontend::Application * theApp; + + +#endif // LYX_APPLICATION_H diff --git a/src/frontends/LyXView.h b/src/frontends/LyXView.h index 13776f2529..932e98602e 100644 --- a/src/frontends/LyXView.h +++ b/src/frontends/LyXView.h @@ -13,6 +13,7 @@ #ifndef LYXVIEW_H #define LYXVIEW_H +#include "frontends/Application.h" #include "frontends/Toolbars.h" #include @@ -87,9 +88,9 @@ public: Buffer * buffer() const; /// return the LyX function handler for this view - LyXFunc & getLyXFunc() { return *lyxfunc_.get(); } + LyXFunc & getLyXFunc() { return theApp->lyxFunc(); } /// - LyXFunc const & getLyXFunc() const { return *lyxfunc_.get(); } + LyXFunc const & getLyXFunc() const { return theApp->lyxFunc(); } /// return the toolbar for this view Toolbars & getToolbars() { return *toolbars_.get(); } diff --git a/src/frontends/WorkArea.C b/src/frontends/WorkArea.C index 21005c4f50..996f7b2042 100644 --- a/src/frontends/WorkArea.C +++ b/src/frontends/WorkArea.C @@ -164,6 +164,8 @@ void WorkArea::setBufferView(BufferView * buffer_view) lyx_view_.disconnectBufferView(); } + theApp->setBufferView(buffer_view); + hideCursor(); buffer_view_ = buffer_view; toggleCursor(); diff --git a/src/frontends/qt4/Application.C b/src/frontends/qt4/GuiApplication.C similarity index 50% rename from src/frontends/qt4/Application.C rename to src/frontends/qt4/GuiApplication.C index 24d97a72da..764251bede 100644 --- a/src/frontends/qt4/Application.C +++ b/src/frontends/qt4/GuiApplication.C @@ -1,5 +1,5 @@ /** - * \file qt4/Application.C + * \file qt4/GuiApplication.C * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * @@ -12,42 +12,68 @@ #include -#include "Application.h" +#include "GuiApplication.h" +#include "GuiView.h" #include "GuiWorkArea.h" - #include "qt_helpers.h" +#include "QLImage.h" #include "BufferView.h" -#include "debug.h" + +#include "graphics/LoaderQueue.h" #include "support/lstrings.h" +#include "support/os.h" +#include "support/package.h" + +#include "lyx_main.h" +#include "lyxrc.h" +#include "debug.h" #include -#include -#include -#include #include +#include +#include +#include +#include +#include #ifdef Q_WS_X11 #include #endif +#include + using lyx::support::subst; using std::string; using std::endl; +// in QLyXKeySym.C +extern void initEncodings(); + /////////////////////////////////////////////////////////////// // You can find other X11 and MACX specific stuff // at the end of this file... /////////////////////////////////////////////////////////////// +namespace { + +int getDPI() +{ + QWidget w; + return int(0.5 * (w.logicalDpiX() + w.logicalDpiY())); +} + +} // namespace anon + + namespace lyx { namespace frontend { -Application::Application(int & argc, char ** argv) - : QApplication(argc, argv), buffer_view_(0) +GuiApplication::GuiApplication(int & argc, char ** argv) + : QApplication(argc, argv), Application(argc, argv) { #ifdef Q_WS_X11 // doubleClickInterval() is 400 ms on X11 witch is just too long. @@ -62,19 +88,121 @@ Application::Application(int & argc, char ** argv) NewAEEventHandlerUPP(handleOpenDocuments), 0, false); #endif + + // install translation file for Qt built-in dialogs + // These are only installed since Qt 3.2.x + QTranslator qt_trans; + QString language_name = QString("qt_") + QLocale::system().name(); + language_name.truncate(5); + if (qt_trans.load(language_name, + QLibraryInfo::location(QLibraryInfo::TranslationsPath))) + { + qApp->installTranslator(&qt_trans); + // even if the language calls for RtL, don't do that + qApp->setLayoutDirection(Qt::LeftToRight); + lyxerr[Debug::GUI] + << "Successfully installed Qt translations for locale " + << fromqstr(language_name) << std::endl; + } else + lyxerr[Debug::GUI] + << "Could not find Qt translations for locale " + << fromqstr(language_name) << std::endl; + +/*#ifdef Q_WS_MACX + // These translations are meant to break Qt/Mac menu merging + // algorithm on some entries. It lists the menu names that + // should not be moved to the LyX menu + QTranslator aqua_trans(0); + aqua_trans.insert(QTranslatorMessage("QMenuBar", "Setting", 0, + "do_not_merge_me")); + aqua_trans.insert(QTranslatorMessage("QMenuBar", "Config", 0, + "do_not_merge_me")); + aqua_trans.insert(QTranslatorMessage("QMenuBar", "Options", 0, + "do_not_merge_me")); + aqua_trans.insert(QTranslatorMessage("QMenuBar", "Setup", 0, + "do_not_merge_me")); + + qApp->installTranslator(&aqua_trans); +#endif +*/ + using namespace lyx::graphics; + + Image::newImage = boost::bind(&QLImage::newImage); + Image::loadableFormats = boost::bind(&QLImage::loadableFormats); + + // needs to be done before reading lyxrc + lyxrc.dpi = getDPI(); + + LoaderQueue::setPriority(10,100); } -void Application::setBufferView(BufferView * buffer_view) +int const GuiApplication::exec() { - buffer_view_ = buffer_view; + return QApplication::exec(); +} + + +void GuiApplication::exit(int status) +{ + QApplication::exit(status); +} + + +// FIXME: this whole method needs to be moved to Application. +LyXView & GuiApplication::createView(unsigned int width, + unsigned int height, + int posx, int posy, + bool maximize) +{ + // this can't be done before because it needs the Languages object + initEncodings(); + + int view_id = gui().newView(width, height); + GuiView & view = static_cast (gui().view(view_id)); + + lyxfunc_.reset(new LyXFunc(&view)); + + // FIXME: for now we assume that there is only one LyXView with id = 0. + /*int workArea_id_ =*/ gui().newWorkArea(width, height, 0); + //WorkArea * workArea_ = & theApp->gui().workArea(workArea_id_); + + LyX::ref().addLyXView(&view); + + view.init(); + + // FIXME: put this initialisation code in GuiView accessible via + // a pure virtual method in LyXView. + + // only true when the -geometry option was NOT used + if (width != 0 && height != 0) { + if (posx != -1 && posy != -1) { +#ifdef Q_OS_WIN32 + // FIXME: use only setGeoemtry when Trolltech has + // fixed the qt4/X11 bug + view.setGeometry(posx, posy,width, height); +#else + view.resize(width, height); + view.move(posx, posy); +#endif + } else { + view.resize(width, height); + } + + if (maximize) + view.setWindowState(Qt::WindowMaximized); + } + + view.show(); + + return view; } //////////////////////////////////////////////////////////////////////// // X11 specific stuff goes here... #ifdef Q_WS_X11 -bool Application::x11EventFilter(XEvent * xev) +bool GuiApplication::x11EventFilter(XEvent * xev) { switch (xev->type) { case SelectionRequest: @@ -101,6 +229,7 @@ bool Application::x11EventFilter(XEvent * xev) #ifdef Q_WS_MACX namespace{ + OSErr checkAppleEventForMissingParams(const AppleEvent& theAppleEvent) { DescType returnedType; @@ -117,9 +246,10 @@ OSErr checkAppleEventForMissingParams(const AppleEvent& theAppleEvent) return err; } } + } // namespace -OSErr Application::handleOpenDocuments(const AppleEvent* inEvent, +OSErr GuiApplication::handleOpenDocuments(const AppleEvent* inEvent, AppleEvent* /*reply*/, long /*refCon*/) { QString s_arg; @@ -165,7 +295,7 @@ OSErr Application::handleOpenDocuments(const AppleEvent* inEvent, return err; } -bool Application::macEventFilter(EventRef event) +bool GuiApplication::macEventFilter(EventRef event) { if (GetEventClass(event) == kEventClassAppleEvent) { EventRecord eventrec; diff --git a/src/frontends/qt4/Application.h b/src/frontends/qt4/GuiApplication.h similarity index 69% rename from src/frontends/qt4/Application.h rename to src/frontends/qt4/GuiApplication.h index a176342766..efd54a45f0 100644 --- a/src/frontends/qt4/Application.h +++ b/src/frontends/qt4/GuiApplication.h @@ -1,5 +1,5 @@ /** - * \file qt4/Application.h + * \file qt4/GuiApplication.h * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * @@ -10,12 +10,14 @@ * Full author contact details are available in file CREDITS. */ -#ifndef LYX_APPLICATION_H -#define LYX_APPLICATION_H +#ifndef QT4_APPLICATION_H +#define QT4_APPLICATION_H #include "GuiImplementation.h" #include "FontLoader.h" +#include "frontends/Application.h" + #include /////////////////////////////////////////////////////////////// @@ -41,22 +43,26 @@ initialisation should be done before the instanciation of this class. \todo The work areas handling could be moved to a base virtual class comon to all frontends. */ -class Application : public QApplication +class GuiApplication : public QApplication, public Application { public: - Application(int & argc, char ** argv); + GuiApplication(int & argc, char ** argv); + + /// Method inherited from \c Application class + //@{ + virtual int const exec(); + virtual Gui & gui() { return gui_; } + virtual void exit(int status); + //@} - // - Gui & gui() { return gui_; } /// FontLoader & fontLoader() { return font_loader_; } + /// - void setBufferView(BufferView * buffer_view); + LyXView & createView(unsigned int width, unsigned int height, + int posx, int posy, bool maximize); private: - /// - BufferView * buffer_view_; - /// GuiImplementation gui_; @@ -76,12 +82,12 @@ private: static pascal OSErr handleOpenDocuments( const AppleEvent* inEvent, AppleEvent*, long); #endif -}; // Application +}; // GuiApplication } // namespace frontend } // namespace lyx -extern lyx::frontend::Application * theApp; +extern lyx::frontend::GuiApplication * guiApp; -#endif // LYX_APPLICATION_H +#endif // QT4_APPLICATION_H diff --git a/src/frontends/qt4/GuiWorkArea.C b/src/frontends/qt4/GuiWorkArea.C index eee68e344a..da8a331081 100644 --- a/src/frontends/qt4/GuiWorkArea.C +++ b/src/frontends/qt4/GuiWorkArea.C @@ -13,7 +13,7 @@ #include "GuiWorkArea.h" -#include "Application.h" +#include "GuiApplication.h" #include "ColorCache.h" #include "QLPainter.h" #include "QLyXKeySym.h" diff --git a/src/frontends/qt4/QLPainter.C b/src/frontends/qt4/QLPainter.C index 4fdbd7f28b..a3c2383ac9 100644 --- a/src/frontends/qt4/QLPainter.C +++ b/src/frontends/qt4/QLPainter.C @@ -18,7 +18,7 @@ #include "ColorCache.h" #include "FontLoader.h" -#include "Application.h" +#include "GuiApplication.h" #include "qt_helpers.h" #include "debug.h" @@ -202,8 +202,8 @@ void QLPainter::smallCapsText(int x, int y, LyXFont smallfont(f); smallfont.decSize().decSize().setShape(LyXFont::UP_SHAPE); - QFont const & qfont = theApp->fontLoader().get(f); - QFont const & qsmallfont = theApp->fontLoader().get(smallfont); + QFont const & qfont = guiApp->fontLoader().get(f); + QFont const & qsmallfont = guiApp->fontLoader().get(smallfont); QFontMetrics const & qfontm = QFontMetrics(qfont); QFontMetrics const & qsmallfontm = QFontMetrics(qsmallfont); @@ -252,7 +252,7 @@ void QLPainter::text(int x, int y, char_type const * s, size_t ls, if (f.realShape() != LyXFont::SMALLCAPS_SHAPE) { setQPainterPen(f.realColor()); - qp_->setFont(theApp->fontLoader().get(f)); + qp_->setFont(guiApp->fontLoader().get(f)); // We need to draw the text as LTR as we use our own bidi code. qp_->setLayoutDirection(Qt::LeftToRight); qp_->drawText(x, y, str); diff --git a/src/frontends/qt4/lyx_gui.C b/src/frontends/qt4/lyx_gui.C index 1aa7d1c21f..8cf90e0001 100644 --- a/src/frontends/qt4/lyx_gui.C +++ b/src/frontends/qt4/lyx_gui.C @@ -28,12 +28,7 @@ #include "lyxsocket.h" -#include "graphics/LoaderQueue.h" - #include "support/lstrings.h" -#include "support/os.h" -#include "support/package.h" -#include "debug.h" #include "GuiView.h" @@ -42,7 +37,7 @@ #include "QLImage.h" #include "qt_helpers.h" #include "socket_callback.h" -#include "Application.h" +#include "GuiApplication.h" #include #include @@ -56,13 +51,10 @@ using lyx::support::ltrim; -using lyx::support::package; using lyx::frontend::GuiImplementation; using lyx::frontend::GuiView; -using lyx::frontend::Application; - -namespace os = lyx::support::os; +using lyx::frontend::GuiApplication; using boost::shared_ptr; @@ -74,35 +66,16 @@ using std::map; using std::vector; using std::string; -// FIXME: wrong place ! -LyXServer * lyxserver; -LyXServerSocket * lyxsocket; - +lyx::frontend::GuiApplication * guiApp; lyx::frontend::Application * theApp; + namespace { -int getDPI() -{ - QWidget w; - return int(0.5 * (w.logicalDpiX() + w.logicalDpiY())); -} - map > socket_callbacks; -void cleanup() -{ - delete lyxsocket; - lyxsocket = 0; - delete lyxserver; - lyxserver = 0; -} - } // namespace anon -// in QLyXKeySym.C -extern void initEncodings(); - namespace lyx_gui { bool use_gui = true; @@ -124,65 +97,23 @@ int exec(int & argc, char * argv[]) that caused the hanging: QObject::killTimer: timers cannot be stopped from another thread + + I hope that the problem will disappear automagically when we get rid of + lyx_gui entirely, thus using theApp directly throughout the code for LyXFunc, + Clipboard and Selection access. */ // Force adding of font path _before_ QApplication is initialized FontLoader::initFontPath(); #if defined(Q_WS_WIN) && !defined(Q_CYGWIN_WIN) - static Application app(argc, argv); + static GuiApplication app(argc, argv); #else - Application app(argc, argv); + GuiApplication app(argc, argv); #endif - theApp = &app; - - - // install translation file for Qt built-in dialogs - // These are only installed since Qt 3.2.x - QTranslator qt_trans; - QString language_name = QString("qt_") + QLocale::system().name(); - language_name.truncate(5); - if (qt_trans.load(language_name, - QLibraryInfo::location(QLibraryInfo::TranslationsPath))) - { - qApp->installTranslator(&qt_trans); - // even if the language calls for RtL, don't do that - qApp->setLayoutDirection(Qt::LeftToRight); - lyxerr[Debug::GUI] - << "Successfully installed Qt translations for locale " - << fromqstr(language_name) << std::endl; - } else - lyxerr[Debug::GUI] - << "Could not find Qt translations for locale " - << fromqstr(language_name) << std::endl; - -/*#ifdef Q_WS_MACX - // These translations are meant to break Qt/Mac menu merging - // algorithm on some entries. It lists the menu names that - // should not be moved to the LyX menu - QTranslator aqua_trans(0); - aqua_trans.insert(QTranslatorMessage("QMenuBar", "Setting", 0, - "do_not_merge_me")); - aqua_trans.insert(QTranslatorMessage("QMenuBar", "Config", 0, - "do_not_merge_me")); - aqua_trans.insert(QTranslatorMessage("QMenuBar", "Options", 0, - "do_not_merge_me")); - aqua_trans.insert(QTranslatorMessage("QMenuBar", "Setup", 0, - "do_not_merge_me")); - - qApp->installTranslator(&aqua_trans); -#endif -*/ - using namespace lyx::graphics; - - Image::newImage = boost::bind(&QLImage::newImage); - Image::loadableFormats = boost::bind(&QLImage::loadableFormats); - - // needs to be done before reading lyxrc - lyxrc.dpi = getDPI(); - - LoaderQueue::setPriority(10,100); + guiApp = &app; + theApp = guiApp; return LyX::ref().exec2(argc, argv); } @@ -195,63 +126,13 @@ void parse_lyxrc() LyXView * create_view(unsigned int width, unsigned int height, int posx, int posy, bool maximize) { - // this can't be done before because it needs the Languages object - initEncodings(); - - int view_id = theApp->gui().newView(width, height); - GuiView & view = static_cast (theApp->gui().view(view_id)); - - // FIXME: for now we assume that there is only one LyXView with id = 0. - /*int workArea_id_ =*/ theApp->gui().newWorkArea(width, height, 0); - //WorkArea * workArea_ = & theApp->gui().workArea(workArea_id_); - - LyX::ref().addLyXView(&view); - - view.init(); - - // only true when the -geometry option was NOT used - if (width != 0 && height != 0) { - if (posx != -1 && posy != -1) { -#ifdef Q_OS_WIN32 - // FIXME: use only setGeoemtry when Trolltech has - // fixed the qt4/X11 bug - view.setGeometry(posx, posy,width, height); -#else - view.resize(width, height); - view.move(posx, posy); -#endif - } else { - view.resize(width, height); - } - - if (maximize) - view.setWindowState(Qt::WindowMaximized); - } - - view.show(); - - return &view; + return &guiApp->createView(width, height, posx, posy, maximize); } int start(LyXView * view, string const & batch) { - // FIXME: some code below needs moving - - lyxserver = new LyXServer(&view->getLyXFunc(), lyxrc.lyxpipes); - lyxsocket = new LyXServerSocket(&view->getLyXFunc(), - os::internal_path(package().temp_dir() + "/lyxsocket")); - - // handle the batch commands the user asked for - if (!batch.empty()) { - view->getLyXFunc().dispatch(lyxaction.lookupFunc(batch)); - } - - int const status = qApp->exec(); - - // FIXME - cleanup(); - return status; + return theApp->start(batch); } @@ -261,14 +142,13 @@ void sync_events() // During screen update/ redraw, this method is disabled to // prevent keyboard events being handed to the LyX core, where // they could cause re-entrant calls to screen update. - qApp->processEvents(QEventLoop::ExcludeUserInputEvents); + guiApp->processEvents(QEventLoop::ExcludeUserInputEvents); } void exit(int status) { - cleanup(); - QApplication::exit(status); + guiApp->exit(status); } @@ -318,13 +198,13 @@ void update_color(LColor_color) void update_fonts() { - theApp->fontLoader().update(); + guiApp->fontLoader().update(); } bool font_available(LyXFont const & font) { - return theApp->fontLoader().available(font); + return guiApp->fontLoader().available(font); } diff --git a/src/frontends/qt4/qfont_metrics.C b/src/frontends/qt4/qfont_metrics.C index 6abda06299..915c2934ab 100644 --- a/src/frontends/qt4/qfont_metrics.C +++ b/src/frontends/qt4/qfont_metrics.C @@ -14,7 +14,7 @@ #include "frontends/font_metrics.h" #include "frontends/lyx_gui.h" -#include "Application.h" +#include "GuiApplication.h" #include "FontLoader.h" #include "qt_helpers.h" @@ -39,8 +39,8 @@ int smallcapswidth(QString const & s, LyXFont const & f) LyXFont smallfont = f; smallfont.decSize().decSize().setShape(LyXFont::UP_SHAPE); - QFontMetrics const & qm = theApp->fontLoader().metrics(f); - QFontMetrics const & qsmallm = theApp->fontLoader().metrics(smallfont); + QFontMetrics const & qm = guiApp->fontLoader().metrics(f); + QFontMetrics const & qsmallm = guiApp->fontLoader().metrics(smallfont); int w = 0; @@ -65,7 +65,7 @@ int font_metrics::maxAscent(LyXFont const & f) { if (!lyx_gui::use_gui) return 1; - return theApp->fontLoader().metrics(f).ascent(); + return guiApp->fontLoader().metrics(f).ascent(); } @@ -75,7 +75,7 @@ int font_metrics::maxDescent(LyXFont const & f) return 1; // We add 1 as the value returned by QT is different than X // See http://doc.trolltech.com/2.3/qfontmetrics.html#200b74 - return theApp->fontLoader().metrics(f).descent() + 1; + return guiApp->fontLoader().metrics(f).descent() + 1; } @@ -83,7 +83,7 @@ int font_metrics::ascent(char_type c, LyXFont const & f) { if (!lyx_gui::use_gui) return 1; - QRect const & r = theApp->fontLoader().metrics(f).boundingRect(ucs4_to_qchar(c)); + QRect const & r = guiApp->fontLoader().metrics(f).boundingRect(ucs4_to_qchar(c)); // Qt/Win 3.2.1nc (at least) corrects the GetGlyphOutlineA|W y // value by the height: (x, -y-height, width, height). // Other versions return: (x, -y, width, height) @@ -99,7 +99,7 @@ int font_metrics::descent(char_type c, LyXFont const & f) { if (!lyx_gui::use_gui) return 1; - QRect const & r = theApp->fontLoader().metrics(f).boundingRect(ucs4_to_qchar(c)); + QRect const & r = guiApp->fontLoader().metrics(f).boundingRect(ucs4_to_qchar(c)); // Qt/Win 3.2.1nc (at least) corrects the GetGlyphOutlineA|W y // value by the height: (x, -y-height, width, height). // Other versions return: (x, -y, width, height) @@ -115,7 +115,7 @@ int font_metrics::lbearing(char_type c, LyXFont const & f) { if (!lyx_gui::use_gui) return 1; - return theApp->fontLoader().metrics(f).leftBearing(ucs4_to_qchar(c)); + return guiApp->fontLoader().metrics(f).leftBearing(ucs4_to_qchar(c)); } @@ -123,7 +123,7 @@ int font_metrics::rbearing(char_type c, LyXFont const & f) { if (!lyx_gui::use_gui) return 1; - QFontMetrics const & m = theApp->fontLoader().metrics(f); + QFontMetrics const & m = guiApp->fontLoader().metrics(f); // Qt rbearing is from the right edge of the char's width(). QChar sc = ucs4_to_qchar(c); @@ -141,7 +141,7 @@ int font_metrics::width(char_type const * s, size_t ls, LyXFont const & f) if (f.realShape() == LyXFont::SMALLCAPS_SHAPE) return smallcapswidth(ucs2, f); - QLFontInfo & fi = theApp->fontLoader().fontinfo(f); + QLFontInfo & fi = guiApp->fontLoader().fontinfo(f); if (ls == 1) return fi.width(ucs2[0].unicode()); @@ -166,7 +166,7 @@ int font_metrics::signedWidth(docstring const & s, LyXFont const & f) void font_metrics::rectText(docstring const & str, LyXFont const & f, int & w, int & ascent, int & descent) { - QFontMetrics const & m = theApp->fontLoader().metrics(f); + QFontMetrics const & m = guiApp->fontLoader().metrics(f); static int const d = 2; w = width(str, f) + d * 2 + 2; ascent = m.ascent() + d; @@ -178,7 +178,7 @@ void font_metrics::rectText(docstring const & str, LyXFont const & f, void font_metrics::buttonText(docstring const & str, LyXFont const & f, int & w, int & ascent, int & descent) { - QFontMetrics const & m = theApp->fontLoader().metrics(f); + QFontMetrics const & m = guiApp->fontLoader().metrics(f); static int const d = 3; w = width(str, f) + d * 2 + 2; ascent = m.ascent() + d;