Rectangle ScrollArea::getVerticalBarDimension() { if (!mVBarVisible) { return Rectangle(0, 0, 0, 0); } if (mHBarVisible) { return Rectangle(getWidth() - mScrollbarWidth, getUpButtonDimension().height, mScrollbarWidth, getHeight() - getUpButtonDimension().height - getDownButtonDimension().height - mScrollbarWidth); } return Rectangle(getWidth() - mScrollbarWidth, getUpButtonDimension().height, mScrollbarWidth, getHeight() - getUpButtonDimension().height - getDownButtonDimension().height); }
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::mousePress(int x, int y, int button) { if (getUpButtonDimension().isPointInRect(x, y)) { setVerticalScrollAmount(getVerticalScrollAmount() - 10); mUpButtonPressed = true; } else if (getDownButtonDimension().isPointInRect(x, y)) { setVerticalScrollAmount(getVerticalScrollAmount() + 10); mDownButtonPressed = true; } else if (getLeftButtonDimension().isPointInRect(x, y)) { setHorizontalScrollAmount(getHorizontalScrollAmount() - 10); mLeftButtonPressed = true; } else if (getRightButtonDimension().isPointInRect(x, y)) { setHorizontalScrollAmount(getHorizontalScrollAmount() + 10); mRightButtonPressed = true; } else if (getVerticalMarkerDimension().isPointInRect(x, y)) { mVerticalMarkerPressed = true; mVerticalMarkerMousePosition = y - getVerticalMarkerDimension().y; } else if (getHorizontalMarkerDimension().isPointInRect(x, y)) { mHorizontalMarkerPressed = true; mHorizontalMarkerMousePosition = x - getHorizontalMarkerDimension().x; } }
void ScrollArea::drawButton(gcn::Graphics *graphics, BUTTON_DIR dir) { int state = 0; gcn::Rectangle dim; switch (dir) { case UP: state = mUpButtonPressed ? 1 : 0; dim = getUpButtonDimension(); break; case DOWN: state = mDownButtonPressed ? 1 : 0; dim = getDownButtonDimension(); break; case LEFT: state = mLeftButtonPressed ? 1 : 0; dim = getLeftButtonDimension(); break; case RIGHT: state = mRightButtonPressed ? 1 : 0; dim = getRightButtonDimension(); break; } static_cast<Graphics*>(graphics)-> drawImage(buttons[dir][state], dim.x, dim.y); }
void ScrollArea::mousePressed(MouseEvent& mouseEvent) { int x = mouseEvent.getX(); int y = mouseEvent.getY(); if (getUpButtonDimension().isPointInRect(x, y)) { setVerticalScrollAmount(getVerticalScrollAmount() - mUpButtonScrollAmount); mUpButtonPressed = true; } else if (getDownButtonDimension().isPointInRect(x, y)) { setVerticalScrollAmount(getVerticalScrollAmount() + mDownButtonScrollAmount); mDownButtonPressed = true; } else if (getLeftButtonDimension().isPointInRect(x, y)) { setHorizontalScrollAmount(getHorizontalScrollAmount() - mLeftButtonScrollAmount); mLeftButtonPressed = true; } else if (getRightButtonDimension().isPointInRect(x, y)) { setHorizontalScrollAmount(getHorizontalScrollAmount() + mRightButtonScrollAmount); mRightButtonPressed = true; } else if (getVerticalMarkerDimension().isPointInRect(x, y)) { mIsHorizontalMarkerDragged = false; mIsVerticalMarkerDragged = true; mVerticalMarkerDragOffset = y - getVerticalMarkerDimension().y; } else if (getVerticalBarDimension().isPointInRect(x,y)) { if (y < getVerticalMarkerDimension().y) { setVerticalScrollAmount(getVerticalScrollAmount() - (int)(getChildrenArea().height * 0.95)); } else { setVerticalScrollAmount(getVerticalScrollAmount() + (int)(getChildrenArea().height * 0.95)); } } else if (getHorizontalMarkerDimension().isPointInRect(x, y)) { mIsHorizontalMarkerDragged = true; mIsVerticalMarkerDragged = false; mHorizontalMarkerDragOffset = x - getHorizontalMarkerDimension().x; } else if (getHorizontalBarDimension().isPointInRect(x,y)) { if (x < getHorizontalMarkerDimension().x) { setHorizontalScrollAmount(getHorizontalScrollAmount() - (int)(getChildrenArea().width * 0.95)); } else { setHorizontalScrollAmount(getHorizontalScrollAmount() + (int)(getChildrenArea().width * 0.95)); } } // Eat the mouse mouseEvent.consume(); }