button::button(CVideo& video, const std::string& label, button::TYPE type, std::string button_image_name, SPACE_CONSUMPTION spacing, const bool auto_join) : widget(video, auto_join), type_(type), label_(label), image_(NULL), pressedImage_(NULL), activeImage_(NULL), pressedActiveImage_(NULL), button_(true), state_(NORMAL), pressed_(false), spacing_(spacing), base_height_(0), base_width_(0) { if(button_image_name.empty() && type == TYPE_PRESS) { button_image_name = "button"; } else if(button_image_name.empty() && type == TYPE_CHECK) { button_image_name = "checkbox"; } const std::string button_image_file = "buttons/" + button_image_name + ".png"; surface button_image(image::get_image(button_image_file)); surface pressed_image(image::get_image("buttons/" + button_image_name + "-pressed.png")); surface active_image(image::get_image("buttons/" + button_image_name + "-active.png")); surface pressed_active_image; if (pressed_image.null()) pressed_image.assign(button_image); if (active_image.null()) active_image.assign(button_image); if (type == TYPE_CHECK) { pressed_active_image.assign(image::get_image("buttons/" + button_image_name + "-active-pressed.png")); if (pressed_active_image.null()) pressed_active_image.assign(pressed_image); } if (button_image.null()) { ERR_DP << "error initializing button!\n"; throw error(); } base_height_ = button_image->h; base_width_ = button_image->w; if (type_ != TYPE_IMAGE){ set_label(label); } if(type == TYPE_PRESS) { image_.assign(scale_surface(button_image,location().w,location().h)); pressedImage_.assign(scale_surface(pressed_image,location().w,location().h)); activeImage_.assign(scale_surface(active_image,location().w,location().h)); } else { image_.assign(scale_surface(button_image,button_image->w,button_image->h)); pressedImage_.assign(scale_surface(pressed_image,button_image->w,button_image->h)); activeImage_.assign(scale_surface(active_image,button_image->w,button_image->h)); if (type == TYPE_CHECK) pressedActiveImage_.assign(scale_surface(pressed_active_image, button_image->w, button_image->h)); } if (type_ == TYPE_IMAGE){ calculate_size(); } }
void button::load_images() { std::string size_postfix; switch (location().h) { case 25: size_postfix = "_25"; break; case 30: size_postfix = "_30"; break; case 60: size_postfix = "_60"; break; default: break; } surface button_image(image::get_image(button_image_name_ + ".png" + button_image_path_suffix_)); surface pressed_image(image::get_image(button_image_name_ + "-pressed.png"+ button_image_path_suffix_)); surface active_image(image::get_image(button_image_name_ + "-active.png"+ button_image_path_suffix_)); surface disabled_image; if (file_exists(game_config::path + "/images/" + button_image_name_ + "-disabled.png"+ button_image_path_suffix_)) disabled_image.assign((image::get_image(button_image_name_ + "-disabled.png"+ button_image_path_suffix_))); surface pressed_disabled_image, pressed_active_image, touched_image; if (!button_overlay_image_name_.empty()) { overlayImage_.assign(image::get_image(button_overlay_image_name_ + size_postfix + ".png"+ button_image_path_suffix_)); overlayPressedImage_.assign(image::get_image(button_overlay_image_name_ + size_postfix + "-pressed.png"+ button_image_path_suffix_)); if (file_exists(game_config::path + "/images/" + button_overlay_image_name_ + size_postfix + "-active.png"+ button_image_path_suffix_)) overlayActiveImage_.assign(image::get_image(button_overlay_image_name_ + size_postfix + "-active.png"+ button_image_path_suffix_)); if (file_exists(game_config::path + "/images/" + button_overlay_image_name_ + size_postfix + "-disabled.png"+ button_image_path_suffix_)) overlayDisabledImage_.assign(image::get_image(button_overlay_image_name_ + size_postfix + "-disabled.png"+ button_image_path_suffix_)); if (overlayDisabledImage_.null()) overlayDisabledImage_ = image::get_image(button_overlay_image_name_ + size_postfix + ".png~GS()" + button_image_path_suffix_); if (file_exists(game_config::path + "/images/" + button_overlay_image_name_ + size_postfix + "-disabled-pressed.png"+ button_image_path_suffix_)) overlayPressedDisabledImage_.assign(image::get_image(button_overlay_image_name_ + size_postfix + "-disabled-pressed.png"+ button_image_path_suffix_)); if (overlayPressedDisabledImage_.null()) overlayPressedDisabledImage_ = image::get_image(button_overlay_image_name_ + size_postfix + "-pressed.png~GS()"+ button_image_path_suffix_); } else { overlayImage_.assign(NULL); } if (disabled_image == NULL) { disabled_image = image::get_image(button_image_name_ + ".png~GS()" + button_image_path_suffix_); } if (pressed_image.null()) pressed_image.assign(button_image); if (active_image.null()) active_image.assign(button_image); if (type_ == TYPE_CHECK || type_ == TYPE_RADIO) { touched_image.assign(image::get_image(button_image_name_ + "-touched.png"+ button_image_path_suffix_)); if (touched_image.null()) touched_image.assign(pressed_image); pressed_active_image.assign(image::get_image(button_image_name_ + "-active-pressed.png"+ button_image_path_suffix_)); if (pressed_active_image.null()) pressed_active_image.assign(pressed_image); if (file_exists(game_config::path + "/images/" + button_image_name_ + size_postfix + "-disabled-pressed.png"+ button_image_path_suffix_)) pressed_disabled_image.assign(image::get_image(button_image_name_ + "-disabled-pressed.png"+ button_image_path_suffix_)); if (pressed_disabled_image.null()) pressed_disabled_image = image::get_image(button_image_name_ + "-pressed.png~GS()"+ button_image_path_suffix_); } if (button_image.null()) { ERR_DP << "error initializing button!\n"; throw error(); } base_height_ = button_image->h; base_width_ = button_image->w; if (type_ != TYPE_IMAGE) { set_label(label_); } if(type_ == TYPE_PRESS || type_ == TYPE_TURBO) { image_.assign(scale_surface(button_image,location().w,location().h)); pressedImage_.assign(scale_surface(pressed_image,location().w,location().h)); activeImage_.assign(scale_surface(active_image,location().w,location().h)); disabledImage_.assign(scale_surface(disabled_image,location().w,location().h)); } else { image_.assign(scale_surface(button_image,button_image->w,button_image->h)); activeImage_.assign(scale_surface(active_image,button_image->w,button_image->h)); disabledImage_.assign(scale_surface(disabled_image,button_image->w,button_image->h)); pressedImage_.assign(scale_surface(pressed_image,button_image->w,button_image->h)); if (type_ == TYPE_CHECK || type_ == TYPE_RADIO) { pressedDisabledImage_.assign(scale_surface(pressed_disabled_image,button_image->w,button_image->h)); pressedActiveImage_.assign(scale_surface(pressed_active_image, button_image->w, button_image->h)); touchedImage_.assign(scale_surface(touched_image, button_image->w, button_image->h)); } } if (type_ == TYPE_IMAGE){ calculate_size(); } }
void button::load_images() { std::string size_postfix; switch (location().h) { case 25: size_postfix = "_25"; break; case 30: size_postfix = "_30"; break; case 60: size_postfix = "_60"; break; default: break; } #ifdef SDL_GPU sdl::timage button_image(image::get_texture(button_image_name_ + ".png" + button_image_path_suffix_)); sdl::timage pressed_image(image::get_texture(button_image_name_ + "-pressed.png"+ button_image_path_suffix_)); sdl::timage active_image(image::get_texture(button_image_name_ + "-active.png"+ button_image_path_suffix_)); sdl::timage disabled_image; if (filesystem::file_exists(game_config::path + "/images/" + button_image_name_ + "-disabled.png")) disabled_image = image::get_texture(button_image_name_ + "-disabled.png"+ button_image_path_suffix_); sdl::timage pressed_disabled_image, pressed_active_image, touched_image; if (!button_overlay_image_name_.empty()) { overlayImage_ = image::get_texture(button_overlay_image_name_ + size_postfix + ".png"+ button_image_path_suffix_); overlayPressedImage_ = image::get_texture(button_overlay_image_name_ + size_postfix + "-pressed.png"+ button_image_path_suffix_); if (filesystem::file_exists(game_config::path + "/images/" + button_overlay_image_name_ + size_postfix + "-active.png")) overlayActiveImage_ = image::get_texture(button_overlay_image_name_ + size_postfix + "-active.png"+ button_image_path_suffix_); if (filesystem::file_exists(game_config::path + "/images/" + button_overlay_image_name_ + size_postfix + "-disabled.png")) overlayDisabledImage_ = image::get_texture(button_overlay_image_name_ + size_postfix + "-disabled.png"+ button_image_path_suffix_); if (overlayDisabledImage_.null()) overlayDisabledImage_ = image::get_texture(button_overlay_image_name_ + size_postfix + ".png~GS()" + button_image_path_suffix_); if (filesystem::file_exists(game_config::path + "/images/" + button_overlay_image_name_ + size_postfix + "-disabled-pressed.png")) overlayPressedDisabledImage_ = image::get_texture(button_overlay_image_name_ + size_postfix + "-disabled-pressed.png"); if (overlayPressedDisabledImage_.null()) overlayPressedDisabledImage_ = image::get_texture(button_overlay_image_name_ + size_postfix + "-pressed.png~GS()"+ button_image_path_suffix_); } else { overlayImage_ = sdl::timage(); } if (disabled_image.null()) { disabled_image = image::get_texture(button_image_name_ + ".png~GS()" + button_image_path_suffix_); } if (pressed_image.null()) pressed_image = button_image; if (active_image.null()) active_image = button_image; if (type_ == TYPE_CHECK || type_ == TYPE_RADIO) { touched_image = image::get_texture(button_image_name_ + "-touched.png"+ button_image_path_suffix_); if (touched_image.null()) touched_image = pressed_image; pressed_active_image = (image::get_texture(button_image_name_ + "-active-pressed.png"+ button_image_path_suffix_)); if (pressed_active_image.null()) pressed_active_image = pressed_image; if (filesystem::file_exists(game_config::path + "/images/" + button_image_name_ + size_postfix + "-disabled-pressed.png")) pressed_disabled_image = image::get_texture(button_image_name_ + "-disabled-pressed.png"+ button_image_path_suffix_); if (pressed_disabled_image.null()) pressed_disabled_image = image::get_texture(button_image_name_ + "-pressed.png~GS()"+ button_image_path_suffix_); } if (button_image.null()) { ERR_DP << "error initializing button!" << std::endl; throw error(); } base_height_ = button_image.height(); base_width_ = button_image.width(); if (type_ != TYPE_IMAGE) { set_label(label_text_); } image_ = button_image; pressedImage_ = pressed_image; activeImage_ = active_image; disabledImage_ = disabled_image; if (type_ == TYPE_CHECK || type_ == TYPE_RADIO) { pressedDisabledImage_ = pressed_disabled_image; pressedActiveImage_ = pressed_active_image; touchedImage_ = touched_image; } if (type_ == TYPE_IMAGE){ calculate_size(); } #else surface button_image(image::get_image(button_image_name_ + ".png" + button_image_path_suffix_)); surface pressed_image(image::get_image(button_image_name_ + "-pressed.png"+ button_image_path_suffix_)); surface active_image(image::get_image(button_image_name_ + "-active.png"+ button_image_path_suffix_)); surface disabled_image; if (filesystem::file_exists(game_config::path + "/images/" + button_image_name_ + "-disabled.png")) disabled_image.assign((image::get_image(button_image_name_ + "-disabled.png"+ button_image_path_suffix_))); surface pressed_disabled_image, pressed_active_image, touched_image; if (!button_overlay_image_name_.empty()) { overlayImage_.assign(image::get_image(button_overlay_image_name_ + size_postfix + ".png"+ button_image_path_suffix_)); overlayPressedImage_.assign(image::get_image(button_overlay_image_name_ + size_postfix + "-pressed.png"+ button_image_path_suffix_)); if (filesystem::file_exists(game_config::path + "/images/" + button_overlay_image_name_ + size_postfix + "-active.png")) overlayActiveImage_.assign(image::get_image(button_overlay_image_name_ + size_postfix + "-active.png"+ button_image_path_suffix_)); if (filesystem::file_exists(game_config::path + "/images/" + button_overlay_image_name_ + size_postfix + "-disabled.png")) overlayDisabledImage_.assign(image::get_image(button_overlay_image_name_ + size_postfix + "-disabled.png"+ button_image_path_suffix_)); if (overlayDisabledImage_.null()) overlayDisabledImage_ = image::get_image(button_overlay_image_name_ + size_postfix + ".png~GS()" + button_image_path_suffix_); if (filesystem::file_exists(game_config::path + "/images/" + button_overlay_image_name_ + size_postfix + "-disabled-pressed.png")) overlayPressedDisabledImage_.assign(image::get_image(button_overlay_image_name_ + size_postfix + "-disabled-pressed.png"+ button_image_path_suffix_)); if (overlayPressedDisabledImage_.null()) overlayPressedDisabledImage_ = image::get_image(button_overlay_image_name_ + size_postfix + "-pressed.png~GS()"+ button_image_path_suffix_); } else { overlayImage_.assign(NULL); } if (disabled_image == NULL) { disabled_image = image::get_image(button_image_name_ + ".png~GS()" + button_image_path_suffix_); } if (pressed_image.null()) pressed_image.assign(button_image); if (active_image.null()) active_image.assign(button_image); if (type_ == TYPE_CHECK || type_ == TYPE_RADIO) { touched_image.assign(image::get_image(button_image_name_ + "-touched.png"+ button_image_path_suffix_)); if (touched_image.null()) touched_image.assign(pressed_image); pressed_active_image.assign(image::get_image(button_image_name_ + "-active-pressed.png"+ button_image_path_suffix_)); if (pressed_active_image.null()) pressed_active_image.assign(pressed_image); if (filesystem::file_exists(game_config::path + "/images/" + button_image_name_ + size_postfix + "-disabled-pressed.png")) pressed_disabled_image.assign(image::get_image(button_image_name_ + "-disabled-pressed.png"+ button_image_path_suffix_)); if (pressed_disabled_image.null()) pressed_disabled_image = image::get_image(button_image_name_ + "-pressed.png~GS()"+ button_image_path_suffix_); } if (button_image.null()) { std::string err_msg = "error initializing button images! file name: "; err_msg += button_image_name_; err_msg += ".png"; ERR_DP << err_msg << std::endl; throw game::error(err_msg); } base_height_ = button_image->h; base_width_ = button_image->w; if (type_ != TYPE_IMAGE) { set_label(label_text_); } if(type_ == TYPE_PRESS || type_ == TYPE_TURBO) { image_.assign(scale_surface(button_image,location().w,location().h)); pressedImage_.assign(scale_surface(pressed_image,location().w,location().h)); activeImage_.assign(scale_surface(active_image,location().w,location().h)); disabledImage_.assign(scale_surface(disabled_image,location().w,location().h)); } else { image_.assign(scale_surface(button_image,button_image->w,button_image->h)); activeImage_.assign(scale_surface(active_image,button_image->w,button_image->h)); disabledImage_.assign(scale_surface(disabled_image,button_image->w,button_image->h)); pressedImage_.assign(scale_surface(pressed_image,button_image->w,button_image->h)); if (type_ == TYPE_CHECK || type_ == TYPE_RADIO) { pressedDisabledImage_.assign(scale_surface(pressed_disabled_image,button_image->w,button_image->h)); pressedActiveImage_.assign(scale_surface(pressed_active_image, button_image->w, button_image->h)); touchedImage_.assign(scale_surface(touched_image, button_image->w, button_image->h)); } } if (type_ == TYPE_IMAGE){ calculate_size(); } #endif }