class axl::gui::Engine

#include <axl_gui_Engine.h>

class Engine
{
public:
    // construction

    Engine();

    // methods

    Palette
    getStdPalette();

    virtual
    void
    updateStdPalette() = 0;

    virtual
    bool
    createOffscreenCanvas(
        Canvas* canvas,
        uint_t width,
        uint_t height
        ) = 0;

    bool
    createOffscreenCanvas(
        Canvas* canvas,
        const Size& size
        );

    virtual
    bool
    releaseOffscreenCanvas(Canvas* canvas) = 0;

    virtual
    Canvas*
    getSharedOffscreenCanvas(
        uint_t width,
        uint_t height
        ) = 0;

    Canvas*
    getSharedOffscreenCanvas(const Size& size);

    virtual
    void
    releaseAllSharedOffscreenCanvases() = 0;

    virtual
    bool
    drawRect(
        Canvas* canvas,
        int left,
        int top,
        int right,
        int bottom,
        uint_t color
        ) = 0;

    virtual
    bool
    drawAlphaRect(
        Canvas* canvas,
        int left,
        int top,
        int right,
        int bottom,
        uint_t color,
        uint_t alpha
        );

    virtual
    bool
    drawGradientRect(
        Canvas* canvas,
        int left,
        int top,
        int right,
        int bottom,
        int x1,
        int y1,
        uint_t color1,
        int x2,
        int y2,
        uint_t color2
        );

    virtual
    bool
    drawAlphaGradientRect(
        Canvas* canvas,
        int left,
        int top,
        int right,
        int bottom,
        int x1,
        int y1,
        uint_t color1,
        uint_t alpha1,
        int x2,
        int y2,
        uint_t color2,
        uint_t alpha2
        );

    virtual
    bool
    drawText_utf8(
        Canvas* canvas,
        int x,
        int y,
        int left,
        int top,
        int right,
        int bottom,
        uint_t textColor,
        uint_t backColor,
        uint_t fontFlags,
        const sl::StringRef_utf8& text
        ) = 0;

    virtual
    bool
    drawText_utf16(
        Canvas* canvas,
        int x,
        int y,
        int left,
        int top,
        int right,
        int bottom,
        uint_t textColor,
        uint_t backColor,
        uint_t fontFlags,
        const sl::StringRef_utf16& text
        ) = 0;

    virtual
    bool
    drawText_utf32(
        Canvas* canvas,
        int x,
        int y,
        int left,
        int top,
        int right,
        int bottom,
        uint_t textColor,
        uint_t backColor,
        uint_t fontFlags,
        const sl::StringRef_utf32& text
        ) = 0;

    virtual
    bool
    drawImage(
        Canvas* canvas,
        int x,
        int y,
        Image* image,
        int left,
        int top,
        int right,
        int bottom
        ) = 0;

    virtual
    bool
    copyRect(
        Canvas* canvas,
        int x,
        int y,
        Canvas* srcCanvas,
        int left,
        int top,
        int right,
        int bottom
        ) = 0;

    virtual
    void
    clearFontTuple(FontTuple* fontTuple) = 0;

    virtual
    FontTuple*
    getStdFontTuple(StdFontKind fontKind) = 0;

    Font*
    getStdFont(
        StdFontKind fontKind,
        uint_t flags = 0
        );

    virtual
    Font*
    createFont(
        FontTuple* fontTuple,
        const sl::StringRef& family,
        size_t pointSize,
        uint_t flags = 0
        ) = 0;

    Font*
    createFont(
        FontTuple* fontTuple,
        const FontDesc& fontDesc
        );

    virtual
    Font*
    getFontMod(
        FontTuple* fontTuple,
        uint_t flags
        ) = 0;

    virtual
    bool
    getFontDesc(
        Font* font,
        FontDesc* fontDesc
        ) = 0;

    virtual
    bool
    isMonospaceFont(Font* font) = 0;

    virtual
    Size
    calcCharSize(
        Font* font,
        Canvas* canvas,
        utf32_t c
        ) = 0;

    virtual
    Size
    calcCharSize(
        Font* font,
        Widget* widget,
        utf32_t c
        ) = 0;

    virtual
    Size
    calcTextSize_utf8(
        Font* font,
        Canvas* canvas,
        const sl::StringRef_utf8& text
        ) = 0;

    virtual
    Size
    calcTextSize_utf8(
        Font* font,
        Widget* widget,
        const sl::StringRef_utf8& text
        ) = 0;

