Editor can now create blank lumps.
This commit is contained in:
parent
18c7f1ed7c
commit
9c03393d10
1 changed files with 173 additions and 31 deletions
204
video/vid_gdk.c
204
video/vid_gdk.c
|
@ -728,6 +728,9 @@ void IN_ShowMouse (void)
|
|||
|
||||
/*
|
||||
* NGUNIX EDITOR GUFF
|
||||
* ==================
|
||||
* Most engines don't come with an integrated toolset.
|
||||
* We are not one of those guys.
|
||||
*/
|
||||
static GtkWidget *ed_window;
|
||||
static GdkGC *ed_pic;
|
||||
|
@ -735,8 +738,8 @@ static qpic_t *ed_file;
|
|||
static GtkWidget *ed_menubar;
|
||||
static GdkRgbCmap *ed_cmap = NULL;
|
||||
|
||||
/* PALETTE SWITCHER
|
||||
* ===============
|
||||
/* EDITOR: PALETTE SWITCHER
|
||||
* ========================
|
||||
* TODO: This somehow affects the main engine despite us using our own GdkColmap...
|
||||
*/
|
||||
gint VID_EditorLoadPalette(gpointer data)
|
||||
|
@ -748,7 +751,7 @@ gint VID_EditorLoadPalette(gpointer data)
|
|||
loadedfile_t *palfile;
|
||||
unsigned int colors[256];
|
||||
|
||||
dialog = gtk_file_chooser_dialog_new ("Open File",
|
||||
dialog = gtk_file_chooser_dialog_new ("NGUNIXEd - Open Palette (.lmp) File",
|
||||
NULL,
|
||||
action,
|
||||
("_Cancel"),
|
||||
|
@ -757,11 +760,21 @@ gint VID_EditorLoadPalette(gpointer data)
|
|||
GTK_RESPONSE_ACCEPT,
|
||||
NULL);
|
||||
|
||||
// Set the dialog and the default path (current directory)
|
||||
GtkFileChooser *chooser = GTK_FILE_CHOOSER (dialog);
|
||||
char path[MAX_OSPATH];
|
||||
sprintf(path, "file://%s", get_current_dir_name());
|
||||
gtk_file_chooser_set_current_folder_uri(chooser, path);
|
||||
|
||||
// Add the filter for .lmp files
|
||||
GtkFileFilter *filter = gtk_file_filter_new ();
|
||||
gtk_file_filter_add_pattern (filter, "*.lmp");
|
||||
gtk_file_chooser_set_filter (chooser, filter);
|
||||
|
||||
res = gtk_dialog_run (GTK_DIALOG (dialog));
|
||||
if (res == GTK_RESPONSE_ACCEPT)
|
||||
{
|
||||
char *filename;
|
||||
GtkFileChooser *chooser = GTK_FILE_CHOOSER (dialog);
|
||||
filename = gtk_file_chooser_get_filename (chooser);
|
||||
|
||||
palfile = COM_LoadFile (filename, 2);
|
||||
|
@ -793,10 +806,11 @@ gint VID_EditorLoadPalette(gpointer data)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* COLORMAP VIEWER
|
||||
* ===============
|
||||
/* EDITOR: COLORMAP VIEWER
|
||||
* =======================
|
||||
* Colormaps differ from lump files in the way that they don't start with a width | height header
|
||||
* Otherwise they are identical in how they refer to palette indexes for their color*/
|
||||
* Otherwise they are identical in how they refer to palette indexes for their color
|
||||
*/
|
||||
gint VID_EditorViewColormap(gpointer data)
|
||||
{
|
||||
int i;
|
||||
|
@ -805,7 +819,7 @@ gint VID_EditorViewColormap(gpointer data)
|
|||
gint res;
|
||||
loadedfile_t *pic;
|
||||
|
||||
dialog = gtk_file_chooser_dialog_new ("Open File",
|
||||
dialog = gtk_file_chooser_dialog_new ("NGUNIXEd - Open Colormap (.lmp) File",
|
||||
NULL,
|
||||
action,
|
||||
("_Cancel"),
|
||||
|
@ -814,11 +828,21 @@ gint VID_EditorViewColormap(gpointer data)
|
|||
GTK_RESPONSE_ACCEPT,
|
||||
NULL);
|
||||
|
||||
// Set the dialog and the default path (current directory)
|
||||
GtkFileChooser *chooser = GTK_FILE_CHOOSER (dialog);
|
||||
char path[MAX_OSPATH];
|
||||
sprintf(path, "file://%s", get_current_dir_name());
|
||||
gtk_file_chooser_set_current_folder_uri(chooser, path);
|
||||
|
||||
// Add the filter for .lmp files
|
||||
GtkFileFilter *filter = gtk_file_filter_new ();
|
||||
gtk_file_filter_add_pattern (filter, "*.lmp");
|
||||
gtk_file_chooser_set_filter (chooser, filter);
|
||||
|
||||
res = gtk_dialog_run (GTK_DIALOG (dialog));
|
||||
if (res == GTK_RESPONSE_ACCEPT)
|
||||
{
|
||||
char *filename;
|
||||
GtkFileChooser *chooser = GTK_FILE_CHOOSER (dialog);
|
||||
filename = gtk_file_chooser_get_filename (chooser);
|
||||
|
||||
pic = COM_LoadFile (filename, 2);
|
||||
|
@ -844,6 +868,11 @@ gint VID_EditorViewColormap(gpointer data)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* EDITOR: GENERATE COLORMAP
|
||||
* ===============
|
||||
* Generate a colormap for the current palette...
|
||||
* makes use of our builtin function for generating them
|
||||
*/
|
||||
gint VID_EditorGenerateColormap(gpointer data)
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
|
@ -852,7 +881,7 @@ gint VID_EditorGenerateColormap(gpointer data)
|
|||
gint res;
|
||||
byte *pic;
|
||||
|
||||
dialog = gtk_file_chooser_dialog_new ("Save File",
|
||||
dialog = gtk_file_chooser_dialog_new ("NGUNIXEd - Save Generated Colormap (.lmp) File",
|
||||
NULL,
|
||||
action,
|
||||
("_Cancel"),
|
||||
|
@ -863,12 +892,15 @@ gint VID_EditorGenerateColormap(gpointer data)
|
|||
chooser = GTK_FILE_CHOOSER (dialog);
|
||||
gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE);
|
||||
|
||||
//if (user_edited_a_new_document)
|
||||
gtk_file_chooser_set_current_name (chooser,
|
||||
("colormap.lmp"));
|
||||
//else
|
||||
// gtk_file_chooser_set_filename (chooser,
|
||||
// existing_filename);
|
||||
// Set the default path (current directory)
|
||||
char path[MAX_OSPATH];
|
||||
sprintf(path, "file://%s", get_current_dir_name());
|
||||
gtk_file_chooser_set_current_folder_uri(chooser, path);
|
||||
|
||||
// Add the filter for .lmp files
|
||||
GtkFileFilter *filter = gtk_file_filter_new ();
|
||||
gtk_file_filter_add_pattern (filter, "*.lmp");
|
||||
gtk_file_chooser_set_filter (chooser, filter);
|
||||
|
||||
res = gtk_dialog_run (GTK_DIALOG (dialog));
|
||||
if (res == GTK_RESPONSE_ACCEPT)
|
||||
|
@ -885,6 +917,11 @@ gint VID_EditorGenerateColormap(gpointer data)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* EDITOR: SAVE LUMP
|
||||
* =================
|
||||
* Saves the pic currently displayed as a lump...
|
||||
* This means that you can save special files, such as colormaps as regular piclumps, too!
|
||||
*/
|
||||
gint VID_EditorSaveFile(gpointer data)
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
|
@ -896,7 +933,7 @@ gint VID_EditorSaveFile(gpointer data)
|
|||
if(!ed_file)
|
||||
return;
|
||||
|
||||
dialog = gtk_file_chooser_dialog_new ("Save File",
|
||||
dialog = gtk_file_chooser_dialog_new ("NGUNIXEd - Save LUMP (.lmp) File",
|
||||
NULL,
|
||||
action,
|
||||
("_Cancel"),
|
||||
|
@ -907,6 +944,16 @@ gint VID_EditorSaveFile(gpointer data)
|
|||
chooser = GTK_FILE_CHOOSER (dialog);
|
||||
gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE);
|
||||
|
||||
// Set the default path (current directory)
|
||||
char path[MAX_OSPATH];
|
||||
sprintf(path, "file://%s", get_current_dir_name());
|
||||
gtk_file_chooser_set_current_folder_uri(chooser, path);
|
||||
|
||||
// Add the filter for .lmp files
|
||||
GtkFileFilter *filter = gtk_file_filter_new ();
|
||||
gtk_file_filter_add_pattern (filter, "*.lmp");
|
||||
gtk_file_chooser_set_filter (chooser, filter);
|
||||
|
||||
//if (user_edited_a_new_document)
|
||||
gtk_file_chooser_set_current_name (chooser,
|
||||
("untitled.lmp"));
|
||||
|
@ -914,26 +961,24 @@ gint VID_EditorSaveFile(gpointer data)
|
|||
// gtk_file_chooser_set_filename (chooser,
|
||||
// existing_filename);
|
||||
|
||||
|
||||
res = gtk_dialog_run (GTK_DIALOG (dialog));
|
||||
if (res == GTK_RESPONSE_ACCEPT)
|
||||
{
|
||||
char *filename;
|
||||
filename = gtk_file_chooser_get_filename (chooser);
|
||||
//save_to_file (filename);
|
||||
pic = malloc(2 + (ed_file->width * ed_file->height));
|
||||
|
||||
printf("Saving IMAGE: %i, %i\n", ed_file->width, ed_file->height);
|
||||
|
||||
//memcpy(pic, &ed_file->width, sizeof(ed_file->width));
|
||||
//memcpy(pic + sizeof(ed_file->width), &ed_file->height, sizeof(ed_file->height));
|
||||
//memcpy(pic + (sizeof(ed_file->width) + sizeof(ed_file->height)), &ed_file->data, sizeof(ed_file->data));
|
||||
pic = malloc((sizeof(int)*2) + (ed_file->width * ed_file->height));
|
||||
|
||||
pic[0] = ed_file->width;
|
||||
pic[1] = ed_file->height;
|
||||
|
||||
memcpy(pic, &ed_file->width, sizeof(int));
|
||||
memcpy(pic + sizeof(int), &ed_file->height, sizeof(int));
|
||||
|
||||
int i;
|
||||
for(i = 0; i < ed_file->width * ed_file->height; i++)
|
||||
pic[i+2] = ed_file->data[i];
|
||||
pic[i+(sizeof(int) * 2)] = ed_file->data[i];
|
||||
|
||||
#if 0
|
||||
printf("Saving IMAGE: %i, %i\n", pic[0], pic[1]);
|
||||
|
@ -950,6 +995,11 @@ gint VID_EditorSaveFile(gpointer data)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* EDITOR: LOAD LUMP
|
||||
* =================
|
||||
* Loads a lump into the editor as a pic...
|
||||
* There is nothing more to it, really
|
||||
*/
|
||||
gint VID_EditorLoadFile(gpointer data)
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
|
@ -957,7 +1007,7 @@ gint VID_EditorLoadFile(gpointer data)
|
|||
gint res;
|
||||
loadedfile_t *pic;
|
||||
|
||||
dialog = gtk_file_chooser_dialog_new ("Open File",
|
||||
dialog = gtk_file_chooser_dialog_new ("NGUNIXEd - Open LUMP (.lmp) File",
|
||||
NULL,
|
||||
action,
|
||||
("_Cancel"),
|
||||
|
@ -966,13 +1016,22 @@ gint VID_EditorLoadFile(gpointer data)
|
|||
GTK_RESPONSE_ACCEPT,
|
||||
NULL);
|
||||
|
||||
// Set the dialog and the default path (current directory)
|
||||
GtkFileChooser *chooser = GTK_FILE_CHOOSER (dialog);
|
||||
char path[MAX_OSPATH];
|
||||
sprintf(path, "file://%s", get_current_dir_name());
|
||||
gtk_file_chooser_set_current_folder_uri(chooser, path);
|
||||
|
||||
// Add the filter for .lmp files
|
||||
GtkFileFilter *filter = gtk_file_filter_new ();
|
||||
gtk_file_filter_add_pattern (filter, "*.lmp");
|
||||
gtk_file_chooser_set_filter (chooser, filter);
|
||||
|
||||
res = gtk_dialog_run (GTK_DIALOG (dialog));
|
||||
if (res == GTK_RESPONSE_ACCEPT)
|
||||
{
|
||||
char *filename;
|
||||
GtkFileChooser *chooser = GTK_FILE_CHOOSER (dialog);
|
||||
filename = gtk_file_chooser_get_filename (chooser);
|
||||
|
||||
filename = gtk_file_chooser_get_filename (chooser);
|
||||
pic = COM_LoadFile (filename, 2);
|
||||
|
||||
if(pic)
|
||||
|
@ -986,20 +1045,93 @@ gint VID_EditorLoadFile(gpointer data)
|
|||
#endif
|
||||
gtk_window_resize(ed_window, ed_file->width, ed_file->height + ed_menubar->allocation.height);
|
||||
g_free (filename);
|
||||
//g_free(pic);
|
||||
}
|
||||
|
||||
gtk_widget_destroy (dialog);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* EDITOR: CREATE LUMP
|
||||
* ===================
|
||||
* Creates a lump based on width*height chosen by the user
|
||||
* The default pixel color is 255 - which is transparent in-engine
|
||||
*/
|
||||
GtkWidget *ed_newwindow;
|
||||
GtkWidget *ed_widthbox;
|
||||
GtkWidget *ed_heightbox;
|
||||
int ed_twi, ed_twh;
|
||||
gint VID_EditorCreatePic(gpointer data)
|
||||
{
|
||||
int i;
|
||||
int mem;
|
||||
|
||||
if(ed_file)
|
||||
free(ed_file);
|
||||
|
||||
mem = (size_t)((sizeof(int) * 2) + (gtk_spin_button_get_value_as_int (ed_widthbox) * gtk_spin_button_get_value_as_int (ed_heightbox)));
|
||||
//mem = 262152;
|
||||
printf("[EDITOR] Trying to allocate %i memory...\n", mem);
|
||||
ed_file = malloc((size_t)mem);
|
||||
ed_file->width = gtk_spin_button_get_value_as_int (ed_widthbox);
|
||||
ed_file->height = gtk_spin_button_get_value_as_int (ed_heightbox);
|
||||
|
||||
for(i=0; i < (ed_file->width * ed_file->height); i++)
|
||||
ed_file->data[i] = 255;
|
||||
|
||||
gtk_window_resize(ed_window, ed_file->width, ed_file->height + ed_menubar->allocation.height);
|
||||
gtk_widget_destroy(ed_newwindow);
|
||||
}
|
||||
gint VID_EditorNewFile(gpointer data)
|
||||
{
|
||||
GtkWidget *table;
|
||||
GtkWidget *label1;
|
||||
GtkWidget *label2;
|
||||
|
||||
ed_newwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_position(GTK_WINDOW(ed_newwindow), GTK_WIN_POS_CENTER);
|
||||
gtk_window_set_title(GTK_WINDOW(ed_newwindow), "NGUNIXEd - New 2D LUMP File");
|
||||
gtk_container_set_border_width(GTK_CONTAINER(ed_newwindow), 10);
|
||||
|
||||
table = gtk_table_new(3, 2, FALSE);
|
||||
gtk_container_add(GTK_CONTAINER(ed_newwindow), table);
|
||||
|
||||
label1 = gtk_label_new("Width");
|
||||
label2 = gtk_label_new("Height");
|
||||
gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1, GTK_FILL | GTK_SHRINK, GTK_FILL | GTK_SHRINK, 5, 5);
|
||||
gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2, GTK_FILL | GTK_SHRINK, GTK_FILL | GTK_SHRINK, 5, 5);
|
||||
|
||||
ed_widthbox = gtk_spin_button_new_with_range (1, 512, 1);
|
||||
ed_heightbox = gtk_spin_button_new_with_range (1, 512, 1);
|
||||
gtk_table_attach(GTK_TABLE(table), ed_widthbox, 1, 2, 0, 1, GTK_FILL | GTK_SHRINK, GTK_FILL | GTK_SHRINK, 5, 5);
|
||||
gtk_table_attach(GTK_TABLE(table), ed_heightbox, 1, 2, 1, 2, GTK_FILL | GTK_SHRINK, GTK_FILL | GTK_SHRINK, 5, 5);
|
||||
|
||||
GtkWidget *btnok = gtk_button_new_with_label("Create");
|
||||
gtk_table_attach(GTK_TABLE(table), btnok, 1, 2, 2, 3, GTK_FILL | GTK_SHRINK, GTK_FILL | GTK_SHRINK, 5, 5);
|
||||
|
||||
gtk_widget_show_all(ed_newwindow);
|
||||
|
||||
g_signal_connect(ed_newwindow, "destroy", G_CALLBACK(gtk_widget_destroy), NULL);
|
||||
g_signal_connect(btnok, "clicked", G_CALLBACK(VID_EditorCreatePic), G_OBJECT(ed_newwindow));
|
||||
}
|
||||
|
||||
/* EDITOR: QUIT
|
||||
* ============
|
||||
* Kills the editor, unloads any pics, etc.
|
||||
*/
|
||||
void VID_EditorQuit(void)
|
||||
{
|
||||
if(ed_file)
|
||||
free(ed_file);
|
||||
|
||||
gtk_widget_destroy(ed_window);
|
||||
vid_ineditor = false;
|
||||
gtk_main_quit();
|
||||
}
|
||||
|
||||
/* EDITOR: UPDATE
|
||||
* ==============
|
||||
* Called every once in a while to update the picture inside the window...
|
||||
*/
|
||||
gint VID_EditorUpdate(gpointer data)
|
||||
{
|
||||
if(ed_file)
|
||||
|
@ -1007,6 +1139,15 @@ gint VID_EditorUpdate(gpointer data)
|
|||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* EDITOR: MAIN FUNCTION
|
||||
* =====================
|
||||
* This is the first function called when calling the editor.
|
||||
* Here we get functions to Create, Load and Save LUMPS, as well as
|
||||
* play with palettes and generate colormaps.
|
||||
*
|
||||
* TODO: Import/Export of PCX files
|
||||
*/
|
||||
void VID_LaunchEditor(void)
|
||||
{
|
||||
GtkWidget *vbox;
|
||||
|
@ -1018,7 +1159,7 @@ void VID_LaunchEditor(void)
|
|||
ed_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_position(GTK_WINDOW(ed_window), GTK_WIN_POS_CENTER);
|
||||
gtk_window_set_default_size(GTK_WINDOW(ed_window), 300, 200);
|
||||
gtk_window_set_title(GTK_WINDOW(ed_window), "NGUNIX - 2D Lump Editor");
|
||||
gtk_window_set_title(GTK_WINDOW(ed_window), "NGUNIXEd - 2D Lump Editor");
|
||||
|
||||
vbox = gtk_vbox_new(FALSE, 0);
|
||||
gtk_container_add(GTK_CONTAINER(ed_window), vbox);
|
||||
|
@ -1054,6 +1195,7 @@ void VID_LaunchEditor(void)
|
|||
gtk_box_pack_start(GTK_BOX(vbox), ed_menubar, FALSE, FALSE, 0);
|
||||
|
||||
g_signal_connect(G_OBJECT(ed_window), "destroy", G_CALLBACK(VID_EditorQuit), NULL);
|
||||
g_signal_connect(G_OBJECT(newMi), "activate", G_CALLBACK(VID_EditorNewFile), NULL);
|
||||
g_signal_connect(G_OBJECT(loadMi), "activate", G_CALLBACK(VID_EditorLoadFile), NULL);
|
||||
g_signal_connect(G_OBJECT(saveMi), "activate", G_CALLBACK(VID_EditorSaveFile), NULL);
|
||||
g_signal_connect(G_OBJECT(quitMi), "activate", G_CALLBACK(VID_EditorQuit), NULL);
|
||||
|
|
Loading…
Reference in a new issue