From afbf2f713dd918bd0ff050d71afbf05bc581ab6e Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 28 Aug 2013 15:18:58 +0300 Subject: fix some missing checks. --- src/gui/theme.cpp | 15 +++++---- src/gui/widgets/progressbar.cpp | 7 ++-- src/gui/widgets/window.cpp | 71 +++++++++++++++++++++++++++-------------- 3 files changed, 61 insertions(+), 32 deletions(-) diff --git a/src/gui/theme.cpp b/src/gui/theme.cpp index 97afec6d3..6d052b2b8 100644 --- a/src/gui/theme.cpp +++ b/src/gui/theme.cpp @@ -89,7 +89,7 @@ Skin::~Skin() { for (int i = 0; i < 9; i++) { - if (mBorder->grid[i]) + if (mBorder && mBorder->grid[i]) { mBorder->grid[i]->decRef(); mBorder->grid[i] = nullptr; @@ -132,10 +132,13 @@ void Skin::updateAlpha(const float minimumOpacityAllowed) std::max(static_cast(minimumOpacityAllowed), static_cast(client->getGuiAlpha()))); - for (int i = 0; i < 9; i++) + if (mBorder) { - if (mBorder->grid[i]) - mBorder->grid[i]->setAlpha(alpha); + for (int i = 0; i < 9; i++) + { + if (mBorder->grid[i]) + mBorder->grid[i]->setAlpha(alpha); + } } if (mCloseImage) @@ -150,7 +153,7 @@ void Skin::updateAlpha(const float minimumOpacityAllowed) int Skin::getMinWidth() const { - if (!mBorder->grid[ImageRect::UPPER_LEFT] + if (!mBorder || !mBorder->grid[ImageRect::UPPER_LEFT] || !mBorder->grid[ImageRect::UPPER_RIGHT]) { return 1; @@ -162,7 +165,7 @@ int Skin::getMinWidth() const int Skin::getMinHeight() const { - if (!mBorder->grid[ImageRect::UPPER_LEFT] + if (!mBorder || !mBorder->grid[ImageRect::UPPER_LEFT] || !mBorder->grid[ImageRect::LOWER_LEFT]) { return 1; diff --git a/src/gui/widgets/progressbar.cpp b/src/gui/widgets/progressbar.cpp index 33e27a0d9..dc1e02ac5 100644 --- a/src/gui/widgets/progressbar.cpp +++ b/src/gui/widgets/progressbar.cpp @@ -71,8 +71,11 @@ ProgressBar::ProgressBar(const Widget2 *const widget, float progress, if (theme) { mSkin = theme->load("progressbar.xml", ""); - setPadding(mSkin->getPadding()); - mFillPadding = mSkin->getOption("fillPadding"); + if (mSkin) + { + setPadding(mSkin->getPadding()); + mFillPadding = mSkin->getOption("fillPadding"); + } setHeight(2 * mPadding + getFont()->getHeight() + 2); } diff --git a/src/gui/widgets/window.cpp b/src/gui/widgets/window.cpp index 38fd315fb..fccf8bbcd 100644 --- a/src/gui/widgets/window.cpp +++ b/src/gui/widgets/window.cpp @@ -458,8 +458,17 @@ void Window::setResizable(const bool r) if (r) { mGrip = Theme::getImageFromThemeXml("resize.xml", ""); - mGripRect.x = mDimension.width - mGrip->getWidth() - mGripPadding; - mGripRect.y = mDimension.height - mGrip->getHeight() - mGripPadding; + if (mGrip) + { + mGripRect.x = mDimension.width - mGrip->getWidth() - mGripPadding; + mGripRect.y = mDimension.height - mGrip->getHeight() + - mGripPadding; + } + else + { + mGripRect.x = 0; + mGripRect.y = 0; + } } else { @@ -483,35 +492,49 @@ void Window::widgetResized(const gcn::Event &event A_UNUSED) int h = area.height; mLayout->reflow(w, h); } - const bool showClose = mCloseButton && mSkin->getCloseImage(false); - const int closePadding = getOption("closePadding"); - if (showClose) - { - const Image *const button = mSkin->getCloseImage(false); - const int buttonWidth = button->getWidth(); - mCloseRect.x = mDimension.width - buttonWidth - closePadding; - mCloseRect.y = closePadding; - mCloseRect.width = buttonWidth; - mCloseRect.height = button->getHeight(); - } - if (mStickyButton) + if (mSkin) { - const Image *const button = mSkin->getStickyImage(mSticky); - if (button) + const bool showClose = mCloseButton && mSkin->getCloseImage(false); + const int closePadding = getOption("closePadding"); + if (showClose) { + const Image *const button = mSkin->getCloseImage(false); const int buttonWidth = button->getWidth(); - int x = mDimension.width - buttonWidth - - getOption("stickySpacing") - closePadding; + mCloseRect.x = mDimension.width - buttonWidth - closePadding; + mCloseRect.y = closePadding; + mCloseRect.width = buttonWidth; + mCloseRect.height = button->getHeight(); + } + if (mStickyButton) + { + const Image *const button = mSkin->getStickyImage(mSticky); + if (button) + { + const int buttonWidth = button->getWidth(); + int x = mDimension.width - buttonWidth + - getOption("stickySpacing") - closePadding; - if (showClose) - x -= mSkin->getCloseImage(false)->getWidth(); + if (showClose) + x -= mSkin->getCloseImage(false)->getWidth(); - mStickyRect.x = x; - mStickyRect.y = getOption("stickyPadding"); - mStickyRect.width = buttonWidth; - mStickyRect.height = button->getHeight(); + mStickyRect.x = x; + mStickyRect.y = getOption("stickyPadding"); + mStickyRect.width = buttonWidth; + mStickyRect.height = button->getHeight(); + } } } + else + { + mCloseRect.x = 0; + mCloseRect.y = 0; + mCloseRect.width = 0; + mCloseRect.height = 0; + mStickyRect.x = 0; + mStickyRect.y = 0; + mStickyRect.width = 0; + mStickyRect.height = 0; + } mRedraw = true; } -- cgit v1.2.3-60-g2f50