diff options
Diffstat (limited to 'src/gui/widgets')
-rw-r--r-- | src/gui/widgets/browserbox.cpp | 121 | ||||
-rw-r--r-- | src/gui/widgets/browserbox.h | 3 | ||||
-rw-r--r-- | src/gui/widgets/browserbox_unittest.cc | 1 | ||||
-rw-r--r-- | src/gui/widgets/tabs/chat/chattab.cpp | 2 | ||||
-rw-r--r-- | src/gui/widgets/tabs/setup_colors.cpp | 2 |
5 files changed, 45 insertions, 84 deletions
diff --git a/src/gui/widgets/browserbox.cpp b/src/gui/widgets/browserbox.cpp index 486ad9ebd..592283910 100644 --- a/src/gui/widgets/browserbox.cpp +++ b/src/gui/widgets/browserbox.cpp @@ -60,7 +60,6 @@ int BrowserBox::mInstances = 0; mColors[1][ColorName::color] = getThemeColor(ThemeColorId::color##_OUTLINE) BrowserBox::BrowserBox(const Widget2 *const widget, - const BrowserBoxModeT mode, const Opaque opaque, const std::string &skin) : Widget(widget), @@ -72,7 +71,6 @@ BrowserBox::BrowserBox(const Widget2 *const widget, mLinks(), mLinkHandler(nullptr), mSkin(nullptr), - mMode(mode), mHighlightMode(0), mSelectedLink(-1), mMaxRows(0), @@ -283,87 +281,58 @@ void BrowserBox::addRow(const std::string &row, const bool atTop) } } - // Auto size mode - if (mMode == BrowserBoxMode::AUTO_SIZE) - { - std::string plain = newRow; - // workaround if used only one string started from bold - // width for this string can be calculated wrong - // this workaround fix width if string start from bold sign - const bool startBold = (plain.find("##B") == 0); - for (idx1 = plain.find("##"); - idx1 != std::string::npos; - idx1 = plain.find("##")) - { - plain.erase(idx1, 3); - } - - // Adjust the BrowserBox size - const int w = startBold ? - boldFont->getWidth(plain) : font->getWidth(plain) + 2 * mPadding; - if (w > getWidth()) - setWidth(w); - } - const int fontHeight = font->getHeight(); - if (mMode == BrowserBoxMode::AUTO_WRAP) + unsigned int y = 0; + unsigned int nextChar; + const char *const hyphen = "~"; + const unsigned int hyphenWidth = CAST_U32( + font->getWidth(hyphen)); + unsigned int x = 0; + + FOR_EACH (TextRowCIter, i, mTextRows) { - unsigned int y = 0; - unsigned int nextChar; - const char *const hyphen = "~"; - const unsigned int hyphenWidth = CAST_U32( - font->getWidth(hyphen)); - unsigned int x = 0; - - FOR_EACH (TextRowCIter, i, mTextRows) + std::string tempRow = *i; + for (uint32_t j = 0, sz = CAST_U32(tempRow.size()); + j < sz; + j++) { - std::string tempRow = *i; - for (uint32_t j = 0, sz = CAST_U32(tempRow.size()); - j < sz; - j++) - { - const std::string character = tempRow.substr(j, 1); - x += CAST_U32(font->getWidth(character)); - nextChar = j + 1; + const std::string character = tempRow.substr(j, 1); + x += CAST_U32(font->getWidth(character)); + nextChar = j + 1; - // Wraping between words (at blank spaces) - if (nextChar < sz && tempRow.at(nextChar) == ' ') - { - int nextSpacePos = CAST_U32( - tempRow.find(' ', (nextChar + 1))); - if (nextSpacePos <= 0) - nextSpacePos = CAST_U32(sz) - 1U; - - const unsigned int nextWordWidth = - CAST_U32(font->getWidth( - tempRow.substr(nextChar, - (CAST_U32(nextSpacePos) - nextChar)))); - - if ((x + nextWordWidth + 10) - > CAST_U32(getWidth())) - { - x = mNewLinePadding; // Ident in new line - y += 1; - j ++; - } - } - // Wrapping looong lines (brutal force) - else if ((x + 2 * hyphenWidth) - > CAST_U32(getWidth())) + // Wraping between words (at blank spaces) + if (nextChar < sz && tempRow.at(nextChar) == ' ') + { + int nextSpacePos = CAST_U32( + tempRow.find(' ', (nextChar + 1))); + if (nextSpacePos <= 0) + nextSpacePos = CAST_U32(sz) - 1U; + + const unsigned int nextWordWidth = + CAST_U32(font->getWidth( + tempRow.substr(nextChar, + (CAST_U32(nextSpacePos) - nextChar)))); + + if ((x + nextWordWidth + 10) + > CAST_U32(getWidth())) { x = mNewLinePadding; // Ident in new line y += 1; + j ++; } } + // Wrapping looong lines (brutal force) + else if ((x + 2 * hyphenWidth) + > CAST_U32(getWidth())) + { + x = mNewLinePadding; // Ident in new line + y += 1; + } } - - setHeight(fontHeight * (CAST_S32( - CAST_U32(mTextRows.size()) + y))); - } - else - { - setHeight(fontHeight * CAST_S32(mTextRows.size())); } + + setHeight(fontHeight * (CAST_S32( + CAST_U32(mTextRows.size()) + y))); mUpdateTime = 0; updateHeight(); } @@ -789,8 +758,7 @@ int BrowserBox::calcHeight() width = font->getWidth(part); // Auto wrap mode - if (mMode == BrowserBoxMode::AUTO_WRAP && - wWidth > 0 && + if (wWidth > 0 && width > 0 && (x + CAST_U32(width) + 10) > wWidth) { @@ -856,11 +824,8 @@ int BrowserBox::calcHeight() else width = font->getWidth(part); - if (mMode == BrowserBoxMode::AUTO_WRAP && - (width == 0 && !processed)) - { + if (width == 0 && !processed) break; - } x += CAST_U32(width); if (x > mDataWidth) diff --git a/src/gui/widgets/browserbox.h b/src/gui/widgets/browserbox.h index 60635c8de..04cff5aff 100644 --- a/src/gui/widgets/browserbox.h +++ b/src/gui/widgets/browserbox.h @@ -26,7 +26,6 @@ #include "enums/simpletypes/opaque.h" -#include "enums/gui/browserboxmode.h" #include "enums/gui/colorname.h" #include "gui/browserlink.h" @@ -54,7 +53,6 @@ class BrowserBox final : public Widget, * Constructor. */ BrowserBox(const Widget2 *const widget, - const BrowserBoxModeT mode, const Opaque opaque, const std::string &skin); @@ -180,7 +178,6 @@ class BrowserBox final : public Widget, LinkHandler *mLinkHandler; Skin *mSkin; - BrowserBoxModeT mMode; unsigned int mHighlightMode; int mSelectedLink; unsigned int mMaxRows; diff --git a/src/gui/widgets/browserbox_unittest.cc b/src/gui/widgets/browserbox_unittest.cc index f151e1524..e32eaa68a 100644 --- a/src/gui/widgets/browserbox_unittest.cc +++ b/src/gui/widgets/browserbox_unittest.cc @@ -93,7 +93,6 @@ TEST_CASE("BrowserBox tests", "browserbox") Widget::setGlobalFont(new Font("/usr/share/fonts/truetype/" "ttf-dejavu/DejaVuSans-Oblique.ttf", 18)); BrowserBox *const box = new BrowserBox(nullptr, - BrowserBoxMode::AUTO_WRAP, Opaque_true, ""); box->setWidth(100); diff --git a/src/gui/widgets/tabs/chat/chattab.cpp b/src/gui/widgets/tabs/chat/chattab.cpp index 91df77ded..358fd8c44 100644 --- a/src/gui/widgets/tabs/chat/chattab.cpp +++ b/src/gui/widgets/tabs/chat/chattab.cpp @@ -69,7 +69,7 @@ ChatTab::ChatTab(const Widget2 *const widget, const std::string &logName, const ChatTabTypeT &type) : Tab(widget), - mTextOutput(new BrowserBox(this, BrowserBoxMode::AUTO_WRAP, Opaque_true, + mTextOutput(new BrowserBox(this, Opaque_true, "browserbox.xml")), mScrollArea(new ScrollArea(this, mTextOutput, Opaque_false)), mChannelName(channel), diff --git a/src/gui/widgets/tabs/setup_colors.cpp b/src/gui/widgets/tabs/setup_colors.cpp index f4efb2832..4f2b35113 100644 --- a/src/gui/widgets/tabs/setup_colors.cpp +++ b/src/gui/widgets/tabs/setup_colors.cpp @@ -55,7 +55,7 @@ Setup_Colors::Setup_Colors(const Widget2 *const widget) : mColorBox(CREATEWIDGETR(ListBox, this, userPalette, "")), mScroll(new ScrollArea(this, mColorBox, Opaque_true, "setup_colors_background.xml")), - mPreview(new BrowserBox(this, BrowserBoxMode::AUTO_WRAP, Opaque_true, + mPreview(new BrowserBox(this, Opaque_true, "browserbox.xml")), mTextPreview(new TextPreview(this, gettext(rawmsg))), mPreviewBox(new ScrollArea(this, mPreview, Opaque_true, |