I'll push a formatting guide at some point. There may still be outstanding changes, but please feel free to resolve those as you arrive a them. To the best of my knowledge, there is no changes to the actual code content, but the formatter does have the occasional bug. If you run into an issue, please fix it!
154 lines
4.8 KiB
C
154 lines
4.8 KiB
C
/* NetHack 3.6 gntext.c $NHDT-Date: 1431192772 2015/05/09 17:32:52 $ $NHDT-Branch: master $:$NHDT-Revision: 1.8 $ */
|
|
/* NetHack 3.6 gntext.c $Date: 2009/05/06 10:58:00 $ $Revision: 1.5 $ */
|
|
/* SCCS Id: @(#)gntext.c 3.5 2000/07/16 */
|
|
/* Copyright (C) 1998 by Erik Andersen <andersee@debian.org> */
|
|
/* NetHack may be freely redistributed. See license for details. */
|
|
|
|
#include "gntext.h"
|
|
#include "gnmain.h"
|
|
#include <gnome.h>
|
|
|
|
/* include the standard RIP window (win/X11/rip.xpm) */
|
|
#include "gn_rip.h"
|
|
|
|
/* dimensions of the pixmap */
|
|
#define RIP_IMAGE_WIDTH 400
|
|
#define RIP_IMAGE_HEIGHT 200
|
|
|
|
/* dimensions and location of area where we can draw text on the pixmap */
|
|
#define RIP_DRAW_WIDTH 84
|
|
#define RIP_DRAW_HEIGHT 89
|
|
#define RIP_DRAW_X 114
|
|
#define RIP_DRAW_Y 69
|
|
|
|
/* Text Window widgets */
|
|
GtkWidget *RIP = NULL;
|
|
GtkWidget *RIPlabel = NULL;
|
|
GtkWidget *TW_window = NULL;
|
|
GnomeLess *gless;
|
|
|
|
static int showRIP = 0;
|
|
|
|
void
|
|
ghack_text_window_clear(GtkWidget *widget, gpointer data)
|
|
{
|
|
g_assert(gless != NULL);
|
|
gtk_editable_delete_text(GTK_EDITABLE(gless->text), 0, 0);
|
|
}
|
|
|
|
void
|
|
ghack_text_window_destroy()
|
|
{
|
|
TW_window = NULL;
|
|
}
|
|
|
|
void
|
|
ghack_text_window_display(GtkWidget *widget, boolean block, gpointer data)
|
|
{
|
|
if (showRIP == 1) {
|
|
gtk_widget_show(GTK_WIDGET(RIP));
|
|
gtk_window_set_title(GTK_WINDOW(TW_window), "Rest In Peace");
|
|
}
|
|
|
|
gtk_signal_connect(GTK_OBJECT(TW_window), "destroy",
|
|
(GtkSignalFunc) ghack_text_window_destroy, NULL);
|
|
if (block)
|
|
gnome_dialog_run(GNOME_DIALOG(TW_window));
|
|
else
|
|
gnome_dialog_run_and_close(GNOME_DIALOG(TW_window));
|
|
|
|
if (showRIP == 1) {
|
|
showRIP = 0;
|
|
gtk_widget_hide(GTK_WIDGET(RIP));
|
|
gtk_window_set_title(GTK_WINDOW(TW_window), "Text Window");
|
|
}
|
|
}
|
|
|
|
void
|
|
ghack_text_window_put_string(GtkWidget *widget, int attr, const char *text,
|
|
gpointer data)
|
|
{
|
|
if (text == NULL)
|
|
return;
|
|
|
|
/* Don't bother with attributes yet */
|
|
gtk_text_insert(GTK_TEXT(gless->text), NULL, NULL, NULL, text, -1);
|
|
gtk_text_insert(GTK_TEXT(gless->text), NULL, NULL, NULL, "\n", -1);
|
|
}
|
|
|
|
GtkWidget *
|
|
ghack_init_text_window()
|
|
{
|
|
GtkWidget *pixmap;
|
|
if (TW_window)
|
|
return (GTK_WIDGET(TW_window));
|
|
|
|
TW_window = gnome_dialog_new("Text Window", GNOME_STOCK_BUTTON_OK, NULL);
|
|
gtk_window_set_default_size(GTK_WINDOW(TW_window), 500, 400);
|
|
gtk_window_set_policy(GTK_WINDOW(TW_window), TRUE, TRUE, FALSE);
|
|
gtk_window_set_title(GTK_WINDOW(TW_window), "Text Window");
|
|
|
|
/* create GNOME pixmap object */
|
|
pixmap = gnome_pixmap_new_from_xpm_d(rip_xpm);
|
|
g_assert(pixmap != NULL);
|
|
gtk_widget_show(GTK_WIDGET(pixmap));
|
|
|
|
/* create label with our "death message", sized to fit into the
|
|
* tombstone */
|
|
RIPlabel = gtk_label_new("RIP");
|
|
g_assert(RIPlabel != NULL);
|
|
/* gtk_label_set_justify is broken? */
|
|
gtk_label_set_justify(GTK_LABEL(RIPlabel), GTK_JUSTIFY_CENTER);
|
|
gtk_label_set_line_wrap(GTK_LABEL(RIPlabel), TRUE);
|
|
gtk_widget_set_usize(RIPlabel, RIP_DRAW_WIDTH, RIP_DRAW_HEIGHT);
|
|
gtk_widget_show(RIPlabel);
|
|
|
|
/* create a fixed sized widget for the RIP pixmap */
|
|
RIP = gtk_fixed_new();
|
|
g_assert(RIP != NULL);
|
|
gtk_widget_set_usize(RIP, RIP_IMAGE_WIDTH, RIP_IMAGE_HEIGHT);
|
|
gtk_fixed_put(GTK_FIXED(RIP), pixmap, 0, 0);
|
|
gtk_fixed_put(GTK_FIXED(RIP), RIPlabel, RIP_DRAW_X, RIP_DRAW_Y);
|
|
gtk_widget_show(RIP);
|
|
gtk_box_pack_start(GTK_BOX(GNOME_DIALOG(TW_window)->vbox), RIP, TRUE,
|
|
TRUE, 0);
|
|
|
|
/* create a gnome Less widget for the text stuff */
|
|
gless = GNOME_LESS(gnome_less_new());
|
|
g_assert(gless != NULL);
|
|
gtk_widget_show(GTK_WIDGET(gless));
|
|
gtk_box_pack_start(GTK_BOX(GNOME_DIALOG(TW_window)->vbox),
|
|
GTK_WIDGET(gless), TRUE, TRUE, 0);
|
|
|
|
/* Hook up some signals */
|
|
gtk_signal_connect(GTK_OBJECT(TW_window), "ghack_putstr",
|
|
GTK_SIGNAL_FUNC(ghack_text_window_put_string), NULL);
|
|
|
|
gtk_signal_connect(GTK_OBJECT(TW_window), "ghack_clear",
|
|
GTK_SIGNAL_FUNC(ghack_text_window_clear), NULL);
|
|
|
|
gtk_signal_connect(GTK_OBJECT(TW_window), "ghack_display",
|
|
GTK_SIGNAL_FUNC(ghack_text_window_display), NULL);
|
|
|
|
/* Center the dialog over over parent */
|
|
gnome_dialog_set_parent(GNOME_DIALOG(TW_window),
|
|
GTK_WINDOW(ghack_get_main_window()));
|
|
|
|
gtk_window_set_modal(GTK_WINDOW(TW_window), TRUE);
|
|
gtk_widget_show_all(TW_window);
|
|
gtk_widget_hide(GTK_WIDGET(RIP));
|
|
gnome_dialog_close_hides(GNOME_DIALOG(TW_window), TRUE);
|
|
|
|
return GTK_WIDGET(TW_window);
|
|
}
|
|
|
|
void
|
|
ghack_text_window_rip_string(const char *string)
|
|
{
|
|
/* This is called to specify that the next message window will
|
|
* be a RIP window, which will include this text */
|
|
|
|
showRIP = 1;
|
|
gtk_label_set(GTK_LABEL(RIPlabel), string);
|
|
}
|