mirror of
https://gitea.nishi.boats/pyrite-dev/milsko
synced 2026-01-11 03:43:29 +00:00
coords
This commit is contained in:
@@ -354,6 +354,11 @@ MWDECL void MwGetCursorCoord(MwWidget handle, MwPoint* point);
|
|||||||
*/
|
*/
|
||||||
MWDECL void MwGetScreenSize(MwWidget handle, MwRect* rect);
|
MWDECL void MwGetScreenSize(MwWidget handle, MwRect* rect);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief Reports whether a widget reports global or local coordinates upon GetXY/SetXY. Anything with a parent reports local, and most backends report global coordinates being supported for top level windows, but some (Wayland) do not.
|
||||||
|
*/
|
||||||
|
MWDECL int MwGetCoordinateType(MwWidget handle);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ struct _MwLLCommon {
|
|||||||
void* user;
|
void* user;
|
||||||
int copy_buffer;
|
int copy_buffer;
|
||||||
int type;
|
int type;
|
||||||
|
int coordinate_type;
|
||||||
|
|
||||||
MwLLHandler handler;
|
MwLLHandler handler;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -219,4 +219,10 @@ struct _MwClass {
|
|||||||
void* reserved4;
|
void* reserved4;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Whether or not GetXY/SetXY works with global or local coordinates */
|
||||||
|
enum MwCoordinateType {
|
||||||
|
MwCoordinatesGlobal = 0,
|
||||||
|
MwCoordinatesLocal,
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1344,6 +1344,10 @@ static MwLL MwLLCreateImpl(MwLL parent, int x, int y, int width, int height) {
|
|||||||
memset(r, 0, sizeof(*r));
|
memset(r, 0, sizeof(*r));
|
||||||
MwLLCreateCommon(r);
|
MwLLCreateCommon(r);
|
||||||
|
|
||||||
|
/* Wayland does not report global coordinates ever. Compositors are not even expected to have knowledge of this.
|
||||||
|
*/
|
||||||
|
r->common.coordinate_type = MwCoordinatesLocal;
|
||||||
|
|
||||||
r->common.type = MwLLBackendWayland;
|
r->common.type = MwLLBackendWayland;
|
||||||
|
|
||||||
if(width < 2) width = 2;
|
if(width < 2) width = 2;
|
||||||
|
|||||||
@@ -797,3 +797,11 @@ void MwGetCursorCoord(MwWidget handle, MwPoint* point) {
|
|||||||
void MwGetScreenSize(MwWidget handle, MwRect* rect) {
|
void MwGetScreenSize(MwWidget handle, MwRect* rect) {
|
||||||
MwLLGetScreenSize(handle->lowlevel, rect);
|
MwLLGetScreenSize(handle->lowlevel, rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int MwGetCoordinateType(MwWidget handle) {
|
||||||
|
if(handle->parent == NULL) {
|
||||||
|
return handle->lowlevel->common.coordinate_type;
|
||||||
|
} else {
|
||||||
|
return MwCoordinatesLocal;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|||||||
@@ -183,10 +183,18 @@ static void mwSubMenuAppearImpl(MwWidget handle, MwMenu menu, MwPoint* point, in
|
|||||||
MwLLMakeToolWindow(handle->lowlevel);
|
MwLLMakeToolWindow(handle->lowlevel);
|
||||||
MwLLDetach(handle->lowlevel, &p);
|
MwLLDetach(handle->lowlevel, &p);
|
||||||
|
|
||||||
if(MwGetInteger(handle, MwNy) + sz.height > rc.height) {
|
if(handle->lowlevel->common.coordinate_type == MwCoordinatesGlobal) {
|
||||||
MwVaApply(handle,
|
if(MwGetInteger(handle, MwNy) + sz.height > rc.height) {
|
||||||
MwNy, rc.height - sz.height,
|
MwVaApply(handle,
|
||||||
NULL);
|
MwNy, rc.height - sz.height,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(MwGetInteger(handle, MwNy) > sz.height) {
|
||||||
|
MwVaApply(handle,
|
||||||
|
MwNy, sz.height,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MwLLEndStateChange(handle->lowlevel);
|
MwLLEndStateChange(handle->lowlevel);
|
||||||
|
|||||||
Reference in New Issue
Block a user