lyx_mirror/src/Painter.h

143 lines
3.6 KiB
C
Raw Normal View History

// -*- C++ -*-
/* This file is part of
* ======================================================
*
* LyX, The Document Processor
*
* Copyright 1999-2000 The LyX Team
*
* ======================================================*/
#ifdef USE_PAINTER
#ifndef PAINTER_H
#define PAINTER_H
#ifdef __GNUG__
#pragma interface
#endif
#include "config.h"
#include "LString.h"
// This is only included to provide stuff for the non-public sections
#include <X11/Xlib.h>
#include <map>
#include "PainterBase.h"
#include "LColor.h"
using std::less;
class LyXFont;
class WorkArea;
/** An inplementation for the X Window System. Xlib.
Classes similar to this one can be made for gtk+, Qt, etc.
*/
class Painter : public PainterBase {
public:
/// Constructor
Painter(WorkArea &);
/// Destructor
~Painter();
/**@Basic drawing routines */
/// Draw a line from point to point
PainterBase & line(int x1, int y1, int x2, int y2,
LColor::color = LColor::foreground,
enum line_style = line_solid,
enum line_width = line_thin);
/// Here xp and yp are arrays of points
PainterBase & lines(int const * xp, int const * yp, int np,
LColor::color = LColor::foreground,
enum line_style = line_solid,
enum line_width = line_thin);
/// Here xp and yp are arrays of points
PainterBase & fillPolygon(int const * xp, int const * yp, int np,
LColor::color = LColor::foreground);
/// Draw lines from x1,y1 to x2,y2. They are arrays
PainterBase & segments(int const * x1, int const * y1,
int const * x2, int const * y2, int ns,
LColor::color = LColor::foreground,
enum line_style = line_solid,
enum line_width = line_thin);
/// Draw a rectangle
PainterBase & rectangle(int x, int y, int w, int h,
LColor::color = LColor::foreground,
enum line_style = line_solid,
enum line_width = line_thin);
/// Draw an arc
PainterBase & arc(int x, int y, unsigned int w, unsigned int h,
int a1, int a2,
LColor::color = LColor::foreground);
/// Draw a pixel
PainterBase & point(int x, int y, LColor::color = LColor::foreground);
/// Fill a rectangle
PainterBase & fillRectangle(int x, int y, int w, int h,
LColor::color = LColor::background);
/**@Image stuff */
/// For the figure inset
PainterBase & pixmap(int x, int y, int w, int h, Pixmap bitmap);
/**@String functions */
/// Draw a string at position x, y (y is the baseline)
PainterBase & text(int x, int y, string const & str, LyXFont const & f);
/** Draw a string at position x, y (y is the baseline)
This is just for fast drawing */
PainterBase & text(int x, int y, char const * str, int l,
LyXFont const & f);
/// Draw a char at position x, y (y is the baseline)
PainterBase & text(int x, int y, char c, LyXFont const & f);
protected:
/**@Support for X only, by now */
friend class WorkArea;
///
PainterBase & setDisplay(Display * d) { display = d; return *this; }
///
PainterBase & setDrawable(Drawable d) { drawable = d; return *this; }
/// Get foreground color in ordinary GC
GC getGCForeground(LColor::color c);
/// Set up GC according to line style
GC getGCLinepars(enum line_style, enum line_width, LColor::color c);
/// Check the font, and if set, draw an underline
void underline(LyXFont const & f, int x, int y, int width);
/**@Low level X parameters */
///
Display * display;
///
Drawable drawable;
///
Colormap colormap;
/// Caching of ordinary color GCs
GC colorGCcache[LColor::ignore + 1];
/// Caching of GCs used for lines
typedef map<int, GC, less<int> > LineGCCache;
///
LineGCCache lineGCcache;
};
#endif
#endif