#include #include "ScrollPanel.h" using namespace ui; ScrollPanel::ScrollPanel(Point position, Point size): Panel(position, size), maxOffset(0, 0), offsetX(0), offsetY(0), yScrollVel(0.0f), xScrollVel(0.0f), scrollBarWidth(0) { } int ScrollPanel::GetScrollLimit() { if(maxOffset.Y == -ViewportPosition.Y) return 1; else if(ViewportPosition.Y == 0) return -1; return 0; } void ScrollPanel::XOnMouseWheelInside(int localx, int localy, int d) { if(!d) return; yScrollVel -= d; } void ScrollPanel::XDraw(const Point& screenPos) { Graphics * g = ui::Engine::Ref().g; //Vertical scroll bar if(maxOffset.Y>0 && InnerSize.Y>0) { float scrollHeight = float(Size.Y)*(float(Size.Y)/float(InnerSize.Y)); float scrollPos = 0; if(-ViewportPosition.Y>0) { scrollPos = float(Size.Y-scrollHeight)*(float(offsetY)/float(maxOffset.Y)); } g->fillrect(screenPos.X+(Size.X-scrollBarWidth), screenPos.Y, scrollBarWidth, Size.Y, 255, 255, 255, 55); g->fillrect(screenPos.X+(Size.X-scrollBarWidth), screenPos.Y+scrollPos, scrollBarWidth, scrollHeight, 255, 255, 255, 255); } } void ScrollPanel::XTick(float dt) { if(yScrollVel > 7.0f) yScrollVel = 7.0f; if(yScrollVel < -7.0f) yScrollVel = -7.0f; if(yScrollVel > -0.5f && yScrollVel < 0.5) yScrollVel = 0; if(xScrollVel > 7.0f) xScrollVel = 7.0f; if(xScrollVel < -7.0f) xScrollVel = -7.0f; if(xScrollVel > -0.5f && xScrollVel < 0.5) xScrollVel = 0; maxOffset = InnerSize-Size; int oldOffsetY = offsetY; offsetY += yScrollVel; int oldOffsetX = offsetX; offsetX += xScrollVel; yScrollVel*=0.99f; xScrollVel*=0.99f; if(oldOffsetY!=int(offsetY)) { if(offsetY<0) { offsetY = 0; yScrollVel = 0; //commentsBegin = true; //commentsEnd = false; } else if(offsetY>maxOffset.Y) { offsetY = maxOffset.Y; yScrollVel = 0; //commentsEnd = true; //commentsBegin = false; } else { //commentsEnd = false; //commentsBegin = false; } ViewportPosition.Y = -offsetY; } else { if(offsetY<0) { offsetY = 0; yScrollVel = 0; ViewportPosition.Y = -offsetY; } else if(offsetY>maxOffset.Y) { offsetY = maxOffset.Y; ViewportPosition.Y = -offsetY; } } if(mouseInside && scrollBarWidth < 6) scrollBarWidth++; else if(!mouseInside && scrollBarWidth > 0) scrollBarWidth--; }