📄 support.c
字号:
/* $Id: support.c,v 1.1.1.1 2001/08/20 18:10:55 kas Exp $ *//* * Screentest - CRT monitor testing utility. * http://www.fi.muni.cz/~kas/screentest/ * Copyright (C) 2001 Jan "Yenya" Kasprzak <kas@fi.muni.cz> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA *//* * DO NOT EDIT THIS FILE - it is generated by Glade. */#ifdef HAVE_CONFIG_H# include <config.h>#endif#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <string.h>#include <gtk/gtk.h>#include "support.h"/* This is an internally used function to check if a pixmap file exists. */static gchar *check_file_exists(const gchar * directory, const gchar * filename);/* This is an internally used function to create pixmaps. */static GtkWidget *create_dummy_pixmap(GtkWidget * widget);GtkWidget *lookup_widget(GtkWidget * widget, const gchar * widget_name){ GtkWidget *parent, *found_widget; for (;;) { if (GTK_IS_MENU(widget)) parent = gtk_menu_get_attach_widget(GTK_MENU(widget)); else parent = widget->parent; if (parent == NULL) break; widget = parent; } found_widget = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(widget), widget_name); if (!found_widget) g_warning("Widget not found: %s", widget_name); return found_widget;}/* This is a dummy pixmap we use when a pixmap can't be found. */static char *dummy_pixmap_xpm[] = {/* columns rows colors chars-per-pixel */ "1 1 1 1", " c None",/* pixels */ " "};/* This is an internally used function to create pixmaps. */static GtkWidget *create_dummy_pixmap(GtkWidget * widget){ GdkColormap *colormap; GdkPixmap *gdkpixmap; GdkBitmap *mask; GtkWidget *pixmap; colormap = gtk_widget_get_colormap(widget); gdkpixmap = gdk_pixmap_colormap_create_from_xpm_d(NULL, colormap, &mask, NULL, dummy_pixmap_xpm); if (gdkpixmap == NULL) g_error("Couldn't create replacement pixmap."); pixmap = gtk_pixmap_new(gdkpixmap, mask); gdk_pixmap_unref(gdkpixmap); gdk_bitmap_unref(mask); return pixmap;}static GList *pixmaps_directories = NULL;/* Use this function to set the directory containing installed pixmaps. */void add_pixmap_directory(const gchar * directory){ pixmaps_directories = g_list_prepend(pixmaps_directories, g_strdup(directory));}/* This is an internally used function to create pixmaps. */GtkWidget *create_pixmap(GtkWidget * widget, const gchar * filename){ gchar *found_filename = NULL; GdkColormap *colormap; GdkPixmap *gdkpixmap; GdkBitmap *mask; GtkWidget *pixmap; GList *elem; if (!filename || !filename[0]) return create_dummy_pixmap(widget); /* We first try any pixmaps directories set by the application. */ elem = pixmaps_directories; while (elem) { found_filename = check_file_exists((gchar *) elem->data, filename); if (found_filename) break; elem = elem->next; } /* If we haven't found the pixmap, try the source directory. */ if (!found_filename) { found_filename = check_file_exists("../pixmaps", filename); } if (!found_filename) { g_warning("Couldn't find pixmap file: %s", filename); return create_dummy_pixmap(widget); } colormap = gtk_widget_get_colormap(widget); gdkpixmap = gdk_pixmap_colormap_create_from_xpm(NULL, colormap, &mask, NULL, found_filename); if (gdkpixmap == NULL) { g_warning("Error loading pixmap file: %s", found_filename); g_free(found_filename); return create_dummy_pixmap(widget); } g_free(found_filename); pixmap = gtk_pixmap_new(gdkpixmap, mask); gdk_pixmap_unref(gdkpixmap); gdk_bitmap_unref(mask); return pixmap;}/* This is an internally used function to check if a pixmap file exists. */gchar *check_file_exists(const gchar * directory, const gchar * filename){ gchar *full_filename; struct stat s; gint status; full_filename = (gchar *) g_malloc(strlen(directory) + 1 + strlen(filename) + 1); strcpy(full_filename, directory); strcat(full_filename, G_DIR_SEPARATOR_S); strcat(full_filename, filename); status = stat(full_filename, &s); if (status == 0 && S_ISREG(s.st_mode)) return full_filename; g_free(full_filename); return NULL;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -