SL-12595 The checkbox overlaps buttons in the 'Delete selected item?' notification

meow-7.2.2
andreykproductengine 2020-01-20 16:59:27 +02:00
parent c5be566a6f
commit d624c3f0d5
3 changed files with 55 additions and 13 deletions

View File

@ -47,10 +47,18 @@ static LLDefaultChildRegistry::Register<LLCheckBoxCtrl> r("check_box");
template class LLCheckBoxCtrl* LLView::getChild<class LLCheckBoxCtrl>(
const std::string& name, BOOL recurse) const;
void LLCheckBoxCtrl::WordWrap::declareValues()
{
declare("none", EWordWrap::WRAP_NONE);
declare("down", EWordWrap::WRAP_DOWN);
declare("up", EWordWrap::WRAP_UP);
}
LLCheckBoxCtrl::Params::Params()
: initial_value("initial_value", false),
label_text("label_text"),
check_button("check_button"),
word_wrap("word_wrap", EWordWrap::WRAP_NONE),
radio_style("radio_style")
{}
@ -59,14 +67,14 @@ LLCheckBoxCtrl::LLCheckBoxCtrl(const LLCheckBoxCtrl::Params& p)
: LLUICtrl(p),
mTextEnabledColor(p.label_text.text_color()),
mTextDisabledColor(p.label_text.text_readonly_color()),
mFont(p.font())
mFont(p.font()),
mWordWrap(p.word_wrap)
{
mViewModel->setValue(LLSD(p.initial_value));
mViewModel->resetDirty();
static LLUICachedControl<S32> llcheckboxctrl_spacing ("UICheckboxctrlSpacing", 0);
static LLUICachedControl<S32> llcheckboxctrl_hpad ("UICheckboxctrlHPad", 0);
static LLUICachedControl<S32> llcheckboxctrl_vpad ("UICheckboxctrlVPad", 0);
static LLUICachedControl<S32> llcheckboxctrl_btn_size ("UICheckboxctrlBtnSize", 0);
// must be big enough to hold all children
setUseBoundingRect(TRUE);
@ -85,17 +93,35 @@ LLCheckBoxCtrl::LLCheckBoxCtrl(const LLCheckBoxCtrl::Params& p)
{
tbparams.font(p.font);
}
mLabel = LLUICtrlFactory::create<LLTextBox> (tbparams);
mLabel = LLUICtrlFactory::create<LLTextBox>(tbparams);
if (mWordWrap != WRAP_NONE)
{
// Not setWordWrap(mWordWrap != WRAP_NONE) because there might be some old lurking code that sets it manually
mLabel->setWordWrap(true);
S32 new_width = getRect().getWidth() - p.check_button.rect().getWidth() - llcheckboxctrl_hpad;
LLRect label_rect = mLabel->getRect();
label_rect.mRight = label_rect.mLeft + new_width;
mLabel->setRect(label_rect);
}
mLabel->reshapeToFitText();
LLRect label_rect = mLabel->getRect();
if (mLabel->getLineCount() > 1)
{
// reshapeToFitText uses LLView::reshape() which always reshapes
// from bottom to top, but we want to extend the bottom
// Note: might be better idea to use getRect().mTop of LLCheckBoxCtrl (+pad) as top point of new rect
S32 delta = ll_round((F32)mLabel->getFont()->getLineHeight() * mLabel->getLineSpacingMult()) - label_rect.getHeight();
label_rect.translate(0, delta);
mLabel->setRect(label_rect);
if (mWordWrap == WRAP_DOWN)
{
// reshapeToFitText uses LLView::reshape() which always reshapes
// from bottom to top, but we want to extend the bottom
// Note: might be better idea to use getRect().mTop of LLCheckBoxCtrl (+pad) as top point of new rect
S32 delta = ll_round((F32)mLabel->getFont()->getLineHeight() * mLabel->getLineSpacingMult()) - label_rect.getHeight();
label_rect.translate(0, delta);
mLabel->setRect(label_rect);
}
// else
// WRAP_UP is essentially done by reshapeToFitText() (extends from bottom to top)
// howhever it doesn't respect rect of checkbox
// todo: this should be fixed, but there are at least couple checkboxes that use this feature as is.
}
addChild(mLabel);
@ -165,7 +191,7 @@ void LLCheckBoxCtrl::reshape(S32 width, S32 height, BOOL called_from_parent)
mLabel->reshapeToFitText();
LLRect label_rect = mLabel->getRect();
if (label_top != label_rect.mTop)
if (label_top != label_rect.mTop && mWordWrap == WRAP_DOWN)
{
// reshapeToFitText uses LLView::reshape() which always reshapes
// from bottom to top, but we want to extend the bottom so

View File

@ -50,6 +50,19 @@ class LLCheckBoxCtrl
, public ll::ui::SearchableControl
{
public:
enum EWordWrap
{
WRAP_NONE,
WRAP_UP,
WRAP_DOWN
};
struct WordWrap : public LLInitParam::TypeValuesHelper<EWordWrap, WordWrap>
{
static void declareValues();
};
struct Params
: public LLInitParam::Block<Params, LLUICtrl::Params>
{
@ -58,6 +71,8 @@ public:
Optional<LLTextBox::Params> label_text;
Optional<LLButton::Params> check_button;
Optional<EWordWrap, WordWrap> word_wrap;
Ignored radio_style;
Params();
@ -129,6 +144,8 @@ protected:
LLUIColor mTextEnabledColor;
LLUIColor mTextDisabledColor;
EWordWrap mWordWrap; // off, shifts text up, shifts text down
};
// Build time optimization, generate once in .cpp file

View File

@ -148,11 +148,10 @@
left="408"
bottom_delta="0"
label="Remember password"
label_text.word_wrap="true"
label_text.width="150"
word_wrap="down"
check_button.bottom="3"
name="remember_password"
width="170" />
width="165" />
<combo_box
allow_text_entry="false"
font="SansSerifTiny"