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

📄 dw_bullet.c

📁 浏览器的源代码,可移植到嵌入式设备.
💻 C
字号:
/* * File: dw_bullet.c * * Copyright (C) 1997       Raph Levien <raph@acm.org> * Copyright (C) 1999       Luca Rota <drake@freemail.it> * Copyright (C) 2001-2003  Sebastian Geerken <s.geerken@ping.de> * * 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. *//* * Bullets are drawn 1/5 of an x-height above the baseline, and are * 4/5 of an x-height wide and high. */#include "dw_bullet.h"#include "dw_gtk_viewport.h"static void        Dw_bullet_init               (DwBullet *bullet);static void        Dw_bullet_class_init         (DwBulletClass *klass);static void        Dw_bullet_size_request       (DwWidget *widget,                                                 DwRequisition *requisition);static void        Dw_bullet_draw               (DwWidget *widget,                                                 DwRectangle *area,                                                 GdkEventExpose *event);static DwIterator* Dw_bullet_iterator           (DwWidget *widget,                                                gint32 mask,                                                gboolean at_end);static void        Dw_bullet_iterator_highlight (DwIterator *it,                                                 gint start,                                                 gint end,                                                 DwHighlightLayer layer);GtkType a_Dw_bullet_get_type (void){   static GtkType type = 0;   if (!type) {      GtkTypeInfo info = {         "DwBullet",         sizeof (DwBullet),         sizeof (DwBulletClass),         (GtkClassInitFunc) Dw_bullet_class_init,         (GtkObjectInitFunc) Dw_bullet_init,         (GtkArgSetFunc) NULL,         (GtkArgGetFunc) NULL,         (GtkClassInitFunc) NULL      };      type = gtk_type_unique (DW_TYPE_WIDGET, &info);   }   return type;}DwWidget* a_Dw_bullet_new (void){   return DW_WIDGET (gtk_object_new (DW_TYPE_BULLET, NULL));}static void Dw_bullet_init (DwBullet *bullet){   int i;   for (i = 0; i < DW_HIGHLIGHT_NUM_LAYERS; i++)      bullet->selected[i] = FALSE;}static void Dw_bullet_class_init (DwBulletClass *klass){   DwWidgetClass *widget_class;   widget_class = (DwWidgetClass*)klass;   widget_class->size_request = Dw_bullet_size_request;   widget_class->draw = Dw_bullet_draw;   widget_class->iterator = Dw_bullet_iterator;}static void Dw_bullet_size_request (DwWidget *widget,                                    DwRequisition *requisition){   requisition->width = MAX (widget->style->font->x_height * 4 / 5, 1);   requisition->ascent = MAX (widget->style->font->x_height, 1);   requisition->descent = 0;}static void Dw_bullet_draw (DwWidget *widget,                            DwRectangle *area,                            GdkEventExpose *event){   gint32 x0, y0, x, y;   GdkGC *gc;   DwStyleColor *bg_color;   GdkWindow *window;   gint32 l;   int i;   gboolean selected = FALSE;   for (i = 0; i < DW_HIGHLIGHT_NUM_LAYERS && !selected; i++)      selected = DW_BULLET(widget)->selected[i];   l = MIN (widget->allocation.width, widget->allocation.ascent);   x = x0 = p_Dw_widget_x_world_to_viewport (widget, widget->allocation.x);   y0 = p_Dw_widget_y_world_to_viewport (widget, widget->allocation.y);   y = y0 + widget->allocation.ascent - widget->style->font->x_height;   gc = selected ? widget->style->color->inverse_gc :      widget->style->color->gc;   window = DW_WIDGET_WINDOW (widget);   if (selected) {      bg_color = p_Dw_widget_get_bg_color (widget);      gdk_draw_rectangle (window, bg_color->inverse_gc,                          TRUE, x0, y0,                          widget->allocation.width,                          DW_WIDGET_HEIGHT(widget));   }   switch (widget->style->list_style_type) {   case DW_STYLE_LIST_STYLE_TYPE_DISC:      gdk_draw_arc (window, gc, TRUE, x, y, l, l, 0, 360 * 64);      break;   case DW_STYLE_LIST_STYLE_TYPE_CIRCLE:      gdk_draw_arc (window, gc, FALSE, x, y, l, l, 0, 360 * 64);      break;   case DW_STYLE_LIST_STYLE_TYPE_SQUARE:      gdk_draw_rectangle (window, gc, FALSE, x, y, l, l);      break;   default:      break;   }}static DwIterator *Dw_bullet_iterator (DwWidget *widget,                                        gint32 mask,                                        gboolean at_end){   DwIterator *it;   gchar *text;   switch (widget->style->list_style_type) {   case DW_STYLE_LIST_STYLE_TYPE_DISC:      text = "*";      break;   case DW_STYLE_LIST_STYLE_TYPE_CIRCLE:      text = "o";      break;   case DW_STYLE_LIST_STYLE_TYPE_SQUARE:      text = "-";      break;   default:      text = "?";      break;   }   it = p_Dw_widget_text_iterator (widget, mask, at_end, text);   if (it)     it->highlight = Dw_bullet_iterator_highlight;   return it;}static void Dw_bullet_iterator_highlight (DwIterator *it,                                          gint start,                                          gint end,                                          DwHighlightLayer layer){   if (it->content.type == DW_CONTENT_TEXT) {      DW_BULLET(it->widget)->selected[layer] = (start == 0 && end >= 1);      p_Dw_widget_queue_draw (it->widget);   }}

⌨️ 快捷键说明

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