    virtual
    Size
    calcTextSize_utf16(
        Font* font,
        Canvas* canvas,
        const sl::StringRef_utf16& text
        ) = 0;

    virtual
    Size
    calcTextSize_utf16(
        Font* font,
        Widget* widget,
        const sl::StringRef_utf16& text
        ) = 0;

    virtual
    Size
    calcTextSize_utf32(
        Font* font,
        Canvas* canvas,
        const sl::StringRef_utf32& text
        ) = 0;

    virtual
    Size
    calcTextSize_utf32(
        Font* font,
        Widget* widget,
        const sl::StringRef_utf32& text
        ) = 0;

    virtual
    bool
    createImage(
        Image* image,
        uint_t width,
        uint_t height,
        PixelFormat pixelFormat
        ) = 0;

    bool
    createImage(
        Image* image,
        const ImageDesc& imageDesc
        );

    virtual
    bool
    getImageDesc(
        Image* image,
        ImageDesc* imageDesc
        ) = 0;

    virtual
    Cursor*
    getStdCursor(StdCursorKind cursorKind) = 0;

    virtual
    uintptr_t
    registerClipboardFormat(const sl::StringRef& formatName) = 0;

    virtual
    bool
    readClipboard(sl::String* string) = 0;

    virtual
    bool
    readClipboard(
        uintptr_t format,
        sl::Array<char>* data
        ) = 0;

    sl::String
    readClipboard();

    sl::Array<char>
    readClipboard(uintptr_t format);

    virtual
    bool
    writeClipboard(const sl::StringRef& string) = 0;

    virtual
    bool
    writeClipboard(
        uintptr_t format,
        const void* data,
        size_t size
        ) = 0;

    bool
    writeClipboard(
        uintptr_t format,
        const sl::ArrayRef<char>& data
        );

    virtual
    bool
    commitClipboard() = 0;

    virtual
    bool
    isWidgetFocused(WidgetDriver* widgetDriver) = 0;

    virtual
    bool
    setWidgetFocus(WidgetDriver* widgetDriver) = 0;

    virtual
    bool
    redrawWidget(
        WidgetDriver* widgetDriver,
        int left,
        int top,
        int right,
        int bottom
        ) = 0;

    virtual
    bool
    redrawWidgetImmediate(
        WidgetDriver* widgetDriver,
        int left,
        int top,
        int right,
        int bottom
        ) = 0;

    virtual
    bool
    scrollWidget(
        WidgetDriver* widgetDriver,
        int dx,
        int dy
        ) = 0;

    virtual
    bool
    scrollWidgetRect(
        WidgetDriver* widgetDriver,
        int left,
        int top,
        int right,
        int bottom,
        int dx,
        int dy
        ) = 0;

    virtual
    bool
    setWidgetCursor(
        WidgetDriver* widgetDriver,
        Cursor* cursor
        ) = 0;

    virtual
    bool
    setMouseCapture(WidgetDriver* widgetDriver) = 0;

    virtual
    bool
    releaseMouse(WidgetDriver* widgetDriver) = 0;

    virtual
    bool
    updateWidgetScrollBar(
        WidgetDriver* widgetDriver,
        Orientation orientation
        ) = 0;

    virtual
    void
    sendWidgetNotification(
        WidgetDriver* widgetDriver,
        uint_t code,
        const void* params = NULL
        ) = 0;

    virtual
    bool
    postWidgetThreadMsg(
        WidgetDriver* widgetDriver,
        uint_t code,
        const rc::Ptr<void>& params
        ) = 0;

    virtual
    bool
    startWidgetAnimation(WidgetDriver* widgetDriver) = 0;

    virtual
    void
    stopWidgetAnimation(WidgetDriver* widgetDriver) = 0;

    virtual
    bool
    showCaret(
        WidgetDriver* widgetDriver,
        const Rect& rect
        ) = 0;

    virtual
    void
    hideCaret(WidgetDriver* widgetDriver) = 0;

    virtual
    bool
    scheduleToolTipMsg(
        WidgetDriver* widgetDriver,
        uint_t timeout
        ) = 0;

    virtual
    bool
    cancelToolTipMsg(WidgetDriver* widgetDriver) = 0;

    virtual
    bool
    showToolTip(
        WidgetDriver* widgetDriver,
        int x,
        int y,
        const sl::StringRef& toolTip
        ) = 0;

    virtual
    bool
    hideToolTip(WidgetDriver* widgetDriver) = 0;

    virtual
    void
    processUiEvents(uint32_t timeLimit = -1) = 0;
};