47
47
#include "cairo-dock-draw.h"
48
48
#include "cairo-dock-applications-manager.h"
49
#include "cairo-dock-load.h"
49
#include "cairo-dock-image-buffer.h"
50
50
#include "cairo-dock-config.h"
51
#include "cairo-dock-modules.h"
51
#include "cairo-dock-module-factory.h"
52
52
#include "cairo-dock-callbacks.h"
53
#include "cairo-dock-icons.h"
53
#include "cairo-dock-icon-factory.h"
54
#include "cairo-dock-icon-facility.h"
54
55
#include "cairo-dock-separator-factory.h"
55
56
#include "cairo-dock-launcher-factory.h"
56
#include "cairo-dock-backends-manager.h"
57
#include "cairo-dock-backends-manager.h" // myBackendsParam.fSubDockSizeRatio
57
58
#include "cairo-dock-X-utilities.h"
58
59
#include "cairo-dock-log.h"
59
60
#include "cairo-dock-keyfile-utilities.h"
60
61
#include "cairo-dock-dock-manager.h"
61
62
#include "cairo-dock-dialog-manager.h"
62
63
#include "cairo-dock-notifications.h"
64
#include "cairo-dock-indicator-manager.h" // myIndicators.bUseClassIndic
63
65
#include "cairo-dock-class-manager.h"
64
#include "cairo-dock-internal-accessibility.h"
65
#include "cairo-dock-internal-icons.h"
66
#include "cairo-dock-internal-indicators.h"
67
#include "cairo-dock-internal-system.h"
68
#include "cairo-dock-internal-views.h"
69
#include "cairo-dock-internal-background.h"
70
66
#include "cairo-dock-animations.h"
71
67
#include "cairo-dock-emblem.h"
72
68
#include "cairo-dock-X-manager.h"
624
620
prev_icon = (ic->prev != NULL ? ic->prev->data : cairo_dock_get_last_icon (pIconList));
625
icon->fX = prev_icon->fX + (prev_icon->fWidth + myIcons.iIconGap) * prev_icon->fScale;
621
icon->fX = prev_icon->fX + (prev_icon->fWidth + myIconsParam.iIconGap) * prev_icon->fScale;
627
if (icon->fX + icon->fWidth * icon->fScale > icon->fXMax - myIcons.fAmplitude * fMagnitude * (icon->fWidth + 1.5*myIcons.iIconGap) / 8 && iWidth != 0)
623
if (icon->fX + icon->fWidth * icon->fScale > icon->fXMax - myIconsParam.fAmplitude * fMagnitude * (icon->fWidth + 1.5*myIconsParam.iIconGap) / 8 && iWidth != 0)
629
625
//g_print (" on contraint %s (fXMax=%.2f , fX=%.2f\n", prev_icon->cName, prev_icon->fXMax, prev_icon->fX);
630
fDeltaExtremum = icon->fX + icon->fWidth * icon->fScale - (icon->fXMax - myIcons.fAmplitude * fMagnitude * (icon->fWidth + 1.5*myIcons.iIconGap) / 16);
631
if (myIcons.fAmplitude != 0)
632
icon->fX -= fDeltaExtremum * (1 - (icon->fScale - 1) / myIcons.fAmplitude) * fMagnitude;
626
fDeltaExtremum = icon->fX + icon->fWidth * icon->fScale - (icon->fXMax - myIconsParam.fAmplitude * fMagnitude * (icon->fWidth + 1.5*myIconsParam.iIconGap) / 16);
627
if (myIconsParam.fAmplitude != 0)
628
icon->fX -= fDeltaExtremum * (1 - (icon->fScale - 1) / myIconsParam.fAmplitude) * fMagnitude;
635
631
icon->fX = fAlign * iWidth + (icon->fX - fAlign * iWidth) * (1. - fFoldingFactor);
682
678
prev_icon = ic->data;
684
prev_icon->fX = icon->fX - (prev_icon->fWidth + myIcons.iIconGap) * prev_icon->fScale;
680
prev_icon->fX = icon->fX - (prev_icon->fWidth + myIconsParam.iIconGap) * prev_icon->fScale;
685
681
//g_print ("fX <- %.2f; fXMin : %.2f\n", prev_icon->fX, prev_icon->fXMin);
686
if (prev_icon->fX < prev_icon->fXMin + myIcons.fAmplitude * fMagnitude * (prev_icon->fWidth + 1.5*myIcons.iIconGap) / 8 && iWidth != 0 && x_abs < iWidth && fMagnitude > 0) /// && prev_icon->fPhase == 0 // on rajoute 'fMagnitude > 0' sinon il y'a un leger "saut" du aux contraintes a gauche de l'icone pointee.
682
if (prev_icon->fX < prev_icon->fXMin + myIconsParam.fAmplitude * fMagnitude * (prev_icon->fWidth + 1.5*myIconsParam.iIconGap) / 8 && iWidth != 0 && x_abs < iWidth && fMagnitude > 0) /// && prev_icon->fPhase == 0 // on rajoute 'fMagnitude > 0' sinon il y'a un leger "saut" du aux contraintes a gauche de l'icone pointee.
688
684
//g_print (" on contraint %s (fXMin=%.2f , fX=%.2f\n", prev_icon->cName, prev_icon->fXMin, prev_icon->fX);
689
fDeltaExtremum = prev_icon->fX - (prev_icon->fXMin + myIcons.fAmplitude * fMagnitude * (prev_icon->fWidth + 1.5*myIcons.iIconGap) / 16);
690
if (myIcons.fAmplitude != 0)
691
prev_icon->fX -= fDeltaExtremum * (1 - (prev_icon->fScale - 1) / myIcons.fAmplitude) * fMagnitude;
685
fDeltaExtremum = prev_icon->fX - (prev_icon->fXMin + myIconsParam.fAmplitude * fMagnitude * (prev_icon->fWidth + 1.5*myIconsParam.iIconGap) / 16);
686
if (myIconsParam.fAmplitude != 0)
687
prev_icon->fX -= fDeltaExtremum * (1 - (prev_icon->fScale - 1) / myIconsParam.fAmplitude) * fMagnitude;
693
689
prev_icon->fX = fAlign * iWidth + (prev_icon->fX - fAlign * iWidth) * (1. - fFoldingFactor);
694
690
//g_print (" prev_icon->fX : %.2f\n", prev_icon->fX);
787
784
switch (pDock->iMousePositionType)
789
786
case CAIRO_DOCK_MOUSE_INSIDE :
790
//g_print ("INSIDE (%d;%d;%d;%d;%.2f)\n", cairo_dock_entrance_is_allowed (pDock), pDock->iMagnitudeIndex, pDock->bIsGrowingUp, pDock->bIsShrinkingDown, pDock->fFoldingFactor);
787
//g_print ("INSIDE (%d;%d;%d;%d;%d)\n", cairo_dock_entrance_is_allowed (pDock), pDock->iMagnitudeIndex, pDock->bIsGrowingUp, pDock->bIsShrinkingDown, pDock->iInputState);
791
788
if (cairo_dock_entrance_is_allowed (pDock) && ((pDock->iMagnitudeIndex < CAIRO_DOCK_NB_MAX_ITERATIONS && ! pDock->bIsGrowingUp) || pDock->bIsShrinkingDown) && pDock->iInputState != CAIRO_DOCK_INPUT_HIDDEN && (pDock->iInputState != CAIRO_DOCK_INPUT_AT_REST || pDock->bIsDragging)) // on est dedans et la taille des icones est non maximale bien que le dock ne soit pas en train de grossir, cependant on respecte l'etat 'cache', et l'etat repos.
793
790
//g_print ("on est dedans en x et en y et la taille des icones est non maximale bien qu'aucune icone ne soit animee (%d;%d)\n", pDock->iMagnitudeIndex, pDock->container.bInside);
828
825
if (pPointingIcon && pPointingIcon->bPointed) // sous-dock pointe, n le laisse en position haute.
831
cd_debug ("on force a quitter (iRefCount:%d; bIsGrowingUp:%d; iMagnitudeIndex:%d)", pDock->iRefCount, pDock->bIsGrowingUp, pDock->iMagnitudeIndex);
832
if (pDock->iRefCount > 0 && myAccessibility.iLeaveSubDockDelay > 0)
833
pDock->iSidLeaveDemand = g_timeout_add (myAccessibility.iLeaveSubDockDelay, (GSourceFunc) cairo_dock_emit_leave_signal, (gpointer) pDock);
835
cairo_dock_emit_leave_signal (CAIRO_CONTAINER (pDock));
828
//g_print ("on force a quitter (iRefCount:%d; bIsGrowingUp:%d; iMagnitudeIndex:%d)\n", pDock->iRefCount, pDock->bIsGrowingUp, pDock->iMagnitudeIndex);
829
pDock->iSidLeaveDemand = g_timeout_add (MAX (myDocksParam.iLeaveSubDockDelay, 330), (GSourceFunc) cairo_dock_emit_leave_signal, (gpointer) pDock);
1083
1083
pDock->iSidUpdateWMIcons = g_idle_add ((GSourceFunc) _update_WM_icons, pDock);
1088
///////////////////////
1089
/// DOCK BACKGROUND ///
1090
///////////////////////
1092
static cairo_surface_t *_cairo_dock_make_stripes_background (int iWidth, int iHeight, double *fStripesColorBright, double *fStripesColorDark, int iNbStripes, double fStripesWidth, double fStripesAngle)
1094
cairo_pattern_t *pStripesPattern;
1095
double fWidth = iWidth;
1096
if (fabs (fStripesAngle) != 90)
1097
pStripesPattern = cairo_pattern_create_linear (0.0f,
1100
iWidth * tan (fStripesAngle * G_PI/180.));
1102
pStripesPattern = cairo_pattern_create_linear (0.0f,
1105
(fStripesAngle == 90) ? iHeight : - iHeight);
1106
g_return_val_if_fail (cairo_pattern_status (pStripesPattern) == CAIRO_STATUS_SUCCESS, NULL);
1108
cairo_pattern_set_extend (pStripesPattern, CAIRO_EXTEND_REPEAT);
1114
for (i = 0; i < iNbStripes+1; i ++)
1116
fStep = (double)i / iNbStripes;
1117
cairo_pattern_add_color_stop_rgba (pStripesPattern,
1118
fStep - fStripesWidth / 2.,
1119
fStripesColorBright[0],
1120
fStripesColorBright[1],
1121
fStripesColorBright[2],
1122
fStripesColorBright[3]);
1123
cairo_pattern_add_color_stop_rgba (pStripesPattern,
1125
fStripesColorDark[0],
1126
fStripesColorDark[1],
1127
fStripesColorDark[2],
1128
fStripesColorDark[3]);
1129
cairo_pattern_add_color_stop_rgba (pStripesPattern,
1130
fStep + fStripesWidth / 2.,
1131
fStripesColorBright[0],
1132
fStripesColorBright[1],
1133
fStripesColorBright[2],
1134
fStripesColorBright[3]);
1139
cairo_pattern_add_color_stop_rgba (pStripesPattern,
1141
fStripesColorDark[0],
1142
fStripesColorDark[1],
1143
fStripesColorDark[2],
1144
fStripesColorDark[3]);
1145
cairo_pattern_add_color_stop_rgba (pStripesPattern,
1147
fStripesColorBright[0],
1148
fStripesColorBright[1],
1149
fStripesColorBright[2],
1150
fStripesColorBright[3]);
1153
cairo_surface_t *pNewSurface = cairo_dock_create_blank_surface (
1156
cairo_t *pImageContext = cairo_create (pNewSurface);
1157
cairo_set_source (pImageContext, pStripesPattern);
1158
cairo_paint (pImageContext);
1160
cairo_pattern_destroy (pStripesPattern);
1161
cairo_destroy (pImageContext);
1165
static void _cairo_dock_load_default_background (CairoDockImageBuffer *pImage, int iWidth, int iHeight)
1167
//g_print ("%s (%s, %d)\n", __func__, myDocksParam.cBackgroundImageFile, myDocksParam.bBackgroundImageRepeat);
1168
if (myDocksParam.cBackgroundImageFile != NULL)
1170
if (myDocksParam.bBackgroundImageRepeat)
1172
cairo_surface_t *pBgSurface = cairo_dock_create_surface_from_pattern (myDocksParam.cBackgroundImageFile,
1175
myDocksParam.fBackgroundImageAlpha);
1176
cairo_dock_load_image_buffer_from_surface (pImage,
1183
cairo_dock_load_image_buffer_full (pImage,
1184
myDocksParam.cBackgroundImageFile,
1187
CAIRO_DOCK_FILL_SPACE,
1188
myDocksParam.fBackgroundImageAlpha);
1191
if (pImage->pSurface == NULL)
1193
cairo_surface_t *pBgSurface = _cairo_dock_make_stripes_background (
1196
myDocksParam.fStripesColorBright,
1197
myDocksParam.fStripesColorDark,
1198
myDocksParam.iNbStripes,
1199
myDocksParam.fStripesWidth,
1200
myDocksParam.fStripesAngle);
1201
cairo_dock_load_image_buffer_from_surface (pImage,
1208
void cairo_dock_load_dock_background (CairoDock *pDock)
1210
cairo_dock_unload_image_buffer (&pDock->backgroundBuffer);
1212
int iWidth = pDock->iDecorationsWidth;
1213
int iHeight = pDock->iDecorationsHeight;
1215
if (pDock->bGlobalBg || pDock->iRefCount > 0)
1217
_cairo_dock_load_default_background (&pDock->backgroundBuffer, iWidth, iHeight);
1219
else if (pDock->cBgImagePath != NULL)
1221
cairo_dock_load_image_buffer (&pDock->backgroundBuffer, pDock->cBgImagePath, iWidth, iHeight, CAIRO_DOCK_FILL_SPACE);
1223
if (pDock->backgroundBuffer.pSurface == NULL)
1225
cairo_surface_t *pSurface = _cairo_dock_make_stripes_background (iWidth, iHeight, pDock->fBgColorBright, pDock->fBgColorDark, 0, 0., 90);
1226
cairo_dock_load_image_buffer_from_surface (&pDock->backgroundBuffer, pSurface, iWidth, iHeight);
1230
static gboolean _load_background_idle (CairoDock *pDock)
1232
cairo_dock_load_dock_background (pDock);
1234
pDock->iSidLoadBg = 0;
1237
void cairo_dock_trigger_load_dock_background (CairoDock *pDock)
1239
if (pDock->iDecorationsWidth == pDock->backgroundBuffer.iWidth && pDock->iDecorationsHeight == pDock->backgroundBuffer.iHeight) // mise a jour inutile.
1241
if (pDock->iSidLoadBg == 0)
1242
pDock->iSidLoadBg = g_idle_add ((GSourceFunc)_load_background_idle, pDock);