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
This commit is contained in:
Angus Leeming 2001-09-27 09:43:31 +00:00
parent 25409ce797
commit 59b4737cfd
5 changed files with 138 additions and 16 deletions

View File

@ -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 {
@ -367,9 +368,6 @@ 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;
}

View File

@ -1,3 +1,17 @@
2001-09-27 Angus Leeming <a.leeming@ic.ac.uk>
* 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 <Jean-Marc.Lasgouttes@inria.fr>
* .cvsignore: add version_info.h

View File

@ -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<WorkArea *>(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();
@ -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
//
@ -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,11 +292,50 @@ 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;
}
}

View File

@ -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;
///

View File

@ -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();
}