/*
 * Copyright (c) 1993 2001 S.A.
 *
 * Permission to use, copy, modify, distribute, and sell this software and 
 * its documentation for any purpose is hereby granted without fee, provided
 * that (i) the above copyright notices and this permission notice appear in
 * all copies of the software and related documentation, and (ii) the name of
 * 2001 S.A. may not be used in any advertising or publicity relating to the
 * software without the specific, prior written permission of 2001 S.A.
 * 
 * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 *
 * IN NO EVENT SHALL 2001 S.A. BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
 * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
 * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF
 * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT
 * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

#ifndef Xtf_impl_h
#define Xtf_impl_h

#include <X11/Fresco/Impls/XtfFresco.h>
#include <X11/Fresco/Impls/fresco-impl.h>
#include <X11/Fresco/Impls/Xdisplay.h>
#include <X11/Fresco/Impls/Xwindow.h>

struct _XtfViewerRec;

class XtfDisplayImpl : public DisplayImpl {
public:
    XtfDisplayImpl(XtfFresco*, XDisplay*);
    virtual ~XtfDisplayImpl();

    virtual void init_window(_XtfViewerRec*);
};

class XtfWindowImpl : public WindowImpl {
public:
    XtfWindowImpl(XtfDisplayImpl*, ScreenImpl*, ViewerRef, _XtfViewerRec*);
    virtual ~XtfWindowImpl();

    virtual void map();
    virtual void set_attributes();

    virtual void compute_geometry();
    virtual void bind();
    virtual void do_map();

    virtual void xt_initialize(Widget req, ArgList, Cardinal*);
    virtual void xt_realize(XtValueMask* mask, XSetWindowAttributes* attr);
    virtual void xt_expose(XEvent*, XRegion);
    virtual XtGeometryResult xt_query_geometry(
	XtWidgetGeometry*, XtWidgetGeometry*
    );
    virtual XtfBoolean xt_set_values(Widget, Widget, ArgList, Cardinal*);
    virtual void xt_destroy();
protected:
    struct _XtfViewerRec* widget_;
    XtfDisplayImpl* xt_display_;

    static void xt_structure_event(Widget, XtPointer, XEvent*, XtfBoolean*);
};
    
#endif
