1
0
Fork 0
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:
MiroslavR 2014-10-03 21:36:45 +02:00
parent 3287d0b6ef
commit a13039ad1f
2 changed files with 40 additions and 28 deletions

View file

@ -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);

View file

@ -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();