Reduce overlapping in add-ons screen by making the name column wider and the date column smaller

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@9070 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
auria 2011-06-25 23:34:06 +00:00
parent 264a54fd2f
commit c96b00dc6b
6 changed files with 55 additions and 13 deletions

View File

@ -32,6 +32,7 @@ ScalableFont::ScalableFont(IGUIEnvironment *env, const io::path& filename)
m_fallback_kerning_width = 0;
m_fallback_font_scale = 1.0f;
m_scale = 1.0f;
m_tab_stop = 0.5f;
m_is_hollow_copy = false;
m_black_border = false;
m_shadow = false;
@ -479,8 +480,8 @@ void ScalableFont::draw(const core::stringw& text,
{
const int where = text.findFirst(L'\t');
core::stringw substr = text.subString(0, where-1);
text_dimension = getDimension(text.c_str());
offset.X += (position.getWidth()/2 - text_dimension.Width);
text_dimension = getDimension(substr.c_str()) + getDimension(L"XX");
offset.X += (position.getWidth()*m_tab_stop - text_dimension.Width);
}
// ---- collect character locations
@ -493,10 +494,10 @@ void ScalableFont::draw(const core::stringw& text,
{
wchar_t c = text[i];
//hack: one tab character is supported, it moves the cursor to the middle of the area
//hack: one tab character is supported, it moves the cursor to the tab stop
if (c == L'\t')
{
offset.X = position.UpperLeftCorner.X + position.getWidth()/2;
offset.X = position.UpperLeftCorner.X + position.getWidth()*m_tab_stop;
continue;
}

View File

@ -59,6 +59,10 @@ class ScalableFont : public IGUIFontBitmap
bool m_is_hollow_copy;
bool m_rtl;
/** Position in range [0..1] of the single tab stop we support */
float m_tab_stop;
public:
bool m_black_border;
@ -136,6 +140,9 @@ public:
void updateRTL();
/** \param pos position of the tab stop, in range [0..1] */
void setTabStop(float pos) { m_tab_stop = pos; }
private:
struct SFontArea

View File

@ -97,8 +97,15 @@ void ListWidget::add()
if (m_header.size() > 0)
{
const int col_size = m_w / m_header.size();
//const int col_size = m_w / m_header.size();
int proportion_total = 0;
for (unsigned int n=0; n<m_header.size(); n++)
{
proportion_total += m_header[n].m_proportion;
}
int x = m_x;
for (unsigned int n=0; n<m_header.size(); n++)
{
std::ostringstream name;
@ -113,10 +120,12 @@ void ListWidget::add()
header->m_y = m_y;
header->m_h = header_height;
header->m_x = m_x + col_size*n;
header->m_w = col_size;
header->m_x = x;
header->m_w = m_w * float(m_header[n].m_proportion)/float(proportion_total);
header->setText( m_header[n] );
x += header->m_w;
header->setText( m_header[n].m_text );
header->m_properties[PROP_ID] = name.str();
header->add();

View File

@ -66,8 +66,20 @@ namespace GUIEngine
ButtonWidget* m_selected_column;
struct Column
{
irr::core::stringw m_text;
int m_proportion;
Column(irr::core::stringw text, int proportion)
{
m_text = text;
m_proportion = proportion;
}
};
/** Leave empty for no header */
std::vector< irr::core::stringw > m_header;
std::vector< Column > m_header;
IListWidgetHeaderListener* m_listener;
@ -193,8 +205,9 @@ namespace GUIEngine
}
/** To be called before Widget::add(); columns are persistent across multiple add/remove cycles
* \param proportion A column with proportion 2 will be twice as large as a column with proportion 1
*/
void addColumn(irr::core::stringw col) { m_header.push_back( col ); }
void addColumn(irr::core::stringw col, int proportion=1) { m_header.push_back( Column(col, proportion) ); }
};
}

View File

@ -21,9 +21,10 @@
#include "addons/addons_manager.hpp"
#include "addons/network_http.hpp"
#include "guiengine/CGUISpriteBank.h"
#include "guiengine/scalable_font.hpp"
#include "guiengine/widget.hpp"
#include "guiengine/widgets/ribbon_widget.hpp"
#include "guiengine/CGUISpriteBank.h"
#include "io/file_manager.hpp"
#include "states_screens/dialogs/addons_loading.hpp"
#include "states_screens/state_manager.hpp"
@ -62,8 +63,8 @@ void AddonsScreen::loadedFromFile()
GUIEngine::ListWidget* w_list =
getWidget<GUIEngine::ListWidget>("list_addons");
w_list->addColumn( _("Add-on name") );
w_list->addColumn( _("Updated date") );
w_list->addColumn( _("Add-on name"), 2 );
w_list->addColumn( _("Updated date"), 1 );
w_list->setColumnListener(this);
} // loadedFromFile
@ -74,6 +75,9 @@ void AddonsScreen::init()
Screen::init();
getWidget<GUIEngine::RibbonWidget>("category")->setDeactivated();
// FIXME: return tab stop to the center when leaving this screen!!
GUIEngine::getFont()->setTabStop(0.66f);
if(UserConfigParams::logAddons())
std::cout << "[addons] Using directory <" + file_manager->getAddonsDir()
<< ">\n";
@ -92,6 +96,13 @@ void AddonsScreen::init()
loadList();
} // init
// ----------------------------------------------------------------------------
void AddonsScreen::tearDown()
{
GUIEngine::getFont()->setTabStop(0.5f);
}
// ----------------------------------------------------------------------------
/** Loads the list of all addons of the given type. The gui element will be
* updated.

View File

@ -74,6 +74,7 @@ public:
virtual void onColumnClicked(int columnId);
virtual void init();
virtual void tearDown();
void setLastSelected();