canvas_x11.h 2.54 KB
/**
 * \file canvas_x11.h
 *
 * \brief Ein X11-Canvas
 *
 * Die X11-Implementaton eines Canvas, hier ist ein XImage der Speicherbereich
 * in den geschrieben wird.
 *
 * \author Georg Steffers <georg@steffers.org> [gs]
 *
 * \date 04.12.2003
 *
 * \version ..2002 [gs]: erste funktionierende Implementation
 * \version 04.12.2003 [gs]: beginn der Dokumentation via doxygen
 * \version 19.12.2003 [gs]: draw_text hinzugefügt, es schreibt &uuml;ber
 *                           XDrawImageString einen Text in meine
 *                           Window. (Brauche ich f&uuml;r DEBUG-Ausgaben)
 */

/* 
 * Copyright (C)2003 Georg Steffers
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

#ifndef __canvas_x11_h__
#define __canvas_x11_h__

#include "xclass.h"
#include "../canvas.h"
#include "../event_source.h"

class disp_x11;
class canvas_x11 : public canvas {
    friend class disp_x11;

    protected:
        xdisplay* disp;
        xscreen* scr;
        xwindow* win;

        XImage* ximg;

        virtual void create_buffer(void);

    public:
        virtual void draw_text(int x, int y, char* text, int length) {
           XDrawImageString(disp->getdisplay(), 
                            win->getwindow(), 
                            scr->getgc(),
                            x, y, text, length);
        }

        canvas_x11(unsigned, unsigned);
        virtual ~canvas_x11();

        virtual rasterizer* create_rasterizer(void) {
            return new sw_rasterizer(x_size, y_size, sinfo);
        }
        Display* get_display(void) { return disp->getdisplay(); }
        Window get_window(void) { return win->getwindow(); }
        virtual void open_screen(void) {}
        virtual void blit_screen(void);
};

class canvas_x11_factory : public canvas_factory {
    public:
        canvas* create(unsigned xs, unsigned ys) const {
            return new canvas_x11(xs, ys);
        }
};

#endif // __canvas_x11_h__