# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1042835466 0 # Node ID 634625c3239dea9f1d58a9bf8534dc63e5bfaefe # Parent f4c9fa77136acadec05a559a5fe502b156d7c93f Fixes for dw_color_xxxx_set() to accept OS/2 style colors, and fixed a problem with dw_window_set_font() on notebook controls. diff -r f4c9fa77136a -r 634625c3239d dwtest.c --- /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 +#include +#include +#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; +} diff -r f4c9fa77136a -r 634625c3239d makefile.vc --- 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) diff -r f4c9fa77136a -r 634625c3239d win/dw.c --- 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)); }