mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-01-22 05:08:37 -05:00
UI: Fix resize cursor to respect item transformation
This commit is contained in:
@@ -660,9 +660,48 @@ void OBSBasicPreview::UpdateCursor(uint32_t &flags)
|
||||
|
||||
if (!flags && (cursor().shape() != Qt::OpenHandCursor || !scrollMode))
|
||||
unsetCursor();
|
||||
if (cursor().shape() != Qt::ArrowCursor)
|
||||
if ((cursor().shape() != Qt::ArrowCursor) || flags == 0)
|
||||
return;
|
||||
|
||||
if (flags & ITEM_ROT) {
|
||||
setCursor(Qt::OpenHandCursor);
|
||||
return;
|
||||
}
|
||||
|
||||
float rotation = obs_sceneitem_get_rot(stretchItem);
|
||||
vec2 scale;
|
||||
obs_sceneitem_get_scale(stretchItem, &scale);
|
||||
|
||||
if (rotation < 0.0f)
|
||||
rotation = 360.0f + rotation;
|
||||
|
||||
int octant = int(std::round(rotation / 45.0f));
|
||||
bool isCorner = (flags & (flags - 1)) != 0;
|
||||
|
||||
if ((scale.x < 0.0f) && isCorner)
|
||||
flags ^= ITEM_LEFT | ITEM_RIGHT;
|
||||
if ((scale.y < 0.0f) && isCorner)
|
||||
flags ^= ITEM_TOP | ITEM_BOTTOM;
|
||||
|
||||
if (octant % 4 >= 2) {
|
||||
if (isCorner) {
|
||||
flags ^= ITEM_TOP | ITEM_BOTTOM;
|
||||
} else {
|
||||
flags = (flags >> 2) | (flags << 2);
|
||||
}
|
||||
}
|
||||
|
||||
if (octant % 2 == 1) {
|
||||
if (isCorner) {
|
||||
flags &= (flags % 3 == 0) ? ~ITEM_TOP & ~ITEM_BOTTOM
|
||||
: ~ITEM_LEFT & ~ITEM_RIGHT;
|
||||
} else {
|
||||
flags = (flags % 4 == 0)
|
||||
? flags | flags >> ((flags / 2) - 1)
|
||||
: flags | ((flags >> 2) | (flags << 2));
|
||||
}
|
||||
}
|
||||
|
||||
if ((flags & ITEM_LEFT && flags & ITEM_TOP) ||
|
||||
(flags & ITEM_RIGHT && flags & ITEM_BOTTOM))
|
||||
setCursor(Qt::SizeFDiagCursor);
|
||||
@@ -673,8 +712,6 @@ void OBSBasicPreview::UpdateCursor(uint32_t &flags)
|
||||
setCursor(Qt::SizeHorCursor);
|
||||
else if (flags & ITEM_TOP || flags & ITEM_BOTTOM)
|
||||
setCursor(Qt::SizeVerCursor);
|
||||
else if (flags & ITEM_ROT)
|
||||
setCursor(Qt::OpenHandCursor);
|
||||
}
|
||||
|
||||
static bool select_one(obs_scene_t * /* scene */, obs_sceneitem_t *item,
|
||||
|
||||
Reference in New Issue
Block a user