changeset 191:634625c3239d

Fixes for dw_color_xxxx_set() to accept OS/2 style colors, and fixed a problem with dw_window_set_font() on notebook controls.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Fri, 17 Jan 2003 20:31:06 +0000
parents f4c9fa77136a
children d946e329670c
files dwtest.c makefile.vc win/dw.c
diffstat 3 files changed, 265 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dwtest.c	Fri Jan 17 20:31:06 2003 +0000
@@ -0,0 +1,230 @@
+#define INCL_DOS
+#define INCL_WIN
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include "dw.h"
+
+
+unsigned long flStyle = DW_FCF_SYSMENU | DW_FCF_TITLEBAR |
+   DW_FCF_SHELLPOSITION | DW_FCF_TASKLIST | DW_FCF_DLGBORDER;
+
+HWND mainwindow,
+     entryfield,
+    okbutton,
+    cancelbutton,
+    lbbox,
+    notebookbox,
+    notebookbox1,
+    notebookbox2,
+    notebook,
+    stext,
+    pagebox,
+    textbox1, textbox2,
+    buttonbox;
+
+int exit_callback(HWND window, void *data)
+{
+   dw_window_destroy((HWND)data);
+   exit(0);
+   return -1;
+}
+
+int test_callback(HWND window, void *data)
+{
+   dw_window_destroy((HWND)data);
+   exit(0);
+   return -1;
+}
+int browse_callback(HWND window, void *data)
+{
+   dw_file_browse("test string", NULL, "c", DW_FILE_OPEN );
+   return 0;
+}
+
+void archive_add(void)
+{
+   HWND browsebutton, browsebox;
+
+   lbbox = dw_box_new(BOXVERT, 10);
+
+   dw_box_pack_start(notebookbox1, lbbox, 150, 70, TRUE, TRUE, 0);
+
+    /* Archive Name */
+   stext = dw_text_new("Archive Name", 0);
+
+   dw_window_set_style(stext, DW_DT_VCENTER, DW_DT_VCENTER);
+
+   dw_box_pack_start(lbbox, stext, 130, 15, TRUE, TRUE, 2);
+
+   browsebox = dw_box_new(BOXHORZ, 0);
+
+   dw_box_pack_start(lbbox, browsebox, 130, 15, TRUE, TRUE, 0);
+
+   entryfield = dw_entryfield_new("", 100L);
+
+   dw_box_pack_start(browsebox, entryfield, 100, 15, TRUE, TRUE, 4);
+
+   browsebutton = dw_button_new("Browse", 1001L);
+
+   dw_box_pack_start(browsebox, browsebutton, 30, 15, TRUE, TRUE, 0);
+
+   dw_window_set_color(browsebox, DW_CLR_PALEGRAY, DW_CLR_PALEGRAY);
+   dw_window_set_font(browsebutton, "9.WarpSans");
+   dw_window_set_font(stext, "9.WarpSans");
+   dw_window_set_color(stext, DW_CLR_BLACK, DW_CLR_PALEGRAY);
+   dw_window_set_font(entryfield, "9.WarpSans");
+
+    /* Archive Description */
+   stext = dw_text_new("Archive Description", 0);
+
+   dw_window_set_style(stext, DW_DT_VCENTER, DW_DT_VCENTER);
+
+   dw_box_pack_start(lbbox, stext, 130, 15, TRUE, TRUE, 4);
+
+   entryfield = dw_entryfield_new("", 100L);
+
+   dw_box_pack_start(lbbox, entryfield, 130, 15, TRUE, TRUE, 4);
+
+   dw_window_set_font(stext, "9.WarpSans");
+   dw_window_set_color(stext, DW_CLR_BLACK, DW_CLR_PALEGRAY);
+   dw_window_set_font(entryfield, "9.WarpSans");
+
+    /* Comments */
+   stext = dw_text_new("Comments", 0);
+
+   dw_window_set_style(stext, DW_DT_VCENTER, DW_DT_VCENTER);
+
+   dw_box_pack_start(lbbox, stext, 130, 15, TRUE, TRUE, 4);
+
+   entryfield = dw_entryfield_new("", 100L);
+
+   dw_box_pack_start(lbbox, entryfield, 130, 15, TRUE, TRUE, 4);
+
+   dw_window_set_font(stext, "9.WarpSans");
+   dw_window_set_color(stext, DW_CLR_BLACK, DW_CLR_PALEGRAY);
+   dw_window_set_font(entryfield, "9.WarpSans");
+
+    /* Buttons */
+   buttonbox = dw_box_new(BOXHORZ, 10);
+
+   dw_box_pack_start(lbbox, buttonbox, 140, 210, TRUE, TRUE, 0);
+
+   okbutton = dw_button_new("Ok", 1001L);
+
+   dw_box_pack_start(buttonbox, okbutton, 130, 30, TRUE, TRUE, 2);
+
+   cancelbutton = dw_button_new("Cancel", 1002L);
+
+   dw_box_pack_start(buttonbox, cancelbutton, 130, 30, TRUE, TRUE, 2);
+
+   /* Set some nice fonts and colors */
+   dw_window_set_color(lbbox, DW_CLR_DARKCYAN, DW_CLR_PALEGRAY);
+   dw_window_set_color(buttonbox, DW_CLR_DARKCYAN, DW_CLR_PALEGRAY);
+   dw_window_set_color(okbutton, DW_CLR_PALEGRAY, DW_CLR_DARKCYAN);
+   dw_window_set_font(okbutton, "9.WarpSans");
+   dw_window_set_font(cancelbutton, "9.WarpSans");
+
+   dw_signal_connect(browsebutton, "clicked", DW_SIGNAL_FUNC(browse_callback), (void *)notebookbox1);
+   dw_signal_connect(okbutton, "clicked", DW_SIGNAL_FUNC(test_callback), (void *)notebookbox1);
+   dw_signal_connect(cancelbutton, "clicked", DW_SIGNAL_FUNC(test_callback), (void *)notebookbox1);
+}
+
+
+int font_width = 9;
+int font_height=6;
+int rows=100,width1=6,width2=50;
+
+/* This gets called when a part of the graph needs to be repainted. */
+int text_expose(HWND hwnd, DWExpose *exp, void *data)
+{
+   HPIXMAP hpm = (HPIXMAP)data;
+
+   dw_pixmap_bitblt(hwnd, NULL, 0, 0, font_width*width1, font_height*rows, NULL, hpm, 0, 0 );
+}
+
+void text_add(void)
+{
+   int i,x,y;
+   char buf[10];
+   HPIXMAP text1pm,text2pm;
+
+   pagebox = dw_box_new(BOXVERT, 5);
+   dw_box_pack_start( notebookbox2, pagebox, 1, 1, TRUE, TRUE, 0);
+
+   textbox1 = dw_render_new( 100 );
+   dw_box_pack_start( pagebox, textbox1, font_width*width1, font_height*rows, FALSE, TRUE, 4);
+   dw_window_set_font(textbox1, "9.WarpSans");
+
+   textbox2 = dw_render_new( 101 );
+   dw_box_pack_start( pagebox, textbox2, font_width*width2, font_height*rows, TRUE, TRUE, 4);
+   dw_window_set_font(textbox2, "9.WarpSans");
+
+   text1pm = dw_pixmap_new( textbox1, font_width*width1, font_height*rows, 32 );
+   text2pm = dw_pixmap_new( textbox2, font_width*width2, font_height*rows, 32 );
+
+   dw_color_foreground_set(DW_CLR_WHITE);
+   dw_draw_rect(0, text1pm, TRUE, 0, 0, font_width*width1, font_height*rows);
+   dw_draw_rect(0, text2pm, TRUE, 0, 0, font_width*width2, font_height*rows);
+
+   dw_window_set_font(textbox1, "9.WarpSans");
+   dw_font_text_extents( NULL, text1pm, "O", &font_width, &font_height );
+   dw_messagebox("DWTest", "Width: %d Height: %d\n", font_width, font_height);
+
+   dw_color_background_set( DW_CLR_WHITE );
+   for ( i = 0;i < 100; i++)
+   {
+      y = i*font_height;
+
+      dw_color_foreground_set( DW_CLR_BLACK );
+      sprintf( buf, "%6.6d", i );
+      dw_draw_text( NULL, text1pm, 0, y, buf);
+      dw_draw_text( NULL, text2pm, 0, y, buf);
+   }
+   dw_signal_connect(textbox1, "expose_event", DW_SIGNAL_FUNC(text_expose), text1pm);
+   dw_signal_connect(textbox2, "expose_event", DW_SIGNAL_FUNC(text_expose), text2pm);
+   dw_flush();
+}
+
+/*
+ * Let's demonstrate the functionality of this library. :)
+ */
+int main(int argc, char *argv[])
+{
+    ULONG notebookpage1;
+	ULONG notebookpage2;
+
+   dw_init(TRUE, argc, argv);
+
+   mainwindow = dw_window_new( HWND_DESKTOP, "dwindows test", flStyle | DW_FCF_SIZEBORDER | DW_FCF_MINMAX );
+
+   notebookbox = dw_box_new( BOXVERT, 5 );
+   dw_box_pack_start( mainwindow, notebookbox, 1, 1, TRUE, TRUE, 0);
+
+   notebook = dw_notebook_new( 1, TRUE );
+   dw_box_pack_start( notebookbox, notebook, 100, 100, TRUE, TRUE, 0);
+   dw_window_set_font( notebook, "8.WarpSans");
+
+   notebookbox1 = dw_box_new( BOXVERT, 5 );
+   notebookpage1 = dw_notebook_page_new( notebook, 0, TRUE );
+   dw_notebook_pack( notebook, notebookpage1, notebookbox1 );
+   fprintf( stderr, "page1: %d\n", notebookpage1 );
+   dw_notebook_page_set_text( notebook, notebookpage1, "first page");
+   archive_add();
+
+   notebookbox2 = dw_box_new( BOXVERT, 5 );
+   notebookpage2 = dw_notebook_page_new( notebook, 1, FALSE );
+   dw_notebook_pack( notebook, notebookpage2, notebookbox2 );
+   fprintf( stderr, "page2: %d\n",notebookpage2);
+   dw_notebook_page_set_text( notebook, notebookpage2, "second page");
+   text_add();
+
+   dw_signal_connect(mainwindow, "delete_event", DW_SIGNAL_FUNC(exit_callback), (void *)mainwindow);
+   dw_window_set_usize(mainwindow, 640, 480);
+   dw_window_show(mainwindow);
+
+   dw_main();
+
+   return 0;
+}
--- a/makefile.vc	Fri Jan 10 19:19:56 2003 +0000
+++ b/makefile.vc	Fri Jan 17 20:31:06 2003 +0000
@@ -8,7 +8,7 @@
 CFLAGS_COMPILE = -MTd
 LIBS = wsock32.lib kernel32.lib user32.lib comctl32.lib gdi32.lib advapi32.lib shell32.lib comdlg32.lib
 RES = 
-LINKFLAGS = -machine:i386 -debug:full -debugtype:cv
+LINKFLAGS = -machine:i386 -debug:full
 DLLLINKFLAGS = -dll
 LINK = link
 DEFFILE = dww.def
@@ -58,11 +58,14 @@
         copy dwcompat.lib $(FXLIBDIR)\dwcompat.lib
         copy dwcompat.dll $(FXDLLDIR)\dwcompat.dll
 
-dw.obj:
+dw.obj: win\dw.c
 	$(CC) $(CFLAGS) $(CFLAGS_DEBUG) $(CFLAGS_COMPILE) win\dw.c
 
-dirent.obj:
+dirent.obj: win\dirent.c
 	$(CC) $(CFLAGS) $(CFLAGS_DEBUG) $(CFLAGS_COMPILE) win\dirent.c
 
 .c.obj:
 	$(CC) $(CFLAGS) $(CFLAGS_DEBUG) $(CFLAGS_COMPILE) $*.c
+
+dwtest.exe: dwtest.obj winmain.obj
+	$(LINK) $(LINKFLAGS) /out:dwtest.exe dwtest.obj winmain.obj /subsystem:windows $(FXLIBDIR)\dwcompat.lib $(FXLIBDIR)\dw.lib $(LIBS)
--- a/win/dw.c	Fri Jan 10 19:19:56 2003 +0000
+++ b/win/dw.c	Fri Jan 17 20:31:06 2003 +0000
@@ -365,7 +365,7 @@
 	}
 	else if(strnicmp(tmpbuf, WC_TABCONTROL, strlen(WC_TABCONTROL)+1)==0) /* Notebook */
 	{
-		NotebookPage **array = (NotebookPage **)GetWindowLong(handle, GWL_USERDATA);
+		NotebookPage **array = (NotebookPage **)dw_window_get_data(handle, "_dw_array");
 
 		if(array)
 		{
@@ -404,6 +404,14 @@
 	return TRUE;
 }
 
+/* Convert to our internal color scheme */
+ULONG _internal_color(ULONG color)
+{
+	if(color < 18)
+		return DW_RGB(_red[color], _green[color], _blue[color]);
+	return color;
+}
+
 /* This function returns 1 if the window (widget) handle
  * passed to it is a valid window that can gain input focus.
  */
@@ -561,7 +569,7 @@
 				}
 				else if(strnicmp(tmpbuf, WC_TABCONTROL, strlen(WC_TABCONTROL))==0) /* Notebook */
 				{
-					NotebookPage **array = (NotebookPage **)GetWindowLong(box->items[z].hwnd, GWL_USERDATA);
+					NotebookPage **array = (NotebookPage **)dw_window_get_data(box->items[z].hwnd, "_dw_array");
 					int pageid = TabCtrl_GetCurSel(box->items[z].hwnd);
 
 					if(pageid > -1 && array && array[pageid])
@@ -664,7 +672,7 @@
 
 				if(strnicmp(tmpbuf, WC_TABCONTROL, strlen(WC_TABCONTROL))==0) /* Notebook */
 				{
-					NotebookPage **array = (NotebookPage **)GetWindowLong(box->items[z].hwnd, GWL_USERDATA);
+					NotebookPage **array = (NotebookPage **)dw_window_get_data(box->items[z].hwnd, "_dw_array");
 					int pageid = TabCtrl_GetCurSel(box->items[z].hwnd);
 
 					if(pageid > -1 && array && array[pageid])
@@ -1144,7 +1152,7 @@
 				if(strncmp(tmpbuf, WC_TABCONTROL, strlen(WC_TABCONTROL))==0)
 				{
 					RECT rect;
-					NotebookPage **array = (NotebookPage **)GetWindowLong(handle, GWL_USERDATA);
+					NotebookPage **array = (NotebookPage **)dw_window_get_data(handle, "_dw_array");
 					int pageid = TabCtrl_GetCurSel(handle);
 
 					if(pageid > -1 && array && array[pageid])
@@ -1572,7 +1580,7 @@
 			if(tem->code == TCN_SELCHANGING)
 			{
 				int num=TabCtrl_GetCurSel(tem->hwndFrom);
-				NotebookPage **array = (NotebookPage **)GetWindowLong(tem->hwndFrom, GWL_USERDATA);
+				NotebookPage **array = (NotebookPage **)dw_window_get_data(tem->hwndFrom, "_dw_array");
 
 				if(num > -1 && array && array[num])
 					SetParent(array[num]->hwnd, DW_HWND_OBJECT);
@@ -1581,7 +1589,7 @@
 			else if(tem->code == TCN_SELCHANGE)
 			{
 				int num=TabCtrl_GetCurSel(tem->hwndFrom);
-				NotebookPage **array = (NotebookPage **)GetWindowLong(tem->hwndFrom, GWL_USERDATA);
+				NotebookPage **array = (NotebookPage **)dw_window_get_data(tem->hwndFrom, "_dw_array");
 
 				if(num > -1 && array && array[num])
 					SetParent(array[num]->hwnd, tem->hwndFrom);
@@ -2795,7 +2803,7 @@
 void _resize_notebook_page(HWND handle, int pageid)
 {
 	RECT rect;
-	NotebookPage **array = (NotebookPage **)GetWindowLong(handle, GWL_USERDATA);
+	NotebookPage **array = (NotebookPage **)dw_window_get_data(handle, "_dw_array");
 
 	if(array && array[pageid])
 	{
@@ -3298,6 +3306,9 @@
 
 	if(strnicmp(tmpbuf, WC_LISTVIEW, strlen(WC_LISTVIEW))==0)
 	{
+		fore = _internal_color(fore);
+		back = _internal_color(back);
+
 		ListView_SetTextColor(handle, RGB(DW_RED_VALUE(fore),
 										  DW_GREEN_VALUE(fore),
 										  DW_BLUE_VALUE(fore)));
@@ -3558,7 +3569,7 @@
 					   (HMENU)id,
 					   DWInstance,
 					   NULL);
-	SetWindowLong(tmp, GWL_USERDATA, (ULONG)array);
+	dw_window_set_data(tmp, "_dw_array", (void *)array);
 	dw_window_set_font(tmp, DefaultFont);
 	return tmp;
 }
@@ -4564,7 +4575,7 @@
  */
 unsigned long API dw_notebook_page_new(HWND handle, ULONG flags, int front)
 {
-	NotebookPage **array = (NotebookPage **)GetWindowLong(handle, GWL_USERDATA);
+	NotebookPage **array = (NotebookPage **)dw_window_get_data(handle, "_dw_array");
 
 	if(array)
 	{
@@ -4616,7 +4627,7 @@
 void API dw_notebook_page_set_text(HWND handle, ULONG pageidx, char *text)
 {
 
-	NotebookPage **array = (NotebookPage **)GetWindowLong(handle, GWL_USERDATA);
+	NotebookPage **array = (NotebookPage **)dw_window_get_data(handle, "_dw_array");
 	int pageid;
 
 	if(!array)
@@ -4653,7 +4664,7 @@
  */
 void API dw_notebook_pack(HWND handle, ULONG pageidx, HWND page)
 {
-	NotebookPage **array = (NotebookPage **)GetWindowLong(handle, GWL_USERDATA);
+	NotebookPage **array = (NotebookPage **)dw_window_get_data(handle, "_dw_array");
 	int pageid;
 
 	if(!array)
@@ -4686,7 +4697,7 @@
  */
 void API dw_notebook_page_destroy(HWND handle, unsigned int pageidx)
 {
-	NotebookPage **array = (NotebookPage **)GetWindowLong(handle, GWL_USERDATA);
+	NotebookPage **array = (NotebookPage **)dw_window_get_data(handle, "_dw_array");
 	int newid = -1, z, pageid;
 
 	if(!array)
@@ -4734,7 +4745,7 @@
  */
 unsigned int API dw_notebook_page_query(HWND handle)
 {
-	NotebookPage **array = (NotebookPage **)GetWindowLong(handle, GWL_USERDATA);
+	NotebookPage **array = (NotebookPage **)dw_window_get_data(handle, "_dw_array");
 	int physid = TabCtrl_GetCurSel(handle);
 
 	if(physid > -1 && physid < 256 && array && array[physid])
@@ -4750,7 +4761,7 @@
  */
 void API dw_notebook_page_set(HWND handle, unsigned int pageidx)
 {
-	NotebookPage **array = (NotebookPage **)GetWindowLong(handle, GWL_USERDATA);
+	NotebookPage **array = (NotebookPage **)dw_window_get_data(handle, "_dw_array");
 	int pageid;
 
 	if(!array)
@@ -6211,6 +6222,8 @@
 	if(threadid < 0 || threadid >= THREAD_LIMIT)
 		threadid = 0;
 
+	value = _internal_color(value);
+
 	DeleteObject(_hPen[threadid]);
 	DeleteObject(_hBrush[threadid]);
 	_foreground[threadid] = RGB(DW_RED_VALUE(value), DW_GREEN_VALUE(value), DW_BLUE_VALUE(value));
@@ -6231,6 +6244,8 @@
 	if(threadid < 0 || threadid >= THREAD_LIMIT)
 		threadid = 0;
 
+	value = _internal_color(value);
+
 	_background[threadid] = RGB(DW_RED_VALUE(value), DW_GREEN_VALUE(value), DW_BLUE_VALUE(value));
 }