📄 scrollarea.cpp
字号:
drawUpButton(graphics); drawDownButton(graphics); drawVBar(graphics); drawVMarker(graphics); } if (mHBarVisible) { drawLeftButton(graphics); drawRightButton(graphics); drawHBar(graphics); drawHMarker(graphics); } if (mHBarVisible && mVBarVisible) { graphics->setColor(getBaseColor()); graphics->fillRectangle(Rectangle(getWidth() - mScrollbarWidth, getHeight() - mScrollbarWidth, mScrollbarWidth, mScrollbarWidth)); } if (mContent) { Rectangle contdim = mContent->getDimension(); graphics->pushClipArea(getContentDimension()); if (mContent->getBorderSize() > 0) { Rectangle rec = mContent->getDimension(); rec.x -= mContent->getBorderSize(); rec.y -= mContent->getBorderSize(); rec.width += 2 * mContent->getBorderSize(); rec.height += 2 * mContent->getBorderSize(); graphics->pushClipArea(rec); mContent->drawBorder(graphics); graphics->popClipArea(); } graphics->pushClipArea(contdim); mContent->draw(graphics); graphics->popClipArea(); graphics->popClipArea(); } } void ScrollArea::drawBorder(Graphics* graphics) { Color faceColor = getBaseColor(); Color highlightColor, shadowColor; int alpha = getBaseColor().a; int width = getWidth() + getBorderSize() * 2 - 1; int height = getHeight() + getBorderSize() * 2 - 1; highlightColor = faceColor + 0x303030; highlightColor.a = alpha; shadowColor = faceColor - 0x303030; shadowColor.a = alpha; unsigned int i; for (i = 0; i < getBorderSize(); ++i) { graphics->setColor(shadowColor); graphics->drawLine(i,i, width - i, i); graphics->drawLine(i,i + 1, i, height - i - 1); graphics->setColor(highlightColor); graphics->drawLine(width - i,i + 1, width - i, height - i); graphics->drawLine(i,height - i, width - i - 1, height - i); } } void ScrollArea::drawHBar(Graphics* graphics) { Rectangle dim = getHorizontalBarDimension(); graphics->pushClipArea(dim); int alpha = getBaseColor().a; Color trackColor = getBaseColor() - 0x101010; trackColor.a = alpha; Color shadowColor = getBaseColor() - 0x303030; shadowColor.a = alpha; graphics->setColor(trackColor); graphics->fillRectangle(Rectangle(0, 0, dim.width, dim.height)); graphics->setColor(shadowColor); graphics->drawLine(0, 0, dim.width, 0); graphics->popClipArea(); } void ScrollArea::drawVBar(Graphics* graphics) { Rectangle dim = getVerticalBarDimension(); graphics->pushClipArea(dim); int alpha = getBaseColor().a; Color trackColor = getBaseColor() - 0x101010; trackColor.a = alpha; Color shadowColor = getBaseColor() - 0x303030; shadowColor.a = alpha; graphics->setColor(trackColor); graphics->fillRectangle(Rectangle(0, 0, dim.width, dim.height)); graphics->setColor(shadowColor); graphics->drawLine(0, 0, 0, dim.height); graphics->popClipArea(); } void ScrollArea::drawUpButton(Graphics* graphics) { Rectangle dim = getUpButtonDimension(); graphics->pushClipArea(dim); Color highlightColor; Color shadowColor; Color faceColor; int offset; int alpha = getBaseColor().a; if (mUpButtonPressed) { faceColor = getBaseColor() - 0x303030; faceColor.a = alpha; highlightColor = faceColor - 0x303030; highlightColor.a = alpha; shadowColor = getBaseColor(); shadowColor.a = alpha; offset = 1; } else { faceColor = getBaseColor(); faceColor.a = alpha; highlightColor = faceColor + 0x303030; highlightColor.a = alpha; shadowColor = faceColor - 0x303030; shadowColor.a = alpha; offset = 0; } graphics->setColor(faceColor); graphics->fillRectangle(Rectangle(0, 0, dim.width, dim.height)); graphics->setColor(highlightColor); graphics->drawLine(0, 0, dim.width - 1, 0); graphics->drawLine(0, 1, 0, dim.height - 1); graphics->setColor(shadowColor); graphics->drawLine(dim.width - 1, 0, dim.width - 1, dim.height - 1); graphics->drawLine(1, dim.height - 1, dim.width - 1, dim.height - 1); graphics->setColor(getForegroundColor()); int i; int w = dim.height / 2; int h = w / 2 + 2; for (i = 0; i < w / 2; ++i) { graphics->drawLine(w - i + offset, i + h + offset, w + i + offset, i + h + offset); } graphics->popClipArea(); } void ScrollArea::drawDownButton(Graphics* graphics) { Rectangle dim = getDownButtonDimension(); graphics->pushClipArea(dim); Color highlightColor; Color shadowColor; Color faceColor; int offset; int alpha = getBaseColor().a; if (mDownButtonPressed) { faceColor = getBaseColor() - 0x303030; faceColor.a = alpha; highlightColor = faceColor - 0x303030; highlightColor.a = alpha; shadowColor = getBaseColor(); shadowColor.a = alpha; offset = 1; } else { faceColor = getBaseColor(); faceColor.a = alpha; highlightColor = faceColor + 0x303030; highlightColor.a = alpha; shadowColor = faceColor - 0x303030; shadowColor.a = alpha; offset = 0; } graphics->setColor(faceColor); graphics->fillRectangle(Rectangle(0, 0, dim.width, dim.height)); graphics->setColor(highlightColor); graphics->drawLine(0, 0, dim.width - 1, 0); graphics->drawLine(0, 1, 0, dim.height - 1); graphics->setColor(shadowColor); graphics->drawLine(dim.width - 1, 0, dim.width - 1, dim.height - 1); graphics->drawLine(1, dim.height - 1, dim.width - 1, dim.height - 1); graphics->setColor(getForegroundColor()); int i; int w = dim.height / 2; int h = w + 1; for (i = 0; i < w / 2; ++i) { graphics->drawLine(w - i + offset, -i + h + offset, w + i + offset, -i + h + offset); } graphics->popClipArea(); } void ScrollArea::drawLeftButton(Graphics* graphics) { Rectangle dim = getLeftButtonDimension(); graphics->pushClipArea(dim); Color highlightColor; Color shadowColor; Color faceColor; int offset; int alpha = getBaseColor().a; if (mLeftButtonPressed) { faceColor = getBaseColor() - 0x303030; faceColor.a = alpha; highlightColor = faceColor - 0x303030; highlightColor.a = alpha; shadowColor = getBaseColor(); shadowColor.a = alpha; offset = 1; } else { faceColor = getBaseColor(); faceColor.a = alpha; highlightColor = faceColor + 0x303030; highlightColor.a = alpha; shadowColor = faceColor - 0x303030; shadowColor.a = alpha; offset = 0; } graphics->setColor(faceColor); graphics->fillRectangle(Rectangle(0, 0, dim.width, dim.height)); graphics->setColor(highlightColor); graphics->drawLine(0, 0, dim.width - 1, 0); graphics->drawLine(0, 1, 0, dim.height - 1); graphics->setColor(shadowColor); graphics->drawLine(dim.width - 1, 0, dim.width - 1, dim.height - 1); graphics->drawLine(1, dim.height - 1, dim.width - 1, dim.height - 1); graphics->setColor(getForegroundColor()); int i; int w = dim.width / 2; int h = w - 2; for (i = 0; i < w / 2; ++i) { graphics->drawLine(i + h + offset, w - i + offset, i + h + offset, w + i + offset); } graphics->popClipArea(); } void ScrollArea::drawRightButton(Graphics* graphics) { Rectangle dim = getRightButtonDimension(); graphics->pushClipArea(dim); Color highlightColor; Color shadowColor; Color faceColor; int offset; int alpha = getBaseColor().a; if (mRightButtonPressed) { faceColor = getBaseColor() - 0x303030; faceColor.a = alpha; highlightColor = faceColor - 0x303030; highlightColor.a = alpha; shadowColor = getBaseColor(); shadowColor.a = alpha; offset = 1; } else { faceColor = getBaseColor(); faceColor.a = alpha; highlightColor = faceColor + 0x303030; highlightColor.a = alpha; shadowColor = faceColor - 0x303030; shadowColor.a = alpha; offset = 0; } graphics->setColor(faceColor); graphics->fillRectangle(Rectangle(0, 0, dim.width, dim.height)); graphics->setColor(highlightColor); graphics->drawLine(0, 0, dim.width - 1, 0); graphics->drawLine(0, 1, 0, dim.height - 1); graphics->setColor(shadowColor); graphics->drawLine(dim.width - 1, 0, dim.width - 1, dim.height - 1); graphics->drawLine(1, dim.height - 1, dim.width - 1, dim.height - 1); graphics->setColor(getForegroundColor()); int i; int w = dim.width / 2; int h = w + 1; for (i = 0; i < w / 2; ++i) { graphics->drawLine(-i + h + offset, w - i + offset, -i + h + offset, w + i + offset); } graphics->popClipArea(); } void ScrollArea::drawVMarker(Graphics* graphics) { Rectangle dim = getVerticalMarkerDimension(); graphics->pushClipArea(dim); int alpha = getBaseColor().a; Color faceColor = getBaseColor(); faceColor.a = alpha; Color highlightColor = faceColor + 0x303030; highlightColor.a = alpha; Color shadowColor = faceColor - 0x303030; shadowColor.a = alpha; graphics->setColor(faceColor); graphics->fillRectangle(Rectangle(1, 1, dim.width - 1, dim.height - 1)); graphics->setColor(highlightColor); graphics->drawLine(0, 0, dim.width - 1, 0); graphics->drawLine(0, 1, 0, dim.height - 1); graphics->setColor(shadowColor); graphics->drawLine(1, dim.height - 1, dim.width - 1, dim.height - 1); graphics->drawLine(dim.width - 1, 0, dim.width - 1, dim.height - 1); graphics->popClipArea(); } void ScrollArea::drawHMarker(Graphics* graphics) { Rectangle dim = getHorizontalMarkerDimension(); graphics->pushClipArea(dim); int alpha = getBaseColor().a; Color faceColor = getBaseColor(); faceColor.a = alpha; Color highlightColor = faceColor + 0x303030; highlightColor.a = alpha; Color shadowColor = faceColor - 0x303030; shadowColor.a = alpha; graphics->setColor(faceColor); graphics->fillRectangle(Rectangle(1, 1, dim.width - 1, dim.height - 1)); graphics->setColor(highlightColor); graphics->drawLine(0, 0, dim.width - 1, 0); graphics->drawLine(0, 1, 0, dim.height - 1); graphics->setColor(shadowColor); graphics->drawLine(1, dim.height - 1, dim.width - 1, dim.height - 1); graphics->drawLine(dim.width - 1, 0, dim.width - 1, dim.height - 1); graphics->popClipArea(); } void ScrollArea::logic() { checkPolicies(); setVerticalScrollAmount(getVerticalScrollAmount()); setHorizontalScrollAmount(getHorizontalScrollAmount()); if (mContent != NULL) { mContent->setPosition(-mHScroll + getContentDimension().x + mContent->getBorderSize(), -mVScroll + getContentDimension().y + mContent->getBorderSize()); mContent->logic(); } } void ScrollArea::moveToTop(Widget* widget) { if (widget == mContent) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -