void uiVScrollbarNode::onMouseDown (uiNode_t* node, int x, int y, int button) { if (EXTRADATA(node).fullsize == 0 || EXTRADATA(node).fullsize < EXTRADATA(node).viewsize) return; if (button != K_MOUSE1) return; int description[5]; UI_VScrollbarNodeGetElementSize(node, description); const int hoveredElement = UI_VScrollbarNodeGetElement(node, description, x, y); UI_VScrollbarNodeAction(node, hoveredElement, true); }
/** * @brief Call to draw the node */ static void UI_VScrollbarNodeDraw (uiNode_t *node) { vec2_t pos; int y = 0; int texX = 0; int texY = 0; const char *texture; const image_t *image; UI_GetNodeAbsPos(node, pos); y = pos[1]; texture = UI_GetReferenceString(node, node->image); if (!texture) return; image = UI_LoadImage(texture); if (EXTRADATA(node).fullsize == 0 || EXTRADATA(node).fullsize <= EXTRADATA(node).viewsize) { /* hide the scrollbar */ if (EXTRADATA(node).hideWhenUnused) return; texX = TILE_WIDTH * 3; /* top */ UI_DrawNormImage(qfalse, pos[0], y, ELEMENT_WIDTH, ELEMENT_HEIGHT, texX + ELEMENT_WIDTH, texY + ELEMENT_HEIGHT, texX, texY, image); texY += TILE_HEIGHT; y += ELEMENT_HEIGHT; /* top to bottom */ UI_DrawNormImage(qfalse, pos[0], y, ELEMENT_WIDTH, node->size[1] - (ELEMENT_HEIGHT * 2), texX + ELEMENT_WIDTH, texY + ELEMENT_HEIGHT, texX, texY, image); texY += TILE_HEIGHT * 5; y += node->size[1] - (ELEMENT_HEIGHT * 2); assert(y == pos[1] + node->size[1] - ELEMENT_HEIGHT); /* bottom */ UI_DrawNormImage(qfalse, pos[0], y, ELEMENT_WIDTH, ELEMENT_HEIGHT, texX + ELEMENT_WIDTH, texY + ELEMENT_HEIGHT, texX, texY, image); } else { int houveredElement = -1; int description[5]; UI_VScrollbarNodeGetElementSize(node, description); if (UI_GetMouseCapture() == node) houveredElement = capturedElement; else if (node->state) houveredElement = UI_VScrollbarNodeGetElement(node, description, mousePosX, mousePosY); /* top */ texX = (houveredElement == 0)?TILE_WIDTH:0; UI_DrawNormImage(qfalse, pos[0], y, ELEMENT_WIDTH, ELEMENT_HEIGHT, texX + ELEMENT_WIDTH, texY + ELEMENT_HEIGHT, texX, texY, image); texY += TILE_HEIGHT; y += ELEMENT_HEIGHT; /* top to slider */ if (description[1]) { texX = (houveredElement == 1)?TILE_WIDTH:0; UI_DrawNormImage(qfalse, pos[0], y, ELEMENT_WIDTH, description[1], texX + ELEMENT_WIDTH, texY + ELEMENT_HEIGHT, texX, texY, image); y += description[1]; } texY += TILE_HEIGHT; /* slider */ texX = (houveredElement == 2)?TILE_WIDTH:0; /* top slider */ UI_DrawNormImage(qfalse, pos[0], y, ELEMENT_WIDTH, ELEMENT_HEIGHT, texX + ELEMENT_WIDTH, texY + ELEMENT_HEIGHT, texX, texY, image); texY += TILE_HEIGHT; y += ELEMENT_HEIGHT; /* middle slider */ if (description[2]) { UI_DrawNormImage(qfalse, pos[0], y, ELEMENT_WIDTH, description[2]-ELEMENT_HEIGHT-ELEMENT_HEIGHT, texX + ELEMENT_WIDTH, texY + ELEMENT_HEIGHT, texX, texY, image); y += description[2]-ELEMENT_HEIGHT-ELEMENT_HEIGHT; } texY += TILE_HEIGHT; /* bottom slider */ UI_DrawNormImage(qfalse, pos[0], y, ELEMENT_WIDTH, ELEMENT_HEIGHT, texX + ELEMENT_WIDTH, texY + ELEMENT_HEIGHT, texX, texY, image); texY += TILE_HEIGHT; y += ELEMENT_HEIGHT; /* slider to bottom */ if (description[3]) { texX = (houveredElement == 3)?TILE_WIDTH:0; UI_DrawNormImage(qfalse, pos[0], y, ELEMENT_WIDTH, description[3], texX + ELEMENT_WIDTH, texY + ELEMENT_HEIGHT, texX, texY, image); y += description[3]; } texY += TILE_HEIGHT; assert(y == pos[1] + node->size[1] - ELEMENT_HEIGHT); /* bottom */ texX = (houveredElement == 4)?TILE_WIDTH:0; UI_DrawNormImage(qfalse, pos[0], y, ELEMENT_WIDTH, ELEMENT_HEIGHT, texX + ELEMENT_WIDTH, texY + ELEMENT_HEIGHT, texX, texY, image); } }