Fresh stuff for download: GLib 2.0.7, GTK+ 2.0.9, Pango 1.0.5

Tor Lillqvist <[email protected]>
Newsgroups gmane.comp.video.gimp.windows.devel
Message-ID <[email protected]>
At the usual place, www.gimp.org/win32/downloads.html . The
Win32-related entries from the ChangeLogs are included below. *Lots*
of improvement has been done to GTK+ 2.0 (and important stuff to Pango
1.0, too). All test and demo program features seem to work, at least
on NT/2K, except "big windows" (> 32K coordinates).

GLib 2.0:

2002-11-18  Tor Lillqvist  <[email protected]>

	* glib/gspawn-win32.c (do_spawn_with_pipes): Do handle
	G_SPAWN_DO_NOT_REAP_CHILD after all, similarily as on Unix. If the
	flag is not set, don't call DuplicateHandle() on the handle
	returned by the helper process, and set the "child pid" as
	returned to the caller to zero. Close the handle to the helper
	process in all cases.

2002-11-18  Tor Lillqvist  <[email protected]>

	[Win32] Fix the asynchronous g_spawn* to return the process handle
	of the started program properly. (Note: not the process id. The
	spawn*() functions in the C runtime return the created process's
	handle. There doesn't seem to be any way to get the process id of
	a child process if you have the handle. But then, the process
	handle usually is more useful anyway.)

