void MapEditor::finalise_lightmap() {
    bool is_cancelled = compile_thread->is_cancelled();
    delete compile_thread;
    compile_thread = 0;

    if (!is_cancelled) {
        /* write PNG */
        create_directory("maps", home_workdir);
        std::string filename = home_workdir + dir_separator +
            "maps" + dir_separator + wmap->get_name() + ".lmp";

        FILE *f = fopen(filename.c_str(), "wb");
        if (!f) {
            show_messagebox(Gui::MessageBoxIconError, "Light Map",
                "Saving failed: " + std::string(strerror(errno)));
            return;
        }

        png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0);
        png_infop info_ptr = png_create_info_struct(png_ptr);
        png_init_io(png_ptr, f);
        png_set_IHDR(png_ptr, info_ptr, lightmap_w, lightmap_h, 8, PNG_COLOR_TYPE_RGB_ALPHA,
            PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
        png_write_info(png_ptr, info_ptr);

        /* delete image after writing each row */
        for (int y = 0; y < lightmap_h; y++) {
            png_write_row(png_ptr, lightmap[y]);
            delete[] lightmap[y];
        }
        delete[] lightmap;

        /* close file */
        png_write_end(png_ptr, 0);
        if (info_ptr) {
            png_free_data(png_ptr, info_ptr, PNG_FREE_ALL, -1);
        }
        if (png_ptr) {
            png_destroy_write_struct(&png_ptr, &info_ptr);
        }
        fclose(f);

        if (wmap) {
            wmap->create_lightmap();
        }
    } else {
        delete[] lightmap;
    }

    pop_window();
}
Exemple #2
0
si_t
right_click_menu_NEW_FILE
(void * bt,
 void * msg)
{
    switch(message_get_type(msg))
    {
    	case MESSAGE_TYPE_MOUSE_PRESS:
			save_or_rename_flag=1;
            create_new_file();
			pop_window();
			desktop_flush();
			right_click_menu_cancel();
    	    break;

        default:
            button_default_callback(bt, msg);
            break;
    }
    return 0;
}
Exemple #3
0
si_t
right_click_menu_rename
(void * bt,
 void * msg)
{
	union message* m = (union message*)msg;
    switch(message_get_type(msg))
    {
    	case MESSAGE_TYPE_MOUSE_PRESS:
			if(sh_temp_ptr!=NULL){
    	    	save_or_rename_flag=2;
				pop_window();
				desktop_flush();
				right_click_menu_cancel();
			}
    	    break;

        default:
            button_default_callback(bt, msg);
            break;
    }
	
    return 0;
}
static void on_washrooms_data(void* context) {
  if (current_window == splash_window_get_base(splash_window)) {
    pop_window(false);
  }
}
Exemple #5
0
void Client::window_close_click() {
    pop_window();
}