tWin32 client improvements: networking and GtkPaned almost work now - 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 7513ce1edb65ccdca3ed99d36a9c35f8bbfc3e84
(DIR) parent 94a4686cf2ee9a61f029385ec096504e1d733fe0
(HTM) Author: Ben Webb <ben@salilab.org>
Date: Sun, 17 Dec 2000 15:02:52 +0000
Win32 client improvements: networking and GtkPaned almost work now
Diffstat:
M src/gtk.c | 163 +++++++++++++++++++++++++------
1 file changed, 133 insertions(+), 30 deletions(-)
---
(DIR) diff --git a/src/gtk.c b/src/gtk.c
t@@ -11,7 +11,10 @@
#define WM_SOCKETDATA (WM_USER+100)
-static const gchar *WC_GTKSEP = "WC_GTKSEP";
+static const gchar *WC_GTKSEP = "WC_GTKSEP";
+static const gchar *WC_GTKVPANED = "WC_GTKVPANED";
+static const gchar *WC_GTKHPANED = "WC_GTKHPANED";
+static const gchar *WC_GTKDIALOG = "WC_GTKDIALOG";
static BOOL GetTextSize(HWND hWnd,char *text,LPSIZE lpSize);
static void gtk_button_size_request(GtkWidget *widget,
t@@ -576,6 +579,45 @@ static void DispatchSocketEvent(SOCKET sock,long event) {
}
}
+LRESULT CALLBACK GtkPanedProc(HWND hwnd,UINT msg,UINT wParam,LONG lParam) {
+ PAINTSTRUCT ps;
+ 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);
+
+ 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);
+ }
+ return TRUE;
+ } else return DefWindowProc(hwnd,msg,wParam,lParam);
+}
+
LRESULT CALLBACK GtkSepProc(HWND hwnd,UINT msg,UINT wParam,LONG lParam) {
PAINTSTRUCT ps;
HPEN oldpen,dkpen,ltpen;
t@@ -738,19 +780,55 @@ void win32_init(HINSTANCE hInstance,HINSTANCE hPrevInstance) {
wc.lpszMenuName = NULL;
wc.lpszClassName = "mainwin";
RegisterClass(&wc);
- }
- wc.style = CS_HREDRAW|CS_VREDRAW;
- wc.lpfnWndProc = GtkSepProc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- wc.hInstance = hInstance;
- wc.hIcon = NULL;
- wc.hCursor = LoadCursor(NULL,IDC_ARROW);
- wc.hbrBackground = (HBRUSH)(1+COLOR_BTNFACE);
- wc.lpszMenuName = NULL;
- wc.lpszClassName = WC_GTKSEP;
- RegisterClass(&wc);
+ wc.style = CS_HREDRAW|CS_VREDRAW;
+ wc.lpfnWndProc = MainWndProc;
+ wc.cbClsExtra = 0;
+ wc.cbWndExtra = 0;
+ wc.hInstance = hInstance;
+ wc.hIcon = NULL;
+ wc.hCursor = LoadCursor(NULL,IDC_ARROW);
+ wc.hbrBackground = (HBRUSH)(1+COLOR_BTNFACE);
+ wc.lpszMenuName = NULL;
+ wc.lpszClassName = WC_GTKDIALOG;
+ RegisterClass(&wc);
+
+ wc.style = CS_HREDRAW|CS_VREDRAW;
+ wc.lpfnWndProc = GtkPanedProc;
+ wc.cbClsExtra = 0;
+ wc.cbWndExtra = 0;
+ wc.hInstance = hInstance;
+ wc.hIcon = NULL;
+ wc.hCursor = LoadCursor(NULL,IDC_SIZEWE);
+ wc.hbrBackground = (HBRUSH)(1+COLOR_BTNFACE);
+ wc.lpszMenuName = NULL;
+ wc.lpszClassName = WC_GTKHPANED;
+ RegisterClass(&wc);
+
+ wc.style = CS_HREDRAW|CS_VREDRAW;
+ wc.lpfnWndProc = GtkPanedProc;
+ wc.cbClsExtra = 0;
+ wc.cbWndExtra = 0;
+ wc.hInstance = hInstance;
+ wc.hIcon = NULL;
+ wc.hCursor = LoadCursor(NULL,IDC_SIZENS);
+ wc.hbrBackground = (HBRUSH)(1+COLOR_BTNFACE);
+ wc.lpszMenuName = NULL;
+ wc.lpszClassName = WC_GTKVPANED;
+ RegisterClass(&wc);
+
+ wc.style = CS_HREDRAW|CS_VREDRAW;
+ wc.lpfnWndProc = GtkSepProc;
+ wc.cbClsExtra = 0;
+ wc.cbWndExtra = 0;
+ wc.hInstance = hInstance;
+ wc.hIcon = NULL;
+ wc.hCursor = LoadCursor(NULL,IDC_ARROW);
+ wc.hbrBackground = (HBRUSH)(1+COLOR_BTNFACE);
+ wc.lpszMenuName = NULL;
+ wc.lpszClassName = WC_GTKSEP;
+ RegisterClass(&wc);
+ }
InitCommonControls();
}
t@@ -1672,14 +1750,16 @@ void gtk_window_realize(GtkWidget *widget) {
GtkWindow *win=GTK_WINDOW(widget);
HWND Parent;
Parent=gtk_get_parent_hwnd(widget->parent);
- widget->hWnd = CreateWindow("mainwin",win->title,
- win->type == GTK_WINDOW_TOPLEVEL ?
- WS_OVERLAPPEDWINDOW|CS_HREDRAW|CS_VREDRAW|WS_SIZEBOX :
+ if (win->type==GTK_WINDOW_TOPLEVEL) {
+ widget->hWnd = CreateWindow("mainwin",win->title,
+ WS_OVERLAPPEDWINDOW|CS_HREDRAW|CS_VREDRAW|WS_SIZEBOX,
+ CW_USEDEFAULT,0,0,0,Parent,NULL,hInst,NULL);
+ if (!TopLevel) TopLevel=widget->hWnd;
+ } else {
+ widget->hWnd = CreateWindow(WC_GTKDIALOG,win->title,
WS_CAPTION|WS_SYSMENU|CS_HREDRAW|CS_VREDRAW|WS_SIZEBOX,
- CW_USEDEFAULT,0,
- widget->allocation.width,widget->allocation.height,
- Parent,NULL,hInst,NULL);
- if (win->type==GTK_WINDOW_TOPLEVEL && !TopLevel) TopLevel=widget->hWnd;
+ CW_USEDEFAULT,0,0,0,Parent,NULL,hInst,NULL);
+ }
WindowList=g_slist_append(WindowList,(gpointer)win);
gtk_set_default_font(widget->hWnd);
/* g_print("Window window %p created\n",widget->hWnd);*/
t@@ -1991,7 +2071,7 @@ void gtk_clist_update_widths(GtkCList *clist,gchar *text[]) {
hWnd=GTK_WIDGET(clist)->hWnd;
if (!hWnd) return;
for (i=0;i<clist->ncols;i++) {
- if (GetTextSize(hWnd,text[i],&size) &&
+ if (clist->cols[i].auto_resize && GetTextSize(hWnd,text[i],&size) &&
size.cx+2*LISTITEMHPACK > clist->cols[i].width) {
clist->cols[i].width = size.cx+2*LISTITEMHPACK;
}
t@@ -3346,7 +3426,7 @@ void gdk_input_remove(gint tag) {
input=(GdkInput *)list->data;
if (input->source==tag) {
WSAAsyncSelect(input->source,TopLevel,0,0);
- g_slist_remove(GdkInputs,input);
+ GdkInputs=g_slist_remove(GdkInputs,input);
g_free(input);
break;
}
t@@ -3356,14 +3436,15 @@ void gdk_input_remove(gint tag) {
gint gdk_input_add(gint source,GdkInputCondition condition,
GdkInputFunction function,gpointer data) {
GdkInput *input;
+ int rc;
input=g_new(GdkInput,1);
input->source=source;
input->condition=condition;
input->function=function;
input->data=data;
- WSAAsyncSelect(source,TopLevel,WM_SOCKETDATA,
+ rc=WSAAsyncSelect(source,TopLevel,WM_SOCKETDATA,
(condition&GDK_INPUT_READ ? FD_READ : 0) |
- (condition&GDK_INPUT_WRITE ? FD_WRITE : 0));
+ (condition&GDK_INPUT_WRITE ? FD_WRITE|FD_CONNECT : 0));
GdkInputs=g_slist_append(GdkInputs,input);
return source;
}
t@@ -3450,11 +3531,17 @@ void gtk_widget_remove_accelerator(GtkWidget *widget,
}
GtkWidget *gtk_vpaned_new() {
- return GTK_WIDGET(GtkNewObject(&GtkVPanedClass));
+ GtkVPaned *vpaned;
+ vpaned=GTK_VPANED(GtkNewObject(&GtkVPanedClass));
+ GTK_PANED(vpaned)->handle_size=5;
+ return GTK_WIDGET(vpaned);
}
GtkWidget *gtk_hpaned_new() {
- return GTK_WIDGET(GtkNewObject(&GtkHPanedClass));
+ GtkHPaned *hpaned;
+ hpaned=GTK_HPANED(GtkNewObject(&GtkHPanedClass));
+ GTK_PANED(hpaned)->handle_size=5;
+ return GTK_WIDGET(hpaned);
}
static void gtk_paned_pack(GtkPaned *paned,gint pos,GtkWidget *child,
t@@ -3507,11 +3594,19 @@ void gtk_paned_realize(GtkWidget *widget) {
}
void gtk_vpaned_realize(GtkWidget *widget) {
+ HWND Parent;
gtk_paned_realize(widget);
+ Parent=gtk_get_parent_hwnd(widget);
+ widget->hWnd = CreateWindow(WC_GTKVPANED,"",WS_CHILD,
+ 0,0,0,0,Parent,NULL,hInst,NULL);
}
void gtk_hpaned_realize(GtkWidget *widget) {
+ HWND Parent;
gtk_paned_realize(widget);
+ Parent=gtk_get_parent_hwnd(widget);
+ widget->hWnd = CreateWindow(WC_GTKHPANED,"",WS_CHILD,
+ 0,0,0,0,Parent,NULL,hInst,NULL);
}
void gtk_vpaned_size_request(GtkWidget *widget,GtkRequisition *requisition) {
t@@ -3523,6 +3618,7 @@ void gtk_vpaned_size_request(GtkWidget *widget,GtkRequisition *requisition) {
requisition->width = paned->children[i].widget->requisition.width;
requisition->height += paned->children[i].widget->requisition.height;
}
+ requisition->height += paned->handle_size;
}
void gtk_hpaned_size_request(GtkWidget *widget,GtkRequisition *requisition) {
t@@ -3534,6 +3630,7 @@ void gtk_hpaned_size_request(GtkWidget *widget,GtkRequisition *requisition) {
requisition->height = paned->children[i].widget->requisition.height;
requisition->width += paned->children[i].widget->requisition.width;
}
+ requisition->width += paned->handle_size;
}
void gtk_vpaned_set_size(GtkWidget *widget,GtkAllocation *allocation) {
t@@ -3545,11 +3642,14 @@ void gtk_vpaned_set_size(GtkWidget *widget,GtkAllocation *allocation) {
for (i=0;i<2;i++) if (paned->children[i].widget) numchildren++;
if (numchildren==0) return;
child_alloc.width=allocation->width;
- child_alloc.height=allocation->height/numchildren;
+ child_alloc.height=(allocation->height-paned->handle_size)/numchildren;
for (i=0;i<2;i++) if (paned->children[i].widget) {
gtk_widget_set_size(paned->children[i].widget,&child_alloc);
- child_alloc.y+=allocation->height/numchildren;
+ child_alloc.y+=(allocation->height-paned->handle_size)/numchildren+
+ paned->handle_size;
}
+ allocation->y += (allocation->height-paned->handle_size)/numchildren;
+ allocation->height = paned->handle_size;
}
void gtk_hpaned_set_size(GtkWidget *widget,GtkAllocation *allocation) {
t@@ -3561,11 +3661,14 @@ void gtk_hpaned_set_size(GtkWidget *widget,GtkAllocation *allocation) {
for (i=0;i<2;i++) if (paned->children[i].widget) numchildren++;
if (numchildren==0) return;
child_alloc.height=allocation->height;
- child_alloc.width=allocation->width/numchildren;
+ child_alloc.width=(allocation->width-paned->handle_size)/numchildren;
for (i=0;i<2;i++) if (paned->children[i].widget) {
gtk_widget_set_size(paned->children[i].widget,&child_alloc);
- child_alloc.x+=allocation->width/numchildren;
+ child_alloc.x+=(allocation->width-paned->handle_size)/numchildren+
+ paned->handle_size;
}
+ allocation->x += (allocation->width-paned->handle_size)/numchildren;
+ allocation->width = paned->handle_size;
}
void gtk_text_set_editable(GtkText *text,gboolean is_editable) {