mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-23 05:25:26 +00:00
Forgot to add this files.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@958 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
9ab27bcd7e
commit
c39bf82c2f
84
src/graphics/Renderer.C
Normal file
84
src/graphics/Renderer.C
Normal file
@ -0,0 +1,84 @@
|
||||
// -*- C++ -*-
|
||||
/* This file is part of
|
||||
* =================================================
|
||||
*
|
||||
* LyX, The Document Processor
|
||||
* Copyright 1995 Matthias Ettrich.
|
||||
* Copyright 1995-2000 The LyX Team.
|
||||
*
|
||||
* This file Copyright 2000 Baruch Even
|
||||
* ================================================= */
|
||||
|
||||
#ifdef __GNUG__
|
||||
#pragma implementation
|
||||
#endif
|
||||
|
||||
#include <config.h>
|
||||
#include "Renderer.h"
|
||||
|
||||
#include FORMS_H_LOCATION
|
||||
#include "support/filetools.h"
|
||||
|
||||
|
||||
Renderer::Renderer()
|
||||
: width_(0), height_(0), pixmapLoaded_(false)
|
||||
{}
|
||||
|
||||
Renderer::~Renderer()
|
||||
{
|
||||
freePixmap();
|
||||
}
|
||||
|
||||
bool Renderer::setFilename(string const & filename)
|
||||
{
|
||||
// Make sure file exists and is readable.
|
||||
if (! IsFileReadable(filename)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Verify that the file format is correct.
|
||||
if (! isImageFormatOK(filename)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
filename_ = filename;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Renderer::renderImage()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Renderer::isImageFormatOK(string const & /*filename*/) const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void Renderer::setPixmap(Pixmap pixmap, unsigned int width, unsigned int height)
|
||||
{
|
||||
freePixmap();
|
||||
|
||||
pixmap_ = pixmap;
|
||||
width_ = width;
|
||||
height_ = height;
|
||||
pixmapLoaded_ = true;
|
||||
}
|
||||
|
||||
Pixmap Renderer::getPixmap() const
|
||||
{ return pixmap_; }
|
||||
|
||||
unsigned int Renderer::getWidth() const
|
||||
{ return width_; }
|
||||
|
||||
unsigned int Renderer::getHeight() const
|
||||
{ return height_; }
|
||||
|
||||
string const & Renderer::getFilename() const
|
||||
{ return filename_; }
|
||||
|
||||
void Renderer::freePixmap()
|
||||
{
|
||||
if (pixmapLoaded_)
|
||||
XFreePixmap(fl_display, pixmap_);
|
||||
}
|
78
src/graphics/Renderer.h
Normal file
78
src/graphics/Renderer.h
Normal file
@ -0,0 +1,78 @@
|
||||
// -*- C++ -*-
|
||||
/* This file is part of
|
||||
* =================================================
|
||||
*
|
||||
* LyX, The Document Processor
|
||||
* Copyright 1995 Matthias Ettrich.
|
||||
* Copyright 1995-2000 The LyX Team.
|
||||
*
|
||||
* This file Copyright 2000 Baruch Even
|
||||
* ================================================= */
|
||||
|
||||
#ifndef RENDERER_H
|
||||
#define RENDERER_H
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#ifdef __GNUG__
|
||||
#pragma interface
|
||||
#endif
|
||||
|
||||
#include "LString.h"
|
||||
#include "X11/Xlib.h"
|
||||
#include "support/utility.hpp"
|
||||
|
||||
/** Renderer is a base class that is used to take an image format, and render
|
||||
* it into a Pixmap in order to be able to display it later on in LyX.
|
||||
* Essentially it's job is to load an image format and create a Pixmap from it.
|
||||
* It also needs to do various transforms on the image, like Rotation,
|
||||
* Resize and color reduction.
|
||||
*/
|
||||
class Renderer : public noncopyable {
|
||||
public:
|
||||
/// c-tor.
|
||||
Renderer();
|
||||
/// d-tor.
|
||||
virtual ~Renderer();
|
||||
|
||||
/// Set the filename that we will render
|
||||
bool setFilename(string const & filename);
|
||||
|
||||
/// Render the image, doing the necessary transforms.
|
||||
virtual bool renderImage() = 0;
|
||||
|
||||
/// Get the last rendered pixmap.
|
||||
Pixmap getPixmap() const;
|
||||
|
||||
/// Get the width of the pixmap.
|
||||
unsigned int getWidth() const;
|
||||
|
||||
/// Get the height of the pixmap.
|
||||
unsigned int getHeight() const;
|
||||
|
||||
protected:
|
||||
/// Verify that the file is one that we can handle.
|
||||
virtual bool isImageFormatOK(string const & filename) const = 0;
|
||||
|
||||
/// Set the pixmap.
|
||||
void setPixmap(Pixmap pixmap, unsigned int width, unsigned int height);
|
||||
|
||||
string const & getFilename() const;
|
||||
|
||||
private:
|
||||
/// Free the loaded pixmap
|
||||
void freePixmap();
|
||||
|
||||
/// The filename of the image file that we are responsible for.
|
||||
string filename_;
|
||||
/// The last rendered pixmap.
|
||||
Pixmap pixmap_;
|
||||
/// The width of the rendered pixmap.
|
||||
unsigned int width_;
|
||||
/// The height of the rendered pixmap.
|
||||
unsigned int height_;
|
||||
/// is Pixmap ready?
|
||||
bool pixmapLoaded_;
|
||||
};
|
||||
|
||||
#endif
|
89
src/graphics/XPM_Renderer.C
Normal file
89
src/graphics/XPM_Renderer.C
Normal file
@ -0,0 +1,89 @@
|
||||
// -*- C++ -*-
|
||||
/* This file is part of
|
||||
* =================================================
|
||||
*
|
||||
* LyX, The Document Processor
|
||||
* Copyright 1995 Matthias Ettrich.
|
||||
* Copyright 1995-2000 The LyX Team.
|
||||
*
|
||||
* This file Copyright 2000 Baruch Even
|
||||
* ================================================= */
|
||||
|
||||
#ifdef __GNUG__
|
||||
#pragma implementation
|
||||
#endif
|
||||
|
||||
#include <config.h>
|
||||
#include "XPM_Renderer.h"
|
||||
|
||||
#include FORMS_H_LOCATION
|
||||
#include XPM_H_LOCATION
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
|
||||
#include "support/LAssert.h"
|
||||
#include "debug.h"
|
||||
|
||||
XPM_Renderer::XPM_Renderer()
|
||||
: Renderer()
|
||||
{}
|
||||
|
||||
XPM_Renderer::~XPM_Renderer()
|
||||
{}
|
||||
|
||||
bool XPM_Renderer::renderImage()
|
||||
{
|
||||
Pixmap pixmap;
|
||||
Pixmap mask;
|
||||
XpmAttributes attrib;
|
||||
attrib.valuemask = 0;
|
||||
|
||||
Display * display = fl_get_display();
|
||||
|
||||
//(BE 2000-08-05)
|
||||
#warning This might be a dirty thing, but I dont know any other solution.
|
||||
Screen * screen = DefaultScreenOfDisplay(display);
|
||||
|
||||
int status = XpmReadFileToPixmap(
|
||||
display,
|
||||
XRootWindowOfScreen(screen),
|
||||
const_cast<char *>(getFilename().c_str()),
|
||||
&pixmap, &mask, &attrib);
|
||||
|
||||
if (status != XpmSuccess) {
|
||||
lyxerr << "Error reading XPM file '"
|
||||
<< XpmGetErrorString(status)
|
||||
<< endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
// This should have been set by the XpmReadFileToPixmap call!
|
||||
Assert(attrib.valuemask & XpmSize);
|
||||
|
||||
setPixmap(pixmap, attrib.width, attrib.height);
|
||||
|
||||
XpmFreeAttributes(&attrib);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool XPM_Renderer::isImageFormatOK(string const & filename) const
|
||||
{
|
||||
std::ifstream is(filename.c_str(), ios::in | ios::nocreate);
|
||||
|
||||
// The signature of the file without the spaces.
|
||||
static const char str[] = "/*XPM*/";
|
||||
const char * ptr = str;
|
||||
|
||||
do {
|
||||
char c;
|
||||
is >> c;
|
||||
|
||||
if (c != *ptr)
|
||||
return false;
|
||||
|
||||
++ptr;
|
||||
} while (*ptr != '\0');
|
||||
|
||||
return true;
|
||||
}
|
36
src/graphics/XPM_Renderer.h
Normal file
36
src/graphics/XPM_Renderer.h
Normal file
@ -0,0 +1,36 @@
|
||||
// -*- C++ -*-
|
||||
/* This file is part of
|
||||
* =================================================
|
||||
*
|
||||
* LyX, The Document Processor
|
||||
* Copyright 1995 Matthias Ettrich.
|
||||
* Copyright 1995-2000 The LyX Team.
|
||||
*
|
||||
* This file Copyright 2000 Baruch Even
|
||||
* ================================================= */
|
||||
|
||||
#ifndef XPM_RENDERER_H
|
||||
#define XPM_RENDERER_H
|
||||
|
||||
#ifdef __GNUG__
|
||||
#pragma interface
|
||||
#endif
|
||||
|
||||
#include "graphics/Renderer.h"
|
||||
|
||||
class XPM_Renderer : public Renderer {
|
||||
public:
|
||||
/// c-tor.
|
||||
XPM_Renderer();
|
||||
/// d-tor.
|
||||
virtual ~XPM_Renderer();
|
||||
|
||||
/// Load the XPM image and create a pixmap out of it.
|
||||
virtual bool renderImage();
|
||||
|
||||
private:
|
||||
/// Verify that filename is really an XPM file.
|
||||
virtual bool isImageFormatOK(string const & filename) const;
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user