911
914
pDock->iMousePositionType = CAIRO_DOCK_MOUSE_INSIDE;
914
static void _cd_rendering_check_can_drop_linear (CairoDock *pDock)
916
pDock->bCanDrop = pDock->bIsDragging; /// calculer bCanDrop ...
917
#define make_icon_avoid_mouse(icon, sens) do { \
918
cairo_dock_mark_icon_as_avoiding_mouse (icon);\
919
icon->fAlpha = 0.75;\
920
if (myIconsParam.fAmplitude != 0)\
921
icon->fDrawX += icon->fWidth / 2 * (icon->fScale - 1) / myIconsParam.fAmplitude * sens; } while (0)
922
///TODO: make it work...
923
static inline gboolean _check_can_drop (CairoDock *pDock, CairoDockIconGroup iGroup, double fMargin)
925
gboolean bUndefined = TRUE;
926
gboolean bCanDrop = FALSE;
929
for (ic = pDock->icons; ic != NULL; ic = ic->next)
934
if (pDock->container.iMouseX < icon->fDrawX + icon->fWidth * icon->fScale * fMargin) // on est a gauche. // fDrawXAtRest
936
GList *prev_ic = ic->prev;
937
Icon *prev_icon = (prev_ic ? prev_ic->data : NULL);
938
if (cairo_dock_get_icon_order (icon) == cairo_dock_get_group_order (iGroup)
939
|| (prev_icon && cairo_dock_get_icon_order (prev_icon) == cairo_dock_get_group_order (iGroup)) )
941
make_icon_avoid_mouse (icon, 1);
943
make_icon_avoid_mouse (prev_icon, -1);
944
//g_print ("%s> <%s\n", prev_icon->cName, icon->cName);
949
else if (pDock->container.iMouseX > icon->fDrawX + icon->fWidth * icon->fScale * (1 - fMargin)) // on est a droite. // fDrawXAtRest
951
GList *next_ic = ic->next;
952
Icon *next_icon = (next_ic ? next_ic->data : NULL);
953
if (cairo_dock_get_icon_order (icon) == cairo_dock_get_group_order (iGroup)
954
|| (next_icon && cairo_dock_get_icon_order (next_icon) == cairo_dock_get_group_order (iGroup)) )
956
make_icon_avoid_mouse (icon, -1);
958
make_icon_avoid_mouse (next_icon, 1);
962
ic = ic->next; // on la saute pour ne pas la de-marquer.
973
cairo_dock_stop_marking_icon_as_avoiding_mouse (icon);
976
if (bUndefined) // no pointed icon, so we are either on the side, on between icons.
978
bCanDrop = (pDock->container.iMouseX > X_BORDER_SPACE && pDock->container.iMouseX < pDock->container.iWidth - X_BORDER_SPACE); // no drop on the side.
982
static void _cd_rendering_check_can_drop (CairoDock *pDock)
984
if (! pDock->bIsDragging) // not dragging, so no drop possible.
986
pDock->bCanDrop = FALSE;
988
else if (pDock->icons == NULL) // dragging but no icons, so drop always possible.
990
pDock->bCanDrop = TRUE;
992
else // dragging and some icons.
994
pDock->bCanDrop = _check_can_drop (pDock, pDock->iAvoidingMouseIconType, pDock->fAvoidingMouseMargin);
918
997
Icon *cd_rendering_calculate_icons_diapo_simple (CairoDock *pDock)
925
1004
// On recupere la configuration de la grille
926
1005
gint nRowsX = pData->nRowsX;
927
1006
gint nRowsY = pData->nRowsY;
1007
if (nRowsX == 0 || nRowsY == 0) // maybe a dock with no displayed icons (like 1 separator); anyway the grid is not valid, so discard.
929
1010
// On calcule les parametres des icones
930
1011
Icon *pPointedIcon = _cd_rendering_calculate_icons_for_diapo_simple (pDock, nRowsX, nRowsY, pDock->container.iMouseX, pDock->container.iMouseY);
932
1013
_cd_rendering_check_if_mouse_inside_diapo_simple (pDock);
934
_cd_rendering_check_can_drop_linear (pDock);
1015
_cd_rendering_check_can_drop (pDock);
936
1017
return pPointedIcon;
1407
1488
pSubDock->fAlign = 0.5;
1408
1489
pSubDock->iGapX = iX + pDock->container.iWindowPositionX - (pDock->container.bIsHorizontal ? pDock->iScreenOffsetX : pDock->iScreenOffsetY) - g_desktopGeometry.iScreenWidth[pDock->container.bIsHorizontal] / 2; // ici les sous-dock ont un alignement egal a 0.5
1409
pSubDock->iGapY = pDock->iGapY + pDock->iMaxDockHeight;
1490
pSubDock->iGapY = pDock->iGapY + pDock->iActiveHeight;
1413
1494
pSubDock->fAlign = (pDock->container.bDirectionUp ? 1 : 0);
1414
pSubDock->iGapX = (pDock->iGapY + pDock->iMaxDockHeight) * (pDock->container.bDirectionUp ? -1 : 1);
1495
pSubDock->iGapX = (pDock->iGapY + pDock->iActiveHeight) * (pDock->container.bDirectionUp ? -1 : 1);
1415
1496
if (pDock->container.bDirectionUp)
1416
1497
pSubDock->iGapY = g_desktopGeometry.iScreenWidth[pDock->container.bIsHorizontal] - (iX + pDock->container.iWindowPositionX - (pDock->container.bIsHorizontal ? pDock->iScreenOffsetX : pDock->iScreenOffsetY)) - pSubDock->iMaxDockHeight / 2; // les sous-dock ont un alignement egal a 1.