From: Angus Leeming Date: Thu, 11 Apr 2002 17:40:44 +0000 (+0000) Subject: (Herbert): discover the "Bounding Box" of non-(e)ps graphics files, and X-Git-Tag: 1.6.10~19433 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=b95a56f37a1842ac4da4ddd13a5ae6e627d20eef;p=features.git (Herbert): discover the "Bounding Box" of non-(e)ps graphics files, and use it in the graphics dialog. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@3973 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/frontends/controllers/ChangeLog b/src/frontends/controllers/ChangeLog index 1bd150619d..b36b1bc88d 100644 --- a/src/frontends/controllers/ChangeLog +++ b/src/frontends/controllers/ChangeLog @@ -1,3 +1,7 @@ +2002-04-11 Herbert Voss + + * ControlGraphics.C: read BoundingBox also from non (e)ps files. + 2002-04-08 Adrien Rebollo * ControlAboutlyx.C (getVersion): two _() forgotten diff --git a/src/frontends/controllers/ControlGraphics.C b/src/frontends/controllers/ControlGraphics.C index 8c459d13ee..4437f0f781 100644 --- a/src/frontends/controllers/ControlGraphics.C +++ b/src/frontends/controllers/ControlGraphics.C @@ -23,6 +23,9 @@ #include "ButtonControllerBase.h" #include "ControlGraphics.h" #include "ControlInset.tmpl" + +#include "helper_funcs.h" + #include "buffer.h" #include "BufferView.h" #include "Dialogs.h" @@ -30,18 +33,20 @@ #include "gettext.h" #include "lyxrc.h" +#include "graphics/GraphicsCache.h" + #include "insets/insetgraphics.h" -#include "insets/insetgraphicsParams.h" // need operator!=() +#include "insets/insetgraphicsParams.h" -#include "support/FileInfo.h" // for FileInfo -#include "helper_funcs.h" #include "support/lstrings.h" -#include "support/filetools.h" // for AddName, zippedFile +#include "support/filetools.h" +#include "support/FileInfo.h" + using std::pair; using std::make_pair; using std::ifstream; - + ControlGraphics::ControlGraphics(LyXView & lv, Dialogs & d) : ControlInset(lv, d) { @@ -104,7 +109,18 @@ string const ControlGraphics::Browse(string const & in_name) string const ControlGraphics::readBB(string const & file) { - return readBB_from_PSFile(MakeAbsPath(file, lv_.buffer()->filePath())); + string const abs_file = MakeAbsPath(file, lv_.buffer()->filePath()); + + string const from = getExtFromContents(abs_file); + // Check if we have a Postscript file, then it's easy + if (contains(from, "ps")) + return readBB_from_PSFile(abs_file); + + // we don't, so ask the Graphics Cache if it has loaded the file + grfx::GCache & gc = grfx::GCache::get(); + return ("0 0 " + + tostr(gc.raw_width(abs_file)) + ' ' + + tostr(gc.raw_height(abs_file))); } diff --git a/src/graphics/ChangeLog b/src/graphics/ChangeLog index 67be3c9a29..f8dea4bd09 100644 --- a/src/graphics/ChangeLog +++ b/src/graphics/ChangeLog @@ -1,3 +1,9 @@ +2002-04-10 Herbert Voss + + * GraphicsCache.[Ch]: + * GraphicsCacheItem.[Ch]: add width/height functions from Angus + to read the "Bounding Box" from non (e)ps files. + 2002-04-08 Angus Leeming * GraphicsParams.C (c-tor): if clipping, then check the Bounding Box of diff --git a/src/graphics/GraphicsCache.C b/src/graphics/GraphicsCache.C index 9e37111ec9..562b4d214b 100644 --- a/src/graphics/GraphicsCache.C +++ b/src/graphics/GraphicsCache.C @@ -165,4 +165,25 @@ GCache::find(InsetGraphics const & inset) const return cache->end(); } + +unsigned int GCache::raw_width(string const & filename) const +{ + CacheType::const_iterator it = cache->find(filename); + if (it == cache->end()) + return 0; + + return it->second->raw_width(); +} + + +unsigned int GCache::raw_height(string const & filename) const +{ + CacheType::const_iterator it = cache->find(filename); + if (it == cache->end()) + return 0; + + return it->second->raw_height(); +} + } // namespace grfx + diff --git a/src/graphics/GraphicsCache.h b/src/graphics/GraphicsCache.h index dadec6c150..ed2d9bb20f 100644 --- a/src/graphics/GraphicsCache.h +++ b/src/graphics/GraphicsCache.h @@ -67,6 +67,11 @@ public: /// How far have we got in loading the image? ImageStatus status(InsetGraphics const &) const; + // Used to ascertain the Bounding Box of non (e)ps files. + unsigned int raw_width(string const & filename) const; + /// + unsigned int raw_height(string const & filename) const; + private: /** Make the c-tor private so we can control how many objects * are instantiated. diff --git a/src/graphics/GraphicsCacheItem.C b/src/graphics/GraphicsCacheItem.C index baa5485ce2..54fbfdf4a3 100644 --- a/src/graphics/GraphicsCacheItem.C +++ b/src/graphics/GraphicsCacheItem.C @@ -392,6 +392,24 @@ void GCacheItem::imageLoaded(bool success) } +unsigned int GCacheItem::raw_width() const +{ + if (!image_.get()) + return 0; + + return image_->getWidth(); +} + + +unsigned int GCacheItem::raw_height() const +{ + if (!image_.get()) + return 0; + + return image_->getHeight(); +} + + namespace { string const findTargetFormat(string const & from) diff --git a/src/graphics/GraphicsCacheItem.h b/src/graphics/GraphicsCacheItem.h index 94e1e28088..70b3262218 100644 --- a/src/graphics/GraphicsCacheItem.h +++ b/src/graphics/GraphicsCacheItem.h @@ -89,6 +89,11 @@ public: */ void changeDisplay(bool changed_background); + /// Used to ascertain the Bounding Box of non (e)ps files. + unsigned int raw_width() const; + /// + unsigned int raw_height() const; + private: /** Start the image conversion process, checking first that it is * necessary. If it is necessary, then a conversion task is started.