⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mgwidget.c

📁 嵌入式下基于MiniGUI的Web Browser
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "html.h"#include "nav.h"#include "debug.h"#include "edillo.h"#include "dw_widget.h"#include "dw_viewport.h"#include "mgwidget.h"#include "dw_container.h"#include "dw_button.h"#include "dw_marshal.h"#define     ADD_LENGTH        10#define     APPEND_LENGTH     20#define     MIN_WIDTH         40extern BrowserWindow* a_BrowserWindow_new (HWND hwnd_parent);extern void Html_submit_form(DilloHtmlLB* html_lb, DilloHtmlForm* form,                             DwWidget* widget);extern void Html_reset_form(HWND hwnd, int id, int nc, DWORD add_data);static void Dw_MgWidget_init          (DwMgWidget *MgWidget);static void Dw_MgWidget_class_init    (DwMgWidgetClass *klass);static void Dw_MgWidget_size_request      (DwWidget *widget,                                         DwRequisition *requisition);static void Dw_MgWidget_size_allocate     (DwWidget *widget,                                         DwAllocation *allocation);static void Dw_MgWidget_finalize         (GObject *object);static void Dw_MgWidget_draw              (DwWidget *widget,                                         HDC hdc,                                         DwRectangle *area);static gboolean Dw_MgWidget_press      (DwWidget *widget,                                             gint32 x,                                             gint32 y,                                             DWORD flags);static gboolean Dw_MgWidget_release    (DwWidget *widget,                                             gint32 x,                                             gint32 y,                                             DWORD flags);static gboolean Dw_MgWidget_press (DwWidget *widget,                                        gint32 x,                                        gint32 y,                                        DWORD flags);static gboolean Dw_MgWidget_release (DwWidget *widget,                                          gint32 x,                                          gint32 y,                                          DWORD flags);enum{   CLICKED,   CLICKED_AT,   LAST_SIGNAL};static DwContainerClass *parent_class;static guint mgwidget_signals[LAST_SIGNAL] = { 0 };void mg_notif_submit_form (HWND hwnd, int id, int nc, DWORD add_data){    int form_id, control_id;    DilloHtmlLB* html_lb;    DilloHtmlForm* form;    DilloHtmlInput *input;    if(nc != BN_CLICKED)        return;       form_id = HIWORD(id) - 1;    control_id = LOWORD(id);    html_lb = (DilloHtmlLB*)GetWindowAdditionalData (hwnd);    form = &html_lb->forms[form_id];    input = &(form->inputs[control_id]);    Html_submit_form (html_lb, form, input->widget);}/* * Return the type of DwButton */GType a_Dw_MgWidget_get_type (void){   static GType type = 0;   if (!type) {      static const GTypeInfo info = {         sizeof (DwMgWidgetClass),         (GBaseInitFunc) NULL,         (GBaseFinalizeFunc) NULL,         (GClassInitFunc) Dw_MgWidget_class_init,         (GClassFinalizeFunc) NULL,         (gconstpointer) NULL,         sizeof (DwMgWidget),         0,         (GInstanceInitFunc) Dw_MgWidget_init      };      type = g_type_register_static (DW_TYPE_WIDGET, "DwMgWidget", &info, 0);   }   return type;}/* * Standard GObject function. */static void Dw_MgWidget_init (DwMgWidget *mgwidget){   mgwidget->window = -1;   mgwidget->id = -1;   mgwidget->size.cx = 0;   mgwidget->size.cy = 0;   mgwidget->type = -1;}/* * Standard GObject function. */static void Dw_MgWidget_class_init (DwMgWidgetClass *klass){   GObjectClass *object_class;   DwWidgetClass *widget_class;   object_class = G_OBJECT_CLASS (klass);   widget_class = (DwWidgetClass*) klass;   parent_class =  g_type_class_peek_parent (klass);   mgwidget_signals[CLICKED] =      g_signal_new ("clicked",                      G_OBJECT_CLASS_TYPE (klass),                      G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,                      G_STRUCT_OFFSET (DwMgWidgetClass, clicked),                      NULL, NULL,                      g_cclosure_marshal_VOID__VOID,                      G_TYPE_NONE, 0);   mgwidget_signals[CLICKED_AT] =      g_signal_new ("clicked_at",                      G_OBJECT_CLASS_TYPE (klass),                      G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,                      G_STRUCT_OFFSET (DwMgWidgetClass, clicked_at),                      NULL, NULL,                      p_Dw_marshal_VOID__INT_INT,                      G_TYPE_NONE,                      2, G_TYPE_INT, G_TYPE_INT);   object_class->finalize = Dw_MgWidget_finalize;   widget_class->size_request = Dw_MgWidget_size_request;   widget_class->size_allocate = Dw_MgWidget_size_allocate;   widget_class->draw = Dw_MgWidget_draw;   widget_class->button_press_event = Dw_MgWidget_press;   widget_class->button_release_event = Dw_MgWidget_release;   klass->clicked = NULL;   klass->clicked_at = NULL;}/* * Standard Dw function. */static void Dw_MgWidget_size_request (DwWidget *widget,                                    DwRequisition *requisition){   DwMgWidget *mgwidget = DW_MGWIDGET (widget);   if (requisition)   {	   requisition->width = mgwidget->size.cx;	   requisition->ascent = mgwidget->size.cy;	   requisition->descent = 0;   }}/* * Standard Dw function. */static void Dw_MgWidget_size_allocate (DwWidget *widget,                                     DwAllocation *allocation){    DwMgWidget *mgwidget = DW_MGWIDGET (widget);    DwViewport *viewport = widget->viewport;    if (allocation->width == 0 ||            allocation->ascent + allocation->descent == 0)        ShowWindow (mgwidget->window, SW_HIDE);    else {        ShowWindow (mgwidget->window, SW_SHOWNORMAL);        if (allocation->x != widget->allocation.x ||                allocation->y != widget->allocation.y ||                allocation->width != widget->allocation.width ||                allocation->ascent + allocation->descent !=                     DW_WIDGET_HEIGHT(widget)) {	   	    mgwidget->size.cx = allocation->width;            mgwidget->size.cy = allocation->ascent + allocation->descent;            MoveWindow (mgwidget->window,                 allocation->x - viewport->world_x,                allocation->y - viewport->world_y,	   	        mgwidget->size.cx, mgwidget->size.cy, TRUE);        }    }}/* * Standard Dw function. */static void Dw_MgWidget_draw (DwWidget *widget,                            HDC hdc,                            DwRectangle *area){}/* * Standard Dw function. */static gboolean Dw_MgWidget_press (DwWidget *widget,                                        gint32 x,                                        gint32 y,                                        DWORD flags){   return FALSE;}/* * Standard Dw function. */static gboolean Dw_MgWidget_release (DwWidget *widget,                                          gint32 x,                                          gint32 y,                                          DWORD flags){   return FALSE;}static void Dw_MgWidget_finalize (GObject* object){   DwMgWidget *mgwidget = DW_MGWIDGET (object);   if (mgwidget->window != -1)       DestroyWindow (mgwidget->window);   G_OBJECT_CLASS(parent_class)->finalize (object);}static void Dw_MgWidget_get_text_metrics (const char* title, int nr_chars,	   									  int* width, int* height){    PLOGFONT logfont;    SIZE size;    logfont = GetSystemFont(SYSLOGFONT_CONTROL);    SelectFont (HDC_SCREEN, logfont);    GetTextExtent (HDC_SCREEN, title, nr_chars, &size);    if (width)        *width = size.cx;    if (height)        *height = size.cy;}static void Dw_MgWidget_set_color (HWND hwnd, DilloHtml* html){    int r, g, b;    r = GetRValue(html->stack[html->stack_top].current_bg_color);    g = GetGValue(html->stack[html->stack_top].current_bg_color);    b = GetBValue(html->stack[html->stack_top].current_bg_color);    SetWindowBkColor(hwnd, RGB2Pixel(HDC_SCREEN, r, g, b));}static DwWidget* button_real_new (DilloHtml* html, int id,                             const char* title, DWORD add_data,							 DWORD dwstyle){    DwMgWidget *mgwidget;    mgwidget = DW_MGWIDGET (g_object_new (DW_TYPE_MGWIDGET, NULL));    Dw_MgWidget_get_text_metrics (title, strlen(title),		   				&mgwidget->size.cx, &mgwidget->size.cy);    mgwidget->size.cx += APPEND_LENGTH;    mgwidget->window = CreateWindowEx (CTRL_BUTTON, title, 								 dwstyle,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -