From: <au...@us...> - 2010-05-15 18:51:36
|
Revision: 5443 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=5443&view=rev Author: auria Date: 2010-05-15 18:51:29 +0000 (Sat, 15 May 2010) Log Message: ----------- Forbid changing resolution in-game Modified Paths: -------------- main/trunk/src/guiengine/event_handler.cpp main/trunk/src/guiengine/skin.cpp main/trunk/src/guiengine/widget.cpp main/trunk/src/guiengine/widget.hpp main/trunk/src/guiengine/widgets/dynamic_ribbon_widget.cpp main/trunk/src/states_screens/kart_selection.cpp main/trunk/src/states_screens/options_screen_video.cpp main/trunk/src/states_screens/race_setup_screen.cpp Modified: main/trunk/src/guiengine/event_handler.cpp =================================================================== --- main/trunk/src/guiengine/event_handler.cpp 2010-05-15 18:10:55 UTC (rev 5442) +++ main/trunk/src/guiengine/event_handler.cpp 2010-05-15 18:51:29 UTC (rev 5443) @@ -480,6 +480,8 @@ Widget* w = GUIEngine::getWidget(id); if (w == NULL) break; + if (w->m_deactivated) return EVENT_BLOCK; + // These events are only triggered by keyboard/mouse (or so I hope...) const int playerID = input_manager->getPlayerKeyboardID(); if (input_manager->masterPlayerOnly() && playerID != PLAYER_ID_GAME_MASTER) break; Modified: main/trunk/src/guiengine/skin.cpp =================================================================== --- main/trunk/src/guiengine/skin.cpp 2010-05-15 18:10:55 UTC (rev 5442) +++ main/trunk/src/guiengine/skin.cpp 2010-05-15 18:51:29 UTC (rev 5443) @@ -657,7 +657,7 @@ { // for now, when this kind of widget is disabled, just hide it. we can change that behaviour if // we ever need to... - if (widget->m_deactivated) return; + //if (widget->m_deactivated) return; bool mark_selected = widget->isSelected(PLAYER_ID_GAME_MASTER); bool always_show_selection = false; @@ -676,6 +676,9 @@ /* tab-bar ribbons */ if (type == RIBBON_TABS) { + // for now jsut don't draw it, change that if ever needed + if (widget->m_deactivated) return; + BoxRenderParams* params; if (mark_selected && (focused || parent_focused)) @@ -726,8 +729,6 @@ /* draw "selection bubble" if relevant */ if (always_show_selection && mark_selected) { - //GUIEngine::getDriver()->draw2DRectangle( SColor(255, 255,0,0), rect ); - ITexture* tex_bubble = SkinConfig::m_render_params["selectionHalo::neutral"].getImage(); const int texture_w = tex_bubble->getSize().Width; @@ -746,10 +747,20 @@ rect.UpperLeftCorner.Y - y_shift_up), dimension2d< s32 >(rectWidth, rectHeight) ); - //GUIEngine::getDriver()->draw2DRectangleOutline( rect2, SColor(255, 0,255,0) ); - - GUIEngine::getDriver()->draw2DImage(tex_bubble, rect2, source_area, - 0 /* no clipping */, 0, true /* alpha */); + if (widget->m_deactivated) + { + SColor colors[] = { SColor(100,255,255,255), + SColor(100,255,255,255), + SColor(100,255,255,255), + SColor(100,255,255,255) }; + GUIEngine::getDriver()->draw2DImage(tex_bubble, rect2, source_area, + 0 /* no clipping */, colors, true /* alpha */); + } + else + { + GUIEngine::getDriver()->draw2DImage(tex_bubble, rect2, source_area, + 0 /* no clipping */, 0, true /* alpha */); + } } // if multiple player selected the same ribbon item, we need to know to make it visible @@ -987,11 +998,6 @@ */ void Skin::drawIconButton(const core::rect< s32 > &rect, Widget* widget, const bool pressed, bool focused) { - // for now, when this kind of widget is disabled, just hide it. we can change that behaviour if - // we ever need to... - if (widget->m_deactivated) return; - - if (focused) { int grow = 45; @@ -1046,10 +1052,24 @@ } IconButtonWidget* icon_widget = (IconButtonWidget*) widget; - GUIEngine::getDriver()->draw2DImage(icon_widget->m_texture, sized_rect, - core::rect<s32>(0,0,icon_widget->m_texture_w, icon_widget->m_texture_h), - 0 /* no clipping */, 0, true /* alpha */); + if (widget->m_deactivated) + { + SColor colors[] = { SColor(100,255,255,255), + SColor(100,255,255,255), + SColor(100,255,255,255), + SColor(100,255,255,255) }; + GUIEngine::getDriver()->draw2DImage(icon_widget->m_texture, sized_rect, + core::rect<s32>(0,0,icon_widget->m_texture_w, icon_widget->m_texture_h), + 0 /* no clipping */, colors, true /* alpha */); + } + else + { + GUIEngine::getDriver()->draw2DImage(icon_widget->m_texture, sized_rect, + core::rect<s32>(0,0,icon_widget->m_texture_w, icon_widget->m_texture_h), + 0 /* no clipping */, 0, true /* alpha */); + } + } @@ -1058,10 +1078,6 @@ */ void Skin::drawCheckBox(const core::rect< s32 > &rect, Widget* widget, bool focused) { - // for now, when this kind of widget is disabled, just hide it. we can change that behaviour if - // we ever need to... - if (widget->m_deactivated) return; - CheckBoxWidget* w = dynamic_cast<CheckBoxWidget*>(widget); ITexture* texture; @@ -1082,8 +1098,20 @@ const core::rect< s32 > source_area = core::rect< s32 >(0, 0, texture_w, texture_h); - GUIEngine::getDriver()->draw2DImage( texture, rect, source_area, - 0 /* no clipping */, 0, true /* alpha */); + if (widget->m_deactivated) + { + SColor colors[] = { SColor(100,255,255,255), + SColor(100,255,255,255), + SColor(100,255,255,255), + SColor(100,255,255,255) }; + GUIEngine::getDriver()->draw2DImage( texture, rect, source_area, + 0 /* no clipping */, colors, true /* alpha */); + } + else + { + GUIEngine::getDriver()->draw2DImage( texture, rect, source_area, + 0 /* no clipping */, 0, true /* alpha */); + } } /** Modified: main/trunk/src/guiengine/widget.cpp =================================================================== --- main/trunk/src/guiengine/widget.cpp 2010-05-15 18:10:55 UTC (rev 5442) +++ main/trunk/src/guiengine/widget.cpp 2010-05-15 18:51:29 UTC (rev 5443) @@ -132,6 +132,34 @@ } // ----------------------------------------------------------------------------- + +void Widget::setActivated() +{ + if (!m_deactivated) return; // already active, nothing to do + + m_deactivated = false; + const int count = m_children.size(); + for (int n=0; n<count; n++) + { + m_children[n].setActivated(); + } +} + +// ----------------------------------------------------------------------------- + +void Widget::setDeactivated() +{ + if (m_deactivated) return; // already deactivated, nothing to do + + m_deactivated = true; + const int count = m_children.size(); + for (int n=0; n<count; n++) + { + m_children[n].setDeactivated(); + } +} + +// ----------------------------------------------------------------------------- namespace GUIEngine { // IDs must not start at 0, since it appears their GUI engine hardcodes some ID values... xD Modified: main/trunk/src/guiengine/widget.hpp =================================================================== --- main/trunk/src/guiengine/widget.hpp 2010-05-15 18:10:55 UTC (rev 5442) +++ main/trunk/src/guiengine/widget.hpp 2010-05-15 18:51:29 UTC (rev 5443) @@ -230,6 +230,9 @@ /** A bitmask of which badges to show, if any; choices are *_BADGE, defined above */ int m_badges; + /** A simple flag that can be raised to hide this widget */ + bool m_deactivated; + public: /** * This is set to NULL by default; set to something else in a widget to mean @@ -296,6 +299,12 @@ /** Set to false if widget is something that should not receieve focus */ bool m_focusable; + /** \brief undos setDeactivated() */ + void setActivated(); + + /** \brief greys out the widget, making it not clickable for the user */ + void setDeactivated(); + /** Used in two cases : 1) For 'placeholder' divisions; at the time the layout is created, there is nothing to place there yet, but we know there eventually will. So in this case pass 'true' to the @@ -304,9 +313,6 @@ it instead of creating a new ID if it is. In practice, it's not widely implemented (FIXME) */ int m_reserved_id; - /** A simple flag that can be raised to hide this widget */ - bool m_deactivated; - Widget(WidgetType type, bool reserve_id = false); virtual ~Widget(); Modified: main/trunk/src/guiengine/widgets/dynamic_ribbon_widget.cpp =================================================================== --- main/trunk/src/guiengine/widgets/dynamic_ribbon_widget.cpp 2010-05-15 18:10:55 UTC (rev 5442) +++ main/trunk/src/guiengine/widgets/dynamic_ribbon_widget.cpp 2010-05-15 18:51:29 UTC (rev 5443) @@ -601,6 +601,8 @@ void DynamicRibbonWidget::scroll(const int x_delta) { + if (m_deactivated) return; + // Refuse to scroll when everything is visible if ((int)m_items.size() <= m_row_amount*m_col_amount) return; @@ -874,6 +876,8 @@ // ----------------------------------------------------------------------------- bool DynamicRibbonWidget::setSelection(int item_id, const int playerID, const bool focusIt) { + if (m_deactivated) return false; + //printf("****DynamicRibbonWidget::setSelection()****\n"); m_selected_item[playerID] = item_id; @@ -911,6 +915,8 @@ // ----------------------------------------------------------------------------- bool DynamicRibbonWidget::setSelection(const std::string item_codename, const int playerID, const bool focusIt) { + if (m_deactivated) return false; + const int item_count = m_items.size(); for (int n=0; n<item_count; n++) { Modified: main/trunk/src/states_screens/kart_selection.cpp =================================================================== --- main/trunk/src/states_screens/kart_selection.cpp 2010-05-15 18:10:55 UTC (rev 5442) +++ main/trunk/src/states_screens/kart_selection.cpp 2010-05-15 18:51:29 UTC (rev 5443) @@ -762,7 +762,7 @@ RibbonWidget* tabs = this->getWidget<RibbonWidget>("kartgroups"); assert( tabs != NULL ); - tabs->m_deactivated = false; + tabs->setActivated(); // FIXME: Reload previous kart selection screen state m_kart_widgets.clearAndDeleteAll(); @@ -1122,7 +1122,7 @@ RibbonWidget* tabs = this->getWidget<RibbonWidget>("kartgroups"); assert( tabs != NULL ); - tabs->m_deactivated = true; + tabs->setDeactivated(); // validate choices to notify player of duplicates const bool names_ok = validateIdentChoices(); Modified: main/trunk/src/states_screens/options_screen_video.cpp =================================================================== --- main/trunk/src/states_screens/options_screen_video.cpp 2010-05-15 18:10:55 UTC (rev 5442) +++ main/trunk/src/states_screens/options_screen_video.cpp 2010-05-15 18:51:29 UTC (rev 5443) @@ -25,6 +25,7 @@ #include "audio/sfx_base.hpp" #include "graphics/irr_driver.hpp" #include "guiengine/screen.hpp" +#include "guiengine/widgets/button_widget.hpp" #include "guiengine/widgets/check_box_widget.hpp" #include "guiengine/widgets/dynamic_ribbon_widget.hpp" #include "guiengine/widgets/spinner_widget.hpp" @@ -77,7 +78,7 @@ { std::cerr << "WARNING: could not find a single skin, make sure that " "the data files are correctly installed\n"; - skinSelector->m_deactivated = true; + skinSelector->setDeactivated(); return; } @@ -103,6 +104,9 @@ GUIEngine::SpinnerWidget* skinSelector = this->getWidget<GUIEngine::SpinnerWidget>("skinchoice"); assert( skinSelector != NULL ); + GUIEngine::ButtonWidget* applyBtn = this->getWidget<GUIEngine::ButtonWidget>("apply_resolution"); + assert( applyBtn != NULL ); + // ---- video modes DynamicRibbonWidget* res = this->getWidget<DynamicRibbonWidget>("resolutions"); assert( res != NULL ); @@ -147,6 +151,20 @@ res->updateItemDisplay(); + // forbid changing resolution from in-game + if (StateManager::get()->getGameState() == GUIEngine::INGAME_MENU) + { + res->setDeactivated(); + full->setDeactivated(); + applyBtn->setDeactivated(); + } + else + { + res->setActivated(); + full->setActivated(); + applyBtn->setActivated(); + } + // ---- select current resolution every time const std::vector<VideoMode>& modes = irr_driver->getVideoModes(); const int amount = modes.size(); Modified: main/trunk/src/states_screens/race_setup_screen.cpp =================================================================== --- main/trunk/src/states_screens/race_setup_screen.cpp 2010-05-15 18:10:55 UTC (rev 5442) +++ main/trunk/src/states_screens/race_setup_screen.cpp 2010-05-15 18:51:29 UTC (rev 5443) @@ -142,16 +142,18 @@ // deactivate the AI karts count widget for modes for which we have no AI //FIXME? Don't hardcode here which modes have an AI and which don't SpinnerWidget* kartamount = getWidget<SpinnerWidget>("aikartamount"); - kartamount->m_deactivated = (gamemode == "3strikes"); - - // use this dirty trick to hide the number inside the spinner (FIXME) - if (kartamount->m_deactivated) + if (gamemode == "3strikes") { + kartamount->setDeactivated(); + + // dirty trick to hide the number inside the spinner (FIXME) kartamount->m_text = L"-"; kartamount->setValue( kartamount->getValue() ); } - else if (kartamount->m_text.size() > 0) + else { + kartamount->setActivated(); + kartamount->m_text = L""; kartamount->setValue( kartamount->getValue() ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |