X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Frender_graphic.C;h=31d4605b117778504a61b4afb6e48a546a2712fc;hb=5603df4a5b7e511b31026c9a4f8f55b2b10fde57;hp=376b142a8685d3f8c584f3375570ff3940bc5d11;hpb=cf536b5db7c9f31425dae3ef339be6aa74fc03ce;p=lyx.git diff --git a/src/insets/render_graphic.C b/src/insets/render_graphic.C index 376b142a86..31d4605b11 100644 --- a/src/insets/render_graphic.C +++ b/src/insets/render_graphic.C @@ -16,6 +16,8 @@ #include "gettext.h" #include "LColor.h" +#include "lyx_main.h" +#include "lyxrc.h" #include "metricsinfo.h" #include "frontends/font_metrics.h" @@ -25,30 +27,38 @@ #include "support/filetools.h" +#include + namespace graphics = lyx::graphics; using lyx::support::AbsolutePath; using lyx::support::OnlyFilename; using std::string; +using std::auto_ptr; -RenderGraphic::RenderGraphic() - : checksum_(0) -{} +RenderGraphic::RenderGraphic(InsetBase const * inset) +{ + loader_.connect(boost::bind(&LyX::updateInset, + boost::cref(LyX::cref()), inset)); +} -RenderGraphic::RenderGraphic(RenderGraphic const & other) +RenderGraphic::RenderGraphic(RenderGraphic const & other, + InsetBase const * inset) : RenderBase(other), loader_(other.loader_), - params_(other.params_), - checksum_(0) -{} + params_(other.params_) +{ + loader_.connect(boost::bind(&LyX::updateInset, + boost::cref(LyX::cref()), inset)); +} -RenderBase * RenderGraphic::clone() const +auto_ptr RenderGraphic::clone(InsetBase const * inset) const { - return new RenderGraphic(*this); + return auto_ptr(new RenderGraphic(*this, inset)); } @@ -63,26 +73,21 @@ void RenderGraphic::update(graphics::Params const & params) } -bool RenderGraphic::hasFileChanged() const -{ - unsigned long const new_checksum = loader_.checksum(); - bool const file_has_changed = checksum_ != new_checksum; - if (file_has_changed) - checksum_ = new_checksum; - return file_has_changed; -} - +namespace { -boost::signals::connection RenderGraphic::connect(slot_type const & slot) const +bool displayGraphic(graphics::Params const & params) { - return loader_.connect(slot); + return params.display != graphics::NoDisplay && + lyxrc.display_graphics != graphics::NoDisplay; } -namespace { - -string const statusMessage(graphics::ImageStatus status) +string const statusMessage(graphics::Params const & params, + graphics::ImageStatus status) { + if (!displayGraphic(params)) + return _("Not shown."); + switch (status) { case graphics::WaitingToLoad: return _("Not shown."); @@ -91,7 +96,7 @@ string const statusMessage(graphics::ImageStatus status) case graphics::Converting: return _("Converting to loadable format..."); case graphics::Loaded: - return _("Loaded into memory. Must now generate pixmap."); + return _("Loaded into memory. Generating pixmap..."); case graphics::ScalingEtc: return _("Scaling etc..."); case graphics::Ready: @@ -123,7 +128,7 @@ bool readyToDisplay(graphics::Loader const & loader) void RenderGraphic::metrics(MetricsInfo & mi, Dimension & dim) const { - bool image_ready = readyToDisplay(loader_); + bool image_ready = displayGraphic(params_) && readyToDisplay(loader_); dim.asc = image_ready ? loader_.image()->getHeight() : 50; dim.des = 0; @@ -143,7 +148,7 @@ void RenderGraphic::metrics(MetricsInfo & mi, Dimension & dim) const font_width = font_metrics::width(justname, msgFont); } - string const msg = statusMessage(loader_.status()); + string const msg = statusMessage(params_, loader_.status()); if (!msg.empty()) { msgFont.setSize(LyXFont::SIZE_TINY); font_width = std::max(font_width, @@ -159,18 +164,17 @@ void RenderGraphic::metrics(MetricsInfo & mi, Dimension & dim) const void RenderGraphic::draw(PainterInfo & pi, int x, int y) const { - if (params_.display != graphics::NoDisplay && - loader_.status() == graphics::WaitingToLoad) - loader_.startLoading(); - - if (params_.display != graphics::NoDisplay && - !loader_.monitoring()) - loader_.startMonitoring(); + if (displayGraphic(params_)) { + if (loader_.status() == graphics::WaitingToLoad) + loader_.startLoading(); + if (!loader_.monitoring()) + loader_.startMonitoring(); + } - // This will draw the graphics. If the graphics has not been loaded yet, - // we draw just a rectangle. + // This will draw the graphics. If the graphics has not been + // loaded yet, we draw just a rectangle. - if (readyToDisplay(loader_)) { + if (displayGraphic(params_) && readyToDisplay(loader_)) { pi.pain.image(x + InsetOld::TEXT_TO_INSET_OFFSET, y - dim_.asc, dim_.wid - 2 * InsetOld::TEXT_TO_INSET_OFFSET, @@ -197,7 +201,7 @@ void RenderGraphic::draw(PainterInfo & pi, int x, int y) const } // Print the message. - string const msg = statusMessage(loader_.status()); + string const msg = statusMessage(params_, loader_.status()); if (!msg.empty()) { msgFont.setSize(LyXFont::SIZE_TINY); pi.pain.text(x + InsetOld::TEXT_TO_INSET_OFFSET + 6,