2002-10-27  Tor Lillqvist  <[email protected]>

	* glib/gmain.c (g_poll): Fix for bug reported by Herman Bloggs
	(http://mail.gnome.org/archives/gtk-devel-list/2002-October/msg00101.html)
	and others. We waited for events only for GPollFDs whose events
	field had G_IO_IN set. We need to wait also for events for
	GPollFDs that have just G_IO_OUT set. Non-blocking sockets in the
	process of being connect()ed are one such case. Also silence a
	couple of gcc warnings.

GTK+ 2.0:

2002-11-29  Tor Lillqvist  <[email protected]>

	* gdk/win32/gdkwindow-win32.c 

	(gdk_window_set_transient_for): Rewrite. Just call SetWindowLong()
	with GWL_HWNDPARENT, which despite its name sets the *owner*
	window, which should be exactly what we want. The PSDK
	documentation is said to be misleading. testgtk's modal window
	test now works much better. (#50586)

2002-11-24  Tor Lillqvist  <[email protected]>

	* gdk/win32/gdkgc-win32.c: Remove ifdeffed-out code.

	(predraw_set_foreground, gdk_win32_hdc_get): Some code moved
	around. Call SetROP2() only if necessary. Call SetTextColor() only
	if GDK_GC_FOREGROUND flag present.

	Remove background color handling from here. The background color
	of a GdkGC is supposed to affect only GDK_OPAQUE_STIPPLED fill style,
	which it is already handled in generic_draw(), and
	GDK_LINE_DOUBLE_DASH lines, which aren't implemented properly
	anyway. Calling SetBkColor() is unnecessary.

	(gdk_win32_hdc_get, gdk_win32_hdc_release): Add doc comments, as
	these are public functions.

2002-11-23  Tor Lillqvist  <[email protected]>

	* gdk/win32/gdkdrawable-win32.c (draw_polygon,
	gdk_win32_draw_polygon, draw_segments, gdk_win32_draw_segments):
	Use generic_draw() also for polygons and segments, thus adding
	support for tiled and stippled polygons and segments.

	(gdk_win32_draw_points): Use Rectangle() instead of
	SetPixel(). Rectangle() uses the function (raster op) set for the
	HDC, SetPixel() doesn't.

	(widen_bounds): New function, refactoring.
	
	* gdk/win32/gdkgc-win32.c (predraw_set_foreground): Ifdef out the
	GDK_OPAQUE_STIPPLED handling here, has been superseded by the code
	in generic_draw(). Always create a solid brush.
	
2002-11-22  Tor Lillqvist  <[email protected]>

	* gdk/win32/gdkdrawable-win32.c (draw_arc, gdk_win32_draw_arc):
	Use generic_draw() also for arcs, thus adding support for tiled
	and stippled arcs.

	* gdk/win32/gdkevents-win32.c (synthesize_expose_events): Don't
	synthesize expose events for GDK_INPUT_ONLY windows.
	(gdk_event_translate): On WM_SIZE, call
	gdk_synthesize_window_state() if window was iconified, restored or
	maximized. (#98983, Arnaud Charlet)

	* gdk/win32/gdkmain-win32.c
	* gdk/win32/gdkpixmap-win32.c: Minor debugging output changes.

2002-11-20  Tor Lillqvist  <[email protected]>

	Fix by Arnaud Charlet (#98983):

	* gtk+/gdk/win32/gdkwindow-win32.c
	(gdk_window_get_frame_extents): Fix typo in setting y.

2002-11-14  Tor Lillqvist  <[email protected]>

	Start implementing all fill styles (i.e. tiled, stippled, and
	opaque stippled in addition to the plain solid style) in the Win32
	backend in an elegant and generic way. For now only did the
	draw_rectangle() and draw_glyphs() methods. The rest will
	follow. Previously some of the drawing methods implemented opaque
	stippling, but not tiles or non-opaque stippling.

	Seems to work fine, now the check marks show up in check buttons,
	the stippled background and stippled text in gtk-demo's Text
	Widget look as they should, and GtkText's line wrap arrow shows
	correctly instead of an ugly rectangle.

	The implementation does do a lot of pixmap handling and blitting
	back and forth, especially on Win9x. But performance is hopefully
	not an issue. I don't think many applications do a lot of tiled or
	stippled drawing.

	* gdk/win32/gdkprivate-win32.h: Define a new macro, GDI_CALL, that
	calls a GDI function and prints a warning if it failed. Also
	API_CALL for non-GDI calls. Cleans all the the if (!BlaBla())
	WIN32_GDI_FAILED ("BlaBla") snippets, these can now be written
	GDI_CALL (BlaBla, ()).

	* gdk/win32/gdkdrawable-win32.c: Use GDI_CALL macro in lots of places.

	(generic_draw): New function that handles all the blitting
	necessary to implement tiles and stipples. A function that
	actually draws stuff is passed as a parameter to
	generic_draw(). If the fill style is solid, it is called
	directly, to draw on the destination drawable. Otherwise it is
	called to draw on a temporary mask bitmap, which then is used in
	blitting operations. The tiles and/or stipples are rendered into
	another temporary pixmap. If MaskBlt() is available (on NT/2k/XP),
	it is used, otherwise a sequence of BitBlt() is used to do the
	final composition onto the destination drawable.

	(draw_tiles_lowlevel, draw_tiles): Some renaming and code
	reorg. Use BitBlt() to blit each tile, not gdk_draw_drawable().

	(rop2_to_rop3): Instead of bitblt_wrapper, this function does the
	binary->ternary rop mapping.

	(draw_rectangle, gdk_win32_draw_rectangle, draw_glyphs,
	gdk_win32_draw_glyphs): Split functionality into two functions,
	with generic_draw() doing its magic inbetween.

	* gdk/win32/gdkevents-win32.c: Remove the TrackMouseEvent code, it
	was ifdeffed out and wouldn't have done anything even if
	enabled. Remove the GDK_EVENT_FUNC_FROM_WINDOW_PROC code, didn't
	have any effect any more anyway after all the changes GTK+ has
	gone through in the last years. Remove some #if 0 code.

	* gdk/win32/gdkgc-win32.c (gdk_gc_copy): Set the copy's hdc field
	to NULL in case a GC is copied while it has a Windows DC active.

	* gdk/win32/gdkprivate-win32.h
	* gdk/win32/gdkglobals-win32.c: Remove gdk_event_func_from_window_proc.
	Add mask_blt that points to MaskBlt() if available.
	
	* gdk/win32/gdkmain-win32.c: Remove -event-func-from-window-proc
	option.If there is a
	PRETEND_WIN9X envvar, set windows_version as if on Win9x.

	* gdk/win32/gdkpixmap-win32.c (_gdk_win32_pixmap_new,
	gdk_pixmap_new): Combine these two, _gdk_win32_pixmap_new() wasn't
	used or exported. Make a bit more like the X11 version. Hopefully
	I didn't break the fragile palettized display ("pseudocolor")
	code.

2002-11-13  Tor Lillqvist  <[email protected]>

	* gdk/win32/gdkdrawable-win32.c (bitblt_wrapper): New
	function. Translates the GC's current binary raster op (rop2) to
	the appropriate ternary raster op and calls BitBlt(). Previously
	used SRCCOPY always.
	(blit_from_pixmap, blit_inside_window, blit_from_window): Use
	bitblt_wrapper().

	* gdk/win32/gdkgc-win32.c
	* gdk/win32/gdkmain-win32.c:: Various debugging output improvements.

	* gdk/win32/gdkgc-win32.c (predraw_set_foreground): Check whether
	tile/stipple origins are valid when calling SetBrushOrgEx().
	(gdk_win32_hdc_get): Ifdef out code that tries to handle the
	stipple by converting it into a region, and combining the clip
	region with that. A stipple shouldn't work like that, it should
	replicate in x and y directions. Stipples will have to be handled
	elsewhere.

	* gdk/win32/gdkmain-win32.c: (gdk_win32_gcvalues_mask_to_string,
	gdk_win32_rop2_to_string): New debugging functions.
	(gdk_win32_print_dc): Print also DC's rop2 and text color.

	* gdk/win32/gdkprivate-win32.h: Declare new functions.

2002-11-12  Tor Lillqvist  <[email protected]>

	More work on the Win32 backend. The scrolling problem diagnosis
	from 2002-11-07 was wrong, even if the cure happened to work. The
	problems were not caused by a lack of WM_PAINT messages while
	scrolling. The real issue was that SetWindowPos() and
	ScrollWindowEx() don't blit those parts of the window they think
	are invalid. As we didn't keep Windows's update region in synch
	with GDK's, Windows thought those areas that in fact had been
	updated were invalid. Calling ValidateRgn() in
	_gdk_windowing_window_queue_antiexpose() seems to be an elegant
	and efficient solution, removing from Windows's update region
	those areas we are about to repaint proactively.

	In some cases garbage leftover values were used for the clip
	origin in GdkGCWin32. This showed up as odd blank areas around the
	pixmaps included in the Text Widget in gtk-demo.

	Having the clip region either as a GdkRegion or a HRGN in
	GdkGCWin32 was unnecessary, it's better to just use a HRGN.

	The translation and antiexpose queue handling in
	gdkgeometry-win32.c seems unnecessary (and not implementable in
	the same way as on X11 anyway, no serial numbers) on Windows,
	ifdeffed out.
	
	All of testgtk and gtk-demo except "big windows" now seem to work
	pretty well.

	Bug #79720 should be fixed now.
	
	* gdk/win32/gdkevents-win32.c (gdk_event_translate) In WM_PAINT
	handler: Don't check for empty update rect. When we get a
	WM_PAINT, the update region isn't empty. And if it for some
	strange reason is, that will be handled later anyway. Don't leak
	hrgn.

	* gdk/win32/gdkgc-win32.c:  Set clip origins to zero
	when appropriate.

	(gdk_gc_copy): Increase refcount on colormap if present.

	(gdk_win32_hdc_get): Handle just hcliprgn. If we have a stipple,
	combine it with clip region after selecting into the DC.

	(_gdk_win32_bitmap_to_hrgn): Rename from _gdk_win32_bitmap_to_region.

	(_gdk_win3_gdkregion_to_hrgn): New function, code snippet
	extracted from gdk_win32_hdc_get().

	* gdk/win32/gdkgeometry-win32.c: Ifdef out the translate_queue
	handling.

	(gdk_window_copy_area_scroll): Increase clipRect to avoid
	ScrollWindowEx() not scrolling pixels it thinks are invalid.
	Don't call UpdateWindow().

	(_gdk_window_move_resize_child): Don't call UpdateWindow().

	(gdk_window_premove, gdk_window_postmove,
	gdk_window_clip_changed): Add debugging output.

	(_gdk_windowing_window_queue_antiexpose): Just call ValidateRgn()
	on the region.

	(_gdk_window_process_expose): No use for the serial number
	parameter now. Instead of a rectangle, take a region parameter, as
	Windows gives us one in WM_PAINT.

	* gdk/win32/gdkmain-win32.c (gdk_win32_rect_to_string,
	gdk_win32_gdkrectangle_to_string, gdk_win32_gdkregion_to_string):
	New debugging functions.

	* gdk/win32/*.c: Use above functions.

	* gdk/win32/gdkwindow-win32.c (gdk_propagate_shapes): Plug memory
	leak, free list after use.

	* gdk/win32/gdkprivate-win32.h: Drop the clip_region field from
	GdkGCWin32. Only use the HRGN hcliprgn. Declare new functions.

2002-11-03  Tor Lillqvist  <[email protected]>

	Lots of changes to the Win32 backend:

	One big improvement is that scrolling of windows with background
	pixmaps now works much better. (This can be seen in for instance
	testgtk's "text" test.) Blitting inside a window
	(gdk_draw_drawable) also works much better now (can also seen in
	the "text" test).

	Another major change is we don't (try to) do guffaw scrolling as
	there is no static window gravity on Windows. Guffaw scrolling
	would be unnecessary anyway, as there is the ScrollWindow()
	API. This improves the behaviour of the Text Widget demo in
	gtk-demo a lot. But I have no idea how the lack of static win
	gravity should be handled in other places where the X11 code uses
	it. Especially _gdk_window_move_resize_child().

	Big windows still don't work correctly, I assume.

	Another vague area is the translate_queue. I don't think the queue
	items actually ever gets used, at least not in the code as of now.

	There is still some problem in expose handling. By moving an
	obscuring window back and forth over testgtk's main window, for
	instance, every now and then you typically get narrow vertical or
	horizontal strips of pixels that haven't been properly redrawn
	after being exposed. A fencepost error somewhere?

	* gdk/win32/gdkevents-win32.c: Cast known GdkWindowObjects
	directly instead of using GDK_WINDOW_OBJECT(). Remove unused
	latin_locale_loaded variable.

	(_gdk_win32_get_next_tick): New function. Used to make sure
	timestamps of events are always increasing, both in events
	generated from the window procedure and in events gotten via
	PeekMessage(). Not sure whether this is actually useful, but it
	seemed as a good idea.

	(real_window_procedure): Don't use a local GdkEventPrivate
	variable. Don't attempt any compression of configure or expose
	events here, handled elsewhere.

	(erase_background): Accumulate window offsets when traversing up
	the parent chain for GDK_PARENT_RELATIVE_BG, in order to get
	correct alignment of background pixmaps. Don't fill with
	BLACK_BRUSH if GDK_NO_BG.

	(gdk_event_get_graphics_expose): A bit more verbose debugging output.

	(gdk_event_translate): Use _gdk_win32_get_next_tick(). In the
	WM_PAINT handler, call GetUpdateRgn() before calling BeginPaint()
	and EndPaint() (which empty the update region).

	* gdk/win32/gdkdnd-win32.c
	* gdk/win32/gdkinput-win32.c:
	Use _gdk_win32_get_next_tick().
	
	* gdk/win32/gdkfont-win32.c: Use %p to print HFONTs.

	(gdk_text_size): Remove, unused.

	* gdk/win32/gdkgeometry-win32.c
	(_gdk_windowing_window_queue_antiexpose): Always return FALSE for
	now, until figured out whether antiexposes actually can work on
	Win32.

	(gdk_window_copy_area_scroll): Scroll also children with the
	ScrollWindowEx() call. No need to call gdk_window_move() on the
	children.

	(gdk_window_scroll): Don't do guffaw scrolling.

	(gdk_window_compute_position): Fix typo, used win32_y where x was
	intended.

	(gdk_window_queue_append): Use GetTickCount() for serial number,
	not GetMessageTime(), which can be very far back.

	* gdk/win32/gdkwindow-win32.c (gdk_window_gravity_works): Remove,
	we know that there is no such thing on Windows.

	(gdk_window_set_static_bit_gravity,
	gdk_window_set_static_win_gravity): Ditto, remove, they didn't do
	anything anyway.

	(_gdk_windowing_window_init, gdk_window_foreign_new): Call
	_gdk_window_init_position() like in the X11 backend.

	(gdk_window_reparent): Don't call the now nonexistent
	gdk_window_set_static_win_gravity(). No idea what should be done
	instead.

	(gdk_window_get_geometry): The returned x and y should be relative
	to parent. Used to be always zero..

	(gdk_window_set_static_gravities): Return FALSE if trying to set
	static gravity.
	
	* gdk/win32/gdkdrawable-win32.c (_gdk_win32_draw_tiles):
	Rewrite. Make static. Must take tile origin parameters, too.

	(gdk_win32_draw_rectangle): Pass the tile/stipple origin to
	_gdk_win32_draw_tiles(). Remove #if 0 code.

	(blit_inside_window): Don't call ScrollDC(), that didn't work at
	all like I thought. A simple call to BitBlt() is enough.
	
	* gdk/win32/gdkcolor-win32.c (gdk_win32_color_to_string,
	gdk_win32_print_paletteentries, gdk_win32_print_system_palette,
	gdk_win32_print_hpalette)
	* gdk/win32/gdkdrawable-win32.c (gdk_win32_drawable_description)
	* gdk/win32/gdkevents-win32.c (gdk_win32_message_name):
	Move all debugging helper functions to gdkmain-win32.c.

	* gdk/win32/gdkmain-win32.c: (gdk_win32_lbstyle_to_string,
	gdk_win32_pstype_to_string, gdk_win32_psstyle_to_string,
	gdk_win32_psendcap_to_string, gdk_win32_psjoin_to_string): New
	debugging functions.

	(static_printf): Helper function for the above. sprintfs into a
	static circular buffer, return value should be used "soon".

	* gdk/win32/gdkgc-win32.c: Use above debugging functions.

	* gdk/win32/gdkprivate-win32.h: Declare new functions, remove
	obsoleted ones.

2002-10-28  Tor Lillqvist  <[email protected]>

	* gdk/win32/gdkwindow-win32.c (gdk_window_set_decorations,
	gdk_window_set_functions): Don't call GetWindowLong for
	GWL_EXSTYLE, the extended window style wasn't used or
	changed. After setting the window style with SetWindowLong, call
	SetWindowPos with the SWP_FRAMECHANGED flag for the window to
	actually be updated, as Platform SDK docs say one should. (#95812,
	huzheng)

Pango 1.0:

2002-11-12  Tor Lillqvist  <[email protected]>

	* pango/pangowin32-fontcache.c (free_cache_entry,
	cache_entry_unref, pango_win32_font_cache_load): Add more
	debugging output.

	* modules/basic/basic-win32.c (uniscribe_shape): Plug memory leak:
	Free return value from pango_win32_font_logfont(). Call
	pango_win32_font_cache_unload() for the hfont returned from
	pango_win32_font_cache_load() after using it.

2002-10-24  Tor Lillqvist  <[email protected]>

	* modules/basic/basic-win32.c: Update the non-Uniscribe ranges to
	cover some more simple scripts.

	(itemize_shape_and_place): Handle unknown glyphs.

	(script_engine_list): Only return the "everything" range if
	Uniscribe is available. It would be nice to build up a more
	specific range list based on the information ScriptGetProperties()
	returns. That function lists information about each script the
	Uniscribe version used can handle. Unfortunately, though, the
	information is severely limited. It doesn't tell what Unicode
	blocks a script covers. It only gives one language that uses
	that script, and sometimes an charset number, but for most scripts
	just the totally useless DEFAULT_CHARSET.
	
2002-10-22  Tor Lillqvist  <[email protected]>

	* configure.in: Add --with-usp10 flag to indicate where to find
	the usp10.h header, for using Uniscribe on Win32. Set USP10_H
	autoconf variable, HAVE_USP10_H config.h macro and HAVE_USP10_H
	automake conditional.

	* acconfig.h: Add HAVE_USP10_H.

	* pango/pangowin32-private.h (PANGO_WIN32_DEBUGGING): Change
	semantics of this flag. If defined, also need to set env var
	PANGO_WIN32_DEBUG to get the copious debugging output. 
	Change PING() macro accordingly. Add variable pango_win32_debug.

	* pango/pangowin32.c (pango_win32_get_dc): New function. Code
	factored out from pango_win32_font_class_init() and
	pango_win32_font_map_class_init().
	(pango_win32_get_debug_flag): New function.
	(pango_win32_render): Handle y offsets, too. Potentially need to
	call ExtTextOutW several times, one for each run of sequential
	glyphs with the same y offset.
		
	* pango/pangowin32.h: Declare above new functions, in the part
	only for shaper engine use.

	* pango/pangowin32.def: Export above new functions.

	* pango/pangowin32-fontmap.c (pango_win32_font_map_class_init):
	Call pango_win32_get_dc() as mentioned above.

	* modules/basic/Makefile.am: If HAVE_USP10_H, let basic-win32.lo
	depend on usp10.h.

	* modules/basic/basic-win32.c: If HAVE_USP10_H, and the Uniscribe
	DLL usp10.dll is present, use Uniscribe.
	(uniscribe_shape, itemize_shape_and_place,
	set_up_pango_log_clusters, convert_log_clusters_to_byte_offsets,
	make_langid, init_uniscribe): New functions.
	(dump_glyphs_and_log_clusters, lang_name, charset_name): Debugging
	functions.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.