void gkbd_indicator_config_get_font_for_widget (GkbdIndicatorConfig * ind_config, GtkWidget * widget, gchar ** font_family, int *font_size) { GtkStyleContext *context; const PangoFontDescription *fd = NULL; g_return_if_fail (GTK_IS_WIDGET (widget)); if (ind_config->font_family != NULL && ind_config->font_family[0] != '\0') { if (font_family) *font_family = g_strdup (ind_config->font_family); if (font_size) *font_size = ind_config->font_size; return; } context = gtk_widget_get_style_context (widget); fd = gtk_style_context_get_font (context, GTK_STATE_FLAG_NORMAL); if (font_family) *font_family = g_strdup (pango_font_description_get_family (fd)); if (font_size) *font_size = pango_font_description_get_size (fd) / PANGO_SCALE; }
static void workrave_timebar_init_ui(WorkraveTimebar *self) { WorkraveTimebarPrivate *priv = WORKRAVE_TIMEBAR_GET_PRIVATE(self); priv->style_context = gtk_style_context_new(); GtkWidgetPath *path = gtk_widget_path_new(); gtk_widget_path_append_type(path, GTK_TYPE_BUTTON); gtk_style_context_set_path(priv->style_context, path); gtk_style_context_add_class(priv->style_context, GTK_STYLE_CLASS_TROUGH); GdkScreen *screen = gdk_screen_get_default(); priv->pango_context = gdk_pango_context_get_for_screen(screen); const PangoFontDescription *font_desc = gtk_style_context_get_font(priv->style_context, GTK_STATE_FLAG_ACTIVE); pango_context_set_language(priv->pango_context, gtk_get_default_language()); pango_context_set_font_description(priv->pango_context, font_desc); priv->pango_layout = pango_layout_new(priv->pango_context); pango_layout_set_text(priv->pango_layout, "-9:59:59", -1); pango_layout_get_pixel_size(priv->pango_layout, &priv->width, &priv->height); priv->width = MAX(priv->width + 2 * MARGINX, MIN_HORIZONTAL_BAR_WIDTH); priv->height = MAX(priv->height + 2 * MARGINY, MIN_HORIZONTAL_BAR_HEIGHT); gtk_widget_path_free(path); }
const PangoFontDescription* nsgtk_style_context_get_font(GtkStyleContext *style, GtkStateFlags state) { #if GTK_CHECK_VERSION(3,0,0) return gtk_style_context_get_font(style, state); #else return style->font_desc; #endif }
static gint gtk_widget_get_font_size (GtkWidget *widget) { const PangoFontDescription *font; font = gtk_style_context_get_font (gtk_widget_get_style_context (widget), gtk_widget_get_state_flags (widget)); return pango_font_description_get_size (font) / PANGO_SCALE; }
static int get_text_height (GtkWidget *widget) { GtkStyleContext *style; const PangoFontDescription *font_desc; style = gtk_widget_get_style_context (widget); font_desc = gtk_style_context_get_font (style, 0); return meta_pango_font_desc_get_text_height (font_desc, gtk_widget_get_pango_context (widget)); }
wxFont wxSystemSettingsNative::GetFont( wxSystemFont index ) { wxFont font; switch (index) { case wxSYS_OEM_FIXED_FONT: case wxSYS_ANSI_FIXED_FONT: case wxSYS_SYSTEM_FIXED_FONT: font = *wxNORMAL_FONT; break; case wxSYS_ANSI_VAR_FONT: case wxSYS_SYSTEM_FONT: case wxSYS_DEVICE_DEFAULT_FONT: case wxSYS_DEFAULT_GUI_FONT: if (!gs_fontSystem.IsOk()) { wxNativeFontInfo info; #ifdef __WXGTK3__ GtkStyleContext* sc = gtk_widget_get_style_context(ButtonWidget()); info.description = const_cast<PangoFontDescription*>( gtk_style_context_get_font(sc, GTK_STATE_FLAG_NORMAL)); #else info.description = ButtonStyle()->font_desc; #endif gs_fontSystem = wxFont(info); #if wxUSE_FONTENUM // (try to) heal the default font (on some common systems e.g. Ubuntu // it's "Sans Serif" but the real font is called "Sans"): if (!wxFontEnumerator::IsValidFacename(gs_fontSystem.GetFaceName()) && gs_fontSystem.GetFaceName() == "Sans Serif") gs_fontSystem.SetFaceName("Sans"); #endif // wxUSE_FONTENUM info.description = NULL; } font = gs_fontSystem; break; default: break; } wxASSERT( font.IsOk() ); return font; }
static void rc_ui_scrollable_label_init(RCUiScrollableLabel *label) { RCUiScrollableLabelPrivate *priv; const PangoFontDescription *fd; GtkStyleContext *style_context; priv = G_TYPE_INSTANCE_GET_PRIVATE(label, RC_UI_TYPE_SCROLLABLE_LABEL, RCUiScrollableLabelPrivate); label->priv = priv; priv->percent = 0.0; priv->text = NULL; priv->attrs = NULL; priv->layout = gtk_widget_create_pango_layout(GTK_WIDGET(label), NULL); priv->current_x = 0; style_context = gtk_widget_get_style_context(GTK_WIDGET(label)); fd = gtk_style_context_get_font(style_context, GTK_STATE_FLAG_NORMAL); pango_layout_set_font_description(priv->layout, fd); }
void save_config_file(void) { FILE *fp; gchar *path; gint width, height, tabwidth; gchar *fontname; gboolean wordwrap, linenumbers, autoindent; gtk_window_get_size(GTK_WINDOW(pub->mw->window), &width, &height); fontname = pango_font_description_to_string(gtk_style_context_get_font(gtk_widget_get_style_context(pub->mw->view), 0)); wordwrap = gtk_toggle_action_get_active( GTK_TOGGLE_ACTION(gtk_ui_manager_get_action(pub->mw->menubar, "/M/Options/WordWrap"))); linenumbers = gtk_toggle_action_get_active( GTK_TOGGLE_ACTION(gtk_ui_manager_get_action(pub->mw->menubar, "/M/Options/LineNumbers"))); autoindent = gtk_toggle_action_get_active( GTK_TOGGLE_ACTION(gtk_ui_manager_get_action(pub->mw->menubar, "/M/Options/AutoIndent"))); tabwidth = get_current_tab_width(); path = g_build_filename(g_get_user_config_dir(), PACKAGE, NULL); if (!g_file_test(path, G_FILE_TEST_IS_DIR)) g_mkdir_with_parents(path, 0700); g_free(path); path = g_build_filename(g_get_user_config_dir(), PACKAGE, PACKAGE "rc", NULL); fp = fopen(path, "w"); if (!fp) { g_print("%s: can't save config file - %s\n", PACKAGE, path); return; } g_free(path); fprintf(fp, "%s\n", PACKAGE_VERSION); fprintf(fp, "%d\n", width); fprintf(fp, "%d\n", height); fprintf(fp, "%s\n", fontname); fprintf(fp, "%d\n", wordwrap); fprintf(fp, "%d\n", linenumbers); fprintf(fp, "%d\n", autoindent); fprintf(fp, "%d\n", tabwidth); fclose(fp); g_free(fontname); }
GR_Font * GR_UnixCairoGraphics::getGUIFont(void) { if (!m_pPFontGUI) { // get the font resource #if GTK_CHECK_VERSION(3,0,0) GtkStyleContext *tempCtxt = gtk_style_context_new(); GtkWidgetPath *path = gtk_widget_path_new(); gtk_widget_path_append_type (path, GTK_TYPE_WINDOW); gtk_style_context_set_path(tempCtxt, path); gtk_widget_path_free(path); const char *guiFontName = pango_font_description_get_family(gtk_style_context_get_font(tempCtxt, GTK_STATE_FLAG_NORMAL)); #else GtkStyle *tempStyle = gtk_style_new(); const char *guiFontName = pango_font_description_get_family(tempStyle->font_desc); #endif if (!guiFontName) guiFontName = "'Times New Roman'"; UT_UTF8String s = XAP_EncodingManager::get_instance()->getLanguageISOName(); const char * pCountry = XAP_EncodingManager::get_instance()->getLanguageISOTerritory(); if(pCountry) { s += "-"; s += pCountry; } m_pPFontGUI = new GR_PangoFont(guiFontName, 11.0, this, s.utf8_str(), true); #if GTK_CHECK_VERSION(3,0,0) g_object_unref(G_OBJECT(tempCtxt)); #else g_object_unref(G_OBJECT(tempStyle)); #endif UT_ASSERT(m_pPFontGUI); } return m_pPFontGUI; }
static void cb_begin_print(GtkPrintOperation *op, GtkPrintContext *ctx, gpointer data) { gint layout_height; gchar *text; GtkTextIter start, end; GtkTextBuffer *buffer = gtk_text_view_get_buffer(data); PangoTabArray *tabs; gtk_text_buffer_get_bounds(buffer, &start, &end); text = g_strchomp(gtk_text_buffer_get_text(buffer, &start, &end, FALSE)); page_width = gtk_print_context_get_width(ctx); page_height = gtk_print_context_get_height(ctx); font_desc = gtk_style_context_get_font(gtk_widget_get_style_context(data), GTK_STATE_FLAG_NORMAL); layout = gtk_print_context_create_pango_layout(ctx); pango_layout_set_width(layout, page_width * PANGO_SCALE); pango_layout_set_font_description(layout, font_desc); pango_layout_set_text(layout, text, -1); get_tab_array(&tabs, ctx, data); if (tabs) { pango_layout_set_tabs(layout, tabs); pango_tab_array_free(tabs); } pango_layout_get_size(layout, NULL, &layout_height); line_count = pango_layout_get_line_count(layout); text_height = pango_font_description_get_size(font_desc) / PANGO_SCALE; lines_per_page = page_height / text_height; n_pages = (line_count - 1) / lines_per_page + 1; gtk_print_operation_set_n_pages(op, n_pages); g_free(text); }
static void gcal_month_view_size_allocate (GtkWidget *widget, GtkAllocation *allocation) { GcalMonthViewPrivate *priv; gint i; GList *l; GtkStyleContext *context; GtkStateFlags state; GtkBorder padding; PangoLayout *layout; gint font_height; gdouble added_height; priv = GCAL_MONTH_VIEW (widget)->priv; gtk_widget_set_allocation (widget, allocation); if (gtk_widget_get_realized (widget)) { gdk_window_move_resize (priv->event_window, allocation->x, allocation->y, allocation->width, allocation->height); } context = gtk_widget_get_style_context (widget); state = gtk_widget_get_state_flags (widget); gtk_style_context_get_padding (context, state, &padding); layout = pango_layout_new (gtk_widget_get_pango_context (widget)); pango_layout_set_font_description (layout, gtk_style_context_get_font (context, state)); pango_layout_get_pixel_size (layout, NULL, &font_height); /* init values */ priv->header_font_size = 12; priv->horizontal_step = (allocation->width - (allocation->x + padding.left + padding.right)) / 7; priv->vertical_step = (allocation->height - (allocation->y + padding.top + padding.bottom + priv->header_font_size)) / 5; for (i = 0; i < 35; i++) { if (priv->days[i] == NULL) continue; added_height = 0; for (l = priv->days[i]; l != NULL; l = l->next) { gint pos_x; gint pos_y; gint min_height; gint natural_height; GtkAllocation child_allocation; pos_x = ( i % 7 ) * priv->horizontal_step; pos_y = ( i / 7 ) * priv->vertical_step; gtk_widget_get_preferred_height (GTK_WIDGET (l->data), &min_height, &natural_height); child_allocation.x = pos_x + allocation->x + padding.top; child_allocation.y = pos_y + font_height + allocation->y + priv->header_font_size + padding.left; child_allocation.width = priv->horizontal_step; child_allocation.height = MIN (natural_height, priv->vertical_step); if (added_height + font_height + child_allocation.height > priv->vertical_step) { gtk_widget_hide (GTK_WIDGET (l->data)); } else { gtk_widget_show (GTK_WIDGET (l->data)); child_allocation.y = child_allocation.y + added_height; gtk_widget_size_allocate (GTK_WIDGET (l->data), &child_allocation); added_height += child_allocation.height; } } } }
int main (int argc, char **argv) { GtkStyleContext *style; const PangoFontDescription *font_desc; GtkWidget *window; GtkWidget *collection; GError *err; clock_t start, end; GtkWidget *notebook; int i; bindtextdomain (GETTEXT_PACKAGE, MUFFIN_LOCALEDIR); textdomain(GETTEXT_PACKAGE); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); run_position_expression_tests (); #if 0 run_position_expression_timings (); #endif gtk_init (&argc, &argv); if (g_getenv ("MUFFIN_DEBUG") != NULL) { meta_set_debugging (TRUE); meta_set_verbose (TRUE); } start = clock (); err = NULL; if (argc == 1) global_theme = meta_theme_load ("Atlanta", &err); else if (argc == 2) global_theme = meta_theme_load (argv[1], &err); else { g_printerr (_("Usage: metacity-theme-viewer [THEMENAME]\n")); exit (1); } end = clock (); if (global_theme == NULL) { g_printerr (_("Error loading theme: %s\n"), err->message); g_error_free (err); exit (1); } g_print (_("Loaded theme \"%s\" in %g seconds\n"), global_theme->name, (end - start) / (double) CLOCKS_PER_SEC); run_theme_benchmark (); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size (GTK_WINDOW (window), 350, 350); if (strcmp (global_theme->name, global_theme->readable_name)==0) gtk_window_set_title (GTK_WINDOW (window), global_theme->readable_name); else { /* The theme directory name is different from the name the theme * gives itself within its file. Display both, directory name first. */ gchar *title = g_strconcat (global_theme->name, " - ", global_theme->readable_name, NULL); gtk_window_set_title (GTK_WINDOW (window), title); g_free (title); } g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL); gtk_widget_realize (window); style = gtk_widget_get_style_context (window); font_desc = gtk_style_context_get_font (style, 0); g_assert (style); g_assert (font_desc); notebook = gtk_notebook_new (); gtk_container_add (GTK_CONTAINER (window), notebook); collection = preview_collection (FONT_SIZE_NORMAL, font_desc); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), collection, gtk_label_new (_("Normal Title Font"))); collection = preview_collection (FONT_SIZE_SMALL, font_desc); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), collection, gtk_label_new (_("Small Title Font"))); collection = preview_collection (FONT_SIZE_LARGE, font_desc); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), collection, gtk_label_new (_("Large Title Font"))); collection = previews_of_button_layouts (); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), collection, gtk_label_new (_("Button Layouts"))); collection = benchmark_summary (); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), collection, gtk_label_new (_("Benchmark"))); i = 0; while (i < (int) G_N_ELEMENTS (previews)) { /* preview widget likes to be realized before its size request. * it's lame that way. */ gtk_widget_realize (previews[i]); ++i; } gtk_widget_show_all (window); gtk_main (); return 0; }
static void create_calendar(void) { static CalendarData calendar_data; GtkWidget *window, *hpaned, *vbox, *rpane, *hbox; GtkWidget *calendar, *toggle, *scroller, *button; GtkWidget *frame, *label, *bbox, *align, *details; GtkSizeGroup *size; GtkStyleContext *context; const PangoFontDescription *font_desc; gchar *font; gint i; struct { gboolean init; char *label; } flags[] = { { TRUE, "Show _Heading" }, { TRUE, "Show Day _Names" }, { FALSE, "No Month _Change" }, { TRUE, "Show _Week Numbers" }, { FALSE, "Week Start _Monday" }, { TRUE, "Show De_tails" }, }; calendar_data.window = NULL; calendar_data.font_dialog = NULL; calendar_data.details_table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); for (i = 0; i < G_N_ELEMENTS (calendar_data.settings); i++) calendar_data.settings[i] = 0; window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), "GtkCalendar Example"); gtk_container_set_border_width (GTK_CONTAINER (window), 12); g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); g_signal_connect (window, "delete-event", G_CALLBACK (gtk_false), NULL); hpaned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL); /* Calendar widget */ calendar = gtk_calendar_new (); calendar_data.calendar_widget = calendar; frame = create_frame ("<b>Calendar</b>", calendar, 0, 0); gtk_paned_pack1 (GTK_PANED (hpaned), frame, TRUE, FALSE); calendar_data.window = calendar; calendar_set_flags(&calendar_data); gtk_calendar_mark_day (GTK_CALENDAR (calendar), 19); g_signal_connect (calendar, "month_changed", G_CALLBACK (calendar_month_changed), &calendar_data); g_signal_connect (calendar, "day_selected", G_CALLBACK (calendar_day_selected), &calendar_data); g_signal_connect (calendar, "day_selected_double_click", G_CALLBACK (calendar_day_selected_double_click), &calendar_data); g_signal_connect (calendar, "prev_month", G_CALLBACK (calendar_prev_month), &calendar_data); g_signal_connect (calendar, "next_month", G_CALLBACK (calendar_next_month), &calendar_data); g_signal_connect (calendar, "prev_year", G_CALLBACK (calendar_prev_year), &calendar_data); g_signal_connect (calendar, "next_year", G_CALLBACK (calendar_next_year), &calendar_data); rpane = gtk_box_new (GTK_ORIENTATION_VERTICAL, DEF_PAD_SMALL); gtk_paned_pack2 (GTK_PANED (hpaned), rpane, FALSE, FALSE); /* Build the right font-button */ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, DEF_PAD_SMALL); frame = create_frame ("<b>Options</b>", vbox, 1, 0); gtk_box_pack_start (GTK_BOX (rpane), frame, FALSE, TRUE, 0); size = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); context = gtk_widget_get_style_context (calendar); font_desc = gtk_style_context_get_font (context, GTK_STATE_FLAG_NORMAL); font = pango_font_description_to_string (font_desc); button = gtk_font_button_new_with_font (font); g_free (font); g_signal_connect (button, "font-set", G_CALLBACK(calendar_select_font), &calendar_data); label = gtk_label_new_with_mnemonic ("_Font:"); gtk_label_set_mnemonic_widget (GTK_LABEL (label), button); gtk_widget_set_halign (label, GTK_ALIGN_START); gtk_widget_set_valign (label, GTK_ALIGN_CENTER); gtk_size_group_add_widget (size, label); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, DEF_PAD_SMALL); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0); /* Build the width entry */ button = gtk_spin_button_new_with_range (0, 127, 1); gtk_spin_button_set_value (GTK_SPIN_BUTTON (button), gtk_calendar_get_detail_width_chars (GTK_CALENDAR (calendar))); g_signal_connect (button, "value-changed", G_CALLBACK (detail_width_changed), &calendar_data); label = gtk_label_new_with_mnemonic ("Details W_idth:"); gtk_label_set_mnemonic_widget (GTK_LABEL (label), button); gtk_widget_set_halign (label, GTK_ALIGN_START); gtk_widget_set_valign (label, GTK_ALIGN_CENTER); gtk_size_group_add_widget (size, label); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, DEF_PAD_SMALL); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0); /* Build the height entry */ button = gtk_spin_button_new_with_range (0, 127, 1); gtk_spin_button_set_value (GTK_SPIN_BUTTON (button), gtk_calendar_get_detail_height_rows (GTK_CALENDAR (calendar))); g_signal_connect (button, "value-changed", G_CALLBACK (detail_height_changed), &calendar_data); label = gtk_label_new_with_mnemonic ("Details H_eight:"); gtk_label_set_mnemonic_widget (GTK_LABEL (label), button); gtk_widget_set_halign (label, GTK_ALIGN_START); gtk_widget_set_valign (label, GTK_ALIGN_CENTER); gtk_size_group_add_widget (size, label); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, DEF_PAD_SMALL); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0); /* Build the right details frame */ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, DEF_PAD_SMALL); frame = create_frame ("<b>Details</b>", vbox, 1, 1); gtk_box_pack_start (GTK_BOX (rpane), frame, FALSE, TRUE, 0); details = gtk_text_view_new(); calendar_data.details_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (details)); calendar_data.details_changed = g_signal_connect (calendar_data.details_buffer, "changed", G_CALLBACK (calendar_details_changed), &calendar_data); scroller = gtk_scrolled_window_new (NULL, NULL); gtk_container_add (GTK_CONTAINER (scroller), details); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroller), GTK_SHADOW_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroller), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start (GTK_BOX (vbox), scroller, FALSE, TRUE, 0); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, DEF_PAD_SMALL); align = gtk_alignment_new (0.0, 0.5, 0.0, 0.0); gtk_container_add (GTK_CONTAINER (align), hbox); gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, TRUE, 0); button = gtk_button_new_with_mnemonic ("Demonstrate _Details"); g_signal_connect_swapped (button, "clicked", G_CALLBACK (demonstrate_details), &calendar_data); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 0); button = gtk_button_new_with_mnemonic ("_Reset Details"); g_signal_connect_swapped (button, "clicked", G_CALLBACK (reset_details), &calendar_data); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 0); toggle = gtk_check_button_new_with_mnemonic ("_Use Details"); g_signal_connect (toggle, "toggled", G_CALLBACK(calendar_toggle_details), &calendar_data); gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, TRUE, 0); /* Build the Right frame with the flags in */ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); frame = create_expander ("<b>Flags</b>", vbox, 1, 0); gtk_box_pack_start (GTK_BOX (rpane), frame, TRUE, TRUE, 0); for (i = 0; i < G_N_ELEMENTS (calendar_data.settings); i++) { toggle = gtk_check_button_new_with_mnemonic(flags[i].label); gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, TRUE, 0); calendar_data.flag_checkboxes[i] = toggle; g_signal_connect (toggle, "toggled", G_CALLBACK (calendar_toggle_flag), &calendar_data); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), flags[i].init); } /* * Build the Signal-event part. */ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, DEF_PAD_SMALL); gtk_box_set_homogeneous (GTK_BOX (vbox), TRUE); frame = create_frame ("<b>Signal Events</b>", vbox, 1, 0); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0); label = gtk_label_new ("Signal:"); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0); calendar_data.last_sig = gtk_label_new (""); gtk_box_pack_start (GTK_BOX (hbox), calendar_data.last_sig, FALSE, TRUE, 0); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0); label = gtk_label_new ("Previous signal:"); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0); calendar_data.prev_sig = gtk_label_new (""); gtk_box_pack_start (GTK_BOX (hbox), calendar_data.prev_sig, FALSE, TRUE, 0); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0); label = gtk_label_new ("Second previous signal:"); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0); calendar_data.prev2_sig = gtk_label_new (""); gtk_box_pack_start (GTK_BOX (hbox), calendar_data.prev2_sig, FALSE, TRUE, 0); /* * Glue everything together */ bbox = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL); gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); button = gtk_button_new_with_label ("Close"); g_signal_connect (button, "clicked", G_CALLBACK (gtk_main_quit), NULL); gtk_container_add (GTK_CONTAINER (bbox), button); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, DEF_PAD_SMALL); gtk_box_pack_start (GTK_BOX (vbox), hpaned, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox), gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox), gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, TRUE, 0); gtk_container_add (GTK_CONTAINER (window), vbox); gtk_widget_set_can_default (button, TRUE); gtk_widget_grab_default (button); gtk_window_set_default_size (GTK_WINDOW (window), 600, 0); gtk_widget_show_all (window); }
/* Construct the status bar widget. */ static GtkWidget * libre_impuesto_window_construct_headerbar (LibreImpuestoWindow *impuesto_window) { gint size; time_t secs; GDate *today; struct tm *tm; GtkStateFlags state; GtkWidget *headerbar; gchar buffer[100] = ""; GtkWidget *header_area; GtkWidget *grid_layout; GtkStyleContext *context; PangoFontDescription *font_desc; GtkWidget *label_libre_impuesto, *label_software_libre, *label_date; secs = time (NULL); tm = localtime (&secs); header_area = gtk_box_new (GTK_ORIENTATION_VERTICAL, 1); g_object_bind_property ( impuesto_window, "headerbar-visible", header_area, "visible", G_BINDING_SYNC_CREATE); headerbar = gtk_event_box_new(); gtk_box_pack_start (GTK_BOX (header_area), headerbar, FALSE, FALSE, 0); gtk_widget_set_name (headerbar, "libre-impuesto-header"); gtk_widget_set_size_request (headerbar, -1, 56); grid_layout = gtk_grid_new (); gtk_container_add (GTK_CONTAINER (headerbar), grid_layout); gtk_grid_set_column_homogeneous (GTK_GRID(grid_layout), TRUE); gtk_grid_set_row_homogeneous (GTK_GRID (grid_layout), TRUE); label_libre_impuesto = gtk_label_new (_("Libre Impuestos")); gtk_grid_attach (GTK_GRID (grid_layout), label_libre_impuesto, 0, 0, 1, 1); context = gtk_widget_get_style_context (label_libre_impuesto); state = gtk_widget_get_state_flags (label_libre_impuesto); size = pango_font_description_get_size (gtk_style_context_get_font ( context, state)); font_desc = pango_font_description_new (); pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD); pango_font_description_set_size (font_desc, size * PANGO_SCALE_X_LARGE); gtk_widget_override_font (label_libre_impuesto, font_desc); pango_font_description_free (font_desc); gtk_misc_set_alignment (GTK_MISC (label_libre_impuesto), 0.2, 0.4); gtk_widget_show (label_libre_impuesto); label_software_libre = gtk_label_new (_("www.softwarelibre.org.bo")); gtk_grid_attach (GTK_GRID (grid_layout), label_software_libre, 1, 0, 1, 1); gtk_misc_set_alignment (GTK_MISC (label_software_libre), 0.5, 0.8); gtk_widget_show (label_software_libre); today = g_date_new_dmy((gint)tm->tm_mday, (gint)tm->tm_mon + 1, 1900 + tm->tm_year); g_date_strftime (buffer, 100-1, "%A, %d de %B de %Y", today); label_date = gtk_label_new (g_ascii_strup (buffer,100-1)); g_date_free(today); gtk_grid_attach (GTK_GRID (grid_layout), label_date, 2, 0, 1, 1); gtk_misc_set_alignment (GTK_MISC (label_date), 0.9, 0.5); return header_area; }
static void gd_two_lines_renderer_get_preferred_width (GtkCellRenderer *cell, GtkWidget *widget, gint *minimum_size, gint *natural_size) { PangoContext *context; PangoFontMetrics *metrics; const PangoFontDescription *font_desc; GtkStyleContext *style_context; gint nat_width, min_width; gint xpad, char_width, wrap_width, text_width; gint width_chars, ellipsize_chars; g_object_get (cell, "xpad", &xpad, "width-chars", &width_chars, "wrap-width", &wrap_width, NULL); style_context = gtk_widget_get_style_context (widget); gtk_cell_renderer_get_padding (cell, &xpad, NULL); gd_two_lines_renderer_get_size (cell, widget, NULL, NULL, &text_width, NULL, NULL, NULL, NULL, NULL); /* Fetch the average size of a charachter */ context = gtk_widget_get_pango_context (widget); font_desc = gtk_style_context_get_font (style_context, 0); metrics = pango_context_get_metrics (context, font_desc, pango_context_get_language (context)); char_width = pango_font_metrics_get_approximate_char_width (metrics); pango_font_metrics_unref (metrics); /* enforce minimum width for ellipsized labels at ~3 chars */ ellipsize_chars = 3; /* If no width-chars set, minimum for wrapping text will be the wrap-width */ if (wrap_width > -1) min_width = xpad * 2 + MIN (text_width, wrap_width); else min_width = xpad * 2 + MIN (text_width, (PANGO_PIXELS (char_width) * MAX (width_chars, ellipsize_chars))); if (width_chars > 0) nat_width = xpad * 2 + MAX ((PANGO_PIXELS (char_width) * width_chars), text_width); else nat_width = xpad * 2 + text_width; nat_width = MAX (nat_width, min_width); if (minimum_size) *minimum_size = min_width; if (natural_size) *natural_size = nat_width; }
static void gcal_month_view_draw_month_grid (GcalMonthView *month_view, cairo_t *cr, gint x, gint y) { GcalMonthViewPrivate *priv; GtkWidget *widget; GtkStyleContext *context; GtkStateFlags state; GdkRGBA color; gint i, j; gint font_width; gint font_height; guint8 n_days_in_month; PangoLayout *layout; gchar *day; priv = month_view->priv; widget = GTK_WIDGET (month_view); context = gtk_widget_get_style_context (widget); state = gtk_widget_get_state_flags (widget); state |= GTK_STATE_FLAG_SELECTED; gtk_style_context_get_background_color (context, state, &color); cairo_set_source_rgba (cr, color.red, color.green, color.blue, 0.8); cairo_rectangle (cr, x + priv->horizontal_step * ( priv->selected_cell % 7), y + priv->vertical_step * ( priv->selected_cell / 7), priv->horizontal_step, priv->vertical_step); cairo_fill (cr); state = gtk_widget_get_state_flags (widget); gtk_style_context_get_color (context, state, &color); cairo_set_source_rgba (cr, color.red, color.green, color.blue, color.alpha); layout = pango_cairo_create_layout (cr); pango_layout_set_font_description (layout, gtk_style_context_get_font (context, state)); n_days_in_month = icaltime_days_in_month (priv->date->month, priv->date->year); for (i = 0; i < 7; i++) { pango_layout_set_text (layout, weekdays[i], -1); pango_cairo_update_layout (cr, layout); pango_layout_get_pixel_size (layout, &font_width, &font_height); cairo_move_to (cr, x + priv->horizontal_step * i + 1, y - font_height - 1); pango_cairo_show_layout (cr, layout); for (j = 0; j < 5; j++) { gint n_day = j * 7 + i + priv->days_delay; if (n_day <= 0 || n_day > n_days_in_month) continue; day = g_strdup_printf ("%d", n_day); pango_layout_set_text (layout, day, -1); pango_cairo_update_layout (cr, layout); pango_layout_get_pixel_size (layout, &font_width, &font_height); cairo_move_to (cr, x + priv->horizontal_step * i + 2, y + priv->vertical_step * j + 1); pango_cairo_show_layout (cr, layout); g_free (day); } } /* free the layout object */ g_object_unref (layout); for (i = 0; i < 6; i++) { cairo_move_to (cr, x, y + priv->vertical_step * i); cairo_line_to (cr, x + priv->horizontal_step * 7, y + priv->vertical_step * i); } for (i = 0; i < 8; i++) { cairo_move_to (cr, x + priv->horizontal_step * i, y); cairo_line_to (cr, x + priv->horizontal_step * i, y + priv->vertical_step * 5); } cairo_stroke (cr); }
static gboolean gtk_switch_draw (GtkWidget *widget, cairo_t *cr) { GtkSwitchPrivate *priv = GTK_SWITCH (widget)->priv; GtkStyleContext *context; GdkRectangle handle; PangoLayout *layout; PangoFontDescription *desc; const PangoFontDescription *style_desc; PangoRectangle rect; gint label_x, label_y; GtkStateFlags state; GtkBorder padding; gint focus_width, focus_pad; gint x, y, width, height; gint font_size, style_font_size; gtk_widget_style_get (widget, "focus-line-width", &focus_width, "focus-padding", &focus_pad, NULL); context = gtk_widget_get_style_context (widget); state = gtk_widget_get_state_flags (widget); if (priv->is_active) state |= GTK_STATE_FLAG_ACTIVE; gtk_style_context_save (context); gtk_style_context_set_state (context, state); gtk_style_context_add_class (context, GTK_STYLE_CLASS_SLIDER); gtk_style_context_get_padding (context, state, &padding); gtk_style_context_restore (context); x = 0; y = 0; width = gtk_widget_get_allocated_width (widget); height = gtk_widget_get_allocated_height (widget); if (gtk_widget_has_focus (widget)) gtk_render_focus (context, cr, x, y, width, height); x += focus_width + focus_pad; y += focus_width + focus_pad; width -= 2 * (focus_width + focus_pad); height -= 2 * (focus_width + focus_pad); gtk_style_context_save (context); gtk_style_context_add_class (context, GTK_STYLE_CLASS_TROUGH); gtk_style_context_set_state (context, state); gtk_render_background (context, cr, x, y, width, height); gtk_render_frame (context, cr, x, y, width, height); width -= padding.left + padding.right; height -= padding.top + padding.bottom; x += padding.left; y += padding.top; handle.y = y; handle.width = width / 2; handle.height = height; /* Translators: if the "on" state label requires more than three * glyphs then use MEDIUM VERTICAL BAR (U+2759) as the text for * the state */ layout = gtk_widget_create_pango_layout (widget, C_("switch", "ON")); /* FIXME: this should be really done in the theme, but overriding font size * from it doesn't currently work. So we have to hardcode this here and * below for the "OFF" label. */ desc = pango_font_description_new (); style_desc = gtk_style_context_get_font (context, state); style_font_size = pango_font_description_get_size (style_desc); font_size = MAX (style_font_size - 1 * PANGO_SCALE, ceil (style_font_size * PANGO_SCALE_SMALL)); pango_font_description_set_size (desc, font_size); pango_layout_set_font_description (layout, desc); pango_layout_get_extents (layout, NULL, &rect); pango_extents_to_pixels (&rect, NULL); label_x = x + ((width / 2) - rect.width) / 2; label_y = y + (height - rect.height) / 2; gtk_render_layout (context, cr, label_x, label_y, layout); g_object_unref (layout); /* Translators: if the "off" state label requires more than three * glyphs then use WHITE CIRCLE (U+25CB) as the text for the state */ layout = gtk_widget_create_pango_layout (widget, C_("switch", "OFF")); pango_layout_set_font_description (layout, desc); pango_layout_get_extents (layout, NULL, &rect); pango_extents_to_pixels (&rect, NULL); label_x = x + (width / 2) + ((width / 2) - rect.width) / 2; label_y = y + (height - rect.height) / 2; gtk_render_layout (context, cr, label_x, label_y, layout); g_object_unref (layout); if (priv->is_dragging) handle.x = x + priv->handle_x; else if (priv->is_active) handle.x = x + width - handle.width; else handle.x = x; gtk_style_context_restore (context); gtk_switch_paint_handle (widget, cr, &handle); pango_font_description_free (desc); return FALSE; }
// static wxVisualAttributes wxControl::GetDefaultAttributesFromGTKWidget(GtkWidget* widget, bool WXUNUSED_IN_GTK3(useBase), int state) { wxVisualAttributes attr; GtkWidget* tlw = NULL; if (gtk_widget_get_parent(widget) == NULL) { tlw = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_add(GTK_CONTAINER(tlw), widget); } #ifdef __WXGTK3__ GtkStateFlags stateFlag = GTK_STATE_FLAG_NORMAL; if (state) { wxASSERT(state == GTK_STATE_ACTIVE); stateFlag = GTK_STATE_FLAG_ACTIVE; } GtkStyleContext* sc = gtk_widget_get_style_context(widget); GdkRGBA c; gtk_style_context_get_color(sc, stateFlag, &c); attr.colFg = wxColour(c); gtk_style_context_get_background_color(sc, stateFlag, &c); attr.colBg = wxColour(c); wxNativeFontInfo info; info.description = const_cast<PangoFontDescription*>(gtk_style_context_get_font(sc, stateFlag)); attr.font = wxFont(info); info.description = NULL; #else GtkStyle* style; style = gtk_rc_get_style(widget); if (!style) style = gtk_widget_get_default_style(); if (style) { // get the style's colours attr.colFg = wxColour(style->fg[state]); if (useBase) attr.colBg = wxColour(style->base[state]); else attr.colBg = wxColour(style->bg[state]); // get the style's font if (!style->font_desc) style = gtk_widget_get_default_style(); if (style && style->font_desc) { wxNativeFontInfo info; info.description = style->font_desc; attr.font = wxFont(info); info.description = NULL; } } else attr = wxWindow::GetClassDefaultAttributes(wxWINDOW_VARIANT_NORMAL); #endif if (!attr.font.IsOk()) { GtkSettings *settings = gtk_settings_get_default(); gchar *font_name = NULL; g_object_get ( settings, "gtk-font-name", &font_name, NULL); if (!font_name) attr.font = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT ); else attr.font = wxFont(wxString::FromAscii(font_name)); g_free (font_name); } if (tlw) gtk_widget_destroy(tlw); return attr; }