From 59b4737cfd19cd32afceb581f4e370c59650fcae Mon Sep 17 00:00:00 2001 From: Angus Leeming Date: Thu, 27 Sep 2001 09:43:31 +0000 Subject: [PATCH 1/1] Add splash to WorkArea. Remove calls to old splash dialog. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@2806 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/BufferView_pimpl.C | 6 +-- src/ChangeLog | 14 +++++ src/WorkArea.C | 120 ++++++++++++++++++++++++++++++++++++++--- src/WorkArea.h | 8 +++ src/lyx_gui.C | 4 -- 5 files changed, 137 insertions(+), 15 deletions(-) diff --git a/src/BufferView_pimpl.C b/src/BufferView_pimpl.C index ee68b85a97..8bdaaff6bf 100644 --- a/src/BufferView_pimpl.C +++ b/src/BufferView_pimpl.C @@ -208,6 +208,7 @@ void BufferView::Pimpl::buffer(Buffer * b) // hidden. This should go here because some dialogs (eg ToC) // require bv_->text. owner_->getDialogs()->updateBufferDependent(true); + workarea_.show(); redraw(); insetWakeup(); } else { @@ -366,10 +367,7 @@ int BufferView::Pimpl::resizeCurrentBuffer() /// clear the "Formatting Document" message owner_->message(""); - - /// get rid of the splash screen if it's not gone already - owner_->getDialogs()->destroySplash(); - + return 0; } diff --git a/src/ChangeLog b/src/ChangeLog index 0c592965c2..14879c5c86 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,17 @@ +2001-09-27 Angus Leeming + + * BufferView_pimpl.C (buffer): call WorkArea::show to pop-up the + pixmap. + (resizeCurrentBuff): remove code to destroy the old splash dialog. + + * WorkArea.[Ch]: add the "LyX" pixmap and version string to the + background. Use greyOut() and the new show() methods to toggle between + the foreground and background. Add code to remove the splash after + its initial showing. + + * lyx_gui.C: Remove dependency on frontends/Dialogs.h. + (create_forms): no longer call Dialogs::showSplash. + 2001-09-26 Jean-Marc Lasgouttes * .cvsignore: add version_info.h diff --git a/src/WorkArea.C b/src/WorkArea.C index 1e64810638..a63cf71e8c 100644 --- a/src/WorkArea.C +++ b/src/WorkArea.C @@ -19,6 +19,10 @@ #include "debug.h" #include "support/lstrings.h" #include "LyXView.h" +#include "support/filetools.h" // LibFileSearch +#include "lyxrc.h" // lyxrc.show_banner +#include "version.h" // LYX_VERSION +#include "support/LAssert.h" #if FL_REVISION < 89 || (FL_REVISION == 89 && FL_FIXLEVEL < 5) #include "lyxlookup.h" @@ -60,11 +64,36 @@ extern "C" { return WorkArea::work_area_handler(ob, event, 0, 0, key, xev); } + + + // Resizing the display causes the version string to move relative to + // the splash pixmap because the parameters xforms uses to control + // resizing are not very sophisticated. + // I found it easier, therefore, to just remove the splash screen. + // (Angus, 25 September 2001) + static + int C_WorkAreaSplashPH(FL_OBJECT * ob, int event, + FL_Coord, FL_Coord, int, void *) + { + static int counter = 0; + if (event != FL_DRAW || ++counter > 3) { + return 0; + } + + lyx::Assert(ob && ob->u_vdata); + WorkArea * pre = static_cast(ob->u_vdata); + + if (counter == 3) { + pre->destroySplash(); + } + + return 0; + } } WorkArea::WorkArea(int xpos, int ypos, int width, int height) - : workareapixmap(0), painter_(*this) + : splash_(0), splash_text_(0), workareapixmap(0), painter_(*this) { fl_freeze_all_forms(); @@ -85,7 +114,7 @@ WorkArea::WorkArea(int xpos, int ypos, int width, int height) fl_set_object_boxtype(obj, FL_NO_BOX); fl_set_object_resize(obj, FL_RESIZE_ALL); fl_set_object_gravity(obj, NorthWestGravity, NorthWestGravity); - + // a box if (lyxerr.debugging(Debug::GUI)) lyxerr << "\tbackground box: +" @@ -98,6 +127,43 @@ WorkArea::WorkArea(int xpos, int ypos, int width, int height) fl_set_object_resize(obj, FL_RESIZE_ALL); fl_set_object_gravity(obj, NorthWestGravity, SouthEastGravity); + // Add a splash screen to the centre of the work area + string const splash_file = (lyxrc.show_banner) ? + LibFileSearch("images", "banner", "xpm") : string(); + + if (!splash_file.empty()) { + int const splash_w = 425; + int const splash_h = 290; + int const splash_x = xpos + 0.5 * (width - 15 - splash_w); + int const splash_y = ypos + 0.5 * (height - splash_h); + splash_ = obj = + fl_add_pixmapbutton(FL_NORMAL_BUTTON, + splash_x, splash_y, + splash_w, splash_h, ""); + obj->u_vdata = this; + fl_set_object_prehandler(obj, C_WorkAreaSplashPH); + + fl_set_pixmapbutton_file(obj, splash_file.c_str()); + fl_set_pixmapbutton_focus_outline(obj, 3); + fl_set_object_boxtype(obj, FL_NO_BOX); + + int const text_x = splash_x + 248; + int const text_y = splash_y + 265; + splash_text_ = obj = + fl_add_text(FL_NORMAL_TEXT, text_x, text_y, 170, 16, + LYX_VERSION); + fl_set_object_lsize(obj, FL_NORMAL_SIZE); + fl_mapcolor(FL_FREE_COL2, 0x2b, 0x47, 0x82); + fl_mapcolor(FL_FREE_COL3, 0xe1, 0xd2, 0x9b); + fl_set_object_color(obj, FL_FREE_COL2, FL_FREE_COL2); + fl_set_object_lcol(obj, FL_FREE_COL3); + fl_set_object_lalign(obj, FL_ALIGN_CENTER|FL_ALIGN_INSIDE); + fl_set_object_lstyle(obj, FL_BOLD_STYLE); + + fl_hide_object(splash_); + fl_hide_object(splash_text_); + } + // // THE SCROLLBAR // @@ -177,7 +243,7 @@ void WorkArea::resize(int xpos, int ypos, int width, int height) // a box fl_set_object_geometry(backgroundbox, xpos, ypos, width - 15, height); - + // // THE SCROLLBAR // @@ -192,8 +258,9 @@ void WorkArea::resize(int xpos, int ypos, int width, int height) width - 15 - 2 * bw, height - 2 * bw); - fl_unfreeze_all_forms(); + destroySplash(); + fl_unfreeze_all_forms(); } @@ -225,14 +292,53 @@ void WorkArea::createPixmap(int width, int height) } +void WorkArea::show() const +{ + if (!work_area->visible) { + fl_show_object(work_area); + } + + destroySplash(); +} + + void WorkArea::greyOut() const { - fl_winset(FL_ObjWin(work_area)); - fl_rectangle(1, work_area->x, work_area->y, - work_area->w, work_area->h, FL_GRAY63); + if (work_area->visible) { + fl_hide_object(work_area); + } + + if (splash_ && !splash_->visible) { + fl_show_object(splash_); + fl_show_object(splash_text_); + } } +void WorkArea::destroySplash() const +{ + if (splash_) { + if (splash_->visible) { + fl_hide_object(splash_); + } + fl_set_object_prehandler(splash_, 0); + // Causes a segmentation fault! + // fl_delete_object(splash_); + // fl_free_object(splash_); + splash_ = 0; + } + + if (splash_text_) { + if (splash_text_->visible) { + fl_hide_object(splash_text_); + } + fl_delete_object(splash_text_); + fl_free_object(splash_text_); + splash_text_ = 0; + } +} + + void WorkArea::setFocus() const { fl_set_focus_object(work_area->form, work_area); diff --git a/src/WorkArea.h b/src/WorkArea.h index 70fe246dd2..118c0d1b68 100644 --- a/src/WorkArea.h +++ b/src/WorkArea.h @@ -68,6 +68,10 @@ public: /// void greyOut() const; /// + void show() const; + /// + void destroySplash() const; + /// void setScrollbar(double pos, double length_fraction) const; /// void setScrollbarValue(double y) const { @@ -133,6 +137,10 @@ private: FL_OBJECT * work_area; /// FL_OBJECT * scrollbar; + /// + mutable FL_OBJECT * splash_; + /// + mutable FL_OBJECT * splash_text_; /// The pixmap overlay on the workarea Pixmap workareapixmap; /// diff --git a/src/lyx_gui.C b/src/lyx_gui.C index dcb3b5778c..a9c516d8aa 100644 --- a/src/lyx_gui.C +++ b/src/lyx_gui.C @@ -39,7 +39,6 @@ #endif #include "bufferlist.h" #include "ColorHandler.h" -#include "frontends/Dialogs.h" #include "frontends/GUIRunTime.h" #include "frontends/xforms/xforms_helpers.h" // for XformColor @@ -307,9 +306,6 @@ void LyXGUI::create_forms() } lyxViews->show(main_placement, FL_FULLBORDER, "LyX"); - - if (lyxrc.show_banner) - lyxViews->getDialogs()->showSplash(); } -- 2.39.2