Editbox/button text align
Moderators: CEGUI MVP, CEGUI Team
Editbox/button text align
I just wanted to see if it's possible. I know that the static text is easily alignable, but I wanna know for buttons and edit boxes. I can't seem to find a function/property that does so.
- CrazyEddie
- CEGUI Project Lead
- Posts: 6760
- Joined: Wed Jan 12, 2005 12:06
- Location: England
- Contact:
Re: Editbox/button text align
The only thing we have in the current releases is a "TextXOffset" property which shifts the text by the given offset.
Useful Links: Forum Guidelines | Documentation | Tutorials | HOWTO | Videos | Donate to CEGUI | CEGUI Twitter
Re: Editbox/button text align
only in the x direction eh?
darn, I needed it for y :/
darn, I needed it for y :/
- CrazyEddie
- CEGUI Project Lead
- Posts: 6760
- Joined: Wed Jan 12, 2005 12:06
- Location: England
- Contact:
Re: Editbox/button text align
There is a patch of the tracker that adds this ability. The patch was done by me (so you know it's good, right ). This will not however be making it to the core system.
http://sourceforge.net/tracker/index.ph ... tid=605424
http://sourceforge.net/tracker/index.ph ... tid=605424
Useful Links: Forum Guidelines | Documentation | Tutorials | HOWTO | Videos | Donate to CEGUI | CEGUI Twitter
Re: Editbox/button text align
How will Falagard handle this in relation to your patch? Will they be compatible?
[font=Verdana][size=xx-small]"It's not hard to stand out when the general level of competence is so low" -EMH[/size][/font]
namik@flashmail.com
namik@flashmail.com
- CrazyEddie
- CEGUI Project Lead
- Posts: 6760
- Joined: Wed Jan 12, 2005 12:06
- Location: England
- Contact:
Re: Editbox/button text align
The "Falagard" system would not respect these settings, which is one reason they will not be put in.
Currently the "Falagard" system has much better configurability on a per-skinned-type basis. There may be other extended possibilities added also, I have not decided yet
Currently the "Falagard" system has much better configurability on a per-skinned-type basis. There may be other extended possibilities added also, I have not decided yet
Useful Links: Forum Guidelines | Documentation | Tutorials | HOWTO | Videos | Donate to CEGUI | CEGUI Twitter
Hi,
I'm trying to add HorzFormatting property to FalEditbox.
In the looknfeel, I wish the Editbox Carat in the right edge
and wrote:
but the carat's width enlarged from 6 pixel to 120 pixel in this line:
Is there anything wrong?
ps. What I add to the Editbox is
in looknfeel and
FalagardEditboxProperties::HorzFormatting
I'm trying to add HorzFormatting property to FalEditbox.
In the looknfeel, I wish the Editbox Carat in the right edge
and wrote:
Code: Select all
<ImagerySection name="Carat">
<ImageryComponent>
<Area>
<Dim type="LeftEdge" >
<UnifiedDim scale="1" offset="-5" type="LeftEdge">
<DimOperator op="Subtract">
<ImageDim imageset="Test" image="EditBoxCarat" dimension="Width" />
</DimOperator>
</UnifiedDim>
</Dim>
<!--<Dim type="LeftEdge" ><AbsoluteDim value="0" /></Dim>-->
<Dim type="TopEdge" ><AbsoluteDim value="0" /></Dim>
<Dim type="Width" ><ImageDim imageset="Test" image="EditBoxCarat" dimension="Width" /></Dim>
<Dim type="BottomEdge" ><UnifiedDim scale="1.0" type="BottomEdge" /></Dim>
</Area>
<Image imageset="Test" image="EditBoxCarat" />
<VertFormat type="Stretched" />
<HorzFormat type="Stretched" />
</ImageryComponent>
</ImagerySection>
but the carat's width enlarged from 6 pixel to 120 pixel in this line:
Code: Select all
float caratWidth = caratImagery.getBoundingRect(*w, textArea).getWidth();
Is there anything wrong?
ps. What I add to the Editbox is
Code: Select all
<Property name="HorzFormatting" value="RightAligned" />
FalagardEditboxProperties::HorzFormatting
- CrazyEddie
- CEGUI Project Lead
- Posts: 6760
- Joined: Wed Jan 12, 2005 12:06
- Location: England
- Contact:
Hi,
This particular issue was raised in this thread: http://www.cegui.org.uk/phpBB2/viewtopic.php?t=3651
No further advance has been made with regards to this issue, though I do agree it's something that needs addressing (a mantis ticket has now been added so it's not forgotten, though no ETA on resolution).
CE.
This particular issue was raised in this thread: http://www.cegui.org.uk/phpBB2/viewtopic.php?t=3651
No further advance has been made with regards to this issue, though I do agree it's something that needs addressing (a mantis ticket has now been added so it's not forgotten, though no ETA on resolution).
CE.
Useful Links: Forum Guidelines | Documentation | Tutorials | HOWTO | Videos | Donate to CEGUI | CEGUI Twitter
This is my code today, HTH.
ps. there is a bug, I comment it below.
and the looknfeel different with TaharezLook is
ps. there is a bug, I comment it below.
Code: Select all
void FalagardEditbox::render()
{
Editbox* w = (Editbox*)d_window;
const StateImagery* imagery;
// draw container etc
// get WidgetLookFeel for the assigned look.
const WidgetLookFeel& wlf = getLookNFeel();
// try and get imagery for the approprite state.
imagery = &wlf.getStateImagery(w->isDisabled() ? "Disabled" : (w->isReadOnly() ? "ReadOnly" : "Enabled"));
// peform the rendering operation for the container.
imagery->render(*w);
// get destination area for text
const Rect textArea(wlf.getNamedArea("TextArea").getArea().getPixelRect(*w));
//
// Required preliminary work for text rendering operations
//
Font* font = w->getFont();
// no font == no more rendering
if (!font)
return;
// This will point to the final string to be used for rendering. Useful because it means we
// do not have to have duplicate code or be copying d_text for handling masked/unmasked text.
String* editText;
// Create a 'masked' version of the string if needed.
String maskedText, windowText;
if (w->isTextMasked())
{
maskedText.insert(0, w->getText().length(), w->getMaskCodePoint());
editText = &maskedText;
}
// text not masked to editText will be the windows d_text String.
else
{
windowText = w->getText();
editText = &windowText;
}
// get carat imagery
const ImagerySection& caratImagery = wlf.getImagerySection("Carat");
// store carat width
float caratWidth = caratImagery.getBoundingRect(*w, textArea).getWidth();
// calculate best position to render text to ensure carat is always visible
float textOffset;
float extentToCarat;
float fTextLen; //Total text length
extentToCarat = font->getTextExtent(editText->substr(0, w->getCaratIndex()));
fTextLen = font->getTextExtent(editText->substr(0));
if(d_lastTextOffset == -1000.0f) //begin
{
if(d_horzFormatting == RightAligned)
d_lastTextOffset = textArea.getWidth() - fTextLen - caratWidth;
else
d_lastTextOffset = 0.0;
}
// if box is inactive
if (!w->hasInputFocus())
{
textOffset = d_lastTextOffset;
}
// if carat is to the left of the box
else if ((d_lastTextOffset + extentToCarat) < 0)
{
textOffset = -extentToCarat;
}
// if carat is off to the right.
else if ((d_lastTextOffset + extentToCarat) >= (textArea.getWidth() - caratWidth))
{
if(d_horzFormatting == RightAligned)
textOffset = textArea.getWidth() - fTextLen - caratWidth;
else
textOffset = textArea.getWidth() - extentToCarat - caratWidth;
}
// else carat is already within the box
else
{
//"BUG"-> if carat is off to the left, and right key pressed, this line causes it.
if(d_horzFormatting == RightAligned)
textOffset = textArea.getWidth() - fTextLen - caratWidth;
else
textOffset = d_lastTextOffset;
}
ColourRect colours;
float alpha_comp = w->getEffectiveAlpha();
//
// Draw label text
//
// setup initial rect for text formatting
Rect text_part_rect(textArea);
// allow for scroll position
text_part_rect.d_left += textOffset;
// centre text vertically within the defined text area
text_part_rect.d_top += (textArea.getHeight() - font->getFontHeight()) * 0.5f;
// get unhighlighted text colour (saves accessing property twice)
colour unselectedColour(getUnselectedTextColour());
// draw pre-highlight text
String sect = editText->substr(0, w->getSelectionStartIndex());
colours.setColours(unselectedColour);
colours.modulateAlpha(alpha_comp);
if(d_horzFormatting == RightAligned) //kili 20090213
text_part_rect.d_right = text_part_rect.d_left + font->getTextExtent(sect);
//w->getRenderCache().cacheText(sect, font, LeftAligned, text_part_rect, 0, colours, &textArea);
w->getRenderCache().cacheText(sect, font, (TextFormatting)d_horzFormatting, text_part_rect, 0, colours, &textArea); //kili 20090212
// adjust rect for next section
text_part_rect.d_left += font->getTextExtent(sect);
// draw highlight text
sect = editText->substr(w->getSelectionStartIndex(), w->getSelectionLength());
colours.setColours(getSelectedTextColour());
colours.modulateAlpha(alpha_comp);
if(d_horzFormatting == RightAligned) //kili 20090213
text_part_rect.d_right = text_part_rect.d_left + font->getTextExtent(sect);
//w->getRenderCache().cacheText(sect, font, LeftAligned, text_part_rect, 0, colours, &textArea);
w->getRenderCache().cacheText(sect, font, (TextFormatting)d_horzFormatting, text_part_rect, 0, colours, &textArea); //kili 20090212
// adjust rect for next section
text_part_rect.d_left += font->getTextExtent(sect);
// draw post-highlight text
sect = editText->substr(w->getSelectionEndIndex());
colours.setColours(unselectedColour);
colours.modulateAlpha(alpha_comp);
if(d_horzFormatting == RightAligned) //kili 20090213
text_part_rect.d_right = text_part_rect.d_left + font->getTextExtent(sect);
//w->getRenderCache().cacheText(sect, font, LeftAligned, text_part_rect, 0, colours, &textArea);
w->getRenderCache().cacheText(sect, font, (TextFormatting)d_horzFormatting, text_part_rect, 0, colours, &textArea); //kili 20090212
// remember this for next time.
d_lastTextOffset = textOffset;
// see if the editbox is active or inactive.
bool active = (!w->isReadOnly()) && w->hasInputFocus();
//
// Render selection imagery.
//
if (w->getSelectionLength() != 0)
{
// calculate required start and end offsets of selection imagery.
float selStartOffset = font->getTextExtent(editText->substr(0, w->getSelectionStartIndex()));
float selEndOffset = font->getTextExtent(editText->substr(0, w->getSelectionEndIndex()));
// calculate area for selection imagery.
Rect hlarea(textArea);
hlarea.d_left += textOffset + selStartOffset;
hlarea.d_right = hlarea.d_left + (selEndOffset - selStartOffset);
// render the selection imagery.
wlf.getStateImagery(active ? "ActiveSelection" : "InactiveSelection").render(*w, hlarea, 0, &textArea);
}
//
// Render carat
//
if (active)
{
Rect caratRect(textArea);
caratRect.d_left += extentToCarat + textOffset;
caratImagery.render(*w, caratRect, 0, 0, &textArea);
}
}
size_t FalagardEditbox::getTextIndexFromPosition(const Point& pt) const
{
Editbox* w = (Editbox*)d_window;
//
// calculate final window position to be checked
//
float wndx = CoordConverter::screenToWindowX(*w, pt.d_x);
wndx -= d_lastTextOffset;
if(wndx < 0 ) //kili 20090212
wndx = 0;
//
// Return the proper index
//
if (w->isTextMasked())
{
return w->getFont()->getCharAtPixel(String(w->getText().length(), w->getMaskCodePoint()), wndx);
}
else
{
return w->getFont()->getCharAtPixel(w->getText(), wndx);
}
}
and the looknfeel different with TaharezLook is
Code: Select all
<Property name="HorzFormatting" value="RightAligned" />
- CrazyEddie
- CEGUI Project Lead
- Posts: 6760
- Joined: Wed Jan 12, 2005 12:06
- Location: England
- Contact:
Thanks, I'll try it out once I get time to work on this side of things
CE.
CE.
Useful Links: Forum Guidelines | Documentation | Tutorials | HOWTO | Videos | Donate to CEGUI | CEGUI Twitter
Return to “Modifications / Integrations / Customisations”
Who is online
Users browsing this forum: No registered users and 15 guests