aboutsummaryrefslogblamecommitdiff
path: root/Linux_C_12/cCCallWindows_121.c
blob: 526a68e3a52eba94481ba6574d36e72bd7152f67 (plain) (tree)
1
2
3
4
5
6
7
8
9
                                                                                              

                                                                        

                                                                                              
                                                





                                                                                              
                                   





                                                                       











                                                            















                                                                                            
                                                                                    


                                                                                     






                                                                                        
   
             
             
                                                              



                                                                                     

                                                                                        



                                                                                             


                                                                                  



                                                
























                                                                                                  
   
                                                           




                                               
                               




                                               
                              




                                          
              













                                                                                      
                                                           
                                         
                                                             


















                                               
/********************************************************************************************
    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();
}