MCPcopy Create free account
hub / github.com/OpenStarbound/OpenStarbound / renderCursor

Method renderCursor

source/frontend/StarMainInterface.cpp:1495–1546  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1493}
1494
1495void MainInterface::renderCursor() {
1496 // if we're currently playing a cinematic, we should not render the mouse.
1497 if (m_cinematicOverlay && !m_cinematicOverlay->completed())
1498 return m_guiContext->applicationController()->setCursorVisible(false);
1499
1500 Vec2I cursorPos = m_cursorScreenIPos;
1501 Vec2I cursorSize = m_cursor.size();
1502 Vec2I cursorOffset = m_cursor.offset();
1503 unsigned int cursorScale = m_cursor.scale(interfaceScale());
1504 Drawable cursorDrawable = m_cursor.drawable();
1505
1506 cursorPos[0] -= cursorOffset[0] * cursorScale;
1507 cursorPos[1] -= (cursorSize[1] - cursorOffset[1]) * cursorScale;
1508 if (!m_guiContext->trySetCursor(cursorDrawable, cursorOffset, cursorScale))
1509 m_guiContext->drawDrawable(cursorDrawable, Vec2F(cursorPos), cursorScale);
1510
1511 if (m_cursorTooltip) {
1512 auto assets = Root::singleton().assets();
1513 auto imgDb = Root::singleton().imageMetadataDatabase();
1514
1515 auto config = assets->json("/interface.config:cursorTooltip");
1516 auto backgroundImage = config.getString("background");
1517 auto rawCursorOffset = jsonToVec2I(config.get("offset"));
1518
1519 Vec2I tooltipSize = Vec2I(imgDb->imageSize(backgroundImage)) * interfaceScale();
1520 Vec2I cursorOffset = (Vec2I{0, -m_cursor.size().y()} + rawCursorOffset) * cursorScale;
1521 Vec2I tooltipOffset = m_cursorScreenIPos + cursorOffset;
1522 TextStyle textStyle = config.get("textStyle");
1523 size_t fontSize = config.get("fontSize").toUInt();
1524 Vec4B fontColor = jsonToColor(config.get("color")).toRgba();
1525
1526 m_guiContext->drawQuad(backgroundImage, Vec2F(tooltipOffset) + Vec2F(-tooltipSize.x(), 0), interfaceScale());
1527 m_guiContext->setTextStyle(textStyle);
1528 m_guiContext->setFontSize(fontSize);
1529 m_guiContext->setFontColor(fontColor);
1530 m_guiContext->renderText(*m_cursorTooltip,
1531 TextPositioning(Vec2F(tooltipOffset) + Vec2F(-tooltipSize.x(), tooltipSize.y()) / 2,
1532 HorizontalAnchor::HMidAnchor,
1533 VerticalAnchor::VMidAnchor));
1534 m_guiContext->clearTextStyle();
1535 }
1536
1537 m_cursorItem->setPosition(m_cursorScreenIPos / interfaceScale() + m_config->inventoryItemMouseOffset);
1538
1539 if (auto swapItem = m_client->mainPlayer()->inventory()->swapSlotItem())
1540 m_cursorItem->setItem(swapItem);
1541 else
1542 m_cursorItem->setItem({});
1543
1544 m_cursorItem->render(RectI::withSize({}, {(int)windowWidth(), (int)windowHeight()}));
1545 m_guiContext->resetInterfaceScissorRect();
1546}
1547
1548bool MainInterface::overButton(PolyI buttonPoly, Vec2I const& mousePos) const {
1549 Vec2I barPos = mainBarPosition();

Callers

nothing calls this directly

Calls 15

singletonClass · 0.85
jsonToVec2IFunction · 0.85
jsonToColorFunction · 0.85
TextPositioningClass · 0.85
completedMethod · 0.80
setCursorVisibleMethod · 0.80
trySetCursorMethod · 0.80
assetsMethod · 0.80
imageMetadataDatabaseMethod · 0.80
jsonMethod · 0.80
getStringMethod · 0.80
yMethod · 0.80

Tested by

no test coverage detected