/********************************************************************************************
Clean OS Windows library module version 1.2.1.
This module is part of the Clean Object I/O library, version 1.2.1,
for the Windows platform.
********************************************************************************************/
/********************************************************************************************
About this module:
Routines related to window/dialog handling.
********************************************************************************************/
#include "cCCallWindows_121.h"
#include "cCrossCallWindows_121.h"
OS WinInvalidateWindow (GtkWidget *widget, OS ios)
{
rprintf("WinInvalidateWindow\n");
gtk_widget_queue_draw(widget);
return ios;
}
OS WinInvalidateRect (GtkWidget *widget, int left, int top, int right,
int bottom, OS ios)
{
/* rprintf("WinInvalidateRect\n"); */
gint temp;
GdkRectangle* rect = g_new(GdkRectangle,1);
if (top > bottom) {
temp = top;
top = bottom;
bottom = top;
}
rect->x = (gint)left;
rect->y = (gint)top;
rect->width = (gint)(right - left);
rect->height = (gint)(bottom - top);
gdk_window_invalidate_rect(GDK_WINDOW(widget),rect, 1);
/* FIXME: destroy the Rectangle here? */
return ios;
}
OS WinValidateRect (GtkWidget *widget, int left, int top, int right, int bottom,
OS ios)
{
/* GTK Automatically calculates valid regions. */
return ios;
}
OS WinValidateRgn (GtkWidget *widget, GdkRegion *region, OS ios)
{
/* GTK Automatically calculates valid regions. */
return ios;
}
/* Win(M/S)DIClientToOuterSizeDims returns the width and height needed to add/subtract
from the client/outer size to obtain the outer/client size.
These values must be the same as used by W95AdjustClean(M/S)DIWindowDimensions!
*/
void WinMDIClientToOuterSizeDims (int styleFlags, OS ios, int *dw, int *dh, OS* oos)
{
/* if ((styleFlags&WS_THICKFRAME) != 0)
{ // resizable window
*dw = 2 * GetSystemMetrics (SM_CXSIZEFRAME);
*dh = 2 * GetSystemMetrics (SM_CYSIZEFRAME) + GetSystemMetrics (SM_CYCAPTION);
} else
{ // fixed size window
*dw = 2 * GetSystemMetrics (SM_CXFIXEDFRAME);
*dh = 2 * GetSystemMetrics (SM_CYFIXEDFRAME) + GetSystemMetrics (SM_CYCAPTION);
}
*/
*dw = 0;
*dh = 0;
printf("WinMDIClientOuterSizeDims -> not implemented\n");
*oos = ios;
}
void WinSDIClientToOuterSizeDims (int styleFlags, OS ios, int *dw, int *dh, OS *oos)
{
*dw = 0; //2 * GetSystemMetrics (SM_CXSIZEFRAME);
*dh = 0; //2 * GetSystemMetrics (SM_CYSIZEFRAME) + GetSystemMetrics (SM_CYCAPTION);
printf("WinSDIClientOuterSizeDims -> not implemented\n");
*oos = ios;
}
/* UpdateWindowScrollbars updates any window scrollbars and non-client area if present.
Uses the following access procedures to the GWL_STYLE of a windowhandle:
GetGWL_STYLE (hwnd) returns the GWL_STYLE value of hwnd;
WindowHasHScroll (hwnd) returns TRUE iff hwnd has a horizontal scrollbar;
WindowHasVScroll (hwnd) returns TRUE iff hwnd has a vertical scrollbar;
*/
void UpdateWindowScrollbars (GtkWidget *widget)
{
/* int w,h;
RECT rect;
GetWindowRect (hwnd, &rect);
w = rect.right -rect.left;
h = rect.bottom-rect.top;
if (WindowHasHScroll (hwnd))
{
rect.left = 0;
rect.top = h-GetSystemMetrics (SM_CYHSCROLL);
rect.right = w;
rect.bottom = h;
InvalidateRect (hwnd,&rect,FALSE);
RedrawWindow (hwnd,&rect,NULL,RDW_FRAME | RDW_VALIDATE | RDW_UPDATENOW | RDW_NOCHILDREN);
ValidateRect (hwnd,&rect);
}
if (WindowHasVScroll (hwnd))
{
rect.left = w-GetSystemMetrics (SM_CXVSCROLL);
rect.top = 0;
rect.right = w;
rect.bottom = h;
InvalidateRect (hwnd,&rect,FALSE);
RedrawWindow (hwnd,&rect,NULL,RDW_FRAME | RDW_VALIDATE | RDW_UPDATENOW | RDW_NOCHILDREN);
ValidateRect (hwnd,&rect);
}
*/
printf("UpdateWindowScrollbars -> not implemented\n");
}
void WinScreenYSize (OS ios, int *py, OS *oos)
{
rprintf("WinScreenYSize\n");
*py = gdk_screen_height();
*oos = ios;
}
void WinScreenXSize (OS ios, int *px, OS *oos)
{
rprintf("WinScreenXSize\n");
*px = gdk_screen_width();
*oos = ios;
}
void WinMinimumWinSize (int *mx, int *my)
{
rprintf("WinMinimumWinSize\n");
*mx = 48;
*my = 0;
}
/* WinScrollbarSize determines system metrics of width and height of scrollbars.
*/
void WinScrollbarSize (OS ios, int *width, int *height, OS *oos)
{
GtkRequisition req;
GtkWidget *vbar, *hbar;
printf ("WinScrollbarSize\n");
vbar = gtk_vscrollbar_new(NULL);
hbar = gtk_hscrollbar_new(NULL);
gtk_widget_size_request(vbar, &req);
*width = req.width; /* Width of the vertical arrow */
gtk_widget_size_request(hbar, &req);
*height = req.height; /* Height of the horizontal bar */
gtk_widget_destroy(vbar);
gtk_widget_destroy(hbar);
*oos = ios;
}
void WinMaxFixedWindowSize (int *mx, int *my)
{
rprintf("WinMaxFixedWindowSize\n");
*mx = gdk_screen_width();
*my = gdk_screen_height();
}
void WinMaxScrollWindowSize (int *mx, int *my)
{
rprintf("WinMaxScrollWindowSize\n");
*mx = gdk_screen_width();
*my = gdk_screen_height();
}