📄 ptk-text-renderer.c
字号:
case PROP_FOREGROUND_GDK: { GdkColor color; color.red = celltext->foreground.red; color.green = celltext->foreground.green; color.blue = celltext->foreground.blue; g_value_set_boxed ( value, &color ); } break; case PROP_FONT: { /* FIXME GValue imposes a totally gratuitous string copy * here, we could just hand off string ownership */ gchar *str = pango_font_description_to_string ( celltext->font ); g_value_set_string ( value, str ); g_free ( str ); } break; case PROP_FONT_DESC: g_value_set_boxed ( value, celltext->font ); break; case PROP_UNDERLINE: g_value_set_enum ( value, celltext->underline_style ); break; case PROP_ELLIPSIZE: g_value_set_enum ( value, celltext->ellipsize ); break; case PROP_WRAP_MODE: g_value_set_enum ( value, celltext->wrap_mode ); break; case PROP_WRAP_WIDTH: g_value_set_int ( value, celltext->wrap_width ); break; case PROP_BACKGROUND_SET: g_value_set_boolean ( value, celltext->background_set ); break; case PROP_FOREGROUND_SET: g_value_set_boolean ( value, celltext->foreground_set ); break; case PROP_UNDERLINE_SET: g_value_set_boolean ( value, celltext->underline_set ); break; case PROP_ELLIPSIZE_SET: g_value_set_boolean ( value, celltext->ellipsize_set ); break; case PROP_BACKGROUND: case PROP_FOREGROUND: default: G_OBJECT_WARN_INVALID_PROPERTY_ID ( object, param_id, pspec ); break; }}static voidset_bg_color ( PtkTextRenderer *celltext, GdkColor *color ){ if ( color ) { if ( !celltext->background_set ) { celltext->background_set = TRUE; g_object_notify ( G_OBJECT ( celltext ), "background-set" ); } celltext->background.red = color->red; celltext->background.green = color->green; celltext->background.blue = color->blue; } else { if ( celltext->background_set ) { celltext->background_set = FALSE; g_object_notify ( G_OBJECT ( celltext ), "background-set" ); } }}static voidset_fg_color ( PtkTextRenderer *celltext, GdkColor *color ){ if ( color ) { if ( !celltext->foreground_set ) { celltext->foreground_set = TRUE; g_object_notify ( G_OBJECT ( celltext ), "foreground-set" ); } celltext->foreground.red = color->red; celltext->foreground.green = color->green; celltext->foreground.blue = color->blue; } else { if ( celltext->foreground_set ) { celltext->foreground_set = FALSE; g_object_notify ( G_OBJECT ( celltext ), "foreground-set" ); } }}static PangoFontMaskset_font_desc_fields ( PangoFontDescription *desc, PangoFontMask to_set ){ PangoFontMask changed_mask = 0; if ( to_set & PANGO_FONT_MASK_FAMILY ) { const char * family = pango_font_description_get_family ( desc ); if ( !family ) { family = "sans"; changed_mask |= PANGO_FONT_MASK_FAMILY; } pango_font_description_set_family ( desc, family ); } if ( to_set & PANGO_FONT_MASK_STYLE ) pango_font_description_set_style ( desc, pango_font_description_get_style ( desc ) ); if ( to_set & PANGO_FONT_MASK_VARIANT ) pango_font_description_set_variant ( desc, pango_font_description_get_variant ( desc ) ); if ( to_set & PANGO_FONT_MASK_WEIGHT ) pango_font_description_set_weight ( desc, pango_font_description_get_weight ( desc ) ); if ( to_set & PANGO_FONT_MASK_STRETCH ) pango_font_description_set_stretch ( desc, pango_font_description_get_stretch ( desc ) ); if ( to_set & PANGO_FONT_MASK_SIZE ) { gint size = pango_font_description_get_size ( desc ); if ( size <= 0 ) { size = 10 * PANGO_SCALE; changed_mask |= PANGO_FONT_MASK_SIZE; } pango_font_description_set_size ( desc, size ); } return changed_mask;}static voidnotify_set_changed ( GObject *object, PangoFontMask changed_mask ){ if ( changed_mask & PANGO_FONT_MASK_FAMILY ) g_object_notify ( object, "family-set" ); if ( changed_mask & PANGO_FONT_MASK_STYLE ) g_object_notify ( object, "style-set" ); if ( changed_mask & PANGO_FONT_MASK_VARIANT ) g_object_notify ( object, "variant-set" ); if ( changed_mask & PANGO_FONT_MASK_WEIGHT ) g_object_notify ( object, "weight-set" ); if ( changed_mask & PANGO_FONT_MASK_STRETCH ) g_object_notify ( object, "stretch-set" ); if ( changed_mask & PANGO_FONT_MASK_SIZE ) g_object_notify ( object, "size-set" );}static voidnotify_fields_changed ( GObject *object, PangoFontMask changed_mask ){ if ( changed_mask & PANGO_FONT_MASK_FAMILY ) g_object_notify ( object, "family" ); if ( changed_mask & PANGO_FONT_MASK_STYLE ) g_object_notify ( object, "style" ); if ( changed_mask & PANGO_FONT_MASK_VARIANT ) g_object_notify ( object, "variant" ); if ( changed_mask & PANGO_FONT_MASK_WEIGHT ) g_object_notify ( object, "weight" ); if ( changed_mask & PANGO_FONT_MASK_STRETCH ) g_object_notify ( object, "stretch" ); if ( changed_mask & PANGO_FONT_MASK_SIZE ) g_object_notify ( object, "size" );}static voidset_font_description ( PtkTextRenderer *celltext, PangoFontDescription *font_desc ){ GObject * object = G_OBJECT ( celltext ); PangoFontDescription *new_font_desc; PangoFontMask old_mask, new_mask, changed_mask, set_changed_mask; if ( font_desc ) new_font_desc = pango_font_description_copy ( font_desc ); else new_font_desc = pango_font_description_new (); old_mask = pango_font_description_get_set_fields ( celltext->font ); new_mask = pango_font_description_get_set_fields ( new_font_desc ); changed_mask = old_mask | new_mask; set_changed_mask = old_mask ^ new_mask; pango_font_description_free ( celltext->font ); celltext->font = new_font_desc; g_object_freeze_notify ( object ); g_object_notify ( object, "font-desc" ); g_object_notify ( object, "font" ); if ( changed_mask & PANGO_FONT_MASK_FAMILY ) g_object_notify ( object, "family" ); if ( changed_mask & PANGO_FONT_MASK_STYLE ) g_object_notify ( object, "style" ); if ( changed_mask & PANGO_FONT_MASK_VARIANT ) g_object_notify ( object, "variant" ); if ( changed_mask & PANGO_FONT_MASK_WEIGHT ) g_object_notify ( object, "weight" ); if ( changed_mask & PANGO_FONT_MASK_STRETCH ) g_object_notify ( object, "stretch" ); if ( changed_mask & PANGO_FONT_MASK_SIZE ) { g_object_notify ( object, "size" ); g_object_notify ( object, "size-points" ); } notify_set_changed ( object, set_changed_mask ); g_object_thaw_notify ( object );}static voidptk_text_renderer_set_property ( GObject *object, guint param_id, const GValue *value, GParamSpec *pspec ){ PtkTextRenderer * celltext = PTK_TEXT_RENDERER ( object ); switch ( param_id ) { case PROP_TEXT: g_free ( celltext->text ); celltext->text = g_strdup ( g_value_get_string ( value ) ); g_object_notify ( object, "text" ); break; case PROP_BACKGROUND: { GdkColor color; if ( !g_value_get_string ( value ) ) set_bg_color ( celltext, NULL ); /* reset to backgrounmd_set to FALSE */ else if ( gdk_color_parse ( g_value_get_string ( value ), &color ) ) set_bg_color ( celltext, &color ); else g_warning ( "Don't know color `%s'", g_value_get_string ( value ) ); g_object_notify ( object, "background-gdk" ); } break; case PROP_FOREGROUND: { GdkColor color; if ( !g_value_get_string ( value ) ) set_fg_color ( celltext, NULL ); /* reset to foreground_set to FALSE */ else if ( gdk_color_parse ( g_value_get_string ( value ), &color ) ) set_fg_color ( celltext, &color ); else g_warning ( "Don't know color `%s'", g_value_get_string ( value ) ); g_object_notify ( object, "foreground-gdk" ); } break; case PROP_BACKGROUND_GDK: /* This notifies the GObject itself. */ set_bg_color ( celltext, g_value_get_boxed ( value ) ); break; case PROP_FOREGROUND_GDK: /* This notifies the GObject itself. */ set_fg_color ( celltext, g_value_get_boxed ( value ) ); break; case PROP_FONT: { PangoFontDescription *font_desc = NULL; const gchar *name; name = g_value_get_string ( value ); if ( name ) font_desc = pango_font_description_from_string ( name ); set_font_description ( celltext, font_desc ); pango_font_description_free ( font_desc ); } break; case PROP_FONT_DESC: set_font_description ( celltext, g_value_get_boxed ( value ) ); break; case PROP_UNDERLINE: celltext->underline_style = g_value_get_enum ( value ); celltext->underline_set = TRUE; g_object_notify ( object, "underline-set" ); break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -