#include "GraphicsImage.h"
#include "GraphicsParams.h"
#include "GraphicsCache.h"
-#include "support/debug.h"
+#include "support/debug.h"
#include "support/Timeout.h"
#include <boost/bind.hpp>
#include <set>
#include <queue>
-using std::string;
-using std::endl;
-using std::list;
-
+using namespace std;
+using namespace lyx::support;
namespace lyx {
namespace graphics {
-using support::FileName;
/////////////////////////////////////////////////////////////////////
//
/// This class is a singleton class... use LoaderQueue::get() instead
LoaderQueue();
/// The in-progress loading queue (elements are unique here).
- std::list<Cache::ItemPtr> cache_queue_;
+ list<Cache::ItemPtr> cache_queue_;
/// Used to make the insertion of new elements faster.
- std::set<Cache::ItemPtr> cache_set_;
+ set<Cache::ItemPtr> cache_set_;
/// Newly touched elements go here. loadNext moves them to cache_queue_
- std::queue<Cache::ItemPtr> bucket_;
+ queue<Cache::ItemPtr> bucket_;
///
Timeout timer;
///
list<Cache::ItemPtr>::iterator
end = cache_queue_.end();
- it = std::find(it, end, item);
+ it = find(it, end, item);
if (it != end)
cache_queue_.erase(it);
}
{}
-Loader::Loader(FileName const & file, DisplayType type)
+Loader::Loader(FileName const & file, bool display)
: pimpl_(new Impl)
{
- reset(file, type);
+ reset(file, display);
}
}
-void Loader::reset(FileName const & file, DisplayType type) const
+void Loader::reset(FileName const & file, bool display) const
{
Params params;
- params.display = type;
+ params.display = display;
pimpl_->resetParams(params);
pimpl_->resetFile(file);
}
+void Loader::reload() const
+{
+ pimpl_->cached_item_->startLoading();
+}
+
+
void Loader::startMonitoring() const
{
if (!pimpl_->cached_item_.get())
void Loader::Impl::createPixmap()
{
- if (!cached_item_.get() ||
- params_.display == NoDisplay || status_ != Loaded)
+ if (!params_.display || status_ != Loaded)
return;
- image_.reset(cached_item_->image()->clone());
+ if (!cached_item_.get()) {
+ LYXERR(Debug::GRAPHICS, "pixmap not cached yet");
+ return;
+ }
+
+ if (!cached_item_->image()) {
+ // There must have been a problem reading the file.
+ LYXERR(Debug::GRAPHICS, "Graphics file not loaded.");
+ return;
+ }
- // These do nothing if there's nothing to do
- image_->clip(params_);
- image_->rotate(params_);
- image_->scale(params_);
+ image_.reset(cached_item_->image()->clone());
bool const success = image_->setPixmap(params_);
if (status_ != WaitingToLoad)
return;
+ if (cached_item_->tryDisplayFormat()) {
+ status_ = Loaded;
+ createPixmap();
+ return;
+ }
+
LoaderQueue::get().touch(cached_item_);
}