BC_Resources::BC_Resources() { synchronous = 0; vframe_shm = 0; display_info = new BC_DisplayInfo("", 0); double scale = 1; char *font_scale = getenv("BC_FONT_SCALE"); if( !font_scale ) { int display_w = display_info->get_root_w(); int display_h = display_info->get_root_h(); int display_size = display_h < display_w ? display_h : display_w; scale = display_size / 1000.; } else { double env_scale = atof(font_scale); if( env_scale > 0 ) scale = env_scale; } init_font_defs(scale); id_lock = new Mutex("BC_Resources::id_lock"); create_window_lock = new Mutex("BC_Resources::create_window_lock", 1); id = 0; machine_cpus = get_machine_cpus(); for(int i = 0; i < FILEBOX_HISTORY_SIZE; i++) filebox_history[i].path[0] = 0; #ifdef HAVE_XFT XftInitFtLibrary(); #endif little_endian = (*(const u_int32_t*)"\01\0\0\0") & 1; wide_encoding = little_endian ? "UTF32LE" : "UTF32BE"; use_xvideo = 1; #include "images/file_film_png.h" #include "images/file_folder_png.h" #include "images/file_sound_png.h" #include "images/file_unknown_png.h" #include "images/file_column_png.h" static VFrame* default_type_to_icon[] = { new VFrame(file_folder_png), new VFrame(file_unknown_png), new VFrame(file_film_png), new VFrame(file_sound_png), new VFrame(file_column_png) }; type_to_icon = default_type_to_icon; #include "images/bar_png.h" static VFrame* default_bar = new VFrame(bar_png); bar_data = default_bar; #include "images/cancel_up_png.h" #include "images/cancel_hi_png.h" #include "images/cancel_dn_png.h" static VFrame* default_cancel_images[] = { new VFrame(cancel_up_png), new VFrame(cancel_hi_png), new VFrame(cancel_dn_png) }; #include "images/ok_up_png.h" #include "images/ok_hi_png.h" #include "images/ok_dn_png.h" static VFrame* default_ok_images[] = { new VFrame(ok_up_png), new VFrame(ok_hi_png), new VFrame(ok_dn_png) }; #include "images/usethis_up_png.h" #include "images/usethis_uphi_png.h" #include "images/usethis_dn_png.h" static VFrame* default_usethis_images[] = { new VFrame(usethis_up_png), new VFrame(usethis_uphi_png), new VFrame(usethis_dn_png) }; #if 0 #include "images/checkbox_checked_png.h" #include "images/checkbox_dn_png.h" #include "images/checkbox_checkedhi_png.h" #include "images/checkbox_up_png.h" #include "images/checkbox_hi_png.h" static VFrame* default_checkbox_images[] = { new VFrame(checkbox_up_png), new VFrame(checkbox_hi_png), new VFrame(checkbox_checked_png), new VFrame(checkbox_dn_png), new VFrame(checkbox_checkedhi_png) }; #include "images/radial_checked_png.h" #include "images/radial_dn_png.h" #include "images/radial_checkedhi_png.h" #include "images/radial_up_png.h" #include "images/radial_hi_png.h" static VFrame* default_radial_images[] = { new VFrame(radial_up_png), new VFrame(radial_hi_png), new VFrame(radial_checked_png), new VFrame(radial_dn_png), new VFrame(radial_checkedhi_png) }; static VFrame* default_label_images[] = { new VFrame(radial_up_png), new VFrame(radial_hi_png), new VFrame(radial_checked_png), new VFrame(radial_dn_png), new VFrame(radial_checkedhi_png) }; #endif #include "images/file_text_up_png.h" #include "images/file_text_hi_png.h" #include "images/file_text_dn_png.h" #include "images/file_icons_up_png.h" #include "images/file_icons_hi_png.h" #include "images/file_icons_dn_png.h" #include "images/file_newfolder_up_png.h" #include "images/file_newfolder_hi_png.h" #include "images/file_newfolder_dn_png.h" #include "images/file_rename_up_png.h" #include "images/file_rename_hi_png.h" #include "images/file_rename_dn_png.h" #include "images/file_updir_up_png.h" #include "images/file_updir_hi_png.h" #include "images/file_updir_dn_png.h" #include "images/file_delete_up_png.h" #include "images/file_delete_hi_png.h" #include "images/file_delete_dn_png.h" #include "images/file_reload_up_png.h" #include "images/file_reload_hi_png.h" #include "images/file_reload_dn_png.h" static VFrame* default_filebox_text_images[] = { new VFrame(file_text_up_png), new VFrame(file_text_hi_png), new VFrame(file_text_dn_png) }; static VFrame* default_filebox_icons_images[] = { new VFrame(file_icons_up_png), new VFrame(file_icons_hi_png), new VFrame(file_icons_dn_png) }; static VFrame* default_filebox_updir_images[] = { new VFrame(file_updir_up_png), new VFrame(file_updir_hi_png), new VFrame(file_updir_dn_png) }; static VFrame* default_filebox_newfolder_images[] = { new VFrame(file_newfolder_up_png), new VFrame(file_newfolder_hi_png), new VFrame(file_newfolder_dn_png) }; static VFrame* default_filebox_rename_images[] = { new VFrame(file_rename_up_png), new VFrame(file_rename_hi_png), new VFrame(file_rename_dn_png) }; static VFrame* default_filebox_delete_images[] = { new VFrame(file_delete_up_png), new VFrame(file_delete_hi_png), new VFrame(file_delete_dn_png) }; static VFrame* default_filebox_reload_images[] = { new VFrame(file_reload_up_png), new VFrame(file_reload_hi_png), new VFrame(file_reload_dn_png) }; #include "images/listbox_button_dn_png.h" #include "images/listbox_button_hi_png.h" #include "images/listbox_button_up_png.h" #include "images/listbox_button_disabled_png.h" static VFrame* default_listbox_button[] = { new VFrame(listbox_button_up_png), new VFrame(listbox_button_hi_png), new VFrame(listbox_button_dn_png), new VFrame(listbox_button_disabled_png) }; listbox_button = default_listbox_button; #include "images/menu_popup_bg_png.h" static VFrame* default_listbox_bg = 0; listbox_bg = default_listbox_bg; #include "images/listbox_expandchecked_png.h" #include "images/listbox_expandcheckedhi_png.h" #include "images/listbox_expanddn_png.h" #include "images/listbox_expandup_png.h" #include "images/listbox_expanduphi_png.h" static VFrame* default_listbox_expand[] = { new VFrame(listbox_expandup_png), new VFrame(listbox_expanduphi_png), new VFrame(listbox_expandchecked_png), new VFrame(listbox_expanddn_png), new VFrame(listbox_expandcheckedhi_png), }; listbox_expand = default_listbox_expand; #include "images/listbox_columnup_png.h" #include "images/listbox_columnhi_png.h" #include "images/listbox_columndn_png.h" static VFrame* default_listbox_column[] = { new VFrame(listbox_columnup_png), new VFrame(listbox_columnhi_png), new VFrame(listbox_columndn_png) }; listbox_column = default_listbox_column; #include "images/listbox_up_png.h" #include "images/listbox_dn_png.h" listbox_up = new VFrame(listbox_up_png); listbox_dn = new VFrame(listbox_dn_png); listbox_title_overlap = 0; listbox_title_margin = 0; listbox_title_color = BLACK; listbox_title_hotspot = 5; listbox_border1 = DKGREY; listbox_border2_hi = RED; listbox_border2 = BLACK; listbox_border3_hi = RED; listbox_border3 = MEGREY; listbox_border4 = WHITE; listbox_selected = BLUE; listbox_highlighted = LTGREY; listbox_inactive = WHITE; listbox_text = BLACK; #include "images/pot_hi_png.h" #include "images/pot_up_png.h" #include "images/pot_dn_png.h" static VFrame *default_pot_images[] = { new VFrame(pot_up_png), new VFrame(pot_hi_png), new VFrame(pot_dn_png) }; #include "images/progress_up_png.h" #include "images/progress_hi_png.h" static VFrame* default_progress_images[] = { new VFrame(progress_up_png), new VFrame(progress_hi_png) }; pan_data = 0; pan_text_color = YELLOW; #include "images/7seg_small/0_png.h" #include "images/7seg_small/1_png.h" #include "images/7seg_small/2_png.h" #include "images/7seg_small/3_png.h" #include "images/7seg_small/4_png.h" #include "images/7seg_small/5_png.h" #include "images/7seg_small/6_png.h" #include "images/7seg_small/7_png.h" #include "images/7seg_small/8_png.h" #include "images/7seg_small/9_png.h" #include "images/7seg_small/colon_png.h" #include "images/7seg_small/period_png.h" #include "images/7seg_small/a_png.h" #include "images/7seg_small/b_png.h" #include "images/7seg_small/c_png.h" #include "images/7seg_small/d_png.h" #include "images/7seg_small/e_png.h" #include "images/7seg_small/f_png.h" #include "images/7seg_small/space_png.h" #include "images/7seg_small/dash_png.h" static VFrame* default_medium_7segment[] = { new VFrame(_0_png), new VFrame(_1_png), new VFrame(_2_png), new VFrame(_3_png), new VFrame(_4_png), new VFrame(_5_png), new VFrame(_6_png), new VFrame(_7_png), new VFrame(_8_png), new VFrame(_9_png), new VFrame(colon_png), new VFrame(period_png), new VFrame(a_png), new VFrame(b_png), new VFrame(c_png), new VFrame(d_png), new VFrame(e_png), new VFrame(f_png), new VFrame(space_png), new VFrame(dash_png) }; generic_button_margin = 15; draw_clock_background=1; use_shm = -1; shm_reply = 1; // Initialize bg_color = ORANGE; bg_shadow1 = DKGREY; bg_shadow2 = BLACK; bg_light1 = WHITE; bg_light2 = bg_color; border_light1 = bg_color; border_light2 = MEGREY; border_shadow1 = BLACK; border_shadow2 = bg_color; default_text_color = BLACK; disabled_text_color = DMGREY; button_light = MEGREY; // bright corner // button_highlighted = LTGREY; // face when highlighted button_highlighted = 0xffe000; // face when highlighted button_down = MDGREY; // face when down // button_up = MEGREY; // face when up button_up = 0xffc000; // face when up button_shadow = BLACK; // dark corner button_uphighlighted = RED; // upper side when highlighted tumble_data = 0; tumble_duration = 150; ok_images = default_ok_images; cancel_images = default_cancel_images; usethis_button_images = default_usethis_images; filebox_descend_images = default_ok_images; menu_light = LTCYAN; menu_highlighted = LTBLUE; menu_down = MDCYAN; menu_up = MECYAN; menu_shadow = DKCYAN; #include "images/menuitem_up_png.h" #include "images/menuitem_hi_png.h" #include "images/menuitem_dn_png.h" #include "images/menubar_up_png.h" #include "images/menubar_hi_png.h" #include "images/menubar_dn_png.h" #include "images/menubar_bg_png.h" static VFrame *default_menuitem_data[] = { new VFrame(menuitem_up_png), new VFrame(menuitem_hi_png), new VFrame(menuitem_dn_png), }; menu_item_bg = default_menuitem_data; static VFrame *default_menubar_data[] = { new VFrame(menubar_up_png), new VFrame(menubar_hi_png), new VFrame(menubar_dn_png), }; menu_title_bg = default_menubar_data; menu_popup_bg = new VFrame(menu_popup_bg_png); menu_bar_bg = new VFrame(menubar_bg_png); popupmenu_images = 0; popupmenu_margin = 10; popupmenu_triangle_margin = 10; min_menu_w = 0; menu_title_text = BLACK; popup_title_text = BLACK; menu_item_text = BLACK; menu_highlighted_fontcolor = BLACK; progress_text = BLACK; text_default = BLACK; highlight_inverse = WHITE ^ BLUE; text_background = WHITE; text_background_hi = LTYELLOW; text_background_noborder_hi = LTGREY; text_background_noborder = -1; text_border1 = DKGREY; text_border2 = BLACK; text_border2_hi = RED; text_border3 = MEGREY; text_border3_hi = LTPINK; text_border4 = WHITE; text_highlight = BLUE; text_inactive_highlight = MEGREY; toggle_highlight_bg = 0; toggle_text_margin = 0; // Delays must all be different for repeaters double_click = 300; blink_rate = 250; scroll_repeat = 150; tooltip_delay = 1000; tooltip_bg_color = YELLOW; tooltips_enabled = 1; filebox_margin = 110; dirbox_margin = 90; filebox_mode = LISTBOX_TEXT; sprintf(filebox_filter, "*"); filebox_w = 640; filebox_h = 480; filebox_columntype[0] = FILEBOX_NAME; filebox_columntype[1] = FILEBOX_SIZE; filebox_columntype[2] = FILEBOX_DATE; filebox_columntype[3] = FILEBOX_EXTENSION; filebox_columnwidth[0] = 200; filebox_columnwidth[1] = 100; filebox_columnwidth[2] = 100; filebox_columnwidth[3] = 100; dirbox_columntype[0] = FILEBOX_NAME; dirbox_columntype[1] = FILEBOX_DATE; dirbox_columnwidth[0] = 200; dirbox_columnwidth[1] = 100; filebox_text_images = default_filebox_text_images; filebox_icons_images = default_filebox_icons_images; filebox_updir_images = default_filebox_updir_images; filebox_newfolder_images = default_filebox_newfolder_images; filebox_rename_images = default_filebox_rename_images; filebox_delete_images = default_filebox_delete_images; filebox_reload_images = default_filebox_reload_images; directory_color = BLUE; file_color = BLACK; filebox_sortcolumn = 0; filebox_sortorder = BC_ListBox::SORT_ASCENDING; dirbox_sortcolumn = 0; dirbox_sortorder = BC_ListBox::SORT_ASCENDING; pot_images = default_pot_images; pot_offset = 2; pot_x1 = pot_images[0]->get_w() / 2 - pot_offset; pot_y1 = pot_images[0]->get_h() / 2 - pot_offset; pot_r = pot_x1; pot_needle_color = BLACK; progress_images = default_progress_images; xmeter_images = 0; ymeter_images = 0; meter_font = SMALLFONT_3D; meter_font_color = RED; meter_title_w = 20; meter_3d = 1; medium_7segment = default_medium_7segment; audiovideo_color = RED; use_fontset = 0; // Xft has priority over font set #ifdef HAVE_XFT // But Xft dies in 32 bit mode after some amount of drawing. use_xft = 1; #else use_xft = 0; #endif drag_radius = 10; recursive_resizing = 1; }
int main(int argc, char **argv) { FT_Error error; FT_Library library; FT_Face face; GFile *file; gchar *font_file, *title; gint row; GtkWidget *window, *hbox, *table, *swin, *drawing_area; GdkColor white = { 0, 0xffff, 0xffff, 0xffff }; GtkWidget *button, *align; bindtextdomain(GETTEXT_PACKAGE, MATELOCALEDIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); gtk_init(&argc, &argv); if (argc != 2) { g_printerr(_("usage: %s fontfile\n"), argv[0]); return 1; } if (!XftInitFtLibrary()) { g_printerr("could not initialise freetype library\n"); return 1; } error = FT_Init_FreeType(&library); if (error) { g_printerr("could not initialise freetype\n"); return 1; } file = g_file_new_for_commandline_arg (argv[1]); font_file = g_file_get_uri (file); g_object_unref (file); if (!font_file) { g_printerr("could not parse argument into a URI\n"); return 1; } error = FT_New_Face_From_URI(library, font_file, 0, &face); if (error) { g_printerr("could not load face '%s'\n", font_file); return 1; } window = gtk_window_new(GTK_WINDOW_TOPLEVEL); title = g_strconcat(face->family_name, face->style_name ? ", " : "", face->style_name, NULL); gtk_window_set_title(GTK_WINDOW(window), title); set_icon(GTK_WINDOW(window), font_file); g_free(title); gtk_window_set_resizable(GTK_WINDOW(window), TRUE); hbox = gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), hbox); swin = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER); gtk_box_pack_start(GTK_BOX(hbox), swin, TRUE, TRUE, 0); drawing_area = gtk_drawing_area_new(); gtk_widget_modify_bg(drawing_area, GTK_STATE_NORMAL, &white); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(swin), drawing_area); #if !GTK_CHECK_VERSION (3, 0, 0) g_signal_connect (drawing_area, "realize", G_CALLBACK(create_text_pixmap), face); #endif /* set the minimum size on the scrolled window to prevent * unnecessary scrolling */ gtk_widget_set_size_request(swin, 500, -1); g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); table = gtk_table_new(1, 2, FALSE); gtk_container_set_border_width(GTK_CONTAINER(table), 5); gtk_box_pack_start(GTK_BOX(hbox), table, FALSE, TRUE, 0); row = 0; add_face_info(table, &row, font_file, face); /* add install button */ align = gtk_alignment_new (1.0, 0.5, 0.0, 0.0); gtk_table_attach (GTK_TABLE (table), align, 0, 2, row, row + 1, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0); button = gtk_button_new_with_mnemonic (_("I_nstall Font")); g_signal_connect (button, "clicked", G_CALLBACK (install_button_clicked_cb), font_file); gtk_container_add (GTK_CONTAINER (align), button); gtk_table_set_col_spacings(GTK_TABLE(table), 8); gtk_table_set_row_spacings(GTK_TABLE(table), 2); gtk_widget_show_all(window); gtk_main(); return 0; }