mirror of
https://github.com/OpenMW/openmw.git
synced 2025-03-30 11:06:40 +00:00
Allow alignment for images in books
This commit is contained in:
parent
3287d0b6ef
commit
a13039ad1f
2 changed files with 40 additions and 28 deletions
|
@ -235,7 +235,8 @@ namespace MWGui
|
||||||
|
|
||||||
if (!plainText.empty() || brBeforeLastTag || isPrevImg)
|
if (!plainText.empty() || brBeforeLastTag || isPrevImg)
|
||||||
{
|
{
|
||||||
TextElement elem(paper, pag, mTextStyle, plainText);
|
TextElement elem(paper, pag, mBlockStyle,
|
||||||
|
mTextStyle, plainText);
|
||||||
elem.paginate();
|
elem.paginate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -260,7 +261,8 @@ namespace MWGui
|
||||||
int width = boost::lexical_cast<int>(attr.at("width"));
|
int width = boost::lexical_cast<int>(attr.at("width"));
|
||||||
int height = boost::lexical_cast<int>(attr.at("height"));
|
int height = boost::lexical_cast<int>(attr.at("height"));
|
||||||
|
|
||||||
ImageElement elem(paper, pag, src, width, height);
|
ImageElement elem(paper, pag, mBlockStyle,
|
||||||
|
src, width, height);
|
||||||
elem.paginate();
|
elem.paginate();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -294,9 +296,7 @@ namespace MWGui
|
||||||
|
|
||||||
void BookFormatter::resetFontProperties()
|
void BookFormatter::resetFontProperties()
|
||||||
{
|
{
|
||||||
MyGUI::Align align = mTextStyle.mTextAlign;
|
|
||||||
mTextStyle = TextStyle();
|
mTextStyle = TextStyle();
|
||||||
mTextStyle.mTextAlign = align;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BookFormatter::handleDiv(const BookTextParser::Attributes & attr)
|
void BookFormatter::handleDiv(const BookTextParser::Attributes & attr)
|
||||||
|
@ -307,9 +307,9 @@ namespace MWGui
|
||||||
std::string align = attr.at("align");
|
std::string align = attr.at("align");
|
||||||
|
|
||||||
if (Misc::StringUtils::ciEqual(align, "center"))
|
if (Misc::StringUtils::ciEqual(align, "center"))
|
||||||
mTextStyle.mTextAlign = MyGUI::Align::HCenter;
|
mBlockStyle.mAlign = MyGUI::Align::HCenter;
|
||||||
else if (Misc::StringUtils::ciEqual(align, "left"))
|
else if (Misc::StringUtils::ciEqual(align, "left"))
|
||||||
mTextStyle.mTextAlign = MyGUI::Align::Left;
|
mBlockStyle.mAlign = MyGUI::Align::Left;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BookFormatter::handleFont(const BookTextParser::Attributes & attr)
|
void BookFormatter::handleFont(const BookTextParser::Attributes & attr)
|
||||||
|
@ -321,7 +321,7 @@ namespace MWGui
|
||||||
ss << attr.at("color");
|
ss << attr.at("color");
|
||||||
ss >> std::hex >> color;
|
ss >> std::hex >> color;
|
||||||
|
|
||||||
mTextStyle.mColour = MyGUI::Colour(
|
mTextStyle.mColor = MyGUI::Colour(
|
||||||
(color>>16 & 0xFF) / 255.f,
|
(color>>16 & 0xFF) / 255.f,
|
||||||
(color>>8 & 0xFF) / 255.f,
|
(color>>8 & 0xFF) / 255.f,
|
||||||
(color & 0xFF) / 255.f);
|
(color & 0xFF) / 255.f);
|
||||||
|
@ -340,8 +340,8 @@ namespace MWGui
|
||||||
}
|
}
|
||||||
|
|
||||||
/* GraphicElement */
|
/* GraphicElement */
|
||||||
GraphicElement::GraphicElement(MyGUI::Widget * parent, Paginator & pag)
|
GraphicElement::GraphicElement(MyGUI::Widget * parent, Paginator & pag, const BlockStyle & blockStyle)
|
||||||
: mParent(parent), mPaginator(pag)
|
: mParent(parent), mPaginator(pag), mBlockStyle(blockStyle)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -364,10 +364,10 @@ namespace MWGui
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TextElement */
|
/* TextElement */
|
||||||
TextElement::TextElement(MyGUI::Widget * parent, Paginator & pag,
|
TextElement::TextElement(MyGUI::Widget * parent, Paginator & pag, const BlockStyle & blockStyle,
|
||||||
const TextStyle & style, const std::string & text)
|
const TextStyle & textStyle, const std::string & text)
|
||||||
: GraphicElement(parent, pag),
|
: GraphicElement(parent, pag, blockStyle),
|
||||||
mStyle(style)
|
mTextStyle(textStyle)
|
||||||
{
|
{
|
||||||
MyGUI::EditBox* box = parent->createWidget<MyGUI::EditBox>("NormalText",
|
MyGUI::EditBox* box = parent->createWidget<MyGUI::EditBox>("NormalText",
|
||||||
MyGUI::IntCoord(0, pag.getCurrentTop(), pag.getPageWidth(), 0), MyGUI::Align::Left | MyGUI::Align::Top,
|
MyGUI::IntCoord(0, pag.getCurrentTop(), pag.getPageWidth(), 0), MyGUI::Align::Left | MyGUI::Align::Top,
|
||||||
|
@ -377,9 +377,9 @@ namespace MWGui
|
||||||
box->setProperty("WordWrap", "true");
|
box->setProperty("WordWrap", "true");
|
||||||
box->setProperty("NeedMouse", "false");
|
box->setProperty("NeedMouse", "false");
|
||||||
box->setMaxTextLength(text.size());
|
box->setMaxTextLength(text.size());
|
||||||
box->setTextAlign(mStyle.mTextAlign);
|
box->setTextAlign(mBlockStyle.mAlign);
|
||||||
box->setTextColour(mStyle.mColour);
|
box->setTextColour(mTextStyle.mColor);
|
||||||
box->setFontName(mStyle.mFont);
|
box->setFontName(mTextStyle.mFont);
|
||||||
box->setCaption(MyGUI::TextIterator::toTagsString(text));
|
box->setCaption(MyGUI::TextIterator::toTagsString(text));
|
||||||
box->setSize(box->getSize().width, box->getTextSize().height);
|
box->setSize(box->getSize().width, box->getTextSize().height);
|
||||||
mEditBox = box;
|
mEditBox = box;
|
||||||
|
@ -387,7 +387,7 @@ namespace MWGui
|
||||||
|
|
||||||
int TextElement::currentFontHeight() const
|
int TextElement::currentFontHeight() const
|
||||||
{
|
{
|
||||||
std::string fontName(mStyle.mFont == "Default" ? MyGUI::FontManager::getInstance().getDefaultFont() : mStyle.mFont);
|
std::string fontName(mTextStyle.mFont == "Default" ? MyGUI::FontManager::getInstance().getDefaultFont() : mTextStyle.mFont);
|
||||||
return MyGUI::FontManager::getInstance().getByName(fontName)->getDefaultHeight();
|
return MyGUI::FontManager::getInstance().getByName(fontName)->getDefaultHeight();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -419,13 +419,13 @@ namespace MWGui
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ImageElement */
|
/* ImageElement */
|
||||||
ImageElement::ImageElement(MyGUI::Widget * parent, Paginator & pag,
|
ImageElement::ImageElement(MyGUI::Widget * parent, Paginator & pag, const BlockStyle & blockStyle,
|
||||||
const std::string & src, int width, int height)
|
const std::string & src, int width, int height)
|
||||||
: GraphicElement(parent, pag),
|
: GraphicElement(parent, pag, blockStyle),
|
||||||
mImageHeight(height)
|
mImageHeight(height)
|
||||||
{
|
{
|
||||||
mImageBox = parent->createWidget<MyGUI::ImageBox> ("ImageBox",
|
mImageBox = parent->createWidget<MyGUI::ImageBox> ("ImageBox",
|
||||||
MyGUI::IntCoord(0, pag.getCurrentTop(), width, mImageHeight), MyGUI::Align::Left | MyGUI::Align::Top,
|
MyGUI::IntCoord(0, pag.getCurrentTop(), width, mImageHeight), mBlockStyle.mAlign | MyGUI::Align::Top,
|
||||||
parent->getName() + boost::lexical_cast<std::string>(parent->getChildCount()));
|
parent->getName() + boost::lexical_cast<std::string>(parent->getChildCount()));
|
||||||
|
|
||||||
std::string image = Misc::ResourceHelpers::correctBookartPath(src, width, mImageHeight);
|
std::string image = Misc::ResourceHelpers::correctBookartPath(src, width, mImageHeight);
|
||||||
|
|
|
@ -11,17 +11,25 @@ namespace MWGui
|
||||||
struct TextStyle
|
struct TextStyle
|
||||||
{
|
{
|
||||||
TextStyle() :
|
TextStyle() :
|
||||||
mColour(0,0,0)
|
mColor(0,0,0)
|
||||||
, mFont("Default")
|
, mFont("Default")
|
||||||
, mTextSize(16)
|
, mTextSize(16)
|
||||||
, mTextAlign(MyGUI::Align::Left | MyGUI::Align::Top)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
MyGUI::Colour mColour;
|
MyGUI::Colour mColor;
|
||||||
std::string mFont;
|
std::string mFont;
|
||||||
int mTextSize;
|
int mTextSize;
|
||||||
MyGUI::Align mTextAlign;
|
};
|
||||||
|
|
||||||
|
struct BlockStyle
|
||||||
|
{
|
||||||
|
BlockStyle() :
|
||||||
|
mAlign(MyGUI::Align::Left | MyGUI::Align::Top)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
MyGUI::Align mAlign;
|
||||||
};
|
};
|
||||||
|
|
||||||
class BookTextParser
|
class BookTextParser
|
||||||
|
@ -112,12 +120,13 @@ namespace MWGui
|
||||||
void handleFont(const BookTextParser::Attributes & attr);
|
void handleFont(const BookTextParser::Attributes & attr);
|
||||||
|
|
||||||
TextStyle mTextStyle;
|
TextStyle mTextStyle;
|
||||||
|
BlockStyle mBlockStyle;
|
||||||
};
|
};
|
||||||
|
|
||||||
class GraphicElement
|
class GraphicElement
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GraphicElement(MyGUI::Widget * parent, Paginator & pag);
|
GraphicElement(MyGUI::Widget * parent, Paginator & pag, const BlockStyle & blockStyle);
|
||||||
virtual int getHeight() = 0;
|
virtual int getHeight() = 0;
|
||||||
virtual void paginate();
|
virtual void paginate();
|
||||||
virtual int pageSplit();
|
virtual int pageSplit();
|
||||||
|
@ -125,24 +134,27 @@ namespace MWGui
|
||||||
protected:
|
protected:
|
||||||
MyGUI::Widget * mParent;
|
MyGUI::Widget * mParent;
|
||||||
Paginator & mPaginator;
|
Paginator & mPaginator;
|
||||||
|
BlockStyle mBlockStyle;
|
||||||
};
|
};
|
||||||
|
|
||||||
class TextElement : public GraphicElement
|
class TextElement : public GraphicElement
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TextElement(MyGUI::Widget * parent, Paginator & pag, const TextStyle & style, const std::string & text);
|
TextElement(MyGUI::Widget * parent, Paginator & pag, const BlockStyle & blockStyle,
|
||||||
|
const TextStyle & textStyle, const std::string & text);
|
||||||
virtual int getHeight();
|
virtual int getHeight();
|
||||||
virtual int pageSplit();
|
virtual int pageSplit();
|
||||||
private:
|
private:
|
||||||
int currentFontHeight() const;
|
int currentFontHeight() const;
|
||||||
TextStyle mStyle;
|
TextStyle mTextStyle;
|
||||||
MyGUI::EditBox * mEditBox;
|
MyGUI::EditBox * mEditBox;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ImageElement : public GraphicElement
|
class ImageElement : public GraphicElement
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ImageElement(MyGUI::Widget * parent, Paginator & pag, const std::string & src, int width, int height);
|
ImageElement(MyGUI::Widget * parent, Paginator & pag, const BlockStyle & blockStyle,
|
||||||
|
const std::string & src, int width, int height);
|
||||||
virtual int getHeight();
|
virtual int getHeight();
|
||||||
virtual int pageSplit();
|
virtual int pageSplit();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue