#ifndef BB_LITEHTML_GLUE_H
#define BB_LITEHTML_GLUE_H
#include
#include
class bb_litehtml_document_container : public bbObject,public litehtml::document_container{
protected:
virtual bbObject* _create_font( bbString faceName,bbInt size,bbInt weight,litehtml::font_style style,bbUInt decoration,litehtml::font_metrics *fm )=0;
virtual void _delete_font( bbObject *font )=0;
virtual bbInt _text_width( bbString text,bbObject *font )=0;
virtual void _draw_text( bbObject *hdc,bbString text,bbObject *font,litehtml::web_color *color,litehtml::position *pos )=0;
virtual bbInt _pt_to_px( int pt )=0;
virtual bbInt _get_default_font_size()=0;
virtual bbString _get_default_font_name()=0;
virtual void _draw_list_marker( bbObject *hdc,litehtml::list_marker *marker )=0;
virtual void _load_image( bbString src,bbString baseurl,bbBool redraw_on_ready )=0;
virtual void _get_image_size( bbString src,bbString baseurl,litehtml::size *sz )=0;
virtual void _draw_background( bbObject *hdc,bbString img_src,bbString img_baseurl,litehtml::background_paint *bg )=0;
virtual void _draw_borders( bbObject *hdc,litehtml::borders *borders,litehtml::position *draw_pos,bbBool root )=0;
virtual void _set_caption( bbString caption )=0;
virtual void _set_base_url( bbString base_url )=0;
virtual void _on_anchor_click( bbString url )=0;
virtual void _set_cursor( bbString cursor )=0;
virtual bbString _import_css( bbString url,bbString baseurl )=0;
virtual void _set_clip( litehtml::position *pos,litehtml::border_radiuses *bdr_radius )=0;
virtual void _del_clip()=0;
virtual void _get_client_rect( litehtml::position *client )=0;
virtual void _get_media_features( litehtml::media_features *media )=0;
virtual bbString _get_language()=0;
virtual bbString _get_culture()=0;
//**** *document_container ******
litehtml::uint_ptr create_font( const litehtml::tchar_t *faceName,int size,int weight,litehtml::font_style italic,unsigned int decoration,litehtml::font_metrics *fm );
void delete_font( litehtml::uint_ptr hFont );
int text_width( const litehtml::tchar_t *text,litehtml::uint_ptr hFont );
void draw_text( litehtml::uint_ptr hdc,const litehtml::tchar_t *text,litehtml::uint_ptr hFont,litehtml::web_color color,const litehtml::position &pos );
int pt_to_px( int pt );
int get_default_font_size()const;
const litehtml::tchar_t *get_default_font_name()const;
void draw_list_marker( litehtml::uint_ptr hdc,const litehtml::list_marker &marker );
void load_image( const litehtml::tchar_t *src,const litehtml::tchar_t *baseurl,bool redraw_on_ready );
void get_image_size( const litehtml::tchar_t *src,const litehtml::tchar_t *baseurl,litehtml::size &sz );
void draw_background( litehtml::uint_ptr hdc,const litehtml::background_paint &bg );
void draw_borders( litehtml::uint_ptr hdc,const litehtml::borders &borders,const litehtml::position &draw_pos,bool root );
void set_caption( const litehtml::tchar_t *caption );
void set_base_url( const litehtml::tchar_t *base_url );
void link( const std::shared_ptr &doc,const litehtml::element::ptr &el );
void on_anchor_click( const litehtml::tchar_t *url,const litehtml::element::ptr &el );
void set_cursor( const litehtml::tchar_t *cursor );
void transform_text( litehtml::tstring &text,litehtml::text_transform tt );
void import_css( litehtml::tstring &text,const litehtml::tstring &url,litehtml::tstring &baseurl );
void set_clip( const litehtml::position &pos,const litehtml::border_radiuses &bdr_radius,bool valid_x,bool valid_y );
void del_clip();
void get_client_rect( litehtml::position &client )const;
std::shared_ptr create_element( const litehtml::tchar_t *tag_name,
const litehtml::string_map &attributes,
const std::shared_ptr &doc );
void get_media_features( litehtml::media_features &media )const;
void get_language( litehtml::tstring &language,litehtml::tstring &culture )const;
};
class bb_litehtml_context : public bbObject,public litehtml::context{
public:
bb_litehtml_context();
void load_master_stylesheet( bbString master_css );
};
class bb_litehtml_document : public bbObject{
public:
bb_litehtml_document( bbString source,bb_litehtml_document_container *container,bb_litehtml_context *context );
~bb_litehtml_document();
void render( int max_width );
void draw( bbObject *hdc,int x,int y,litehtml::position *clip );
int width();
int height();
void media_changed();
void on_mouse_over( int x,int y,int client_x,int client_y );
void on_lbutton_down( int x,int y,int client_x,int client_y );
void on_lbutton_up( int x,int y,int client_x,int client_y );
void on_mouse_leave();
private:
litehtml::document::ptr _document{};
bb_litehtml_document_container *_container{};
bb_litehtml_context *_context{};
bbObject *_drawing{};
void gcMark();
};
#endif