X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=winboard%2Fwlayout.c;h=08f461fb8c3e92f6eff18a7f09588411cd3fd214;hb=4d54c79829d19389bcb7fa5000f76cfe7a0aaf36;hp=0fd28f0d60f0f806224f8dd7a4632e213cf933e0;hpb=91d8e5853ca580769cc130aa6ea004869118d171;p=xboard.git diff --git a/winboard/wlayout.c b/winboard/wlayout.c index 0fd28f0..08f461f 100644 --- a/winboard/wlayout.c +++ b/winboard/wlayout.c @@ -3,6 +3,8 @@ * * Author: Alessandro Scotti (Dec 2005) * + * Copyright 2005 Alessandro Scotti + * * ------------------------------------------------------------------------ * * GNU XBoard is free software: you can redistribute it and/or modify @@ -31,6 +33,7 @@ #include #include "common.h" +#include "frontend.h" #include "winboard.h" VOID RestoreWindowPlacement( HWND hWnd, WindowPlacement * wp ) @@ -44,7 +47,7 @@ VOID RestoreWindowPlacement( HWND hWnd, WindowPlacement * wp ) ZeroMemory( &stWP, sizeof(stWP) ); - EnsureOnScreen( &wp->x, &wp->y); + EnsureOnScreen( &wp->x, &wp->y, 0, 0); stWP.length = sizeof(stWP); stWP.flags = 0; @@ -91,7 +94,7 @@ static BOOL IsDefaultPlacement( WindowPlacement * wp ) return result; } -static BOOL GetActualPlacement( HWND hWnd, WindowPlacement * wp ) +BOOL GetActualPlacement( HWND hWnd, WindowPlacement * wp ) { BOOL result = FALSE; @@ -156,3 +159,40 @@ VOID ReattachAfterMove( LPRECT lprcOldPos, int new_x, int new_y, HWND hWndChild, } } } + +extern FILE *debugFP; +VOID ReattachAfterSize( LPRECT lprcOldPos, int new_w, int new_h, HWND hWndChild, WindowPlacement * pwpChild ) +{ + if( ! IsDefaultPlacement( pwpChild ) ) { + GetActualPlacement( hWndChild, pwpChild ); + + if( IsAttachedByWindowPlacement( lprcOldPos, pwpChild ) ) { + /* Get delta of lower right corner */ + int delta_x = new_w - (lprcOldPos->right - lprcOldPos->left); + int delta_y = new_h - (lprcOldPos->bottom - lprcOldPos->top); + + /* Adjust size & placement */ + if(pwpChild->x + pwpChild->width >= lprcOldPos->right && + (pwpChild->x + pwpChild->width < screenWidth - 5 || delta_x > 0) ) // keep right edge glued to display edge if touching + pwpChild->width += delta_x; + if(pwpChild->x + pwpChild->width >= screenWidth ) // don't move right edge off screen + pwpChild->width = screenWidth - pwpChild->x; + if(pwpChild->y + pwpChild->height >= lprcOldPos->bottom && + (pwpChild->y + pwpChild->height < screenHeight - 35 || delta_y > 0) ) // keep bottom edge glued to display edge if touching + pwpChild->height += delta_y; + if(pwpChild->y + pwpChild->height >= screenHeight - 30 ) // don't move bottom edge off screen + pwpChild->height = screenHeight - 30 - pwpChild->y; + if(pwpChild->x >= lprcOldPos->right) pwpChild->width -= delta_x, pwpChild->x += delta_x; + if(pwpChild->y >= lprcOldPos->bottom) pwpChild->height -= delta_y, pwpChild->y += delta_y; + if(pwpChild->width < 30) pwpChild->width = 30; // force minimum width + if(pwpChild->height < 50) pwpChild->height = 50; // force minimum height + /* Move window */ + if( hWndChild != NULL ) { + SetWindowPos( hWndChild, HWND_TOP, + pwpChild->x, pwpChild->y, + pwpChild->width, pwpChild->height, + SWP_NOZORDER ); + } + } + } +}