tImproved display of GtkEntry widgets, and initial support for resizing GtkPaned widgets, in Win32 client - vaccinewars - be a doctor and try to vaccinate the world
 (HTM) git clone git://src.adamsgaard.dk/vaccinewars
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 693b1b6d84b86e661a296ebc0d1aa73732a334e5
 (DIR) parent a7dd0ce452bb13c6b9ffa1892a9691546bed9e86
 (HTM) Author: Ben Webb <ben@salilab.org>
       Date:   Wed, 20 Dec 2000 12:13:38 +0000
       
       Improved display of GtkEntry widgets, and initial support for resizing GtkPaned
       widgets, in Win32 client
       
       
       Diffstat:
         M src/gtk.c                           |      92 +++++++++++++++++++++----------
         M src/gtk.h                           |       1 +
       
       2 files changed, 63 insertions(+), 30 deletions(-)
       ---
 (DIR) diff --git a/src/gtk.c b/src/gtk.c
       t@@ -21,6 +21,8 @@ static void gtk_button_size_request(GtkWidget *widget,
                                            GtkRequisition *requisition);
        static void gtk_entry_size_request(GtkWidget *widget,
                                           GtkRequisition *requisition);
       +static void gtk_entry_set_size(GtkWidget *widget,
       +                               GtkAllocation *allocation);
        static void gtk_text_size_request(GtkWidget *widget,
                                          GtkRequisition *requisition);
        static void gtk_button_destroy(GtkWidget *widget);
       t@@ -284,6 +286,7 @@ static GtkClass GtkMenuClass = {
        
        static GtkSignalType GtkEditableSignals[] = {
           { "create",gtk_marshal_VOID__VOID,gtk_editable_create },
       +   { "activate",gtk_marshal_VOID__VOID,NULL },
           { "",NULL,NULL }
        };
        
       t@@ -293,6 +296,7 @@ static GtkClass GtkEditableClass = {
        
        static GtkSignalType GtkEntrySignals[] = {
           { "size_request",gtk_marshal_VOID__GPOIN,gtk_entry_size_request },
       +   { "set_size",gtk_marshal_VOID__GPOIN,gtk_entry_set_size },
           { "realize",gtk_marshal_VOID__VOID,gtk_entry_realize },
           { "",NULL,NULL }
        };
       t@@ -584,38 +588,57 @@ LRESULT CALLBACK GtkPanedProc(HWND hwnd,UINT msg,UINT wParam,LONG lParam) {
           HPEN oldpen,dkpen,ltpen;
           RECT rect;
           HDC hDC;
       -   if (msg==WM_PAINT) {
       -      if (GetUpdateRect(hwnd,NULL,TRUE)) {
       -         BeginPaint(hwnd,&ps);
       -         GetClientRect(hwnd,&rect);
       -         hDC=ps.hdc;
       -         ltpen=CreatePen(PS_SOLID,0,(COLORREF)GetSysColor(COLOR_3DHILIGHT));
       -         dkpen=CreatePen(PS_SOLID,0,(COLORREF)GetSysColor(COLOR_3DSHADOW));
       -
       -         if (rect.right > rect.bottom) {
       -            oldpen=SelectObject(hDC,ltpen);
       -            MoveToEx(hDC,rect.left,rect.top,NULL);
       -            LineTo(hDC,rect.right,rect.top);
       -
       -            SelectObject(hDC,dkpen);
       -            MoveToEx(hDC,rect.left,rect.bottom-1,NULL);
       -            LineTo(hDC,rect.right,rect.bottom-1);
       -         } else {
       -            oldpen=SelectObject(hDC,ltpen);
       -            MoveToEx(hDC,rect.left,rect.top,NULL);
       -            LineTo(hDC,rect.left,rect.bottom);
       +   GtkPaned *paned;
       +   paned=GTK_PANED(GetWindowLong(hwnd,GWL_USERDATA));
       +   switch(msg) {
       +      case WM_PAINT:
       +         if (GetUpdateRect(hwnd,NULL,TRUE)) {
       +            BeginPaint(hwnd,&ps);
       +            GetClientRect(hwnd,&rect);
       +            hDC=ps.hdc;
       +            ltpen=CreatePen(PS_SOLID,0,(COLORREF)GetSysColor(COLOR_3DHILIGHT));
       +            dkpen=CreatePen(PS_SOLID,0,(COLORREF)GetSysColor(COLOR_3DSHADOW));
       +
       +            if (rect.right > rect.bottom) {
       +               oldpen=SelectObject(hDC,ltpen);
       +               MoveToEx(hDC,rect.left,rect.top,NULL);
       +               LineTo(hDC,rect.right,rect.top);
       +
       +               SelectObject(hDC,dkpen);
       +               MoveToEx(hDC,rect.left,rect.bottom-1,NULL);
       +               LineTo(hDC,rect.right,rect.bottom-1);
       +            } else {
       +               oldpen=SelectObject(hDC,ltpen);
       +               MoveToEx(hDC,rect.left,rect.top,NULL);
       +               LineTo(hDC,rect.left,rect.bottom);
       +
       +               SelectObject(hDC,ltpen);
       +               MoveToEx(hDC,rect.right-1,rect.top,NULL);
       +               LineTo(hDC,rect.right-1,rect.bottom);
       +            }
        
       -            SelectObject(hDC,ltpen);
       -            MoveToEx(hDC,rect.right-1,rect.top,NULL);
       -            LineTo(hDC,rect.right-1,rect.bottom);
       +            SelectObject(hDC,oldpen);
       +            DeleteObject(ltpen); DeleteObject(dkpen);
       +            EndPaint(hwnd,&ps);
                 }
       -
       -         SelectObject(hDC,oldpen);
       -         DeleteObject(ltpen); DeleteObject(dkpen);
       -         EndPaint(hwnd,&ps);
       -      }
       -      return TRUE;
       -   } else return DefWindowProc(hwnd,msg,wParam,lParam);
       +         return TRUE;
       +      case WM_LBUTTONDOWN:
       +         if (!paned) break;
       +         SetCapture(hwnd);
       +         paned->Tracking=TRUE;
       +         return TRUE;
       +      case WM_MOUSEMOVE:
       +         if (!paned||!paned->Tracking) break;
       +         return TRUE;
       +      case WM_LBUTTONUP:
       +         if (!paned||!paned->Tracking) break;
       +         ReleaseCapture();
       +         paned->Tracking=FALSE;
       +         return TRUE;
       +      default:
       +         return DefWindowProc(hwnd,msg,wParam,lParam);
       +   }
       +   return FALSE;
        }
        
        LRESULT CALLBACK GtkSepProc(HWND hwnd,UINT msg,UINT wParam,LONG lParam) {
       t@@ -2346,6 +2369,15 @@ void gtk_label_set_size(GtkWidget *widget,GtkAllocation *allocation) {
           }
        }
        
       +void gtk_entry_set_size(GtkWidget *widget,GtkAllocation *allocation) {
       +   gint yexcess;
       +   yexcess=allocation->height-widget->requisition.height;
       +   if (yexcess > 0) {
       +      allocation->y += yexcess/2;
       +      allocation->height -= yexcess;
       +   }
       +}
       +
        void gtk_label_destroy(GtkWidget *widget) {
           g_free(GTK_LABEL(widget)->text);
        }
 (DIR) diff --git a/src/gtk.h b/src/gtk.h
       t@@ -218,6 +218,7 @@ struct _GtkPaned {
           GtkPanedChild children[2];
           gint handle_size,gutter_size;
           gint handle_pos;
       +   gint Tracking : 1;
        };
        
        struct _GtkVPaned {