1993-09-04 12:09:32 +02:00
|
|
|
/*
|
|
|
|
* GDI font objects
|
|
|
|
*
|
|
|
|
* Copyright 1993 Alexandre Julliard
|
1997-06-16 19:43:53 +02:00
|
|
|
* 1997 Alex Korobka
|
2003-06-27 22:47:16 +02:00
|
|
|
* Copyright 2002,2003 Shachar Shemesh
|
2002-03-10 00:29:33 +01:00
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
2006-05-18 14:49:52 +02:00
|
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
Release 960131
Wed Jan 31 10:58:00 1996 Alexandre Julliard <julliard@sunsite.unc.edu>
* [configure.in]
Added --with-dll option to build libwine.so.
* [controls/listbox.c]
Fixed ListBoxDirectory(), DlgDirSelect() and
DlgDirList(). Hopefully their behavior is correct now.
* [controls/menu.c]
Use SEGPTRs in ChangeMenu(), InsertMenu(), AppendMenu() and
ModifyMenu() for the item data, to avoid corrupting the pointer
for owner-drawn items.
* [controls/static.c]
Attempt to load OEM icons for SS_ICON controls. Probably not
entirely correct.
Don't clip the text output.
* [files/directory.c]
Add temp dir and Windows dir to environment.
* [files/dos_fs.c]
Fixed a few path handling bugs in DOSFS_GetUnixFileName().
Cache last used directory in DOSFS_FindNext() to avoid quadratic
search time.
* [files/drive.c]
New format for drives configuration in wine.conf; allows
specifying the type, label and serial number of a drive.
* [files/file.c]
New function FILE_OpenUnixFile to make sure we don't open a
directory instead of a file.
Fixed DOSFS_GetUnixFileName() check_last flag in FILE_MakeDir().
* [files/profile.c]
Rewrote profile handling. Should be closer to Windows behavior now.
New function PROFILE_GetWineIniString() to get a string from wine.conf.
Support environment variables in wine.conf.
* [loader/task.c]
Fixed the order of deletion in TASK_DeleteTask() to avoid memory
corruption.
* [memory/global.c]
Create a discarded block on GlobalAlloc() if the size is 0; thanks
to John Harvey for noticing this.
* [memory/local.c]
LOCAL_GetHeap: make sure the pointer is valid before checking
magic number.
* [misc/main.c]
Moved profile and registry saving to ExitWindows(), so we don't
try to save them in case of a crash.
* [miscemu/int21.c]
INT21_GetFreeDiskSpace: try to compute the cluster size from the
filesystem size instead of hard-coding it to 64.
Fixed functions 0x3f and 0x40 to use _hread and _hwrite to allow
reading or writing 65535 bytes (thanks to Bruce Milner for this one).
* [windows/message.c]
Fixed bug in linked-list handling in MSG_DeleteQueue().
Simplified SetMessageQueue().
* [wine.ini] [wine.man]
Updated for new drives configuration format.
Tue Jan 30 11:24:46 1996 William Magro <wmagro@tc.cornell.edu>
* [controls/edit.c]
Implemented ES_PASSWORD style, EM_SETPASSWORDCHAR and
EM_GETPASSWORDCHAR messages.
* [controls/widgets.c]
Adjusted class creation flags to better match values Windows uses.
* [include/windows.h]
Fixed ES_NOHIDESEL typo.
* [loader/ne_image.c]
Added detection for zero offset in RADDR fixups. Quicken
was in an infinite loop here.
Mon Jan 29 20:12:22 1996 Albrecht Kleine <kleine@ak.sax.de>
* [files/dos_fs.c]
Bugfix: range error in month value (0..11 set to 1..12).
* [windows/caret.c]
Changed ROP2-mode to R2_NOTXORPEN in CARET_Callback for pulsed
appearance of the caret.
* [windows/mdi.c] [include/mdi.h]
Changed MDITile(): added a new parameter WORD wParam for
WM_MDITILE second tiling method (MDITILE_HORIZONTAL in wParam) as
used in Win3.1
Sun Jan 28 14:20:00 1996 Cameron Heide <heide@ee.ualberta.ca>
* [miscemu/int2f.c]
Added a small bit of MSCDEX emulation.
* [windows/alias.c]
ALIAS_RegisterAlias was returning the hash value when it should
have been returning the record number.
Sat Jan 27 10:53:51 1996 Jim Peterson <jspeter@birch.ee.vt.edu>
* [include/shell.h] [include/wintypes.h]
Moved definition of HKEY and LPHKEY types to include/wintypes.h.
Declared FONTENUMPROC in wintypes.h.
* [include/windows.h]
Added definition of KERNINGPAIR and LPKERNINGPAIR types. Added
declarations for CopyCursor(), CopyIcon(), EnumFontFamilies(),
ExtractIcon(), FatalAppExit(), FindExecutable(), GetClipCursor(),
GetKerningPairs(), GetQueueStatus(), GetRasterizerCaps(),
IsGDIObject(), IsMenu(), IsTask(), RegCloseKey(), RegCreateKey(),
RegDeleteKey(), RegEnumKey(), RegOpenKey(), RegQueryValue(),
RegSetValue(), ResetDC(), ShellExecute(), SystemParametersInfo(),
and wsprintf().
* [tools/makehtml.pl] [documentation/apiw.index]
New files that scan windows.h, commdlg.h, and toolhelp.h and output
an HTML sorted list with optional links to www.willows.com and a
tally of unimplemented APIW functions.
* [objects/cursoricon.c]
Added Win32 versions of CopyIcon() and CopyCursor() for use in
libwine.
* [win32/resource.c] [win32/winprocs.c]
Added '#include "libres.h"' and explicit declarations of windows
procs in order to avoid warnings.
* [windows/utility.c]
Added Win32 version of MulDiv() for libwine.
* [*/*] [include/windows.h]
Changed several function declarations to comply more strictly to
the windows API (without, hopefully, altering their functionality).
* [controls/menu.c]
Made the return value of CheckMenuItem be the previous state of
the menu item if it was found, otherwise -1 as specified in the
SDK. This conflicts with the APIW specification, which says it
should return TRUE if successful, otherwise FALSE.
* [include/windows.h]
Added obsolete WM_SIZE message wParam names for compatibility.
Added WinHelp() command constants, even though they are not yet
supported.
* [rc/winerc.c]
Tidied up transform_binary_file(). In argument checking, flattened
any invalid characters specified with the prefix argument.
* [library/libres.c]
Made FindResource() case-insensitive when parameter 'name' is a string.
Sat Jan 27 02:30 1996 Uwe Bonnes <bon@elektron.ikp.physik.th-darmstadt.de
* [files/drive.c]
If root "/" is given in wine.conf, use it as last resort.
* [files/file.c]
Report ER_AccessDenied it disk ist not writable
More Debug Output
* [miscemu/int21.c]
Squeezed some bugs in ExtendedOpenCreateFile
* [windows/winpos.c]
Some windows may not be moved or resized. We are missing some
structures to be exact, but the approach should help in some cases
and make things worse in much fewer.
Fri Jan 26 10:24:00 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [loader/pe_image.c]
fixup_imports: Find builtins for Borland style entries, too
Fri Jan 26 10:24:00 1996 Martin von Loewis <loewis@informatik.hu-berlin.de>
* [controls/menu.c]
LoadMenu: branch to Win32 for PE modules
* [if1632/gdi.spec][if1632/kernel32.spec][if1632/user32.spec]
DeleteObject, GetPixel, SetPixel,WritePrivateProfileStringA,
WriteProfileStringA, EmptyClipboard, EnableMenuItem, EnableScrollBar,
EnableWindow, InvalidateRect, SetWindowTextA, WinHelpA: new relays
DrawTextA, MoveToEx, GetClientRect, InvalidateRect, LoadBitmapA/W,
LoadAcceleratorsA/W, LoadMenu[Indirect]A/W, LoadStringA/W: changed
to convert parameters or naming convention
* [include/kernel32.h][include/wintypes.h]
moved WCHAR, defined LPWSTR
* [include/string32.h][win32/string32.c][include/struct32.h]
New files
* [loader/module.h]
LoadModule: exit after returning from PE_LoadModule
* [loader/pe_image.c]
my_wcstombs: isascii does not work on Linux for Unicode
PE_LoadImage: Handle directories
* [misc/user32.c]
USER32_RECT32to16, USER32_RECT16to32: new functions
implemented new user32 relays
* [misc/newfns.c]
WIN32_WinHelpA: new function
* [win32/param32.c]
New file
* [win32/resource.c]
GetResDirEntry: added support for named entries
WIN32_LoadAcceleratorsW: invoke *32 resource functions
WIN32_LoadBitmapA: convert name to unicode if appropriate
WIN32_ParseMenu: new function
implemented new resource functions from user32.spec
Wed Jan 24 18:09:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [objects/cursoricon.c]
GetIconId() and LoadIconHandler() functions.
* [windows/mdi.c]
Better maximization support, TranslateMDISysAccel() function,
misc improvements.
* [windows/defwnd.c]
Fix for WM_WINDOWPOSCHANGED message handler.
* [windows/winpos.c]
Rewrote WindowFromPoint() function.
Sun Jan 21 1996 17:05:09 Marcus Meissner <msmeissn@faui01.informatik.uni-erlangen.de>
* [include/toolhelp.h] [misc/toolhelp.c]
Added Notify(Un)Register, but no callbacks yet.
Fri Jan 19 01:43:37 1996 Victor Schneider <root@tailor.roman.org>
* [Makefile.in]
Added target for libwine.so.1.0.
* [library/winmain.c]
For WINELIBDLL, _WinMain just returns hInstance instead of calling
WinMain().
* [misc/main.c]
For WINELIBDLL, renamed main() to _wine_main() for calling from the
stub main function.
* [library/winestub.c] (new file)
Provides a stub main() function for using libwine.so.
Tue Jan 16 11:04:34 1996 Anand Kumria <akumria@ozemail.com.au>
* [winsocket.c]
Fix EPERM problem.
* [global.c]
Attempt to do some sanity checking in MemManInfo().
* [Changelog]
Fix changelog oversight for previous entry.
1996-01-31 20:02:28 +01:00
|
|
|
*/
|
1993-09-04 12:09:32 +02:00
|
|
|
|
2002-08-29 01:42:34 +02:00
|
|
|
#include "config.h"
|
|
|
|
#include "wine/port.h"
|
|
|
|
|
2011-11-17 16:55:16 +01:00
|
|
|
#include <limits.h>
|
2003-09-06 01:08:26 +02:00
|
|
|
#include <stdarg.h>
|
1993-09-04 12:09:32 +02:00
|
|
|
#include <stdlib.h>
|
Release 940405
Tue Apr 5 14:36:59 1994 Bob Amstadt (bob@pooh)
* [include/mdi.h] [windows/mdi.c]
Use WM_PARENTNOTIFY messages to activate children.
Generate WM_CHILDACTIVATE messages.
Beginnings handler for maxmized child window.
Clean up when children are destroyed.
* [windows/message.c] [windows/nonclient.c] [windows/winpos.c]
Removed code add 94/03/26.
Apr 4, 94 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)
* [control/menu.c]
Make mouse menu navigation working again. :-))
(be carefull, clicking outside menus (ie.: clientrect)
not resolved yet)
* [windows/nonclient.c] [controls/scroll.c]
Bugs fix in NCTrackScrollBars().
* [misc/dos_fs.c]
Bug fix in 'ToDos()' in conversion for '/',
(example: '/window/' was translated to 'WINDOWs').
* [miscemu/int21.c]
Function ChangeDir() extract possible drive before DOS_ChangeDir().
* [loader/library.c] [loader/wine.c]
Playing around moving function GetProcAddress() and put some code in.
Mon Apr 4 21:39:07 1994 Alexandre Julliard (julliard@lamisun.epfl.ch)
* [misc/main.c]
Better explanation of command-line options.
* [objects/dib.c]
Implemented SetDIBitsToDevice().
* [windows/dc.c]
Bug fix in SetDCState().
* [windows/event.c]
Removed WS_DISABLED handling (now done in message.c).
* [windows/message.c]
Added sending a WM_PARENTNOTIFY message in MSG_TranslateMouseMsg().
Use WindowFromPoint() to find the window for mouse events, taking
into account disabled windows.
* [windows/painting.c]
Bug fix in BeginPaint() to allow calling it at other times than
on WM_PAINT (Solitaire needs it...)
* [windows/win.c]
Implemented FindWindow().
Rewritten EnableWindow() to behave more like Windows.
* [windows/winpos.c]
Rewritten WindowFromPoint() to also search child windows.
Mon Apr 4 17:36:32 1994 Erik Bos (erik@trashcan.hacktic.nl)
* [include/int21.h] -> [msdos.h]
renamed.
* [miscemu/int10.h] [miscemu/int25.h] [miscemu/int26.h]
new, added for int 10, 25 and 26.
* [miscemu/ioports.c]
new, added to allow win apps to use ioports.
* [loader/signal.c]
Added support for in, inb, out, outb instructions.
Sun Mar 27 13:40:25 1994 Bob Amstadt (bob@pooh)
* controls/menu.c (InsertMenu): Changed to use FindMenuItem().
Sat Mar 26 21:23:55 1994 Bob Amstadt (bob@pooh)
* [windows/mdi.c]
Window list properly updated.
* [windows/message.c]
Call WINPOS_ChildActivate() when mouse pressed.
* [windows/nonclient.c]
Use WINPOS_IsAnActiveWindow() instead of GetActiveWindow() in
NC_HandleNCPaint().
* [windows/winpos.c]
Created functions WINPOS_IsAnActiveWindow() and WINPOS_ActivateChild()
Thu Mar 24 14:49:17 1994 Bob Amstadt (bob@pooh)
* controls/menu.c (DeleteMenu): Changed to use FindMenuItem
(DeleteMenu): Many bug fixes.
* [controls/menu.c]
Created function FindMenuItem().
Thu Mar 24 14:17:24 1994 Bob Amstadt (bob@pooh)
* [windows/win.c]
Removed incorrect MDI handling code from CreateWindowEx().
* [controls/menu.c]
MF_STRING items needed to allocate a private copy of string.
* [controls/menu.c]
Fixed buggy calls to GlobalFree().
* [memory/global.c]
Eliminated some redundant code with function call.
Wed Mar 23 1994 Pentti Moilanen (pentti.moilanen@ntc.nokia.com)
* [windows/timer.c]
timer list pointers looped in InsertTimer
Tue Mar 29 13:32:08 MET DST 1994 julliard@di.epfl.ch (Alexandre Julliard)
* [misc/cursor.c]
A few changes for desktop window support.
* [misc/main.c]
Added -depth option.
* [misc/rect.c]
Yet another bug fix in SubtractRect().
* [objects/bitmap.c]
Changes to use only one depth (specified with -depth)
for color bitmaps.
* [objects/brush.c]
Added support for dithered solid brushes.
* [objects/color.c]
Use the same 20 system colors as in Windows.
System palette initialisation now done in COLOR_InitPalette().
Added support for a color mapping table to map logical color
indexes to X colormap entries.
Implemented GetNearestColor() and RealizeDefaultPalette().
* [objects/dib.c]
Added support for color mapping table.
* [objects/dither.c] (New file)
Implemented solid color dithering.
* [objects/palette.c]
Implemented GetSystemPaletteEntries() and SelectPalette().
* [windows/class.c]
Make a copy of the menu name in RegisterClass().
* [windows/dc.c]
Fixed device caps when using a desktop window.
Added support for the color mapping table in DCs.
* [windows/event.c]
Added ConfigureNotify handler on desktop window.
* [windows/message.c]
Removed call to XTranslateCoordinates() on every mouse motion
New function MSG_Synchronize() to synchronize with the X server.
* [windows/syscolor.c]
Rewritten SYSCOLOR_Init() to read the system colors from WIN.INI.
* [windows/winpos.c]
Added synchronization on window mapping. Solves the double redraw
problem when starting Solitaire.
Mar 27, 94 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)
* [control/menu.c] * [windows/defwnd.c]
Make keyboard navigation working with menubar,
but temporarely inserted a bug in menubar mouse handling ... :-((
(it will be fix next week !)
* [windows/defwnd.c]
Connect VK_MENU to menubar navigation.
* [loader/library.c]
GetModuleHandle() return 'fictive 0xF000+ handles' for built-in DLLs.
Sun Mar 20 22:32:13 1994 Erik Bos (erik@trashcan.hacktic.nl)
* [misc/main.c]
Added Copy(). Added a check for `-h' to show usage.
* [misc/dos_fs.c]
Fixed bug in FindFile(), to load directories as dlls.
* [misc/dos_fs.c]
Fixed ToUnix() and ToDos() again, as my previous patch
didn't make it.
* [misc/dos_fs.c] [miscemu/int21.c]
Bug fixes, should be able to handle all winfile and progman int21
requests now except for a few small things.
Tue Mar 29 06:25:54 1994 crw@harris.mlb.semi.harris.com (Carl Williams)
* [memory/heap.c]
Implemented GetFreeSystemResources().
Mon Mar 21 17:32:25 1994 Bob Amstadt (bob@pooh)
* controls/menu.c (GetSubMenu): Function did not return correct value
* [windows/mdi.c]
Beginnings of menu handling.
Thu Mar 10 11:32:06 1994 Stefan (SAM) Muenzel (muenzel@tat.physik.uni-tuebingen.de)
* [objects/font.c]
if font.width equals zero use asterix instead.
Mon Mar 21 17:23:37 MET 1994 julliard@di.epfl.ch (Alexandre Julliard)
* [objects/bitmap.c]
Rewritten bitmap code to use exclusively X pixmaps; *much* faster.
* [objects/brush.c]
Some changes with pattern brushes because of the new bitmap code.
* [objects/color.c]
Added function COLOR_ToPhysical for better color mapping.
* [objects/dib.c]
Heavily optimized SetDIBits().
* [windows/dc.c]
Opimized SetDCState() and DC_SetupGC*() functions.
Added stub for CreateIC().
Mar 20, 94 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)
* [misc/message.c]
Call SetFocus() after closing box to give back focus to previous owner.
* [misc/files.c]
Small bug fix in GetTempFilename() : replace a '\' to '\\'.
* [control/scroll.c]
Calls to BitBlt() replace by StretchBlt().
* [control/menu.c]
Call SetFocus() to previous owner after closing Popups.
Fill stub DeleteMenu().
* [control/listbox.c]
* [control/combo.c]
Use SetFocus() in WM_LBUTTONDOWN.
Close ComboBox List upon WM_KILLFOCUS.
Early development of WM_MEASUREITEM mecanism.
* [windows/defwnd.c]
Early development of WM_MEASUREITEM mecanism.
Tue Mar 22 10:44:57 1994 Miguel de Icaza (miguel@xochitl)
* [misc/atom.c]
Fixed sintaxis problem when building the library.
Tue Mar 15 13:11:56 1994 Bob Amstadt (bob@pooh)
* [include/windows.h]
Added message types and structures for MDI
* [include/mdi.h]
Created internal structures for handling MDI
* [windows/mdi.c]
Began creating MDI support
Thu Mar 10 16:51:46 1994 Bob Amstadt (bob@pooh)
* [loader/wine.c] [include/wine.h]
Added new field to "struct w_files" to hold the "name table"
resource for Windows 3.0 programs
* [loader/resource.c]
Added code to handle programs with a "name table" resource.
LoadResourceByName() modified to check for the existence of
this resource.
Mon Mar 14 22:31:42 MET 1994 julliard@di.epfl.ch (Alexandre Julliard)
* [objects/color.c]
Added installing the private colormap on the desktop window.
* [windows/event.c]
Cleaned up focus event handling (see focus.c).
Use GetFocus() to direct key events to the correct window.
* [windows/focus.c]
Rewritten SetFocus() to:
- only set X focus on top-level windows
- send WM_SETFOCUS and WM_KILLFOCUS messages (was done in event.c)
- prevent setting focus to disabled windows
- install private colormap so -privatemap option works again
* [windows/message.c] [windows/timer.c]
Changed timer management to no longer use PostMessage(), but
to generate timer messages on the fly. Also fixed a related bug
in GetMessage() which could cause busy-waiting.
* [windows/win.c]
Only select focus events on top-level windows.
* [windows/winpos.c]
Added some sanity checks for desktop window.
Fri Mar 4 20:42:01 1994 Erik Bos (erik@trashcan.hacktic.nl)
* [misc/dos_fs.c]
bug fixes in ToUnix(), WinIniFileName(), GetUnixFileName().
Support for tilde symbol added for rootdirectories in [drives]
section of wine's configfile.
* [misc/file.c]
hread(), hwrite() added.
* [misc/main.c]
hmemcpy() added.
* [if1632/stress.spec] [include/stress.h] [misc/stress.c]
Added STRESS.DLL, an useless dll used to stress a windows system.
* [*/*]
Added missing #includes, fixed prototypes for prototype checking.
* [include/prototypes.h]
Added prototypes for loader/*c, if1632/*c.
Tue Mar 8 09:54:34 1994 Bob Amstadt (bob@pooh)
* [Configure]
Added reminder to set WINEPATH, if it is not set.
* [Imakefile]
Removed #elif's
* [controls/button.c]
Added BN_CLICKED notification for owner-draw buttons.
* [if1632/kernel.spec] [memory/heap.c]
Changed Local* functions to WIN16_Local* to prevent unconcious use
of these functions.
* [if1632/relay.c]
Push old Stack16Frame on stack before setting.
* [include/atom.h] [misc/atom.c] [include/heap.h] [memory/local.c]
Added multiple local heap handling in Atom* functions.
* [include/regfunc.h] [miscemu/int21.c]
Rewrote DOS3Call() use context frame that is already on the stack.
* [misc/profile.c]
Fixed to allow leading ";" to mark comments.
* [misc/spy.c]
Fixed bugs and added support for "include" and "exclude" filters.
* [misc/user.c]
Rearranged calls in InitApp().
* [misc/font.c]
Fixed font handling to create system fonts, if they are used.
* [windows/dc.c]
If text drawn on window with no font specified, then default the
font to the system font.
Mon Mar 7 20:32:09 MET 1994 julliard@di.epfl.ch (Alexandre Julliard)
* [controls/desktop.c]
Added handling of WM_NCCREATE and WM_ERASEBKGND functions.
Implemented SetDeskPattern().
* [misc/main.c]
Added -desktop option to get a large desktop window with
everything inside it.
Added -name option.
* [misc/rect.c]
Bug fix in SubtractRect().
* [objects/*.c]
Replaced the DefaultRootWindow() macro by the rootWindow variable.
* [windows/event.c] [windows/message.c]
[windows/nonclient.c] [windows/win.c]
A few changes to accomodate the new desktop window.
Tue Mar 8 11:13:03 1994 Miguel de Icaza (miguel@xochitl.nuclecu.unam.mx)
* [toolkit/arch.c] --New file--
Routines for converting little endian data structures to
big-endian data structures, currently only BITMAP structures are
converted.
* [misc/atom.c]
When used as part of the WineLib, the code is much simpler.
Doesn't depend on alignement.
* [loader/wine.c]
Ifdefed Emulator dependent code if compiling WineLib.
* [loader/resource.c]
Moved misc/resource.c to loader/resource.c.
* [loader/dump.c,ldt.c,ldtlib.c,library,c,selector.c,signal.c]
Ifdefed whole code if compiling WINELIB.
* [include/winsock.h]
Added compilation define to allow compilation on SunOS.
* [include/wine.h]
Removed load_typeinfo and load_nameinfo prototypes, they belong
to neexe.h
* [include/neexe.h]
Added load_typeinfo and load_nameinfo prototypes.
* [include/arch.h]
Fixed some bugs in the conversion routines.
Added macros for Bitmap loading.
Tue Mar 8 12:52:05 1994 crw@maniac.mlb.semi.harris.com (Carl Williams)
* [if1632/kernel.spec] [memory/global.c]
Implemented GetFreeSpace()
* [if1632/user.spec] [loader/resource.c]
Implemented CreateIcon()
1994-04-05 23:42:43 +02:00
|
|
|
#include <string.h>
|
2001-09-12 22:21:06 +02:00
|
|
|
#include <assert.h>
|
2000-11-28 23:40:56 +01:00
|
|
|
#include "winerror.h"
|
2003-09-06 01:08:26 +02:00
|
|
|
#include "windef.h"
|
2003-08-20 20:22:31 +02:00
|
|
|
#include "winbase.h"
|
2000-11-28 23:40:56 +01:00
|
|
|
#include "winnls.h"
|
2011-12-02 15:11:51 +01:00
|
|
|
#include "winternl.h"
|
2012-10-30 14:22:16 +01:00
|
|
|
#include "winreg.h"
|
2004-01-15 01:35:38 +01:00
|
|
|
#include "gdi_private.h"
|
2010-08-02 08:35:04 +02:00
|
|
|
#include "wine/exception.h"
|
2001-12-20 01:19:40 +01:00
|
|
|
#include "wine/unicode.h"
|
2002-03-10 00:29:33 +01:00
|
|
|
#include "wine/debug.h"
|
1993-09-04 12:09:32 +02:00
|
|
|
|
2002-03-10 00:29:33 +01:00
|
|
|
WINE_DEFAULT_DEBUG_CHANNEL(font);
|
1999-04-19 16:56:29 +02:00
|
|
|
|
2004-01-15 01:35:38 +01:00
|
|
|
/* Device -> World size conversion */
|
|
|
|
|
|
|
|
/* Performs a device to world transformation on the specified width (which
|
|
|
|
* is in integer format).
|
|
|
|
*/
|
|
|
|
static inline INT INTERNAL_XDSTOWS(DC *dc, INT width)
|
|
|
|
{
|
2008-05-22 17:43:01 +02:00
|
|
|
double floatWidth;
|
2004-01-15 01:35:38 +01:00
|
|
|
|
|
|
|
/* Perform operation with floating point */
|
2008-05-22 17:43:01 +02:00
|
|
|
floatWidth = (double)width * dc->xformVport2World.eM11;
|
2004-01-15 01:35:38 +01:00
|
|
|
/* Round to integers */
|
|
|
|
return GDI_ROUND(floatWidth);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Performs a device to world transformation on the specified size (which
|
|
|
|
* is in integer format).
|
|
|
|
*/
|
|
|
|
static inline INT INTERNAL_YDSTOWS(DC *dc, INT height)
|
|
|
|
{
|
2008-05-22 17:43:01 +02:00
|
|
|
double floatHeight;
|
2004-01-15 01:35:38 +01:00
|
|
|
|
|
|
|
/* Perform operation with floating point */
|
2008-05-22 17:43:01 +02:00
|
|
|
floatHeight = (double)height * dc->xformVport2World.eM22;
|
2004-01-15 01:35:38 +01:00
|
|
|
/* Round to integers */
|
|
|
|
return GDI_ROUND(floatHeight);
|
|
|
|
}
|
|
|
|
|
2013-09-11 18:31:01 +02:00
|
|
|
/* scale width and height but don't mirror them */
|
|
|
|
|
|
|
|
static inline INT width_to_LP( DC *dc, INT width )
|
|
|
|
{
|
|
|
|
return GDI_ROUND( (double)width * fabs( dc->xformVport2World.eM11 ));
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline INT height_to_LP( DC *dc, INT height )
|
|
|
|
{
|
|
|
|
return GDI_ROUND( (double)height * fabs( dc->xformVport2World.eM22 ));
|
|
|
|
}
|
|
|
|
|
2005-08-23 11:38:58 +02:00
|
|
|
static inline INT INTERNAL_YWSTODS(DC *dc, INT height)
|
|
|
|
{
|
|
|
|
POINT pt[2];
|
|
|
|
pt[0].x = pt[0].y = 0;
|
|
|
|
pt[1].x = 0;
|
|
|
|
pt[1].y = height;
|
2016-07-18 12:32:56 +02:00
|
|
|
lp_to_dp(dc, pt, 2);
|
2005-08-23 11:38:58 +02:00
|
|
|
return pt[1].y - pt[0].y;
|
|
|
|
}
|
2004-01-15 01:35:38 +01:00
|
|
|
|
2007-09-27 20:14:13 +02:00
|
|
|
static HGDIOBJ FONT_SelectObject( HGDIOBJ handle, HDC hdc );
|
2009-01-27 16:30:43 +01:00
|
|
|
static INT FONT_GetObjectA( HGDIOBJ handle, INT count, LPVOID buffer );
|
|
|
|
static INT FONT_GetObjectW( HGDIOBJ handle, INT count, LPVOID buffer );
|
2009-01-27 16:19:37 +01:00
|
|
|
static BOOL FONT_DeleteObject( HGDIOBJ handle );
|
2002-05-31 20:43:22 +02:00
|
|
|
|
|
|
|
static const struct gdi_obj_funcs font_funcs =
|
|
|
|
{
|
|
|
|
FONT_SelectObject, /* pSelectObject */
|
|
|
|
FONT_GetObjectA, /* pGetObjectA */
|
|
|
|
FONT_GetObjectW, /* pGetObjectW */
|
|
|
|
NULL, /* pUnrealizeObject */
|
|
|
|
FONT_DeleteObject /* pDeleteObject */
|
|
|
|
};
|
|
|
|
|
2002-06-04 03:02:51 +02:00
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
LOGFONTW logfont;
|
|
|
|
} FONTOBJ;
|
|
|
|
|
2011-10-19 15:34:21 +02:00
|
|
|
struct font_enum
|
1997-06-16 19:43:53 +02:00
|
|
|
{
|
1999-02-26 12:11:13 +01:00
|
|
|
LPLOGFONTW lpLogFontParam;
|
2002-11-13 05:13:42 +01:00
|
|
|
FONTENUMPROCW lpEnumFunc;
|
2001-02-14 23:56:38 +01:00
|
|
|
LPARAM lpData;
|
2011-10-19 15:34:21 +02:00
|
|
|
BOOL unicode;
|
2002-04-14 21:42:43 +02:00
|
|
|
HDC hdc;
|
2012-03-14 15:15:13 +01:00
|
|
|
INT retval;
|
2011-10-19 15:34:21 +02:00
|
|
|
};
|
2002-06-01 01:06:46 +02:00
|
|
|
|
1999-01-01 19:41:22 +01:00
|
|
|
/*
|
|
|
|
* For TranslateCharsetInfo
|
|
|
|
*/
|
|
|
|
#define MAXTCIINDEX 32
|
2004-12-21 15:45:38 +01:00
|
|
|
static const CHARSETINFO FONT_tci[MAXTCIINDEX] = {
|
1999-01-01 19:41:22 +01:00
|
|
|
/* ANSI */
|
2008-01-14 12:38:59 +01:00
|
|
|
{ ANSI_CHARSET, 1252, {{0,0,0,0},{FS_LATIN1,0}} },
|
|
|
|
{ EASTEUROPE_CHARSET, 1250, {{0,0,0,0},{FS_LATIN2,0}} },
|
|
|
|
{ RUSSIAN_CHARSET, 1251, {{0,0,0,0},{FS_CYRILLIC,0}} },
|
|
|
|
{ GREEK_CHARSET, 1253, {{0,0,0,0},{FS_GREEK,0}} },
|
|
|
|
{ TURKISH_CHARSET, 1254, {{0,0,0,0},{FS_TURKISH,0}} },
|
|
|
|
{ HEBREW_CHARSET, 1255, {{0,0,0,0},{FS_HEBREW,0}} },
|
|
|
|
{ ARABIC_CHARSET, 1256, {{0,0,0,0},{FS_ARABIC,0}} },
|
|
|
|
{ BALTIC_CHARSET, 1257, {{0,0,0,0},{FS_BALTIC,0}} },
|
|
|
|
{ VIETNAMESE_CHARSET, 1258, {{0,0,0,0},{FS_VIETNAMESE,0}} },
|
1999-01-01 19:41:22 +01:00
|
|
|
/* reserved by ANSI */
|
2008-01-14 12:38:59 +01:00
|
|
|
{ DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
|
|
|
|
{ DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
|
|
|
|
{ DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
|
|
|
|
{ DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
|
|
|
|
{ DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
|
|
|
|
{ DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
|
|
|
|
{ DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
|
1999-01-01 19:41:22 +01:00
|
|
|
/* ANSI and OEM */
|
2008-01-14 12:38:59 +01:00
|
|
|
{ THAI_CHARSET, 874, {{0,0,0,0},{FS_THAI,0}} },
|
|
|
|
{ SHIFTJIS_CHARSET, 932, {{0,0,0,0},{FS_JISJAPAN,0}} },
|
|
|
|
{ GB2312_CHARSET, 936, {{0,0,0,0},{FS_CHINESESIMP,0}} },
|
|
|
|
{ HANGEUL_CHARSET, 949, {{0,0,0,0},{FS_WANSUNG,0}} },
|
|
|
|
{ CHINESEBIG5_CHARSET, 950, {{0,0,0,0},{FS_CHINESETRAD,0}} },
|
|
|
|
{ JOHAB_CHARSET, 1361, {{0,0,0,0},{FS_JOHAB,0}} },
|
1999-01-01 19:41:22 +01:00
|
|
|
/* reserved for alternate ANSI and OEM */
|
2008-01-14 12:38:59 +01:00
|
|
|
{ DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
|
|
|
|
{ DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
|
|
|
|
{ DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
|
|
|
|
{ DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
|
|
|
|
{ DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
|
|
|
|
{ DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
|
|
|
|
{ DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
|
|
|
|
{ DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
|
1999-01-01 19:41:22 +01:00
|
|
|
/* reserved for system */
|
2008-01-14 12:38:59 +01:00
|
|
|
{ DEFAULT_CHARSET, 0, {{0,0,0,0},{FS_LATIN1,0}} },
|
|
|
|
{ SYMBOL_CHARSET, CP_SYMBOL, {{0,0,0,0},{FS_SYMBOL,0}} }
|
1999-01-01 19:41:22 +01:00
|
|
|
};
|
|
|
|
|
2002-08-29 00:35:23 +02:00
|
|
|
static void FONT_LogFontAToW( const LOGFONTA *fontA, LPLOGFONTW fontW )
|
1999-10-24 19:26:45 +02:00
|
|
|
{
|
2001-02-14 23:56:38 +01:00
|
|
|
memcpy(fontW, fontA, sizeof(LOGFONTA) - LF_FACESIZE);
|
|
|
|
MultiByteToWideChar(CP_ACP, 0, fontA->lfFaceName, -1, fontW->lfFaceName,
|
|
|
|
LF_FACESIZE);
|
2004-09-01 19:29:28 +02:00
|
|
|
fontW->lfFaceName[LF_FACESIZE-1] = 0;
|
2001-02-14 23:56:38 +01:00
|
|
|
}
|
|
|
|
|
2002-08-29 00:35:23 +02:00
|
|
|
static void FONT_LogFontWToA( const LOGFONTW *fontW, LPLOGFONTA fontA )
|
2001-02-14 23:56:38 +01:00
|
|
|
{
|
|
|
|
memcpy(fontA, fontW, sizeof(LOGFONTA) - LF_FACESIZE);
|
|
|
|
WideCharToMultiByte(CP_ACP, 0, fontW->lfFaceName, -1, fontA->lfFaceName,
|
|
|
|
LF_FACESIZE, NULL, NULL);
|
2004-09-01 19:29:28 +02:00
|
|
|
fontA->lfFaceName[LF_FACESIZE-1] = 0;
|
2001-02-14 23:56:38 +01:00
|
|
|
}
|
|
|
|
|
2002-08-29 00:35:23 +02:00
|
|
|
static void FONT_EnumLogFontExWToA( const ENUMLOGFONTEXW *fontW, LPENUMLOGFONTEXA fontA )
|
2001-02-14 23:56:38 +01:00
|
|
|
{
|
2010-06-11 17:39:40 +02:00
|
|
|
FONT_LogFontWToA( &fontW->elfLogFont, &fontA->elfLogFont );
|
2001-02-14 23:56:38 +01:00
|
|
|
|
|
|
|
WideCharToMultiByte( CP_ACP, 0, fontW->elfFullName, -1,
|
2005-08-08 17:03:42 +02:00
|
|
|
(LPSTR) fontA->elfFullName, LF_FULLFACESIZE, NULL, NULL );
|
2001-02-14 23:56:38 +01:00
|
|
|
fontA->elfFullName[LF_FULLFACESIZE-1] = '\0';
|
|
|
|
WideCharToMultiByte( CP_ACP, 0, fontW->elfStyle, -1,
|
2005-08-08 17:03:42 +02:00
|
|
|
(LPSTR) fontA->elfStyle, LF_FACESIZE, NULL, NULL );
|
2001-02-14 23:56:38 +01:00
|
|
|
fontA->elfStyle[LF_FACESIZE-1] = '\0';
|
|
|
|
WideCharToMultiByte( CP_ACP, 0, fontW->elfScript, -1,
|
2005-08-08 17:03:42 +02:00
|
|
|
(LPSTR) fontA->elfScript, LF_FACESIZE, NULL, NULL );
|
2001-02-14 23:56:38 +01:00
|
|
|
fontA->elfScript[LF_FACESIZE-1] = '\0';
|
|
|
|
}
|
|
|
|
|
2010-06-11 17:39:40 +02:00
|
|
|
static void FONT_EnumLogFontExAToW( const ENUMLOGFONTEXA *fontA, LPENUMLOGFONTEXW fontW )
|
|
|
|
{
|
|
|
|
FONT_LogFontAToW( &fontA->elfLogFont, &fontW->elfLogFont );
|
|
|
|
|
|
|
|
MultiByteToWideChar( CP_ACP, 0, (LPCSTR)fontA->elfFullName, -1,
|
|
|
|
fontW->elfFullName, LF_FULLFACESIZE );
|
|
|
|
fontW->elfFullName[LF_FULLFACESIZE-1] = '\0';
|
|
|
|
MultiByteToWideChar( CP_ACP, 0, (LPCSTR)fontA->elfStyle, -1,
|
|
|
|
fontW->elfStyle, LF_FACESIZE );
|
|
|
|
fontW->elfStyle[LF_FACESIZE-1] = '\0';
|
|
|
|
MultiByteToWideChar( CP_ACP, 0, (LPCSTR)fontA->elfScript, -1,
|
|
|
|
fontW->elfScript, LF_FACESIZE );
|
|
|
|
fontW->elfScript[LF_FACESIZE-1] = '\0';
|
|
|
|
}
|
|
|
|
|
1997-03-05 09:22:35 +01:00
|
|
|
/***********************************************************************
|
1997-06-16 19:43:53 +02:00
|
|
|
* TEXTMETRIC conversion functions.
|
|
|
|
*/
|
2002-08-29 00:35:23 +02:00
|
|
|
static void FONT_TextMetricWToA(const TEXTMETRICW *ptmW, LPTEXTMETRICA ptmA )
|
2001-02-14 23:56:38 +01:00
|
|
|
{
|
|
|
|
ptmA->tmHeight = ptmW->tmHeight;
|
|
|
|
ptmA->tmAscent = ptmW->tmAscent;
|
|
|
|
ptmA->tmDescent = ptmW->tmDescent;
|
|
|
|
ptmA->tmInternalLeading = ptmW->tmInternalLeading;
|
|
|
|
ptmA->tmExternalLeading = ptmW->tmExternalLeading;
|
|
|
|
ptmA->tmAveCharWidth = ptmW->tmAveCharWidth;
|
|
|
|
ptmA->tmMaxCharWidth = ptmW->tmMaxCharWidth;
|
|
|
|
ptmA->tmWeight = ptmW->tmWeight;
|
|
|
|
ptmA->tmOverhang = ptmW->tmOverhang;
|
|
|
|
ptmA->tmDigitizedAspectX = ptmW->tmDigitizedAspectX;
|
|
|
|
ptmA->tmDigitizedAspectY = ptmW->tmDigitizedAspectY;
|
2007-03-15 07:12:09 +01:00
|
|
|
ptmA->tmFirstChar = min(ptmW->tmFirstChar, 255);
|
|
|
|
if (ptmW->tmCharSet == SYMBOL_CHARSET)
|
|
|
|
{
|
2009-02-16 13:39:15 +01:00
|
|
|
ptmA->tmFirstChar = 0x1e;
|
|
|
|
ptmA->tmLastChar = 0xff; /* win9x behaviour - we need the OS2 table data to calculate correctly */
|
2007-03-15 07:12:09 +01:00
|
|
|
}
|
2011-10-19 17:22:29 +02:00
|
|
|
else if (ptmW->tmPitchAndFamily & TMPF_TRUETYPE)
|
2009-02-16 13:39:15 +01:00
|
|
|
{
|
|
|
|
ptmA->tmFirstChar = ptmW->tmDefaultChar - 1;
|
|
|
|
ptmA->tmLastChar = min(ptmW->tmLastChar, 0xff);
|
|
|
|
}
|
2011-10-19 17:22:29 +02:00
|
|
|
else
|
|
|
|
{
|
|
|
|
ptmA->tmFirstChar = min(ptmW->tmFirstChar, 0xff);
|
|
|
|
ptmA->tmLastChar = min(ptmW->tmLastChar, 0xff);
|
|
|
|
}
|
2009-02-16 13:39:15 +01:00
|
|
|
ptmA->tmDefaultChar = ptmW->tmDefaultChar;
|
|
|
|
ptmA->tmBreakChar = ptmW->tmBreakChar;
|
2001-02-14 23:56:38 +01:00
|
|
|
ptmA->tmItalic = ptmW->tmItalic;
|
|
|
|
ptmA->tmUnderlined = ptmW->tmUnderlined;
|
|
|
|
ptmA->tmStruckOut = ptmW->tmStruckOut;
|
|
|
|
ptmA->tmPitchAndFamily = ptmW->tmPitchAndFamily;
|
|
|
|
ptmA->tmCharSet = ptmW->tmCharSet;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2002-11-04 23:43:24 +01:00
|
|
|
static void FONT_NewTextMetricExWToA(const NEWTEXTMETRICEXW *ptmW, NEWTEXTMETRICEXA *ptmA )
|
2001-02-14 23:56:38 +01:00
|
|
|
{
|
2006-09-14 02:00:38 +02:00
|
|
|
FONT_TextMetricWToA((const TEXTMETRICW *)ptmW, (LPTEXTMETRICA)ptmA);
|
2001-04-04 02:09:53 +02:00
|
|
|
ptmA->ntmTm.ntmFlags = ptmW->ntmTm.ntmFlags;
|
|
|
|
ptmA->ntmTm.ntmSizeEM = ptmW->ntmTm.ntmSizeEM;
|
|
|
|
ptmA->ntmTm.ntmCellHeight = ptmW->ntmTm.ntmCellHeight;
|
|
|
|
ptmA->ntmTm.ntmAvgWidth = ptmW->ntmTm.ntmAvgWidth;
|
|
|
|
memcpy(&ptmA->ntmFontSig, &ptmW->ntmFontSig, sizeof(FONTSIGNATURE));
|
2001-02-14 23:56:38 +01:00
|
|
|
}
|
|
|
|
|
2012-11-06 15:35:18 +01:00
|
|
|
static DWORD get_key_value( HKEY key, const WCHAR *name, DWORD *value )
|
2012-10-30 14:22:16 +01:00
|
|
|
{
|
|
|
|
WCHAR buf[12];
|
|
|
|
DWORD count = sizeof(buf), type, err;
|
|
|
|
|
2012-11-06 15:35:18 +01:00
|
|
|
err = RegQueryValueExW( key, name, NULL, &type, (BYTE *)buf, &count );
|
2012-10-30 14:22:16 +01:00
|
|
|
if (!err)
|
|
|
|
{
|
2012-11-06 15:35:18 +01:00
|
|
|
if (type == REG_DWORD) memcpy( value, buf, sizeof(*value) );
|
|
|
|
else *value = atoiW( buf );
|
2012-10-30 14:22:16 +01:00
|
|
|
}
|
|
|
|
return err;
|
|
|
|
}
|
|
|
|
|
2012-11-06 15:35:18 +01:00
|
|
|
static UINT get_subpixel_orientation( HKEY key )
|
2012-10-30 14:22:16 +01:00
|
|
|
{
|
|
|
|
static const WCHAR smoothing_orientation[] = {'F','o','n','t','S','m','o','o','t','h','i','n','g',
|
|
|
|
'O','r','i','e','n','t','a','t','i','o','n',0};
|
2012-11-06 15:35:18 +01:00
|
|
|
DWORD orient;
|
2012-10-30 14:22:16 +01:00
|
|
|
|
|
|
|
/* FIXME: handle vertical orientations even though Windows doesn't */
|
2012-11-06 15:35:18 +01:00
|
|
|
if (get_key_value( key, smoothing_orientation, &orient )) return GGO_GRAY4_BITMAP;
|
2012-10-30 14:22:16 +01:00
|
|
|
|
|
|
|
switch (orient)
|
|
|
|
{
|
|
|
|
case 0: /* FE_FONTSMOOTHINGORIENTATIONBGR */
|
|
|
|
return WINE_GGO_HBGR_BITMAP;
|
|
|
|
case 1: /* FE_FONTSMOOTHINGORIENTATIONRGB */
|
|
|
|
return WINE_GGO_HRGB_BITMAP;
|
|
|
|
}
|
|
|
|
return GGO_GRAY4_BITMAP;
|
|
|
|
}
|
|
|
|
|
2012-11-06 15:35:18 +01:00
|
|
|
static UINT get_default_smoothing( HKEY key )
|
2011-11-17 12:01:58 +01:00
|
|
|
{
|
2012-11-06 15:56:30 +01:00
|
|
|
static const WCHAR smoothing[] = {'F','o','n','t','S','m','o','o','t','h','i','n','g',0};
|
2012-11-05 12:32:15 +01:00
|
|
|
static const WCHAR smoothing_type[] = {'F','o','n','t','S','m','o','o','t','h','i','n','g','T','y','p','e',0};
|
2012-11-06 15:56:30 +01:00
|
|
|
DWORD enabled, type;
|
2011-11-17 12:01:58 +01:00
|
|
|
|
2012-11-06 15:56:30 +01:00
|
|
|
if (get_key_value( key, smoothing, &enabled )) return 0;
|
|
|
|
if (!enabled) return GGO_BITMAP;
|
2012-11-05 12:32:15 +01:00
|
|
|
|
2012-11-06 15:56:30 +01:00
|
|
|
if (!get_key_value( key, smoothing_type, &type ) && type == 2 /* FE_FONTSMOOTHINGCLEARTYPE */)
|
2012-11-06 15:35:18 +01:00
|
|
|
return get_subpixel_orientation( key );
|
2012-11-06 15:56:30 +01:00
|
|
|
|
|
|
|
return GGO_GRAY4_BITMAP;
|
2011-11-17 12:01:58 +01:00
|
|
|
}
|
|
|
|
|
2012-12-18 17:41:42 +01:00
|
|
|
/* compute positions for text rendering, in device coords */
|
|
|
|
static BOOL get_char_positions( DC *dc, const WCHAR *str, INT count, INT *dx, SIZE *size )
|
|
|
|
{
|
|
|
|
TEXTMETRICW tm;
|
2012-12-27 20:53:25 +01:00
|
|
|
PHYSDEV dev;
|
2012-12-18 17:41:42 +01:00
|
|
|
|
|
|
|
size->cx = size->cy = 0;
|
|
|
|
if (!count) return TRUE;
|
|
|
|
|
|
|
|
dev = GET_DC_PHYSDEV( dc, pGetTextMetrics );
|
|
|
|
dev->funcs->pGetTextMetrics( dev, &tm );
|
|
|
|
|
2012-12-27 20:53:25 +01:00
|
|
|
dev = GET_DC_PHYSDEV( dc, pGetTextExtentExPoint );
|
2012-12-18 17:52:37 +01:00
|
|
|
if (!dev->funcs->pGetTextExtentExPoint( dev, str, count, dx )) return FALSE;
|
2012-12-18 17:41:42 +01:00
|
|
|
|
|
|
|
if (dc->breakExtra || dc->breakRem)
|
|
|
|
{
|
|
|
|
int i, space = 0, rem = dc->breakRem;
|
|
|
|
|
|
|
|
for (i = 0; i < count; i++)
|
|
|
|
{
|
|
|
|
if (str[i] == tm.tmBreakChar)
|
|
|
|
{
|
|
|
|
space += dc->breakExtra;
|
|
|
|
if (rem > 0)
|
|
|
|
{
|
|
|
|
space++;
|
|
|
|
rem--;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
dx[i] += space;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
size->cx = dx[count - 1];
|
|
|
|
size->cy = tm.tmHeight;
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* compute positions for text rendering, in device coords */
|
|
|
|
static BOOL get_char_positions_indices( DC *dc, const WORD *indices, INT count, INT *dx, SIZE *size )
|
|
|
|
{
|
|
|
|
TEXTMETRICW tm;
|
2012-12-27 20:53:25 +01:00
|
|
|
PHYSDEV dev;
|
2012-12-18 17:41:42 +01:00
|
|
|
|
|
|
|
size->cx = size->cy = 0;
|
|
|
|
if (!count) return TRUE;
|
|
|
|
|
|
|
|
dev = GET_DC_PHYSDEV( dc, pGetTextMetrics );
|
|
|
|
dev->funcs->pGetTextMetrics( dev, &tm );
|
|
|
|
|
2013-01-22 12:13:19 +01:00
|
|
|
dev = GET_DC_PHYSDEV( dc, pGetTextExtentExPointI );
|
2012-12-18 17:52:37 +01:00
|
|
|
if (!dev->funcs->pGetTextExtentExPointI( dev, indices, count, dx )) return FALSE;
|
2012-12-18 17:41:42 +01:00
|
|
|
|
|
|
|
if (dc->breakExtra || dc->breakRem)
|
|
|
|
{
|
|
|
|
WORD space_index;
|
|
|
|
int i, space = 0, rem = dc->breakRem;
|
|
|
|
|
|
|
|
dev = GET_DC_PHYSDEV( dc, pGetGlyphIndices );
|
|
|
|
dev->funcs->pGetGlyphIndices( dev, &tm.tmBreakChar, 1, &space_index, 0 );
|
|
|
|
|
|
|
|
for (i = 0; i < count; i++)
|
|
|
|
{
|
|
|
|
if (indices[i] == space_index)
|
|
|
|
{
|
|
|
|
space += dc->breakExtra;
|
|
|
|
if (rem > 0)
|
|
|
|
{
|
|
|
|
space++;
|
|
|
|
rem--;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
dx[i] += space;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
size->cx = dx[count - 1];
|
|
|
|
size->cy = tm.tmHeight;
|
|
|
|
return TRUE;
|
|
|
|
}
|
2012-11-05 12:32:15 +01:00
|
|
|
|
2004-07-21 06:07:28 +02:00
|
|
|
/***********************************************************************
|
2007-03-26 10:03:51 +02:00
|
|
|
* GdiGetCodePage (GDI32.@)
|
2004-07-21 06:07:28 +02:00
|
|
|
*/
|
2007-03-26 10:03:51 +02:00
|
|
|
DWORD WINAPI GdiGetCodePage( HDC hdc )
|
2004-07-21 06:07:28 +02:00
|
|
|
{
|
|
|
|
UINT cp = CP_ACP;
|
2009-04-06 10:16:40 +02:00
|
|
|
DC *dc = get_dc_ptr( hdc );
|
2007-02-15 08:52:33 +01:00
|
|
|
|
2009-04-06 10:16:40 +02:00
|
|
|
if (dc)
|
|
|
|
{
|
|
|
|
cp = dc->font_code_page;
|
|
|
|
release_dc_ptr( dc );
|
2007-02-15 08:52:33 +01:00
|
|
|
}
|
2007-03-26 10:03:51 +02:00
|
|
|
return cp;
|
|
|
|
}
|
|
|
|
|
2016-07-29 14:13:06 +02:00
|
|
|
/***********************************************************************
|
|
|
|
* get_text_charset_info
|
|
|
|
*
|
|
|
|
* Internal version of GetTextCharsetInfo() that takes a DC pointer.
|
|
|
|
*/
|
|
|
|
static UINT get_text_charset_info(DC *dc, FONTSIGNATURE *fs, DWORD flags)
|
|
|
|
{
|
|
|
|
UINT ret = DEFAULT_CHARSET;
|
|
|
|
PHYSDEV dev;
|
|
|
|
|
|
|
|
dev = GET_DC_PHYSDEV( dc, pGetTextCharsetInfo );
|
|
|
|
ret = dev->funcs->pGetTextCharsetInfo( dev, fs, flags );
|
|
|
|
|
|
|
|
if (ret == DEFAULT_CHARSET && fs)
|
|
|
|
memset(fs, 0, sizeof(FONTSIGNATURE));
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetTextCharsetInfo (GDI32.@)
|
|
|
|
*/
|
|
|
|
UINT WINAPI GetTextCharsetInfo(HDC hdc, FONTSIGNATURE *fs, DWORD flags)
|
|
|
|
{
|
|
|
|
UINT ret = DEFAULT_CHARSET;
|
|
|
|
DC *dc = get_dc_ptr(hdc);
|
|
|
|
|
|
|
|
if (dc)
|
|
|
|
{
|
|
|
|
ret = get_text_charset_info( dc, fs, flags );
|
|
|
|
release_dc_ptr( dc );
|
|
|
|
}
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2007-03-26 10:03:51 +02:00
|
|
|
/***********************************************************************
|
|
|
|
* FONT_mbtowc
|
|
|
|
*
|
|
|
|
* Returns a Unicode translation of str using the charset of the
|
|
|
|
* currently selected font in hdc. If count is -1 then str is assumed
|
|
|
|
* to be '\0' terminated, otherwise it contains the number of bytes to
|
|
|
|
* convert. If plenW is non-NULL, on return it will point to the
|
|
|
|
* number of WCHARs that have been written. If pCP is non-NULL, on
|
|
|
|
* return it will point to the codepage used in the conversion. The
|
|
|
|
* caller should free the returned LPWSTR from the process heap
|
|
|
|
* itself.
|
|
|
|
*/
|
|
|
|
static LPWSTR FONT_mbtowc(HDC hdc, LPCSTR str, INT count, INT *plenW, UINT *pCP)
|
|
|
|
{
|
|
|
|
UINT cp;
|
|
|
|
INT lenW;
|
|
|
|
LPWSTR strW;
|
|
|
|
|
|
|
|
cp = GdiGetCodePage( hdc );
|
2004-07-21 06:07:28 +02:00
|
|
|
|
|
|
|
if(count == -1) count = strlen(str);
|
|
|
|
lenW = MultiByteToWideChar(cp, 0, str, count, NULL, 0);
|
2005-11-08 13:55:40 +01:00
|
|
|
strW = HeapAlloc(GetProcessHeap(), 0, lenW*sizeof(WCHAR));
|
2004-07-21 06:07:28 +02:00
|
|
|
MultiByteToWideChar(cp, 0, str, count, strW, lenW);
|
|
|
|
TRACE("mapped %s -> %s\n", debugstr_an(str, count), debugstr_wn(strW, lenW));
|
|
|
|
if(plenW) *plenW = lenW;
|
2007-02-15 08:52:33 +01:00
|
|
|
if(pCP) *pCP = cp;
|
2004-07-21 06:07:28 +02:00
|
|
|
return strW;
|
|
|
|
}
|
|
|
|
|
2001-02-14 23:56:38 +01:00
|
|
|
/***********************************************************************
|
2010-06-11 17:39:40 +02:00
|
|
|
* CreateFontIndirectExA (GDI32.@)
|
2001-02-14 23:56:38 +01:00
|
|
|
*/
|
2010-06-11 17:39:40 +02:00
|
|
|
HFONT WINAPI CreateFontIndirectExA( const ENUMLOGFONTEXDVA *penumexA )
|
2001-02-14 23:56:38 +01:00
|
|
|
{
|
2010-06-11 17:39:40 +02:00
|
|
|
ENUMLOGFONTEXDVW enumexW;
|
2001-02-14 23:56:38 +01:00
|
|
|
|
2010-06-11 17:39:40 +02:00
|
|
|
if (!penumexA) return 0;
|
2001-02-14 23:56:38 +01:00
|
|
|
|
2010-06-11 17:39:40 +02:00
|
|
|
FONT_EnumLogFontExAToW( &penumexA->elfEnumLogfontEx, &enumexW.elfEnumLogfontEx );
|
|
|
|
enumexW.elfDesignVector = penumexA->elfDesignVector;
|
|
|
|
return CreateFontIndirectExW( &enumexW );
|
2001-02-14 23:56:38 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
2010-10-11 03:44:36 +02:00
|
|
|
* CreateFontIndirectExW (GDI32.@)
|
2001-02-14 23:56:38 +01:00
|
|
|
*/
|
2010-06-11 17:39:40 +02:00
|
|
|
HFONT WINAPI CreateFontIndirectExW( const ENUMLOGFONTEXDVW *penumex )
|
1993-09-04 12:09:32 +02:00
|
|
|
{
|
2008-01-04 08:47:03 +01:00
|
|
|
HFONT hFont;
|
|
|
|
FONTOBJ *fontPtr;
|
2010-06-11 17:39:40 +02:00
|
|
|
const LOGFONTW *plf;
|
2008-01-04 08:47:03 +01:00
|
|
|
|
2010-06-11 17:39:40 +02:00
|
|
|
if (!penumex) return 0;
|
|
|
|
|
|
|
|
if (penumex->elfEnumLogfontEx.elfFullName[0] ||
|
|
|
|
penumex->elfEnumLogfontEx.elfStyle[0] ||
|
|
|
|
penumex->elfEnumLogfontEx.elfScript[0])
|
|
|
|
{
|
|
|
|
FIXME("some fields ignored. fullname=%s, style=%s, script=%s\n",
|
|
|
|
debugstr_w(penumex->elfEnumLogfontEx.elfFullName),
|
|
|
|
debugstr_w(penumex->elfEnumLogfontEx.elfStyle),
|
|
|
|
debugstr_w(penumex->elfEnumLogfontEx.elfScript));
|
|
|
|
}
|
2008-01-04 08:47:03 +01:00
|
|
|
|
2010-06-11 17:39:40 +02:00
|
|
|
plf = &penumex->elfEnumLogfontEx.elfLogFont;
|
2009-01-28 18:43:06 +01:00
|
|
|
if (!(fontPtr = HeapAlloc( GetProcessHeap(), 0, sizeof(*fontPtr) ))) return 0;
|
2008-01-04 08:47:03 +01:00
|
|
|
|
2008-02-27 18:00:06 +01:00
|
|
|
fontPtr->logfont = *plf;
|
2008-01-04 08:47:03 +01:00
|
|
|
|
2012-10-17 13:48:45 +02:00
|
|
|
if (!(hFont = alloc_gdi_handle( fontPtr, OBJ_FONT, &font_funcs )))
|
2009-01-28 18:43:06 +01:00
|
|
|
{
|
|
|
|
HeapFree( GetProcessHeap(), 0, fontPtr );
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
TRACE("(%d %d %d %d %x %d %x %d %d) %s %s %s %s => %p\n",
|
|
|
|
plf->lfHeight, plf->lfWidth,
|
|
|
|
plf->lfEscapement, plf->lfOrientation,
|
|
|
|
plf->lfPitchAndFamily,
|
|
|
|
plf->lfOutPrecision, plf->lfClipPrecision,
|
|
|
|
plf->lfQuality, plf->lfCharSet,
|
|
|
|
debugstr_w(plf->lfFaceName),
|
|
|
|
plf->lfWeight > 400 ? "Bold" : "",
|
|
|
|
plf->lfItalic ? "Italic" : "",
|
|
|
|
plf->lfUnderline ? "Underline" : "", hFont);
|
|
|
|
|
1997-06-16 19:43:53 +02:00
|
|
|
return hFont;
|
|
|
|
}
|
1993-09-04 12:09:32 +02:00
|
|
|
|
2010-06-11 17:39:40 +02:00
|
|
|
/***********************************************************************
|
|
|
|
* CreateFontIndirectA (GDI32.@)
|
|
|
|
*/
|
|
|
|
HFONT WINAPI CreateFontIndirectA( const LOGFONTA *plfA )
|
|
|
|
{
|
|
|
|
LOGFONTW lfW;
|
|
|
|
|
|
|
|
if (!plfA) return 0;
|
|
|
|
|
|
|
|
FONT_LogFontAToW( plfA, &lfW );
|
|
|
|
return CreateFontIndirectW( &lfW );
|
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* CreateFontIndirectW (GDI32.@)
|
|
|
|
*/
|
|
|
|
HFONT WINAPI CreateFontIndirectW( const LOGFONTW *plf )
|
|
|
|
{
|
|
|
|
ENUMLOGFONTEXDVW exdv;
|
|
|
|
|
|
|
|
if (!plf) return 0;
|
|
|
|
|
|
|
|
exdv.elfEnumLogfontEx.elfLogFont = *plf;
|
|
|
|
exdv.elfEnumLogfontEx.elfFullName[0] = 0;
|
|
|
|
exdv.elfEnumLogfontEx.elfStyle[0] = 0;
|
|
|
|
exdv.elfEnumLogfontEx.elfScript[0] = 0;
|
|
|
|
return CreateFontIndirectExW( &exdv );
|
|
|
|
}
|
|
|
|
|
1996-07-17 22:02:21 +02:00
|
|
|
/*************************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* CreateFontA (GDI32.@)
|
1996-07-17 22:02:21 +02:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
HFONT WINAPI CreateFontA( INT height, INT width, INT esc,
|
|
|
|
INT orient, INT weight, DWORD italic,
|
1997-08-24 18:00:30 +02:00
|
|
|
DWORD underline, DWORD strikeout, DWORD charset,
|
|
|
|
DWORD outpres, DWORD clippres, DWORD quality,
|
|
|
|
DWORD pitch, LPCSTR name )
|
1996-07-17 22:02:21 +02:00
|
|
|
{
|
2001-02-14 23:56:38 +01:00
|
|
|
LOGFONTA logfont;
|
|
|
|
|
|
|
|
logfont.lfHeight = height;
|
|
|
|
logfont.lfWidth = width;
|
|
|
|
logfont.lfEscapement = esc;
|
|
|
|
logfont.lfOrientation = orient;
|
|
|
|
logfont.lfWeight = weight;
|
|
|
|
logfont.lfItalic = italic;
|
|
|
|
logfont.lfUnderline = underline;
|
|
|
|
logfont.lfStrikeOut = strikeout;
|
|
|
|
logfont.lfCharSet = charset;
|
|
|
|
logfont.lfOutPrecision = outpres;
|
|
|
|
logfont.lfClipPrecision = clippres;
|
|
|
|
logfont.lfQuality = quality;
|
|
|
|
logfont.lfPitchAndFamily = pitch;
|
2002-06-01 01:06:46 +02:00
|
|
|
|
|
|
|
if (name)
|
2001-02-14 23:56:38 +01:00
|
|
|
lstrcpynA(logfont.lfFaceName,name,sizeof(logfont.lfFaceName));
|
2002-06-01 01:06:46 +02:00
|
|
|
else
|
2001-02-14 23:56:38 +01:00
|
|
|
logfont.lfFaceName[0] = '\0';
|
|
|
|
|
|
|
|
return CreateFontIndirectA( &logfont );
|
1996-07-17 22:02:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* CreateFontW (GDI32.@)
|
1996-07-17 22:02:21 +02:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
HFONT WINAPI CreateFontW( INT height, INT width, INT esc,
|
|
|
|
INT orient, INT weight, DWORD italic,
|
1997-08-24 18:00:30 +02:00
|
|
|
DWORD underline, DWORD strikeout, DWORD charset,
|
|
|
|
DWORD outpres, DWORD clippres, DWORD quality,
|
|
|
|
DWORD pitch, LPCWSTR name )
|
1996-07-17 22:02:21 +02:00
|
|
|
{
|
2001-02-14 23:56:38 +01:00
|
|
|
LOGFONTW logfont;
|
|
|
|
|
|
|
|
logfont.lfHeight = height;
|
|
|
|
logfont.lfWidth = width;
|
|
|
|
logfont.lfEscapement = esc;
|
|
|
|
logfont.lfOrientation = orient;
|
|
|
|
logfont.lfWeight = weight;
|
|
|
|
logfont.lfItalic = italic;
|
|
|
|
logfont.lfUnderline = underline;
|
|
|
|
logfont.lfStrikeOut = strikeout;
|
|
|
|
logfont.lfCharSet = charset;
|
|
|
|
logfont.lfOutPrecision = outpres;
|
|
|
|
logfont.lfClipPrecision = clippres;
|
|
|
|
logfont.lfQuality = quality;
|
|
|
|
logfont.lfPitchAndFamily = pitch;
|
2002-06-01 01:06:46 +02:00
|
|
|
|
|
|
|
if (name)
|
|
|
|
lstrcpynW(logfont.lfFaceName, name,
|
2001-02-14 23:56:38 +01:00
|
|
|
sizeof(logfont.lfFaceName) / sizeof(WCHAR));
|
2002-06-01 01:06:46 +02:00
|
|
|
else
|
2001-02-14 23:56:38 +01:00
|
|
|
logfont.lfFaceName[0] = '\0';
|
|
|
|
|
|
|
|
return CreateFontIndirectW( &logfont );
|
1996-07-17 22:02:21 +02:00
|
|
|
}
|
|
|
|
|
2013-02-26 02:31:20 +01:00
|
|
|
#define ASSOC_CHARSET_OEM 1
|
|
|
|
#define ASSOC_CHARSET_ANSI 2
|
|
|
|
#define ASSOC_CHARSET_SYMBOL 4
|
|
|
|
|
|
|
|
static DWORD get_associated_charset_info(void)
|
|
|
|
{
|
|
|
|
static DWORD associated_charset = -1;
|
|
|
|
|
|
|
|
if (associated_charset == -1)
|
|
|
|
{
|
|
|
|
static const WCHAR assoc_charset_reg_keyW[] = {'S','y','s','t','e','m','\\',
|
|
|
|
'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
|
|
|
|
'C','o','n','t','r','o','l','\\','F','o','n','t','A','s','s','o','c','\\',
|
|
|
|
'A','s','s','o','c','i','a','t','e','d',' ','C','h','a','r','s','e','t','\0'};
|
|
|
|
static const WCHAR ansiW[] = {'A','N','S','I','(','0','0',')','\0'};
|
|
|
|
static const WCHAR oemW[] = {'O','E','M','(','F','F',')','\0'};
|
|
|
|
static const WCHAR symbolW[] = {'S','Y','M','B','O','L','(','0','2',')','\0'};
|
|
|
|
static const WCHAR yesW[] = {'Y','E','S','\0'};
|
|
|
|
HKEY hkey;
|
|
|
|
WCHAR dataW[32];
|
|
|
|
DWORD type, data_len;
|
|
|
|
|
|
|
|
associated_charset = 0;
|
|
|
|
|
|
|
|
if (RegOpenKeyW(HKEY_LOCAL_MACHINE,
|
|
|
|
assoc_charset_reg_keyW, &hkey) != ERROR_SUCCESS)
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
data_len = sizeof(dataW);
|
|
|
|
if (!RegQueryValueExW(hkey, ansiW, NULL, &type, (LPBYTE)dataW, &data_len) &&
|
|
|
|
type == REG_SZ && !strcmpiW(dataW, yesW))
|
|
|
|
associated_charset |= ASSOC_CHARSET_ANSI;
|
|
|
|
|
|
|
|
data_len = sizeof(dataW);
|
|
|
|
if (!RegQueryValueExW(hkey, oemW, NULL, &type, (LPBYTE)dataW, &data_len) &&
|
|
|
|
type == REG_SZ && !strcmpiW(dataW, yesW))
|
|
|
|
associated_charset |= ASSOC_CHARSET_OEM;
|
|
|
|
|
|
|
|
data_len = sizeof(dataW);
|
|
|
|
if (!RegQueryValueExW(hkey, symbolW, NULL, &type, (LPBYTE)dataW, &data_len) &&
|
|
|
|
type == REG_SZ && !strcmpiW(dataW, yesW))
|
|
|
|
associated_charset |= ASSOC_CHARSET_SYMBOL;
|
|
|
|
|
|
|
|
RegCloseKey(hkey);
|
|
|
|
|
|
|
|
TRACE("associated_charset = %d\n", associated_charset);
|
|
|
|
}
|
|
|
|
|
|
|
|
return associated_charset;
|
|
|
|
}
|
|
|
|
|
2014-06-10 10:48:38 +02:00
|
|
|
static void update_font_code_page( DC *dc, HANDLE font )
|
2009-04-06 10:16:40 +02:00
|
|
|
{
|
|
|
|
CHARSETINFO csi;
|
2016-07-29 14:13:06 +02:00
|
|
|
int charset = get_text_charset_info( dc, NULL, 0 );
|
2009-04-06 10:16:40 +02:00
|
|
|
|
2016-07-29 14:13:07 +02:00
|
|
|
if (charset == ANSI_CHARSET && get_associated_charset_info() & ASSOC_CHARSET_ANSI)
|
|
|
|
{
|
|
|
|
LOGFONTW lf;
|
2014-06-10 10:48:38 +02:00
|
|
|
|
2016-07-29 14:13:07 +02:00
|
|
|
GetObjectW( font, sizeof(lf), &lf );
|
|
|
|
if (!(lf.lfClipPrecision & CLIP_DFA_DISABLE))
|
|
|
|
charset = DEFAULT_CHARSET;
|
|
|
|
}
|
2013-02-26 02:31:20 +01:00
|
|
|
|
2009-04-06 10:16:40 +02:00
|
|
|
/* Hmm, nicely designed api this one! */
|
|
|
|
if (TranslateCharsetInfo( ULongToPtr(charset), &csi, TCI_SRCCHARSET) )
|
|
|
|
dc->font_code_page = csi.ciACP;
|
|
|
|
else {
|
|
|
|
switch(charset) {
|
|
|
|
case OEM_CHARSET:
|
|
|
|
dc->font_code_page = GetOEMCP();
|
|
|
|
break;
|
|
|
|
case DEFAULT_CHARSET:
|
|
|
|
dc->font_code_page = GetACP();
|
|
|
|
break;
|
|
|
|
|
|
|
|
case VISCII_CHARSET:
|
|
|
|
case TCVN_CHARSET:
|
|
|
|
case KOI8_CHARSET:
|
|
|
|
case ISO3_CHARSET:
|
|
|
|
case ISO4_CHARSET:
|
|
|
|
case ISO10_CHARSET:
|
|
|
|
case CELTIC_CHARSET:
|
|
|
|
/* FIXME: These have no place here, but because x11drv
|
|
|
|
enumerates fonts with these (made up) charsets some apps
|
|
|
|
might use them and then the FIXME below would become
|
|
|
|
annoying. Now we could pick the intended codepage for
|
|
|
|
each of these, but since it's broken anyway we'll just
|
|
|
|
use CP_ACP and hope it'll go away...
|
|
|
|
*/
|
|
|
|
dc->font_code_page = CP_ACP;
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
FIXME("Can't find codepage for charset %d\n", charset);
|
|
|
|
dc->font_code_page = CP_ACP;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
TRACE("charset %d => cp %d\n", charset, dc->font_code_page);
|
|
|
|
}
|
1996-07-17 22:02:21 +02:00
|
|
|
|
2002-05-31 20:43:22 +02:00
|
|
|
/***********************************************************************
|
|
|
|
* FONT_SelectObject
|
|
|
|
*/
|
2007-09-27 20:14:13 +02:00
|
|
|
static HGDIOBJ FONT_SelectObject( HGDIOBJ handle, HDC hdc )
|
2002-05-31 20:43:22 +02:00
|
|
|
{
|
|
|
|
HGDIOBJ ret = 0;
|
2007-09-27 21:01:00 +02:00
|
|
|
DC *dc = get_dc_ptr( hdc );
|
2011-03-09 21:19:09 +01:00
|
|
|
PHYSDEV physdev;
|
2012-10-30 19:37:31 +01:00
|
|
|
UINT aa_flags = 0;
|
2002-05-31 20:43:22 +02:00
|
|
|
|
|
|
|
if (!dc) return 0;
|
|
|
|
|
2007-09-27 21:01:00 +02:00
|
|
|
if (!GDI_inc_ref_count( handle ))
|
|
|
|
{
|
|
|
|
release_dc_ptr( dc );
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2011-03-09 21:19:09 +01:00
|
|
|
physdev = GET_DC_PHYSDEV( dc, pSelectFont );
|
2012-10-30 19:37:31 +01:00
|
|
|
if (physdev->funcs->pSelectFont( physdev, handle, &aa_flags ))
|
2002-05-31 20:43:22 +02:00
|
|
|
{
|
|
|
|
ret = dc->hFont;
|
|
|
|
dc->hFont = handle;
|
2012-10-31 15:55:29 +01:00
|
|
|
dc->aa_flags = aa_flags ? aa_flags : GGO_BITMAP;
|
2014-06-10 10:48:38 +02:00
|
|
|
update_font_code_page( dc, handle );
|
2007-09-27 20:57:02 +02:00
|
|
|
GDI_dec_ref_count( ret );
|
2002-05-31 20:43:22 +02:00
|
|
|
}
|
2011-10-18 13:10:58 +02:00
|
|
|
else GDI_dec_ref_count( handle );
|
|
|
|
|
2007-09-27 21:01:00 +02:00
|
|
|
release_dc_ptr( dc );
|
2002-05-31 20:43:22 +02:00
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
1996-08-24 20:26:35 +02:00
|
|
|
/***********************************************************************
|
1999-07-23 21:25:11 +02:00
|
|
|
* FONT_GetObjectA
|
1996-08-24 20:26:35 +02:00
|
|
|
*/
|
2009-01-27 16:30:43 +01:00
|
|
|
static INT FONT_GetObjectA( HGDIOBJ handle, INT count, LPVOID buffer )
|
1996-08-24 20:26:35 +02:00
|
|
|
{
|
2009-01-28 16:20:56 +01:00
|
|
|
FONTOBJ *font = GDI_GetObjPtr( handle, OBJ_FONT );
|
2001-02-14 23:56:38 +01:00
|
|
|
LOGFONTA lfA;
|
1996-08-24 20:26:35 +02:00
|
|
|
|
2009-01-27 16:30:43 +01:00
|
|
|
if (!font) return 0;
|
|
|
|
if (buffer)
|
|
|
|
{
|
|
|
|
FONT_LogFontWToA( &font->logfont, &lfA );
|
|
|
|
if (count > sizeof(lfA)) count = sizeof(lfA);
|
|
|
|
memcpy( buffer, &lfA, count );
|
|
|
|
}
|
|
|
|
else count = sizeof(lfA);
|
|
|
|
GDI_ReleaseObj( handle );
|
1996-08-24 20:26:35 +02:00
|
|
|
return count;
|
|
|
|
}
|
2002-05-31 20:43:22 +02:00
|
|
|
|
1998-10-23 15:27:36 +02:00
|
|
|
/***********************************************************************
|
1999-07-23 21:25:11 +02:00
|
|
|
* FONT_GetObjectW
|
1998-10-23 15:27:36 +02:00
|
|
|
*/
|
2009-01-27 16:30:43 +01:00
|
|
|
static INT FONT_GetObjectW( HGDIOBJ handle, INT count, LPVOID buffer )
|
1998-10-23 15:27:36 +02:00
|
|
|
{
|
2009-01-28 16:20:56 +01:00
|
|
|
FONTOBJ *font = GDI_GetObjPtr( handle, OBJ_FONT );
|
2009-01-27 16:30:43 +01:00
|
|
|
|
|
|
|
if (!font) return 0;
|
|
|
|
if (buffer)
|
|
|
|
{
|
|
|
|
if (count > sizeof(LOGFONTW)) count = sizeof(LOGFONTW);
|
|
|
|
memcpy( buffer, &font->logfont, count );
|
|
|
|
}
|
|
|
|
else count = sizeof(LOGFONTW);
|
|
|
|
GDI_ReleaseObj( handle );
|
1998-10-23 15:27:36 +02:00
|
|
|
return count;
|
|
|
|
}
|
1996-08-24 20:26:35 +02:00
|
|
|
|
|
|
|
|
2002-05-31 20:43:22 +02:00
|
|
|
/***********************************************************************
|
|
|
|
* FONT_DeleteObject
|
|
|
|
*/
|
2009-01-27 16:19:37 +01:00
|
|
|
static BOOL FONT_DeleteObject( HGDIOBJ handle )
|
2002-05-31 20:43:22 +02:00
|
|
|
{
|
2009-01-28 18:45:21 +01:00
|
|
|
FONTOBJ *obj;
|
|
|
|
|
|
|
|
if (!(obj = free_gdi_handle( handle ))) return FALSE;
|
|
|
|
return HeapFree( GetProcessHeap(), 0, obj );
|
2002-05-31 20:43:22 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2012-11-05 12:32:15 +01:00
|
|
|
/***********************************************************************
|
|
|
|
* nulldrv_SelectFont
|
|
|
|
*/
|
|
|
|
HFONT nulldrv_SelectFont( PHYSDEV dev, HFONT font, UINT *aa_flags )
|
|
|
|
{
|
2012-11-06 15:35:18 +01:00
|
|
|
static const WCHAR desktopW[] = { 'C','o','n','t','r','o','l',' ','P','a','n','e','l','\\',
|
|
|
|
'D','e','s','k','t','o','p',0 };
|
2013-06-24 12:41:40 +02:00
|
|
|
static int orientation = -1, smoothing = -1;
|
2012-11-05 12:32:15 +01:00
|
|
|
LOGFONTW lf;
|
2012-11-06 15:35:18 +01:00
|
|
|
HKEY key;
|
2012-11-05 12:32:15 +01:00
|
|
|
|
|
|
|
if (*aa_flags) return 0;
|
|
|
|
|
|
|
|
GetObjectW( font, sizeof(lf), &lf );
|
|
|
|
switch (lf.lfQuality)
|
|
|
|
{
|
|
|
|
case NONANTIALIASED_QUALITY:
|
|
|
|
*aa_flags = GGO_BITMAP;
|
|
|
|
break;
|
|
|
|
case ANTIALIASED_QUALITY:
|
|
|
|
*aa_flags = GGO_GRAY4_BITMAP;
|
|
|
|
break;
|
|
|
|
case CLEARTYPE_QUALITY:
|
|
|
|
case CLEARTYPE_NATURAL_QUALITY:
|
2013-06-24 12:41:40 +02:00
|
|
|
if (orientation == -1)
|
|
|
|
{
|
|
|
|
if (RegOpenKeyW( HKEY_CURRENT_USER, desktopW, &key )) break;
|
|
|
|
orientation = get_subpixel_orientation( key );
|
|
|
|
RegCloseKey( key );
|
|
|
|
}
|
|
|
|
*aa_flags = orientation;
|
2012-11-05 12:32:15 +01:00
|
|
|
break;
|
|
|
|
default:
|
2013-06-24 12:41:40 +02:00
|
|
|
if (smoothing == -1)
|
|
|
|
{
|
|
|
|
if (RegOpenKeyW( HKEY_CURRENT_USER, desktopW, &key )) break;
|
|
|
|
smoothing = get_default_smoothing( key );
|
|
|
|
RegCloseKey( key );
|
|
|
|
}
|
|
|
|
*aa_flags = smoothing;
|
2012-11-05 12:32:15 +01:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
1997-06-16 19:43:53 +02:00
|
|
|
/***********************************************************************
|
1999-07-23 21:25:11 +02:00
|
|
|
* FONT_EnumInstance
|
2004-01-19 00:35:12 +01:00
|
|
|
*
|
|
|
|
* Note: plf is really an ENUMLOGFONTEXW, and ptm is a NEWTEXTMETRICEXW.
|
|
|
|
* We have to use other types because of the FONTENUMPROCW definition.
|
1997-06-16 19:43:53 +02:00
|
|
|
*/
|
2004-01-19 00:35:12 +01:00
|
|
|
static INT CALLBACK FONT_EnumInstance( const LOGFONTW *plf, const TEXTMETRICW *ptm,
|
|
|
|
DWORD fType, LPARAM lp )
|
1997-06-16 19:43:53 +02:00
|
|
|
{
|
2011-10-19 15:34:21 +02:00
|
|
|
struct font_enum *pfe = (struct font_enum *)lp;
|
2002-04-14 21:42:43 +02:00
|
|
|
INT ret = 1;
|
1997-06-16 19:43:53 +02:00
|
|
|
|
2002-04-14 21:42:43 +02:00
|
|
|
/* lfCharSet is at the same offset in both LOGFONTA and LOGFONTW */
|
2008-01-15 09:02:29 +01:00
|
|
|
if ((!pfe->lpLogFontParam ||
|
|
|
|
pfe->lpLogFontParam->lfCharSet == DEFAULT_CHARSET ||
|
2004-06-16 22:06:26 +02:00
|
|
|
pfe->lpLogFontParam->lfCharSet == plf->lfCharSet) &&
|
|
|
|
(!(fType & RASTER_FONTTYPE) || GetDeviceCaps(pfe->hdc, TEXTCAPS) & TC_RA_ABLE) )
|
1997-06-16 19:43:53 +02:00
|
|
|
{
|
|
|
|
/* convert font metrics */
|
2002-04-14 21:42:43 +02:00
|
|
|
ENUMLOGFONTEXA logfont;
|
|
|
|
NEWTEXTMETRICEXA tmA;
|
1997-06-16 19:43:53 +02:00
|
|
|
|
2011-10-19 15:34:21 +02:00
|
|
|
if (!pfe->unicode)
|
2002-04-14 21:42:43 +02:00
|
|
|
{
|
2004-01-19 00:35:12 +01:00
|
|
|
FONT_EnumLogFontExWToA( (const ENUMLOGFONTEXW *)plf, &logfont);
|
|
|
|
FONT_NewTextMetricExWToA( (const NEWTEXTMETRICEXW *)ptm, &tmA );
|
|
|
|
plf = (LOGFONTW *)&logfont.elfLogFont;
|
|
|
|
ptm = (TEXTMETRICW *)&tmA;
|
2002-04-14 21:42:43 +02:00
|
|
|
}
|
2004-01-19 00:35:12 +01:00
|
|
|
ret = pfe->lpEnumFunc( plf, ptm, fType, pfe->lpData );
|
2012-03-14 15:15:13 +01:00
|
|
|
pfe->retval = ret;
|
1997-06-16 19:43:53 +02:00
|
|
|
}
|
2002-04-14 21:42:43 +02:00
|
|
|
return ret;
|
1997-06-16 19:43:53 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
1999-07-23 21:25:11 +02:00
|
|
|
* FONT_EnumFontFamiliesEx
|
1997-06-16 19:43:53 +02:00
|
|
|
*/
|
2011-10-19 15:34:21 +02:00
|
|
|
static INT FONT_EnumFontFamiliesEx( HDC hDC, LPLOGFONTW plf, FONTENUMPROCW efproc,
|
|
|
|
LPARAM lParam, BOOL unicode )
|
1997-06-16 19:43:53 +02:00
|
|
|
{
|
2011-10-19 15:34:21 +02:00
|
|
|
INT ret = 0;
|
2008-02-05 21:16:27 +01:00
|
|
|
DC *dc = get_dc_ptr( hDC );
|
2011-10-19 15:34:21 +02:00
|
|
|
struct font_enum fe;
|
2000-08-19 23:38:55 +02:00
|
|
|
|
2011-10-19 15:34:21 +02:00
|
|
|
if (dc)
|
2011-03-15 20:42:49 +01:00
|
|
|
{
|
2011-10-19 15:37:10 +02:00
|
|
|
PHYSDEV physdev = GET_DC_PHYSDEV( dc, pEnumFonts );
|
2011-10-19 15:34:21 +02:00
|
|
|
|
|
|
|
if (plf) TRACE("lfFaceName = %s lfCharset = %d\n", debugstr_w(plf->lfFaceName), plf->lfCharSet);
|
|
|
|
fe.lpLogFontParam = plf;
|
|
|
|
fe.lpEnumFunc = efproc;
|
|
|
|
fe.lpData = lParam;
|
|
|
|
fe.unicode = unicode;
|
|
|
|
fe.hdc = hDC;
|
2012-03-14 15:15:13 +01:00
|
|
|
fe.retval = 1;
|
|
|
|
ret = physdev->funcs->pEnumFonts( physdev, plf, FONT_EnumInstance, (LPARAM)&fe );
|
2011-10-28 11:29:34 +02:00
|
|
|
release_dc_ptr( dc );
|
2002-04-03 23:17:05 +02:00
|
|
|
}
|
2012-03-14 15:15:13 +01:00
|
|
|
return ret ? fe.retval : 0;
|
1997-06-16 19:43:53 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* EnumFontFamiliesExW (GDI32.@)
|
1997-06-16 19:43:53 +02:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
INT WINAPI EnumFontFamiliesExW( HDC hDC, LPLOGFONTW plf,
|
2002-11-13 05:13:42 +01:00
|
|
|
FONTENUMPROCW efproc,
|
1997-08-24 18:00:30 +02:00
|
|
|
LPARAM lParam, DWORD dwFlags )
|
1997-06-16 19:43:53 +02:00
|
|
|
{
|
2011-10-19 15:34:21 +02:00
|
|
|
return FONT_EnumFontFamiliesEx( hDC, plf, efproc, lParam, TRUE );
|
1997-06-16 19:43:53 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* EnumFontFamiliesExA (GDI32.@)
|
1997-06-16 19:43:53 +02:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
INT WINAPI EnumFontFamiliesExA( HDC hDC, LPLOGFONTA plf,
|
2002-11-13 05:13:42 +01:00
|
|
|
FONTENUMPROCA efproc,
|
1997-08-24 18:00:30 +02:00
|
|
|
LPARAM lParam, DWORD dwFlags)
|
1997-06-16 19:43:53 +02:00
|
|
|
{
|
2008-01-15 09:02:29 +01:00
|
|
|
LOGFONTW lfW, *plfW;
|
|
|
|
|
|
|
|
if (plf)
|
|
|
|
{
|
|
|
|
FONT_LogFontAToW( plf, &lfW );
|
|
|
|
plfW = &lfW;
|
|
|
|
}
|
|
|
|
else plfW = NULL;
|
2001-02-14 23:56:38 +01:00
|
|
|
|
2011-10-19 15:34:21 +02:00
|
|
|
return FONT_EnumFontFamiliesEx( hDC, plfW, (FONTENUMPROCW)efproc, lParam, FALSE );
|
1997-06-16 19:43:53 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* EnumFontFamiliesA (GDI32.@)
|
1997-06-16 19:43:53 +02:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
INT WINAPI EnumFontFamiliesA( HDC hDC, LPCSTR lpFamily,
|
|
|
|
FONTENUMPROCA efproc, LPARAM lpData )
|
1997-06-16 19:43:53 +02:00
|
|
|
{
|
2008-01-15 09:02:29 +01:00
|
|
|
LOGFONTA lf, *plf;
|
1997-06-16 19:43:53 +02:00
|
|
|
|
2007-03-06 12:14:25 +01:00
|
|
|
if (lpFamily)
|
|
|
|
{
|
|
|
|
if (!*lpFamily) return 1;
|
|
|
|
lstrcpynA( lf.lfFaceName, lpFamily, LF_FACESIZE );
|
2008-01-15 09:02:29 +01:00
|
|
|
lf.lfCharSet = DEFAULT_CHARSET;
|
|
|
|
lf.lfPitchAndFamily = 0;
|
|
|
|
plf = &lf;
|
2007-03-06 12:14:25 +01:00
|
|
|
}
|
2008-01-15 09:02:29 +01:00
|
|
|
else plf = NULL;
|
1997-06-16 19:43:53 +02:00
|
|
|
|
2008-01-15 09:02:29 +01:00
|
|
|
return EnumFontFamiliesExA( hDC, plf, efproc, lpData, 0 );
|
1997-06-16 19:43:53 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* EnumFontFamiliesW (GDI32.@)
|
1997-06-16 19:43:53 +02:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
INT WINAPI EnumFontFamiliesW( HDC hDC, LPCWSTR lpFamily,
|
|
|
|
FONTENUMPROCW efproc, LPARAM lpData )
|
1997-06-16 19:43:53 +02:00
|
|
|
{
|
2008-01-15 09:02:29 +01:00
|
|
|
LOGFONTW lf, *plf;
|
1997-06-16 19:43:53 +02:00
|
|
|
|
2007-03-06 12:14:25 +01:00
|
|
|
if (lpFamily)
|
|
|
|
{
|
|
|
|
if (!*lpFamily) return 1;
|
|
|
|
lstrcpynW( lf.lfFaceName, lpFamily, LF_FACESIZE );
|
2008-01-15 09:02:29 +01:00
|
|
|
lf.lfCharSet = DEFAULT_CHARSET;
|
|
|
|
lf.lfPitchAndFamily = 0;
|
|
|
|
plf = &lf;
|
2007-03-06 12:14:25 +01:00
|
|
|
}
|
2008-01-15 09:02:29 +01:00
|
|
|
else plf = NULL;
|
1997-06-16 19:43:53 +02:00
|
|
|
|
2008-01-15 09:02:29 +01:00
|
|
|
return EnumFontFamiliesExW( hDC, plf, efproc, lpData, 0 );
|
1997-06-16 19:43:53 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* EnumFontsA (GDI32.@)
|
1997-06-16 19:43:53 +02:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
INT WINAPI EnumFontsA( HDC hDC, LPCSTR lpName, FONTENUMPROCA efproc,
|
1997-08-24 18:00:30 +02:00
|
|
|
LPARAM lpData )
|
1997-06-16 19:43:53 +02:00
|
|
|
{
|
1999-02-26 12:11:13 +01:00
|
|
|
return EnumFontFamiliesA( hDC, lpName, efproc, lpData );
|
1997-06-16 19:43:53 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* EnumFontsW (GDI32.@)
|
1997-06-16 19:43:53 +02:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
INT WINAPI EnumFontsW( HDC hDC, LPCWSTR lpName, FONTENUMPROCW efproc,
|
1997-08-24 18:00:30 +02:00
|
|
|
LPARAM lpData )
|
1997-06-16 19:43:53 +02:00
|
|
|
{
|
1999-02-26 12:11:13 +01:00
|
|
|
return EnumFontFamiliesW( hDC, lpName, efproc, lpData );
|
1997-06-16 19:43:53 +02:00
|
|
|
}
|
1993-09-04 12:09:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* GetTextCharacterExtra (GDI32.@)
|
1993-09-04 12:09:32 +02:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
INT WINAPI GetTextCharacterExtra( HDC hdc )
|
1993-09-04 12:09:32 +02:00
|
|
|
{
|
2000-08-19 23:38:55 +02:00
|
|
|
INT ret;
|
2008-02-05 17:35:40 +01:00
|
|
|
DC *dc = get_dc_ptr( hdc );
|
2002-11-15 02:02:16 +01:00
|
|
|
if (!dc) return 0x80000000;
|
|
|
|
ret = dc->charExtra;
|
2008-02-05 17:35:40 +01:00
|
|
|
release_dc_ptr( dc );
|
2000-08-19 23:38:55 +02:00
|
|
|
return ret;
|
1996-12-22 19:27:48 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* SetTextCharacterExtra (GDI32.@)
|
1996-12-22 19:27:48 +01:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
INT WINAPI SetTextCharacterExtra( HDC hdc, INT extra )
|
1996-12-22 19:27:48 +01:00
|
|
|
{
|
2011-03-10 21:58:47 +01:00
|
|
|
INT ret = 0x80000000;
|
2008-02-05 17:35:40 +01:00
|
|
|
DC * dc = get_dc_ptr( hdc );
|
2011-03-10 21:58:47 +01:00
|
|
|
|
|
|
|
if (dc)
|
2000-08-19 23:38:55 +02:00
|
|
|
{
|
2011-03-10 21:58:47 +01:00
|
|
|
PHYSDEV physdev = GET_DC_PHYSDEV( dc, pSetTextCharacterExtra );
|
|
|
|
extra = physdev->funcs->pSetTextCharacterExtra( physdev, extra );
|
|
|
|
if (extra != 0x80000000)
|
|
|
|
{
|
|
|
|
ret = dc->charExtra;
|
|
|
|
dc->charExtra = extra;
|
|
|
|
}
|
|
|
|
release_dc_ptr( dc );
|
2000-08-19 23:38:55 +02:00
|
|
|
}
|
2011-03-10 21:58:47 +01:00
|
|
|
return ret;
|
1993-09-04 12:09:32 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
1996-12-22 19:27:48 +01:00
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* SetTextJustification (GDI32.@)
|
1996-12-22 19:27:48 +01:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
BOOL WINAPI SetTextJustification( HDC hdc, INT extra, INT breaks )
|
1993-09-04 12:09:32 +02:00
|
|
|
{
|
2011-03-10 21:58:47 +01:00
|
|
|
BOOL ret;
|
|
|
|
PHYSDEV physdev;
|
2008-02-05 17:35:40 +01:00
|
|
|
DC * dc = get_dc_ptr( hdc );
|
2011-03-10 21:58:47 +01:00
|
|
|
|
2000-08-19 23:38:55 +02:00
|
|
|
if (!dc) return FALSE;
|
2011-03-10 21:58:47 +01:00
|
|
|
|
|
|
|
physdev = GET_DC_PHYSDEV( dc, pSetTextJustification );
|
|
|
|
ret = physdev->funcs->pSetTextJustification( physdev, extra, breaks );
|
|
|
|
if (ret)
|
1993-09-04 12:09:32 +02:00
|
|
|
{
|
2016-07-27 10:59:25 +02:00
|
|
|
extra = abs((extra * dc->vport_ext.cx + dc->wnd_ext.cx / 2) / dc->wnd_ext.cx);
|
2000-08-19 23:38:55 +02:00
|
|
|
if (!extra) breaks = 0;
|
|
|
|
if (breaks)
|
|
|
|
{
|
2000-11-05 03:05:07 +01:00
|
|
|
dc->breakExtra = extra / breaks;
|
2004-03-03 22:32:15 +01:00
|
|
|
dc->breakRem = extra - (breaks * dc->breakExtra);
|
2000-08-19 23:38:55 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2000-11-05 03:05:07 +01:00
|
|
|
dc->breakExtra = 0;
|
|
|
|
dc->breakRem = 0;
|
2000-08-19 23:38:55 +02:00
|
|
|
}
|
1993-09-04 12:09:32 +02:00
|
|
|
}
|
2008-02-05 17:35:40 +01:00
|
|
|
release_dc_ptr( dc );
|
2000-08-19 23:38:55 +02:00
|
|
|
return ret;
|
1993-09-04 12:09:32 +02:00
|
|
|
}
|
|
|
|
|
1996-12-22 19:27:48 +01:00
|
|
|
|
1994-10-17 19:12:41 +01:00
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* GetTextFaceA (GDI32.@)
|
1994-10-17 19:12:41 +01:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
INT WINAPI GetTextFaceA( HDC hdc, INT count, LPSTR name )
|
2001-02-14 23:56:38 +01:00
|
|
|
{
|
|
|
|
INT res = GetTextFaceW(hdc, 0, NULL);
|
|
|
|
LPWSTR nameW = HeapAlloc( GetProcessHeap(), 0, res * 2 );
|
|
|
|
GetTextFaceW( hdc, res, nameW );
|
2002-06-01 01:06:46 +02:00
|
|
|
|
2001-02-14 23:56:38 +01:00
|
|
|
if (name)
|
2003-05-20 01:24:30 +02:00
|
|
|
{
|
2008-06-23 21:04:48 +02:00
|
|
|
if (count)
|
|
|
|
{
|
|
|
|
res = WideCharToMultiByte(CP_ACP, 0, nameW, -1, name, count, NULL, NULL);
|
|
|
|
if (res == 0)
|
|
|
|
res = count;
|
2003-05-20 01:24:30 +02:00
|
|
|
name[count-1] = 0;
|
2008-06-23 21:04:48 +02:00
|
|
|
/* GetTextFaceA does NOT include the nul byte in the return count. */
|
|
|
|
res--;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
res = 0;
|
2003-05-20 01:24:30 +02:00
|
|
|
}
|
2001-02-14 23:56:38 +01:00
|
|
|
else
|
|
|
|
res = WideCharToMultiByte( CP_ACP, 0, nameW, -1, NULL, 0, NULL, NULL);
|
|
|
|
HeapFree( GetProcessHeap(), 0, nameW );
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetTextFaceW (GDI32.@)
|
|
|
|
*/
|
|
|
|
INT WINAPI GetTextFaceW( HDC hdc, INT count, LPWSTR name )
|
1994-10-17 19:12:41 +01:00
|
|
|
{
|
2011-10-20 17:14:53 +02:00
|
|
|
PHYSDEV dev;
|
|
|
|
INT ret;
|
1994-10-17 19:12:41 +01:00
|
|
|
|
2008-02-05 21:16:27 +01:00
|
|
|
DC * dc = get_dc_ptr( hdc );
|
1994-10-17 19:12:41 +01:00
|
|
|
if (!dc) return 0;
|
2000-08-19 23:38:55 +02:00
|
|
|
|
2011-10-20 17:14:53 +02:00
|
|
|
dev = GET_DC_PHYSDEV( dc, pGetTextFace );
|
|
|
|
ret = dev->funcs->pGetTextFace( dev, count, name );
|
2008-02-05 21:16:27 +01:00
|
|
|
release_dc_ptr( dc );
|
2000-08-19 23:38:55 +02:00
|
|
|
return ret;
|
1994-10-17 19:12:41 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
Release 960516
Thu May 16 13:35:31 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [*/*.c]
Renamed RECT, POINT and SIZE structures to RECT16, POINT16 and
SIZE16. Implemented Win32 version of most functions that take
these types as parameters.
* [configure]
Patched autoconf to attempt to correctly detect -lnsl and
-lsocket. Please check this out.
* [controls/button.c]
Added support for Win32 BM_* messages.
* [controls/menu.c]
Avoid sending extra WM_MENUSELECT messages. This avoids crashes
with Excel.
* [memory.heap.c] [include/heap.h]
Added support for SEGPTRs in Win32 heaps. Added a few macros to
make using SEGPTRs easier. They are a bit slower than MAKE_SEGPTR,
but they work with Win32.
* [memory/atom.c]
Implemented Win32 atom functions.
* [memory/local.c]
Fixed LocalReAlloc() changes to avoid copying the whole block twice.
* [win32/memory.c]
Use /dev/zero instead of MAP_ANON for VirtualAlloc().
* [windows/class.c]
Properly implemented the Win32 class functions.
* [windows/winproc.c] (New file)
New file handling the message translation between Win16 and Win32.
Mon May 13 18:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/mdi.c] [windows/menu.c]
Improved WM_MDICREATE and WM_MDICASCADE handling.
* [windows/event.c] [objects/bitblt.c]
Handle GraphicsExpose event for BitBlt from screen to screen.
* [windows/event.c] [windows/win.c] [windows/nonclient.c]
Bunch of fixes for problems with -managed.
* [windows/win.c] [windows/winpos.c]
Changed conditions for WM_SIZE, WM_MOVE, and WM_GETMINMAXINFO
in CreateWindow.
* [windows/win.c] [windows/queue.c] [misc/user.c]
Do not send WM_PARENTNOTIFY when in AppExit and call WH_SHELL
on window creation/destruction.
* [objects/palette.c]
Crude RealizePalette(). At least something is visible in LviewPro.
Sun May 12 02:05:00 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/gdi32.spec]
Added Rectangle (use win16 version).
* [if1632/kernel32.spec]
Added GetWindowsDirectoryA (use win16 GetWindowsDirectory).
* [if1632/user32.spec]
Added GetSubMenu, MoveWindow, SetScrollPos, SetScrollRange (use win16
versions).
Added SetWindowsHookExA (empty stub for now).
* [include/handle32.h]
Changed #include <malloc.h> to #include <stdlib.h> to prevent
hate message from FreeBSD compiler.
* [win32/newfns.c]
Added new function SetWindowsHookEx32A (empty stub for now).
* [win32/user32.c]
Removed redundant debugging printf statement.
Sun May 12 01:24:57 1996 Huw D. M. Davies <h.davies1@physics.oxford.ac.uk>
* [memory/local.c]
Avoid creating adjacent free blocks.
Free the block in LocalReAlloc() before allocating a new one.
Fixed LocalReAlloc() for discarded blocks.
Fri May 10 23:05:12 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [resources/sysres_Fi.rc]
ChooseFont and ChooseColor dialogs updated.
Fri May 10 17:19:33 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/drive.c,if1632/kernel.spec]
GetCurrentDirectory(),SetCurrentDirectory() implemented.
* [if1632/advapi32.spec] [if1632/kernel.spec] [if1632/shell.spec]
[include/windows.h] [include/winreg.h] [loader/main.c]
[misc/main.c] [misc/shell.c] [misc/registry.c]
Registry fixes:
- loads win95 registry databases,
- save only updated keys on default,
- now adhers to the new function naming standard,
- minor cleanups.
Tue May 7 22:36:13 1996 Albrecht Kleine <kleine@ak.sax.de>
* [combo.c]
Added WM_COMMAND-handling for interaction between EDIT and COMBOLBOX
and synchronized mine with Greg Kreider's works.
* [commdlg.c]
Bugfix in ChooseFont: font size handling.
1996-05-16 20:21:06 +02:00
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* GetTextExtentPoint32A (GDI32.@)
|
2005-11-05 11:45:02 +01:00
|
|
|
*
|
|
|
|
* See GetTextExtentPoint32W.
|
Release 960516
Thu May 16 13:35:31 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [*/*.c]
Renamed RECT, POINT and SIZE structures to RECT16, POINT16 and
SIZE16. Implemented Win32 version of most functions that take
these types as parameters.
* [configure]
Patched autoconf to attempt to correctly detect -lnsl and
-lsocket. Please check this out.
* [controls/button.c]
Added support for Win32 BM_* messages.
* [controls/menu.c]
Avoid sending extra WM_MENUSELECT messages. This avoids crashes
with Excel.
* [memory.heap.c] [include/heap.h]
Added support for SEGPTRs in Win32 heaps. Added a few macros to
make using SEGPTRs easier. They are a bit slower than MAKE_SEGPTR,
but they work with Win32.
* [memory/atom.c]
Implemented Win32 atom functions.
* [memory/local.c]
Fixed LocalReAlloc() changes to avoid copying the whole block twice.
* [win32/memory.c]
Use /dev/zero instead of MAP_ANON for VirtualAlloc().
* [windows/class.c]
Properly implemented the Win32 class functions.
* [windows/winproc.c] (New file)
New file handling the message translation between Win16 and Win32.
Mon May 13 18:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/mdi.c] [windows/menu.c]
Improved WM_MDICREATE and WM_MDICASCADE handling.
* [windows/event.c] [objects/bitblt.c]
Handle GraphicsExpose event for BitBlt from screen to screen.
* [windows/event.c] [windows/win.c] [windows/nonclient.c]
Bunch of fixes for problems with -managed.
* [windows/win.c] [windows/winpos.c]
Changed conditions for WM_SIZE, WM_MOVE, and WM_GETMINMAXINFO
in CreateWindow.
* [windows/win.c] [windows/queue.c] [misc/user.c]
Do not send WM_PARENTNOTIFY when in AppExit and call WH_SHELL
on window creation/destruction.
* [objects/palette.c]
Crude RealizePalette(). At least something is visible in LviewPro.
Sun May 12 02:05:00 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/gdi32.spec]
Added Rectangle (use win16 version).
* [if1632/kernel32.spec]
Added GetWindowsDirectoryA (use win16 GetWindowsDirectory).
* [if1632/user32.spec]
Added GetSubMenu, MoveWindow, SetScrollPos, SetScrollRange (use win16
versions).
Added SetWindowsHookExA (empty stub for now).
* [include/handle32.h]
Changed #include <malloc.h> to #include <stdlib.h> to prevent
hate message from FreeBSD compiler.
* [win32/newfns.c]
Added new function SetWindowsHookEx32A (empty stub for now).
* [win32/user32.c]
Removed redundant debugging printf statement.
Sun May 12 01:24:57 1996 Huw D. M. Davies <h.davies1@physics.oxford.ac.uk>
* [memory/local.c]
Avoid creating adjacent free blocks.
Free the block in LocalReAlloc() before allocating a new one.
Fixed LocalReAlloc() for discarded blocks.
Fri May 10 23:05:12 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [resources/sysres_Fi.rc]
ChooseFont and ChooseColor dialogs updated.
Fri May 10 17:19:33 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/drive.c,if1632/kernel.spec]
GetCurrentDirectory(),SetCurrentDirectory() implemented.
* [if1632/advapi32.spec] [if1632/kernel.spec] [if1632/shell.spec]
[include/windows.h] [include/winreg.h] [loader/main.c]
[misc/main.c] [misc/shell.c] [misc/registry.c]
Registry fixes:
- loads win95 registry databases,
- save only updated keys on default,
- now adhers to the new function naming standard,
- minor cleanups.
Tue May 7 22:36:13 1996 Albrecht Kleine <kleine@ak.sax.de>
* [combo.c]
Added WM_COMMAND-handling for interaction between EDIT and COMBOLBOX
and synchronized mine with Greg Kreider's works.
* [commdlg.c]
Bugfix in ChooseFont: font size handling.
1996-05-16 20:21:06 +02:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
BOOL WINAPI GetTextExtentPoint32A( HDC hdc, LPCSTR str, INT count,
|
|
|
|
LPSIZE size )
|
1993-09-04 12:09:32 +02:00
|
|
|
{
|
2000-08-20 22:08:35 +02:00
|
|
|
BOOL ret = FALSE;
|
2001-09-19 22:32:07 +02:00
|
|
|
INT wlen;
|
2011-10-11 16:46:19 +02:00
|
|
|
LPWSTR p;
|
2000-03-26 16:43:22 +02:00
|
|
|
|
2011-10-11 16:46:19 +02:00
|
|
|
if (count < 0) return FALSE;
|
|
|
|
|
|
|
|
p = FONT_mbtowc(hdc, str, count, &wlen, NULL);
|
|
|
|
|
|
|
|
if (p)
|
|
|
|
{
|
2001-09-12 22:21:06 +02:00
|
|
|
ret = GetTextExtentPoint32W( hdc, p, wlen, size );
|
|
|
|
HeapFree( GetProcessHeap(), 0, p );
|
2000-08-20 22:08:35 +02:00
|
|
|
}
|
2001-09-12 22:21:06 +02:00
|
|
|
|
2006-10-12 22:56:56 +02:00
|
|
|
TRACE("(%p %s %d %p): returning %d x %d\n",
|
2000-08-20 22:08:35 +02:00
|
|
|
hdc, debugstr_an (str, count), count, size, size->cx, size->cy );
|
1999-12-26 01:47:03 +01:00
|
|
|
return ret;
|
1993-09-04 12:09:32 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
Release 960516
Thu May 16 13:35:31 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [*/*.c]
Renamed RECT, POINT and SIZE structures to RECT16, POINT16 and
SIZE16. Implemented Win32 version of most functions that take
these types as parameters.
* [configure]
Patched autoconf to attempt to correctly detect -lnsl and
-lsocket. Please check this out.
* [controls/button.c]
Added support for Win32 BM_* messages.
* [controls/menu.c]
Avoid sending extra WM_MENUSELECT messages. This avoids crashes
with Excel.
* [memory.heap.c] [include/heap.h]
Added support for SEGPTRs in Win32 heaps. Added a few macros to
make using SEGPTRs easier. They are a bit slower than MAKE_SEGPTR,
but they work with Win32.
* [memory/atom.c]
Implemented Win32 atom functions.
* [memory/local.c]
Fixed LocalReAlloc() changes to avoid copying the whole block twice.
* [win32/memory.c]
Use /dev/zero instead of MAP_ANON for VirtualAlloc().
* [windows/class.c]
Properly implemented the Win32 class functions.
* [windows/winproc.c] (New file)
New file handling the message translation between Win16 and Win32.
Mon May 13 18:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/mdi.c] [windows/menu.c]
Improved WM_MDICREATE and WM_MDICASCADE handling.
* [windows/event.c] [objects/bitblt.c]
Handle GraphicsExpose event for BitBlt from screen to screen.
* [windows/event.c] [windows/win.c] [windows/nonclient.c]
Bunch of fixes for problems with -managed.
* [windows/win.c] [windows/winpos.c]
Changed conditions for WM_SIZE, WM_MOVE, and WM_GETMINMAXINFO
in CreateWindow.
* [windows/win.c] [windows/queue.c] [misc/user.c]
Do not send WM_PARENTNOTIFY when in AppExit and call WH_SHELL
on window creation/destruction.
* [objects/palette.c]
Crude RealizePalette(). At least something is visible in LviewPro.
Sun May 12 02:05:00 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/gdi32.spec]
Added Rectangle (use win16 version).
* [if1632/kernel32.spec]
Added GetWindowsDirectoryA (use win16 GetWindowsDirectory).
* [if1632/user32.spec]
Added GetSubMenu, MoveWindow, SetScrollPos, SetScrollRange (use win16
versions).
Added SetWindowsHookExA (empty stub for now).
* [include/handle32.h]
Changed #include <malloc.h> to #include <stdlib.h> to prevent
hate message from FreeBSD compiler.
* [win32/newfns.c]
Added new function SetWindowsHookEx32A (empty stub for now).
* [win32/user32.c]
Removed redundant debugging printf statement.
Sun May 12 01:24:57 1996 Huw D. M. Davies <h.davies1@physics.oxford.ac.uk>
* [memory/local.c]
Avoid creating adjacent free blocks.
Free the block in LocalReAlloc() before allocating a new one.
Fixed LocalReAlloc() for discarded blocks.
Fri May 10 23:05:12 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [resources/sysres_Fi.rc]
ChooseFont and ChooseColor dialogs updated.
Fri May 10 17:19:33 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/drive.c,if1632/kernel.spec]
GetCurrentDirectory(),SetCurrentDirectory() implemented.
* [if1632/advapi32.spec] [if1632/kernel.spec] [if1632/shell.spec]
[include/windows.h] [include/winreg.h] [loader/main.c]
[misc/main.c] [misc/shell.c] [misc/registry.c]
Registry fixes:
- loads win95 registry databases,
- save only updated keys on default,
- now adhers to the new function naming standard,
- minor cleanups.
Tue May 7 22:36:13 1996 Albrecht Kleine <kleine@ak.sax.de>
* [combo.c]
Added WM_COMMAND-handling for interaction between EDIT and COMBOLBOX
and synchronized mine with Greg Kreider's works.
* [commdlg.c]
Bugfix in ChooseFont: font size handling.
1996-05-16 20:21:06 +02:00
|
|
|
/***********************************************************************
|
2004-02-09 21:47:42 +01:00
|
|
|
* GetTextExtentPoint32W [GDI32.@]
|
|
|
|
*
|
|
|
|
* Computes width/height for a string.
|
1998-04-13 14:21:30 +02:00
|
|
|
*
|
|
|
|
* Computes width and height of the specified string.
|
|
|
|
*
|
|
|
|
* RETURNS
|
|
|
|
* Success: TRUE
|
|
|
|
* Failure: FALSE
|
Release 960516
Thu May 16 13:35:31 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [*/*.c]
Renamed RECT, POINT and SIZE structures to RECT16, POINT16 and
SIZE16. Implemented Win32 version of most functions that take
these types as parameters.
* [configure]
Patched autoconf to attempt to correctly detect -lnsl and
-lsocket. Please check this out.
* [controls/button.c]
Added support for Win32 BM_* messages.
* [controls/menu.c]
Avoid sending extra WM_MENUSELECT messages. This avoids crashes
with Excel.
* [memory.heap.c] [include/heap.h]
Added support for SEGPTRs in Win32 heaps. Added a few macros to
make using SEGPTRs easier. They are a bit slower than MAKE_SEGPTR,
but they work with Win32.
* [memory/atom.c]
Implemented Win32 atom functions.
* [memory/local.c]
Fixed LocalReAlloc() changes to avoid copying the whole block twice.
* [win32/memory.c]
Use /dev/zero instead of MAP_ANON for VirtualAlloc().
* [windows/class.c]
Properly implemented the Win32 class functions.
* [windows/winproc.c] (New file)
New file handling the message translation between Win16 and Win32.
Mon May 13 18:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/mdi.c] [windows/menu.c]
Improved WM_MDICREATE and WM_MDICASCADE handling.
* [windows/event.c] [objects/bitblt.c]
Handle GraphicsExpose event for BitBlt from screen to screen.
* [windows/event.c] [windows/win.c] [windows/nonclient.c]
Bunch of fixes for problems with -managed.
* [windows/win.c] [windows/winpos.c]
Changed conditions for WM_SIZE, WM_MOVE, and WM_GETMINMAXINFO
in CreateWindow.
* [windows/win.c] [windows/queue.c] [misc/user.c]
Do not send WM_PARENTNOTIFY when in AppExit and call WH_SHELL
on window creation/destruction.
* [objects/palette.c]
Crude RealizePalette(). At least something is visible in LviewPro.
Sun May 12 02:05:00 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/gdi32.spec]
Added Rectangle (use win16 version).
* [if1632/kernel32.spec]
Added GetWindowsDirectoryA (use win16 GetWindowsDirectory).
* [if1632/user32.spec]
Added GetSubMenu, MoveWindow, SetScrollPos, SetScrollRange (use win16
versions).
Added SetWindowsHookExA (empty stub for now).
* [include/handle32.h]
Changed #include <malloc.h> to #include <stdlib.h> to prevent
hate message from FreeBSD compiler.
* [win32/newfns.c]
Added new function SetWindowsHookEx32A (empty stub for now).
* [win32/user32.c]
Removed redundant debugging printf statement.
Sun May 12 01:24:57 1996 Huw D. M. Davies <h.davies1@physics.oxford.ac.uk>
* [memory/local.c]
Avoid creating adjacent free blocks.
Free the block in LocalReAlloc() before allocating a new one.
Fixed LocalReAlloc() for discarded blocks.
Fri May 10 23:05:12 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [resources/sysres_Fi.rc]
ChooseFont and ChooseColor dialogs updated.
Fri May 10 17:19:33 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/drive.c,if1632/kernel.spec]
GetCurrentDirectory(),SetCurrentDirectory() implemented.
* [if1632/advapi32.spec] [if1632/kernel.spec] [if1632/shell.spec]
[include/windows.h] [include/winreg.h] [loader/main.c]
[misc/main.c] [misc/shell.c] [misc/registry.c]
Registry fixes:
- loads win95 registry databases,
- save only updated keys on default,
- now adhers to the new function naming standard,
- minor cleanups.
Tue May 7 22:36:13 1996 Albrecht Kleine <kleine@ak.sax.de>
* [combo.c]
Added WM_COMMAND-handling for interaction between EDIT and COMBOLBOX
and synchronized mine with Greg Kreider's works.
* [commdlg.c]
Bugfix in ChooseFont: font size handling.
1996-05-16 20:21:06 +02:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
BOOL WINAPI GetTextExtentPoint32W(
|
|
|
|
HDC hdc, /* [in] Handle of device context */
|
1998-04-13 14:21:30 +02:00
|
|
|
LPCWSTR str, /* [in] Address of text string */
|
1999-02-26 12:11:13 +01:00
|
|
|
INT count, /* [in] Number of characters in string */
|
|
|
|
LPSIZE size) /* [out] Address of structure for string size */
|
Release 960516
Thu May 16 13:35:31 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [*/*.c]
Renamed RECT, POINT and SIZE structures to RECT16, POINT16 and
SIZE16. Implemented Win32 version of most functions that take
these types as parameters.
* [configure]
Patched autoconf to attempt to correctly detect -lnsl and
-lsocket. Please check this out.
* [controls/button.c]
Added support for Win32 BM_* messages.
* [controls/menu.c]
Avoid sending extra WM_MENUSELECT messages. This avoids crashes
with Excel.
* [memory.heap.c] [include/heap.h]
Added support for SEGPTRs in Win32 heaps. Added a few macros to
make using SEGPTRs easier. They are a bit slower than MAKE_SEGPTR,
but they work with Win32.
* [memory/atom.c]
Implemented Win32 atom functions.
* [memory/local.c]
Fixed LocalReAlloc() changes to avoid copying the whole block twice.
* [win32/memory.c]
Use /dev/zero instead of MAP_ANON for VirtualAlloc().
* [windows/class.c]
Properly implemented the Win32 class functions.
* [windows/winproc.c] (New file)
New file handling the message translation between Win16 and Win32.
Mon May 13 18:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/mdi.c] [windows/menu.c]
Improved WM_MDICREATE and WM_MDICASCADE handling.
* [windows/event.c] [objects/bitblt.c]
Handle GraphicsExpose event for BitBlt from screen to screen.
* [windows/event.c] [windows/win.c] [windows/nonclient.c]
Bunch of fixes for problems with -managed.
* [windows/win.c] [windows/winpos.c]
Changed conditions for WM_SIZE, WM_MOVE, and WM_GETMINMAXINFO
in CreateWindow.
* [windows/win.c] [windows/queue.c] [misc/user.c]
Do not send WM_PARENTNOTIFY when in AppExit and call WH_SHELL
on window creation/destruction.
* [objects/palette.c]
Crude RealizePalette(). At least something is visible in LviewPro.
Sun May 12 02:05:00 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/gdi32.spec]
Added Rectangle (use win16 version).
* [if1632/kernel32.spec]
Added GetWindowsDirectoryA (use win16 GetWindowsDirectory).
* [if1632/user32.spec]
Added GetSubMenu, MoveWindow, SetScrollPos, SetScrollRange (use win16
versions).
Added SetWindowsHookExA (empty stub for now).
* [include/handle32.h]
Changed #include <malloc.h> to #include <stdlib.h> to prevent
hate message from FreeBSD compiler.
* [win32/newfns.c]
Added new function SetWindowsHookEx32A (empty stub for now).
* [win32/user32.c]
Removed redundant debugging printf statement.
Sun May 12 01:24:57 1996 Huw D. M. Davies <h.davies1@physics.oxford.ac.uk>
* [memory/local.c]
Avoid creating adjacent free blocks.
Free the block in LocalReAlloc() before allocating a new one.
Fixed LocalReAlloc() for discarded blocks.
Fri May 10 23:05:12 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [resources/sysres_Fi.rc]
ChooseFont and ChooseColor dialogs updated.
Fri May 10 17:19:33 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/drive.c,if1632/kernel.spec]
GetCurrentDirectory(),SetCurrentDirectory() implemented.
* [if1632/advapi32.spec] [if1632/kernel.spec] [if1632/shell.spec]
[include/windows.h] [include/winreg.h] [loader/main.c]
[misc/main.c] [misc/shell.c] [misc/registry.c]
Registry fixes:
- loads win95 registry databases,
- save only updated keys on default,
- now adhers to the new function naming standard,
- minor cleanups.
Tue May 7 22:36:13 1996 Albrecht Kleine <kleine@ak.sax.de>
* [combo.c]
Added WM_COMMAND-handling for interaction between EDIT and COMBOLBOX
and synchronized mine with Greg Kreider's works.
* [commdlg.c]
Bugfix in ChooseFont: font size handling.
1996-05-16 20:21:06 +02:00
|
|
|
{
|
2006-07-12 02:58:35 +02:00
|
|
|
return GetTextExtentExPointW(hdc, str, count, 0, NULL, NULL, size);
|
Release 960516
Thu May 16 13:35:31 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [*/*.c]
Renamed RECT, POINT and SIZE structures to RECT16, POINT16 and
SIZE16. Implemented Win32 version of most functions that take
these types as parameters.
* [configure]
Patched autoconf to attempt to correctly detect -lnsl and
-lsocket. Please check this out.
* [controls/button.c]
Added support for Win32 BM_* messages.
* [controls/menu.c]
Avoid sending extra WM_MENUSELECT messages. This avoids crashes
with Excel.
* [memory.heap.c] [include/heap.h]
Added support for SEGPTRs in Win32 heaps. Added a few macros to
make using SEGPTRs easier. They are a bit slower than MAKE_SEGPTR,
but they work with Win32.
* [memory/atom.c]
Implemented Win32 atom functions.
* [memory/local.c]
Fixed LocalReAlloc() changes to avoid copying the whole block twice.
* [win32/memory.c]
Use /dev/zero instead of MAP_ANON for VirtualAlloc().
* [windows/class.c]
Properly implemented the Win32 class functions.
* [windows/winproc.c] (New file)
New file handling the message translation between Win16 and Win32.
Mon May 13 18:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/mdi.c] [windows/menu.c]
Improved WM_MDICREATE and WM_MDICASCADE handling.
* [windows/event.c] [objects/bitblt.c]
Handle GraphicsExpose event for BitBlt from screen to screen.
* [windows/event.c] [windows/win.c] [windows/nonclient.c]
Bunch of fixes for problems with -managed.
* [windows/win.c] [windows/winpos.c]
Changed conditions for WM_SIZE, WM_MOVE, and WM_GETMINMAXINFO
in CreateWindow.
* [windows/win.c] [windows/queue.c] [misc/user.c]
Do not send WM_PARENTNOTIFY when in AppExit and call WH_SHELL
on window creation/destruction.
* [objects/palette.c]
Crude RealizePalette(). At least something is visible in LviewPro.
Sun May 12 02:05:00 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/gdi32.spec]
Added Rectangle (use win16 version).
* [if1632/kernel32.spec]
Added GetWindowsDirectoryA (use win16 GetWindowsDirectory).
* [if1632/user32.spec]
Added GetSubMenu, MoveWindow, SetScrollPos, SetScrollRange (use win16
versions).
Added SetWindowsHookExA (empty stub for now).
* [include/handle32.h]
Changed #include <malloc.h> to #include <stdlib.h> to prevent
hate message from FreeBSD compiler.
* [win32/newfns.c]
Added new function SetWindowsHookEx32A (empty stub for now).
* [win32/user32.c]
Removed redundant debugging printf statement.
Sun May 12 01:24:57 1996 Huw D. M. Davies <h.davies1@physics.oxford.ac.uk>
* [memory/local.c]
Avoid creating adjacent free blocks.
Free the block in LocalReAlloc() before allocating a new one.
Fixed LocalReAlloc() for discarded blocks.
Fri May 10 23:05:12 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [resources/sysres_Fi.rc]
ChooseFont and ChooseColor dialogs updated.
Fri May 10 17:19:33 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/drive.c,if1632/kernel.spec]
GetCurrentDirectory(),SetCurrentDirectory() implemented.
* [if1632/advapi32.spec] [if1632/kernel.spec] [if1632/shell.spec]
[include/windows.h] [include/winreg.h] [loader/main.c]
[misc/main.c] [misc/shell.c] [misc/registry.c]
Registry fixes:
- loads win95 registry databases,
- save only updated keys on default,
- now adhers to the new function naming standard,
- minor cleanups.
Tue May 7 22:36:13 1996 Albrecht Kleine <kleine@ak.sax.de>
* [combo.c]
Added WM_COMMAND-handling for interaction between EDIT and COMBOLBOX
and synchronized mine with Greg Kreider's works.
* [commdlg.c]
Bugfix in ChooseFont: font size handling.
1996-05-16 20:21:06 +02:00
|
|
|
}
|
|
|
|
|
2002-04-04 00:08:27 +02:00
|
|
|
/***********************************************************************
|
2007-12-02 21:06:01 +01:00
|
|
|
* GetTextExtentExPointI [GDI32.@]
|
2002-04-04 00:08:27 +02:00
|
|
|
*
|
|
|
|
* Computes width and height of the array of glyph indices.
|
|
|
|
*
|
2007-12-02 21:06:01 +01:00
|
|
|
* PARAMS
|
|
|
|
* hdc [I] Handle of device context.
|
|
|
|
* indices [I] Glyph index array.
|
|
|
|
* count [I] Number of glyphs in array.
|
|
|
|
* max_ext [I] Maximum width in glyphs.
|
|
|
|
* nfit [O] Maximum number of characters.
|
|
|
|
* dxs [O] Partial string widths.
|
|
|
|
* size [O] Returned string size.
|
|
|
|
*
|
2002-04-04 00:08:27 +02:00
|
|
|
* RETURNS
|
|
|
|
* Success: TRUE
|
|
|
|
* Failure: FALSE
|
|
|
|
*/
|
2007-12-02 21:06:01 +01:00
|
|
|
BOOL WINAPI GetTextExtentExPointI( HDC hdc, const WORD *indices, INT count, INT max_ext,
|
|
|
|
LPINT nfit, LPINT dxs, LPSIZE size )
|
2002-04-04 00:08:27 +02:00
|
|
|
{
|
2011-10-11 16:46:19 +02:00
|
|
|
DC *dc;
|
2012-12-18 17:41:42 +01:00
|
|
|
int i;
|
|
|
|
BOOL ret;
|
|
|
|
INT buffer[256], *pos = dxs;
|
2011-10-11 16:46:19 +02:00
|
|
|
|
|
|
|
if (count < 0) return FALSE;
|
|
|
|
|
|
|
|
dc = get_dc_ptr( hdc );
|
2002-04-04 00:08:27 +02:00
|
|
|
if (!dc) return FALSE;
|
|
|
|
|
2012-12-18 17:41:42 +01:00
|
|
|
if (!dxs)
|
|
|
|
{
|
|
|
|
pos = buffer;
|
|
|
|
if (count > 256 && !(pos = HeapAlloc( GetProcessHeap(), 0, count * sizeof(*pos) )))
|
|
|
|
{
|
|
|
|
release_dc_ptr( dc );
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
ret = get_char_positions_indices( dc, indices, count, pos, size );
|
|
|
|
if (ret)
|
|
|
|
{
|
|
|
|
if (dxs || nfit)
|
|
|
|
{
|
|
|
|
for (i = 0; i < count; i++)
|
|
|
|
{
|
|
|
|
unsigned int dx = abs( INTERNAL_XDSTOWS( dc, pos[i] )) + (i + 1) * dc->charExtra;
|
2013-07-22 15:07:36 +02:00
|
|
|
if (nfit && dx > (unsigned int)max_ext) break;
|
2012-12-18 17:41:42 +01:00
|
|
|
if (dxs) dxs[i] = dx;
|
|
|
|
}
|
|
|
|
if (nfit) *nfit = i;
|
|
|
|
}
|
|
|
|
|
|
|
|
size->cx = abs( INTERNAL_XDSTOWS( dc, size->cx )) + count * dc->charExtra;
|
|
|
|
size->cy = abs( INTERNAL_YDSTOWS( dc, size->cy ));
|
|
|
|
}
|
|
|
|
|
|
|
|
if (pos != buffer && pos != dxs) HeapFree( GetProcessHeap(), 0, pos );
|
2008-02-05 21:16:27 +01:00
|
|
|
release_dc_ptr( dc );
|
2002-04-04 00:08:27 +02:00
|
|
|
|
2006-10-12 22:56:56 +02:00
|
|
|
TRACE("(%p %p %d %p): returning %d x %d\n",
|
2002-04-04 00:08:27 +02:00
|
|
|
hdc, indices, count, size, size->cx, size->cy );
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2007-12-02 21:06:01 +01:00
|
|
|
/***********************************************************************
|
|
|
|
* GetTextExtentPointI [GDI32.@]
|
|
|
|
*
|
|
|
|
* Computes width and height of the array of glyph indices.
|
|
|
|
*
|
|
|
|
* PARAMS
|
|
|
|
* hdc [I] Handle of device context.
|
|
|
|
* indices [I] Glyph index array.
|
|
|
|
* count [I] Number of glyphs in array.
|
|
|
|
* size [O] Returned string size.
|
|
|
|
*
|
|
|
|
* RETURNS
|
|
|
|
* Success: TRUE
|
|
|
|
* Failure: FALSE
|
|
|
|
*/
|
|
|
|
BOOL WINAPI GetTextExtentPointI( HDC hdc, const WORD *indices, INT count, LPSIZE size )
|
|
|
|
{
|
|
|
|
return GetTextExtentExPointI( hdc, indices, count, 0, NULL, NULL, size );
|
|
|
|
}
|
|
|
|
|
1997-06-16 19:43:53 +02:00
|
|
|
|
1996-12-08 20:25:27 +01:00
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* GetTextExtentPointA (GDI32.@)
|
1996-12-08 20:25:27 +01:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
BOOL WINAPI GetTextExtentPointA( HDC hdc, LPCSTR str, INT count,
|
|
|
|
LPSIZE size )
|
1996-12-08 20:25:27 +01:00
|
|
|
{
|
1999-12-08 04:56:23 +01:00
|
|
|
TRACE("not bug compatible.\n");
|
1996-12-08 20:25:27 +01:00
|
|
|
return GetTextExtentPoint32A( hdc, str, count, size );
|
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* GetTextExtentPointW (GDI32.@)
|
1996-12-08 20:25:27 +01:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
BOOL WINAPI GetTextExtentPointW( HDC hdc, LPCWSTR str, INT count,
|
|
|
|
LPSIZE size )
|
1996-12-08 20:25:27 +01:00
|
|
|
{
|
1999-12-08 04:56:23 +01:00
|
|
|
TRACE("not bug compatible.\n");
|
1996-12-08 20:25:27 +01:00
|
|
|
return GetTextExtentPoint32W( hdc, str, count, size );
|
|
|
|
}
|
|
|
|
|
Release 960516
Thu May 16 13:35:31 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [*/*.c]
Renamed RECT, POINT and SIZE structures to RECT16, POINT16 and
SIZE16. Implemented Win32 version of most functions that take
these types as parameters.
* [configure]
Patched autoconf to attempt to correctly detect -lnsl and
-lsocket. Please check this out.
* [controls/button.c]
Added support for Win32 BM_* messages.
* [controls/menu.c]
Avoid sending extra WM_MENUSELECT messages. This avoids crashes
with Excel.
* [memory.heap.c] [include/heap.h]
Added support for SEGPTRs in Win32 heaps. Added a few macros to
make using SEGPTRs easier. They are a bit slower than MAKE_SEGPTR,
but they work with Win32.
* [memory/atom.c]
Implemented Win32 atom functions.
* [memory/local.c]
Fixed LocalReAlloc() changes to avoid copying the whole block twice.
* [win32/memory.c]
Use /dev/zero instead of MAP_ANON for VirtualAlloc().
* [windows/class.c]
Properly implemented the Win32 class functions.
* [windows/winproc.c] (New file)
New file handling the message translation between Win16 and Win32.
Mon May 13 18:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/mdi.c] [windows/menu.c]
Improved WM_MDICREATE and WM_MDICASCADE handling.
* [windows/event.c] [objects/bitblt.c]
Handle GraphicsExpose event for BitBlt from screen to screen.
* [windows/event.c] [windows/win.c] [windows/nonclient.c]
Bunch of fixes for problems with -managed.
* [windows/win.c] [windows/winpos.c]
Changed conditions for WM_SIZE, WM_MOVE, and WM_GETMINMAXINFO
in CreateWindow.
* [windows/win.c] [windows/queue.c] [misc/user.c]
Do not send WM_PARENTNOTIFY when in AppExit and call WH_SHELL
on window creation/destruction.
* [objects/palette.c]
Crude RealizePalette(). At least something is visible in LviewPro.
Sun May 12 02:05:00 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/gdi32.spec]
Added Rectangle (use win16 version).
* [if1632/kernel32.spec]
Added GetWindowsDirectoryA (use win16 GetWindowsDirectory).
* [if1632/user32.spec]
Added GetSubMenu, MoveWindow, SetScrollPos, SetScrollRange (use win16
versions).
Added SetWindowsHookExA (empty stub for now).
* [include/handle32.h]
Changed #include <malloc.h> to #include <stdlib.h> to prevent
hate message from FreeBSD compiler.
* [win32/newfns.c]
Added new function SetWindowsHookEx32A (empty stub for now).
* [win32/user32.c]
Removed redundant debugging printf statement.
Sun May 12 01:24:57 1996 Huw D. M. Davies <h.davies1@physics.oxford.ac.uk>
* [memory/local.c]
Avoid creating adjacent free blocks.
Free the block in LocalReAlloc() before allocating a new one.
Fixed LocalReAlloc() for discarded blocks.
Fri May 10 23:05:12 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [resources/sysres_Fi.rc]
ChooseFont and ChooseColor dialogs updated.
Fri May 10 17:19:33 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/drive.c,if1632/kernel.spec]
GetCurrentDirectory(),SetCurrentDirectory() implemented.
* [if1632/advapi32.spec] [if1632/kernel.spec] [if1632/shell.spec]
[include/windows.h] [include/winreg.h] [loader/main.c]
[misc/main.c] [misc/shell.c] [misc/registry.c]
Registry fixes:
- loads win95 registry databases,
- save only updated keys on default,
- now adhers to the new function naming standard,
- minor cleanups.
Tue May 7 22:36:13 1996 Albrecht Kleine <kleine@ak.sax.de>
* [combo.c]
Added WM_COMMAND-handling for interaction between EDIT and COMBOLBOX
and synchronized mine with Greg Kreider's works.
* [commdlg.c]
Bugfix in ChooseFont: font size handling.
1996-05-16 20:21:06 +02:00
|
|
|
|
Release 961215
Sun Dec 15 16:18:15 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [graphics/x11drv/bitblt.c]
Fixed BITBLT_StretchImage for partially covered or inverted
bitmaps.
* [objects/dib.c]
Fixed the upside-down bitmap problem.
Sat Dec 14 02:49:57 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/user32.spec]
IsMenu and RemoveMenu added (use existing Win16 functions).
* [include/windows.h]
Corrections to BITMAPINFOHEADER structure.
* [loader/module.c] [if1632/kernel32.spec]
New function GetModuleFileName32A (heavily based on original
Win16 version).
* [loader/pe_image.c]
Hack to allow files with short PE header to be loaded (e.g.
COMDLG32.DLL from Win32s).
* [misc/winsock_async.c]
#if out EIDRM case (not present in FreeBSD).
* [tools/build.c]
Remove trailing comments from .s files generated by build
as these break assembly when not run through pre-processor.
* [windows/graphics.c] [if1632/gdi32.spec]
New function Polyline32 - based on original Polyline. Needs
metafile support adding still.
Fri Dec 13 13:04:06 1996 Bruce Milner <Bruce.Milner@genetics.utah.edu>
* [win32/findfile.c] [if1632/kernel.spec]
FindFirstFile32A(): Use dos current directory for drive prefixes.
FindNextFile32A(): Fill in file attribute information.
Implement FindFirstFile16, FindNextFile16, FindClose16.
* [files/drive.c]
GetCurrentDirectory32A - Fix problem with null 3rd character in
string.
Tue Dec 10 14:49:07 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [windows/painting.c][windows/message.c]
Don't use linked lists to call SendMessage(), for it might destroy
the current listentry.
* [misc/registry.c]
Fixed temporary file saving (rename doesn't work across
partitions).
* [files/*.c]
GetFullPathName*,GetDriveType32A fixed, CreateDirectoryEx*,
GetVolumeInformation32W fixed.
* [win32/process.c][if1632/kernel.spec][if1632/kernel32.spec]
LoadLibrary* updated to new naming std., *32W added.
* [win32/console.c] [include/wincon.h]
Additions for NT commandline executables.
* [if1632/advapi32.spec][if1632/kernel32.spec][win32/init.c]
GetUserName32W added, GetComputerName32W added,
GetStartupInfo32W added, GetSystemInfo updated to NT standard.
* [windows/msgbox.c][misc/shell.c][windows/graphics.c]
MessageBox32W, ShellAbout32W, CommandLineToArgvW, Polygon32 added.
* [misc/crtdll.c][include/crtdll.h][if1632/crtdll.spec][misc/ntdll.c]
[if1632/ntdll.spec]
Lot of new unicode functions added (needed for NT).
* [loader/pe_image.c]
NtCurrentTeb added.
Tue Dec 10 22:39:33 1996 Albrecht Kleine <kleine@ak.sax.de>
* [windows/keyboard.c]
Rewrote function TranslateAccelerator().
Mon Dec 9 14:52:13 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [windows/defwnd.c]
DEFWND_SetText(): Set icon name.
Sun Dec 8 23:30:00 1996 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [loader/signal.c] [misc/winsock.c] [misc/winsock_async.c]
[if1632/winsock.spec]
IPC resource cleanup, bugfixes.
* [windows/dialog.c] [windows/defdlg.c]
More DefDlgProc() fixes.
Sun Dec 8 14:01:42 1996 Vadim Strizhevsky <striv@ms.com>
* [misc/clipboard.c] [objects/font.c] [win32/init.c]
[win32/newfns.c] [windows/graphics.c]
Added a few WIN32 functions which needed to run some win32
accessories. Clock should now work almost as well as 16 bit version.
Add: RegisterClipboardFormat32W GetTextExtentExPoint32*
GetModuleHandleW, DisableThreadLibraryCalls (empty stub),
Polygon32
Fix: Polygon16 possible memory leak on error return.
1996-12-15 20:45:59 +01:00
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* GetTextExtentExPointA (GDI32.@)
|
Release 961215
Sun Dec 15 16:18:15 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [graphics/x11drv/bitblt.c]
Fixed BITBLT_StretchImage for partially covered or inverted
bitmaps.
* [objects/dib.c]
Fixed the upside-down bitmap problem.
Sat Dec 14 02:49:57 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/user32.spec]
IsMenu and RemoveMenu added (use existing Win16 functions).
* [include/windows.h]
Corrections to BITMAPINFOHEADER structure.
* [loader/module.c] [if1632/kernel32.spec]
New function GetModuleFileName32A (heavily based on original
Win16 version).
* [loader/pe_image.c]
Hack to allow files with short PE header to be loaded (e.g.
COMDLG32.DLL from Win32s).
* [misc/winsock_async.c]
#if out EIDRM case (not present in FreeBSD).
* [tools/build.c]
Remove trailing comments from .s files generated by build
as these break assembly when not run through pre-processor.
* [windows/graphics.c] [if1632/gdi32.spec]
New function Polyline32 - based on original Polyline. Needs
metafile support adding still.
Fri Dec 13 13:04:06 1996 Bruce Milner <Bruce.Milner@genetics.utah.edu>
* [win32/findfile.c] [if1632/kernel.spec]
FindFirstFile32A(): Use dos current directory for drive prefixes.
FindNextFile32A(): Fill in file attribute information.
Implement FindFirstFile16, FindNextFile16, FindClose16.
* [files/drive.c]
GetCurrentDirectory32A - Fix problem with null 3rd character in
string.
Tue Dec 10 14:49:07 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [windows/painting.c][windows/message.c]
Don't use linked lists to call SendMessage(), for it might destroy
the current listentry.
* [misc/registry.c]
Fixed temporary file saving (rename doesn't work across
partitions).
* [files/*.c]
GetFullPathName*,GetDriveType32A fixed, CreateDirectoryEx*,
GetVolumeInformation32W fixed.
* [win32/process.c][if1632/kernel.spec][if1632/kernel32.spec]
LoadLibrary* updated to new naming std., *32W added.
* [win32/console.c] [include/wincon.h]
Additions for NT commandline executables.
* [if1632/advapi32.spec][if1632/kernel32.spec][win32/init.c]
GetUserName32W added, GetComputerName32W added,
GetStartupInfo32W added, GetSystemInfo updated to NT standard.
* [windows/msgbox.c][misc/shell.c][windows/graphics.c]
MessageBox32W, ShellAbout32W, CommandLineToArgvW, Polygon32 added.
* [misc/crtdll.c][include/crtdll.h][if1632/crtdll.spec][misc/ntdll.c]
[if1632/ntdll.spec]
Lot of new unicode functions added (needed for NT).
* [loader/pe_image.c]
NtCurrentTeb added.
Tue Dec 10 22:39:33 1996 Albrecht Kleine <kleine@ak.sax.de>
* [windows/keyboard.c]
Rewrote function TranslateAccelerator().
Mon Dec 9 14:52:13 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [windows/defwnd.c]
DEFWND_SetText(): Set icon name.
Sun Dec 8 23:30:00 1996 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [loader/signal.c] [misc/winsock.c] [misc/winsock_async.c]
[if1632/winsock.spec]
IPC resource cleanup, bugfixes.
* [windows/dialog.c] [windows/defdlg.c]
More DefDlgProc() fixes.
Sun Dec 8 14:01:42 1996 Vadim Strizhevsky <striv@ms.com>
* [misc/clipboard.c] [objects/font.c] [win32/init.c]
[win32/newfns.c] [windows/graphics.c]
Added a few WIN32 functions which needed to run some win32
accessories. Clock should now work almost as well as 16 bit version.
Add: RegisterClipboardFormat32W GetTextExtentExPoint32*
GetModuleHandleW, DisableThreadLibraryCalls (empty stub),
Polygon32
Fix: Polygon16 possible memory leak on error return.
1996-12-15 20:45:59 +01:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
BOOL WINAPI GetTextExtentExPointA( HDC hdc, LPCSTR str, INT count,
|
1999-12-26 01:47:03 +01:00
|
|
|
INT maxExt, LPINT lpnFit,
|
|
|
|
LPINT alpDx, LPSIZE size )
|
|
|
|
{
|
|
|
|
BOOL ret;
|
2001-09-19 22:32:07 +02:00
|
|
|
INT wlen;
|
2006-05-13 01:52:59 +02:00
|
|
|
INT *walpDx = NULL;
|
|
|
|
LPWSTR p = NULL;
|
2011-10-11 16:46:19 +02:00
|
|
|
|
|
|
|
if (count < 0) return FALSE;
|
2012-12-18 17:41:42 +01:00
|
|
|
if (maxExt < -1) return FALSE;
|
2011-10-11 16:46:19 +02:00
|
|
|
|
|
|
|
if (alpDx)
|
|
|
|
{
|
|
|
|
walpDx = HeapAlloc( GetProcessHeap(), 0, count * sizeof(INT) );
|
|
|
|
if (!walpDx) return FALSE;
|
|
|
|
}
|
|
|
|
|
2007-02-15 08:52:33 +01:00
|
|
|
p = FONT_mbtowc(hdc, str, count, &wlen, NULL);
|
2006-05-13 01:52:59 +02:00
|
|
|
ret = GetTextExtentExPointW( hdc, p, wlen, maxExt, lpnFit, walpDx, size);
|
|
|
|
if (walpDx)
|
|
|
|
{
|
|
|
|
INT n = lpnFit ? *lpnFit : wlen;
|
|
|
|
INT i, j;
|
|
|
|
for(i = 0, j = 0; i < n; i++, j++)
|
|
|
|
{
|
|
|
|
alpDx[j] = walpDx[i];
|
|
|
|
if (IsDBCSLeadByte(str[j])) alpDx[++j] = walpDx[i];
|
|
|
|
}
|
|
|
|
}
|
2003-11-13 21:51:30 +01:00
|
|
|
if (lpnFit) *lpnFit = WideCharToMultiByte(CP_ACP,0,p,*lpnFit,NULL,0,NULL,NULL);
|
1999-12-26 01:47:03 +01:00
|
|
|
HeapFree( GetProcessHeap(), 0, p );
|
2006-05-13 01:52:59 +02:00
|
|
|
HeapFree( GetProcessHeap(), 0, walpDx );
|
1999-12-26 01:47:03 +01:00
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* GetTextExtentExPointW (GDI32.@)
|
2001-08-24 21:12:56 +02:00
|
|
|
*
|
|
|
|
* Return the size of the string as it would be if it was output properly by
|
|
|
|
* e.g. TextOut.
|
1999-12-26 01:47:03 +01:00
|
|
|
*/
|
2012-12-18 17:41:42 +01:00
|
|
|
BOOL WINAPI GetTextExtentExPointW( HDC hdc, LPCWSTR str, INT count, INT max_ext,
|
|
|
|
LPINT nfit, LPINT dxs, LPSIZE size )
|
Release 961215
Sun Dec 15 16:18:15 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [graphics/x11drv/bitblt.c]
Fixed BITBLT_StretchImage for partially covered or inverted
bitmaps.
* [objects/dib.c]
Fixed the upside-down bitmap problem.
Sat Dec 14 02:49:57 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/user32.spec]
IsMenu and RemoveMenu added (use existing Win16 functions).
* [include/windows.h]
Corrections to BITMAPINFOHEADER structure.
* [loader/module.c] [if1632/kernel32.spec]
New function GetModuleFileName32A (heavily based on original
Win16 version).
* [loader/pe_image.c]
Hack to allow files with short PE header to be loaded (e.g.
COMDLG32.DLL from Win32s).
* [misc/winsock_async.c]
#if out EIDRM case (not present in FreeBSD).
* [tools/build.c]
Remove trailing comments from .s files generated by build
as these break assembly when not run through pre-processor.
* [windows/graphics.c] [if1632/gdi32.spec]
New function Polyline32 - based on original Polyline. Needs
metafile support adding still.
Fri Dec 13 13:04:06 1996 Bruce Milner <Bruce.Milner@genetics.utah.edu>
* [win32/findfile.c] [if1632/kernel.spec]
FindFirstFile32A(): Use dos current directory for drive prefixes.
FindNextFile32A(): Fill in file attribute information.
Implement FindFirstFile16, FindNextFile16, FindClose16.
* [files/drive.c]
GetCurrentDirectory32A - Fix problem with null 3rd character in
string.
Tue Dec 10 14:49:07 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [windows/painting.c][windows/message.c]
Don't use linked lists to call SendMessage(), for it might destroy
the current listentry.
* [misc/registry.c]
Fixed temporary file saving (rename doesn't work across
partitions).
* [files/*.c]
GetFullPathName*,GetDriveType32A fixed, CreateDirectoryEx*,
GetVolumeInformation32W fixed.
* [win32/process.c][if1632/kernel.spec][if1632/kernel32.spec]
LoadLibrary* updated to new naming std., *32W added.
* [win32/console.c] [include/wincon.h]
Additions for NT commandline executables.
* [if1632/advapi32.spec][if1632/kernel32.spec][win32/init.c]
GetUserName32W added, GetComputerName32W added,
GetStartupInfo32W added, GetSystemInfo updated to NT standard.
* [windows/msgbox.c][misc/shell.c][windows/graphics.c]
MessageBox32W, ShellAbout32W, CommandLineToArgvW, Polygon32 added.
* [misc/crtdll.c][include/crtdll.h][if1632/crtdll.spec][misc/ntdll.c]
[if1632/ntdll.spec]
Lot of new unicode functions added (needed for NT).
* [loader/pe_image.c]
NtCurrentTeb added.
Tue Dec 10 22:39:33 1996 Albrecht Kleine <kleine@ak.sax.de>
* [windows/keyboard.c]
Rewrote function TranslateAccelerator().
Mon Dec 9 14:52:13 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [windows/defwnd.c]
DEFWND_SetText(): Set icon name.
Sun Dec 8 23:30:00 1996 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [loader/signal.c] [misc/winsock.c] [misc/winsock_async.c]
[if1632/winsock.spec]
IPC resource cleanup, bugfixes.
* [windows/dialog.c] [windows/defdlg.c]
More DefDlgProc() fixes.
Sun Dec 8 14:01:42 1996 Vadim Strizhevsky <striv@ms.com>
* [misc/clipboard.c] [objects/font.c] [win32/init.c]
[win32/newfns.c] [windows/graphics.c]
Added a few WIN32 functions which needed to run some win32
accessories. Clock should now work almost as well as 16 bit version.
Add: RegisterClipboardFormat32W GetTextExtentExPoint32*
GetModuleHandleW, DisableThreadLibraryCalls (empty stub),
Polygon32
Fix: Polygon16 possible memory leak on error return.
1996-12-15 20:45:59 +01:00
|
|
|
{
|
2006-07-12 02:58:35 +02:00
|
|
|
DC *dc;
|
2012-12-18 17:41:42 +01:00
|
|
|
int i;
|
|
|
|
BOOL ret;
|
|
|
|
INT buffer[256], *pos = dxs;
|
2001-09-24 03:12:08 +02:00
|
|
|
|
2011-10-11 16:46:19 +02:00
|
|
|
if (count < 0) return FALSE;
|
|
|
|
|
2008-02-05 21:16:27 +01:00
|
|
|
dc = get_dc_ptr(hdc);
|
2011-10-11 16:46:19 +02:00
|
|
|
if (!dc) return FALSE;
|
2006-07-12 02:58:35 +02:00
|
|
|
|
2012-12-18 17:41:42 +01:00
|
|
|
if (!dxs)
|
Release 961215
Sun Dec 15 16:18:15 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [graphics/x11drv/bitblt.c]
Fixed BITBLT_StretchImage for partially covered or inverted
bitmaps.
* [objects/dib.c]
Fixed the upside-down bitmap problem.
Sat Dec 14 02:49:57 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/user32.spec]
IsMenu and RemoveMenu added (use existing Win16 functions).
* [include/windows.h]
Corrections to BITMAPINFOHEADER structure.
* [loader/module.c] [if1632/kernel32.spec]
New function GetModuleFileName32A (heavily based on original
Win16 version).
* [loader/pe_image.c]
Hack to allow files with short PE header to be loaded (e.g.
COMDLG32.DLL from Win32s).
* [misc/winsock_async.c]
#if out EIDRM case (not present in FreeBSD).
* [tools/build.c]
Remove trailing comments from .s files generated by build
as these break assembly when not run through pre-processor.
* [windows/graphics.c] [if1632/gdi32.spec]
New function Polyline32 - based on original Polyline. Needs
metafile support adding still.
Fri Dec 13 13:04:06 1996 Bruce Milner <Bruce.Milner@genetics.utah.edu>
* [win32/findfile.c] [if1632/kernel.spec]
FindFirstFile32A(): Use dos current directory for drive prefixes.
FindNextFile32A(): Fill in file attribute information.
Implement FindFirstFile16, FindNextFile16, FindClose16.
* [files/drive.c]
GetCurrentDirectory32A - Fix problem with null 3rd character in
string.
Tue Dec 10 14:49:07 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [windows/painting.c][windows/message.c]
Don't use linked lists to call SendMessage(), for it might destroy
the current listentry.
* [misc/registry.c]
Fixed temporary file saving (rename doesn't work across
partitions).
* [files/*.c]
GetFullPathName*,GetDriveType32A fixed, CreateDirectoryEx*,
GetVolumeInformation32W fixed.
* [win32/process.c][if1632/kernel.spec][if1632/kernel32.spec]
LoadLibrary* updated to new naming std., *32W added.
* [win32/console.c] [include/wincon.h]
Additions for NT commandline executables.
* [if1632/advapi32.spec][if1632/kernel32.spec][win32/init.c]
GetUserName32W added, GetComputerName32W added,
GetStartupInfo32W added, GetSystemInfo updated to NT standard.
* [windows/msgbox.c][misc/shell.c][windows/graphics.c]
MessageBox32W, ShellAbout32W, CommandLineToArgvW, Polygon32 added.
* [misc/crtdll.c][include/crtdll.h][if1632/crtdll.spec][misc/ntdll.c]
[if1632/ntdll.spec]
Lot of new unicode functions added (needed for NT).
* [loader/pe_image.c]
NtCurrentTeb added.
Tue Dec 10 22:39:33 1996 Albrecht Kleine <kleine@ak.sax.de>
* [windows/keyboard.c]
Rewrote function TranslateAccelerator().
Mon Dec 9 14:52:13 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [windows/defwnd.c]
DEFWND_SetText(): Set icon name.
Sun Dec 8 23:30:00 1996 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [loader/signal.c] [misc/winsock.c] [misc/winsock_async.c]
[if1632/winsock.spec]
IPC resource cleanup, bugfixes.
* [windows/dialog.c] [windows/defdlg.c]
More DefDlgProc() fixes.
Sun Dec 8 14:01:42 1996 Vadim Strizhevsky <striv@ms.com>
* [misc/clipboard.c] [objects/font.c] [win32/init.c]
[win32/newfns.c] [windows/graphics.c]
Added a few WIN32 functions which needed to run some win32
accessories. Clock should now work almost as well as 16 bit version.
Add: RegisterClipboardFormat32W GetTextExtentExPoint32*
GetModuleHandleW, DisableThreadLibraryCalls (empty stub),
Polygon32
Fix: Polygon16 possible memory leak on error return.
1996-12-15 20:45:59 +01:00
|
|
|
{
|
2012-12-18 17:41:42 +01:00
|
|
|
pos = buffer;
|
|
|
|
if (count > 256 && !(pos = HeapAlloc( GetProcessHeap(), 0, count * sizeof(*pos) )))
|
|
|
|
{
|
|
|
|
release_dc_ptr( dc );
|
|
|
|
return FALSE;
|
|
|
|
}
|
Release 961215
Sun Dec 15 16:18:15 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [graphics/x11drv/bitblt.c]
Fixed BITBLT_StretchImage for partially covered or inverted
bitmaps.
* [objects/dib.c]
Fixed the upside-down bitmap problem.
Sat Dec 14 02:49:57 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/user32.spec]
IsMenu and RemoveMenu added (use existing Win16 functions).
* [include/windows.h]
Corrections to BITMAPINFOHEADER structure.
* [loader/module.c] [if1632/kernel32.spec]
New function GetModuleFileName32A (heavily based on original
Win16 version).
* [loader/pe_image.c]
Hack to allow files with short PE header to be loaded (e.g.
COMDLG32.DLL from Win32s).
* [misc/winsock_async.c]
#if out EIDRM case (not present in FreeBSD).
* [tools/build.c]
Remove trailing comments from .s files generated by build
as these break assembly when not run through pre-processor.
* [windows/graphics.c] [if1632/gdi32.spec]
New function Polyline32 - based on original Polyline. Needs
metafile support adding still.
Fri Dec 13 13:04:06 1996 Bruce Milner <Bruce.Milner@genetics.utah.edu>
* [win32/findfile.c] [if1632/kernel.spec]
FindFirstFile32A(): Use dos current directory for drive prefixes.
FindNextFile32A(): Fill in file attribute information.
Implement FindFirstFile16, FindNextFile16, FindClose16.
* [files/drive.c]
GetCurrentDirectory32A - Fix problem with null 3rd character in
string.
Tue Dec 10 14:49:07 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [windows/painting.c][windows/message.c]
Don't use linked lists to call SendMessage(), for it might destroy
the current listentry.
* [misc/registry.c]
Fixed temporary file saving (rename doesn't work across
partitions).
* [files/*.c]
GetFullPathName*,GetDriveType32A fixed, CreateDirectoryEx*,
GetVolumeInformation32W fixed.
* [win32/process.c][if1632/kernel.spec][if1632/kernel32.spec]
LoadLibrary* updated to new naming std., *32W added.
* [win32/console.c] [include/wincon.h]
Additions for NT commandline executables.
* [if1632/advapi32.spec][if1632/kernel32.spec][win32/init.c]
GetUserName32W added, GetComputerName32W added,
GetStartupInfo32W added, GetSystemInfo updated to NT standard.
* [windows/msgbox.c][misc/shell.c][windows/graphics.c]
MessageBox32W, ShellAbout32W, CommandLineToArgvW, Polygon32 added.
* [misc/crtdll.c][include/crtdll.h][if1632/crtdll.spec][misc/ntdll.c]
[if1632/ntdll.spec]
Lot of new unicode functions added (needed for NT).
* [loader/pe_image.c]
NtCurrentTeb added.
Tue Dec 10 22:39:33 1996 Albrecht Kleine <kleine@ak.sax.de>
* [windows/keyboard.c]
Rewrote function TranslateAccelerator().
Mon Dec 9 14:52:13 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [windows/defwnd.c]
DEFWND_SetText(): Set icon name.
Sun Dec 8 23:30:00 1996 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [loader/signal.c] [misc/winsock.c] [misc/winsock_async.c]
[if1632/winsock.spec]
IPC resource cleanup, bugfixes.
* [windows/dialog.c] [windows/defdlg.c]
More DefDlgProc() fixes.
Sun Dec 8 14:01:42 1996 Vadim Strizhevsky <striv@ms.com>
* [misc/clipboard.c] [objects/font.c] [win32/init.c]
[win32/newfns.c] [windows/graphics.c]
Added a few WIN32 functions which needed to run some win32
accessories. Clock should now work almost as well as 16 bit version.
Add: RegisterClipboardFormat32W GetTextExtentExPoint32*
GetModuleHandleW, DisableThreadLibraryCalls (empty stub),
Polygon32
Fix: Polygon16 possible memory leak on error return.
1996-12-15 20:45:59 +01:00
|
|
|
}
|
2000-09-24 05:05:11 +02:00
|
|
|
|
2012-12-18 17:41:42 +01:00
|
|
|
ret = get_char_positions( dc, str, count, pos, size );
|
2006-07-12 02:58:35 +02:00
|
|
|
if (ret)
|
|
|
|
{
|
2012-12-18 17:41:42 +01:00
|
|
|
if (dxs || nfit)
|
2007-02-08 16:12:08 +01:00
|
|
|
{
|
|
|
|
for (i = 0; i < count; i++)
|
|
|
|
{
|
2012-12-18 17:41:42 +01:00
|
|
|
unsigned int dx = abs( INTERNAL_XDSTOWS( dc, pos[i] )) + (i + 1) * dc->charExtra;
|
2013-07-22 15:07:36 +02:00
|
|
|
if (nfit && dx > (unsigned int)max_ext) break;
|
2012-12-18 17:41:42 +01:00
|
|
|
if (dxs) dxs[i] = dx;
|
2007-02-08 16:12:08 +01:00
|
|
|
}
|
2012-12-18 17:41:42 +01:00
|
|
|
if (nfit) *nfit = i;
|
2007-02-08 16:12:08 +01:00
|
|
|
}
|
2006-07-12 02:58:35 +02:00
|
|
|
|
2012-12-18 17:41:42 +01:00
|
|
|
size->cx = abs( INTERNAL_XDSTOWS( dc, size->cx )) + count * dc->charExtra;
|
|
|
|
size->cy = abs( INTERNAL_YDSTOWS( dc, size->cy ));
|
|
|
|
}
|
2006-07-12 02:58:35 +02:00
|
|
|
|
2012-12-18 17:41:42 +01:00
|
|
|
if (pos != buffer && pos != dxs) HeapFree( GetProcessHeap(), 0, pos );
|
2008-02-05 21:16:27 +01:00
|
|
|
release_dc_ptr( dc );
|
2006-07-12 02:58:35 +02:00
|
|
|
|
2012-12-18 17:41:42 +01:00
|
|
|
TRACE("(%p, %s, %d) returning %dx%d\n", hdc, debugstr_wn(str,count), max_ext, size->cx, size->cy );
|
2000-08-19 23:38:55 +02:00
|
|
|
return ret;
|
Release 961215
Sun Dec 15 16:18:15 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [graphics/x11drv/bitblt.c]
Fixed BITBLT_StretchImage for partially covered or inverted
bitmaps.
* [objects/dib.c]
Fixed the upside-down bitmap problem.
Sat Dec 14 02:49:57 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/user32.spec]
IsMenu and RemoveMenu added (use existing Win16 functions).
* [include/windows.h]
Corrections to BITMAPINFOHEADER structure.
* [loader/module.c] [if1632/kernel32.spec]
New function GetModuleFileName32A (heavily based on original
Win16 version).
* [loader/pe_image.c]
Hack to allow files with short PE header to be loaded (e.g.
COMDLG32.DLL from Win32s).
* [misc/winsock_async.c]
#if out EIDRM case (not present in FreeBSD).
* [tools/build.c]
Remove trailing comments from .s files generated by build
as these break assembly when not run through pre-processor.
* [windows/graphics.c] [if1632/gdi32.spec]
New function Polyline32 - based on original Polyline. Needs
metafile support adding still.
Fri Dec 13 13:04:06 1996 Bruce Milner <Bruce.Milner@genetics.utah.edu>
* [win32/findfile.c] [if1632/kernel.spec]
FindFirstFile32A(): Use dos current directory for drive prefixes.
FindNextFile32A(): Fill in file attribute information.
Implement FindFirstFile16, FindNextFile16, FindClose16.
* [files/drive.c]
GetCurrentDirectory32A - Fix problem with null 3rd character in
string.
Tue Dec 10 14:49:07 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [windows/painting.c][windows/message.c]
Don't use linked lists to call SendMessage(), for it might destroy
the current listentry.
* [misc/registry.c]
Fixed temporary file saving (rename doesn't work across
partitions).
* [files/*.c]
GetFullPathName*,GetDriveType32A fixed, CreateDirectoryEx*,
GetVolumeInformation32W fixed.
* [win32/process.c][if1632/kernel.spec][if1632/kernel32.spec]
LoadLibrary* updated to new naming std., *32W added.
* [win32/console.c] [include/wincon.h]
Additions for NT commandline executables.
* [if1632/advapi32.spec][if1632/kernel32.spec][win32/init.c]
GetUserName32W added, GetComputerName32W added,
GetStartupInfo32W added, GetSystemInfo updated to NT standard.
* [windows/msgbox.c][misc/shell.c][windows/graphics.c]
MessageBox32W, ShellAbout32W, CommandLineToArgvW, Polygon32 added.
* [misc/crtdll.c][include/crtdll.h][if1632/crtdll.spec][misc/ntdll.c]
[if1632/ntdll.spec]
Lot of new unicode functions added (needed for NT).
* [loader/pe_image.c]
NtCurrentTeb added.
Tue Dec 10 22:39:33 1996 Albrecht Kleine <kleine@ak.sax.de>
* [windows/keyboard.c]
Rewrote function TranslateAccelerator().
Mon Dec 9 14:52:13 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [windows/defwnd.c]
DEFWND_SetText(): Set icon name.
Sun Dec 8 23:30:00 1996 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [loader/signal.c] [misc/winsock.c] [misc/winsock_async.c]
[if1632/winsock.spec]
IPC resource cleanup, bugfixes.
* [windows/dialog.c] [windows/defdlg.c]
More DefDlgProc() fixes.
Sun Dec 8 14:01:42 1996 Vadim Strizhevsky <striv@ms.com>
* [misc/clipboard.c] [objects/font.c] [win32/init.c]
[win32/newfns.c] [windows/graphics.c]
Added a few WIN32 functions which needed to run some win32
accessories. Clock should now work almost as well as 16 bit version.
Add: RegisterClipboardFormat32W GetTextExtentExPoint32*
GetModuleHandleW, DisableThreadLibraryCalls (empty stub),
Polygon32
Fix: Polygon16 possible memory leak on error return.
1996-12-15 20:45:59 +01:00
|
|
|
}
|
|
|
|
|
Release 970120
Sun Jan 19 11:46:48 1997 Alexandre Julliard <julliard@lrc.epfl.ch>
* [loader/module.c]
Fixed LoadModule() to always call the DLL initialization code.
* [windows/event.c]
Moved all the keyboard stuff to windows/keyboard.c
* [tools/build.c]
Fixed Win32 register functions.
Sat Jan 18 22:24:41 1997 David Makepeace <D.Makepeace@mailbox.uq.oz.au>
* [tools/makedep.c]
Fixed bug which causes SEGV on Solaris x86.
Fri Jan 17 18:32:27 1997 Frans van Dorsselaer <dorssel@rulhmpc49.LeidenUniv.nl>
* [controls/edit.c]
Implemented WM_UNDO, WM_CONTEXTMENU (temporary using WM_RBUTTONUP),
WM_COMMAND, WM_INITPOPUPMENU, WM_SYSKEYDOWN.
Fixed EM_SETSEL and some minor bugs (features).
Hence: fully functional undo and a win95 menu with the right mouse
button.
* [include/resources.h] [resources/TODO] [resources/sysres_??.rc]
Added a context menu for the edit control.
Translations, please ...
Fri Jan 17 08:29:52 1997 David Faure <david.faure@ifhamy.insa-lyon.fr>
* [windows/event.c]
Move EVENT_ToAscii to windows/keyboard.c (where name ToAscii)
Fixed Keypad keys 0-9 and . in EVENT_event_to_vkey.
Added 3-state handling of toggle keys (CapsLock, NumLock) in order
to make them work with any X server.
Toggle keys now generate WM_KEYDOWN and WM_KEYUP on each pressing.
* [include/keyboard.h]
Totally replaced the file (formerly containing the vkcase definitions)
by the declaration of 'extern' variables contained by event.c and used
by keyboard.c
* [windows/keyboard.c]
Started to rewrite VkKeyScan and MapVirtualKey, to make them use the
table keyc2vkey or X functions only.
ToAscii : added keypad 0-9 and . special case.
Changed toggle keys active mask from 0x80 to 0x1.
* [misc/keyboard.c]
File deleted. Contents moved to windows/keyboard.c.
* [misc/main.c]
Added putenv XKB_DISABLE to disable XKB extension (which, when
present, causes AltGr to change keyboard group instead of being a
modifier).
Tue Jan 14 22:56:43 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
* [windows/event.c]
Do not assume NumLockMask is Mod2Mask, but compute it by scanning
output of XGetModifierMapping for XK_Num_Lock.
Tue Jan 14 15:49:49 1997 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [loader/pe_*.c] [include/peexe.h] [include/resource32.h]
[debugger/*.c]
General clean up.
Changed defines/structures to match Windows NT SDK.
* [loader/main.c]
Don't crash on empty command-line.
* [windows/winpos.c]
winpos.c made win32 clean.
* [misc/ntdll.c]
Some string conversion additions.
* [files/file.c]
GetFileAttributes/GetTempFileName fixed.
* [misc/ver.c]
VerInstallFile implemented.
Mon Jan 13 15:03:11 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
* [tools/build.c]: Use PREFIX also in stabs messages.
Mon Jan 13 10:40:33 1997 John Harvey <john@division.co.uk>
* [graphics/win16drv/*] [include/win16drv.h]
Many fixes and some new features.
* [graphics/x11drv/font.c] [graphics/x11drv/init.c]
[include/x11drv.h] [objects/font.c]
GetTextMetrics() moved to graphics driver.
* [if1632/gdi.spec] [misc/fontengine.c] [misc/Makefile.in]
New dummy EngineEnumerateFont, EngineRealizeFont functions.
* [include/windows.h]
TEXTFORM16 and FONTINFO16 structure definitions moved here from
include/win16drv.h
1997-01-20 20:43:45 +01:00
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* GetTextMetricsA (GDI32.@)
|
Release 970120
Sun Jan 19 11:46:48 1997 Alexandre Julliard <julliard@lrc.epfl.ch>
* [loader/module.c]
Fixed LoadModule() to always call the DLL initialization code.
* [windows/event.c]
Moved all the keyboard stuff to windows/keyboard.c
* [tools/build.c]
Fixed Win32 register functions.
Sat Jan 18 22:24:41 1997 David Makepeace <D.Makepeace@mailbox.uq.oz.au>
* [tools/makedep.c]
Fixed bug which causes SEGV on Solaris x86.
Fri Jan 17 18:32:27 1997 Frans van Dorsselaer <dorssel@rulhmpc49.LeidenUniv.nl>
* [controls/edit.c]
Implemented WM_UNDO, WM_CONTEXTMENU (temporary using WM_RBUTTONUP),
WM_COMMAND, WM_INITPOPUPMENU, WM_SYSKEYDOWN.
Fixed EM_SETSEL and some minor bugs (features).
Hence: fully functional undo and a win95 menu with the right mouse
button.
* [include/resources.h] [resources/TODO] [resources/sysres_??.rc]
Added a context menu for the edit control.
Translations, please ...
Fri Jan 17 08:29:52 1997 David Faure <david.faure@ifhamy.insa-lyon.fr>
* [windows/event.c]
Move EVENT_ToAscii to windows/keyboard.c (where name ToAscii)
Fixed Keypad keys 0-9 and . in EVENT_event_to_vkey.
Added 3-state handling of toggle keys (CapsLock, NumLock) in order
to make them work with any X server.
Toggle keys now generate WM_KEYDOWN and WM_KEYUP on each pressing.
* [include/keyboard.h]
Totally replaced the file (formerly containing the vkcase definitions)
by the declaration of 'extern' variables contained by event.c and used
by keyboard.c
* [windows/keyboard.c]
Started to rewrite VkKeyScan and MapVirtualKey, to make them use the
table keyc2vkey or X functions only.
ToAscii : added keypad 0-9 and . special case.
Changed toggle keys active mask from 0x80 to 0x1.
* [misc/keyboard.c]
File deleted. Contents moved to windows/keyboard.c.
* [misc/main.c]
Added putenv XKB_DISABLE to disable XKB extension (which, when
present, causes AltGr to change keyboard group instead of being a
modifier).
Tue Jan 14 22:56:43 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
* [windows/event.c]
Do not assume NumLockMask is Mod2Mask, but compute it by scanning
output of XGetModifierMapping for XK_Num_Lock.
Tue Jan 14 15:49:49 1997 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [loader/pe_*.c] [include/peexe.h] [include/resource32.h]
[debugger/*.c]
General clean up.
Changed defines/structures to match Windows NT SDK.
* [loader/main.c]
Don't crash on empty command-line.
* [windows/winpos.c]
winpos.c made win32 clean.
* [misc/ntdll.c]
Some string conversion additions.
* [files/file.c]
GetFileAttributes/GetTempFileName fixed.
* [misc/ver.c]
VerInstallFile implemented.
Mon Jan 13 15:03:11 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
* [tools/build.c]: Use PREFIX also in stabs messages.
Mon Jan 13 10:40:33 1997 John Harvey <john@division.co.uk>
* [graphics/win16drv/*] [include/win16drv.h]
Many fixes and some new features.
* [graphics/x11drv/font.c] [graphics/x11drv/init.c]
[include/x11drv.h] [objects/font.c]
GetTextMetrics() moved to graphics driver.
* [if1632/gdi.spec] [misc/fontengine.c] [misc/Makefile.in]
New dummy EngineEnumerateFont, EngineRealizeFont functions.
* [include/windows.h]
TEXTFORM16 and FONTINFO16 structure definitions moved here from
include/win16drv.h
1997-01-20 20:43:45 +01:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
BOOL WINAPI GetTextMetricsA( HDC hdc, TEXTMETRICA *metrics )
|
2001-03-16 17:43:14 +01:00
|
|
|
{
|
|
|
|
TEXTMETRICW tm32;
|
|
|
|
|
|
|
|
if (!GetTextMetricsW( hdc, &tm32 )) return FALSE;
|
|
|
|
FONT_TextMetricWToA( &tm32, metrics );
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetTextMetricsW (GDI32.@)
|
|
|
|
*/
|
|
|
|
BOOL WINAPI GetTextMetricsW( HDC hdc, TEXTMETRICW *metrics )
|
|
|
|
{
|
2011-10-19 14:12:23 +02:00
|
|
|
PHYSDEV physdev;
|
2000-08-19 23:38:55 +02:00
|
|
|
BOOL ret = FALSE;
|
2008-02-05 21:16:27 +01:00
|
|
|
DC * dc = get_dc_ptr( hdc );
|
2000-08-19 23:38:55 +02:00
|
|
|
if (!dc) return FALSE;
|
Release 970914
Thu Sep 11 18:24:56 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
* [objects/dc.c]
In DC_SetupGCForPatBlt, replace R2_NOT by GXxor with (black xor white).
Tue Sep 9 23:04:02 1997 U. Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>
* [memory/virtual.c]
Do not write debugging info unconditionally to stderr.
* [files/profile.c]
Call PROFILE_GetSection in PROFILE_GetString for key_name "" too.
* [misc/crtdll.c]
Many new functions.
* [include/windows.h] [windows/winpos.c]
ClientToScreen16 doesn't have a return value.
Sun Sep 7 10:06:39 1997 Alexandre Julliard <julliard@lrc.epfl.ch>
* [misc/main.c] [AUTHORS]
Update the list of contributors. Please let me know if I forgot
someone.
* [if1632/*.spec] [if1632/builtin.c] [tools/build.c]
Ordinal base for Win32 DLLs is now computed automatically from the
lowest ordinal found.
* [include/wintypes.h]
WINAPI is now defined as attribute((stdcall)). This will require
gcc to compile.
* [if1632/thunk.c]
Removed Win32 thunks (no longer needed with stdcall).
* [if1632/crtdll.spec] [misc/crtdll.c]
Make sure we only reference cdecl functions in the spec file.
* [objects/dc.c]
Use CapNotLast drawing style for 1-pixel wide lines.
* [tools/build.c]
Added 'double' argument type.
Added 'varargs' function type for Win32.
Made CallTo16_xxx functions stdcall.
Fri Sep 5 14:50:49 1997 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [tools/build.c] [windows/win.c] [windows/event.c] [windows/message.c]
More fixes to get message exchange closer to the original.
* [misc/spy.c]
Message logs now contain window names.
* [loader/resource.c] [loader/ne_resource.c] [loader/task.c]
[objects/cursoricon.c] [windows/user.c]
Added some obscure features to fix memory leaks.
Fri Sep 5 00:46:28 1997 Jan Willamowius <jan@janhh.shnet.org>
* [if1632/kernel32.spec] [win32/newfns.c]
Added stub for UTRegister() and UTUnRegister().
Thu Sep 4 12:03:12 1997 Frans van Dorsselaer <dorssel@rulhmpc49.LeidenUniv.nl>
* [controls/edit.c]
Allow ASCII codes > 127 in WM_CHAR.
Mon Sep 1 17:23:24 1997 Dimitrie O. Paun <dimi@mail.cs.toronto.edu>
* [controls/widgets.c]
In InitCommonControls, remember the name of the class
because lpszClassName was made to point to a local array
Added the ProgressBar to the list of implemented controls.
Call InitCommonControls from WIDGETS_Init to register all
implemented Common Controls.
* [include/commctrl.h]
Added misc decl for the Progress Bar.
* [controls/progress.c] [include/progress.h]
First attempt at implementiong the Progress Bar class.
* [objects/brush.h]
Implementation for GetSysColorBrush[16|32]
* [controls/status.c]
Use DrawEdge to draw the borders and fill the background
* [controls/uitools.c]
Added DrawDiagEdge32 and DrawRectEdge32
* [graphics/painting.c]
Implement DrawEdge[16|32]
Started DrawFrameControl32
Mon Sep 1 10:07:09 1997 Lawson Whitney <lawson_whitney@juno.com>
* [misc/comm.c] [include/windows.h]
SetCommEventMask returns a SEGPTR.
Sun Aug 31 23:28:32 1997 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [loader/pe_image.c][loader/module.c][include/pe_image.h]
[include/module.h]
Cleaned up the whole Win32 library mess (a bit).
* [debugger/stabs.c]
If 'wine' has no absolute path and isn't found, check $PATH too.
* [misc/ole2nls.c]
Some fixes.
* [misc/ver.c]
Added support for PE style version resources.
* [memory/string.c]
Check for NULL pointers to _lstr* functions, just as Windows95 does.
* [multimedia/time.c]
Made list of timers a simple linked list.
* [loader/resource.c]
Netscape 3 seems to pass NEGATIVE resource Ids (in an
unsigned int, yes). Don't know why, fixed it anyway.
* [objects/bitmap.c]
LoadImageW added.
* [include/win.h][windows/win.c]
Change wIDmenu from UINT16 to UINT32 and changed the
SetWindow(Long|Word) accordingly.
Thu Aug 28 19:30:08 1997 Morten Welinder <terra@diku.dk>
* [include/windows.h]
Add a few more colors defined for Win95.
Add a few more brush styles.
* [windows/syscolor.c]
Add error checks for SYSCOLOR_SetColor, SYSCOLOR_Init,
GetSysColor16, GetSysColor32. Add support for above colors.
Sun Aug 24 16:22:57 1997 Andrew Taylor <andrew@riscan.com>
* [multimedia/mmsystem.c]
Changed mmioDescend to use mmio functions for file I/O, neccessary
for memory files.
1997-09-14 19:17:23 +02:00
|
|
|
|
2011-10-19 14:12:23 +02:00
|
|
|
physdev = GET_DC_PHYSDEV( dc, pGetTextMetrics );
|
|
|
|
ret = physdev->funcs->pGetTextMetrics( physdev, metrics );
|
2001-09-12 22:21:06 +02:00
|
|
|
|
|
|
|
if (ret)
|
2000-08-19 23:38:55 +02:00
|
|
|
{
|
Release 970914
Thu Sep 11 18:24:56 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
* [objects/dc.c]
In DC_SetupGCForPatBlt, replace R2_NOT by GXxor with (black xor white).
Tue Sep 9 23:04:02 1997 U. Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>
* [memory/virtual.c]
Do not write debugging info unconditionally to stderr.
* [files/profile.c]
Call PROFILE_GetSection in PROFILE_GetString for key_name "" too.
* [misc/crtdll.c]
Many new functions.
* [include/windows.h] [windows/winpos.c]
ClientToScreen16 doesn't have a return value.
Sun Sep 7 10:06:39 1997 Alexandre Julliard <julliard@lrc.epfl.ch>
* [misc/main.c] [AUTHORS]
Update the list of contributors. Please let me know if I forgot
someone.
* [if1632/*.spec] [if1632/builtin.c] [tools/build.c]
Ordinal base for Win32 DLLs is now computed automatically from the
lowest ordinal found.
* [include/wintypes.h]
WINAPI is now defined as attribute((stdcall)). This will require
gcc to compile.
* [if1632/thunk.c]
Removed Win32 thunks (no longer needed with stdcall).
* [if1632/crtdll.spec] [misc/crtdll.c]
Make sure we only reference cdecl functions in the spec file.
* [objects/dc.c]
Use CapNotLast drawing style for 1-pixel wide lines.
* [tools/build.c]
Added 'double' argument type.
Added 'varargs' function type for Win32.
Made CallTo16_xxx functions stdcall.
Fri Sep 5 14:50:49 1997 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [tools/build.c] [windows/win.c] [windows/event.c] [windows/message.c]
More fixes to get message exchange closer to the original.
* [misc/spy.c]
Message logs now contain window names.
* [loader/resource.c] [loader/ne_resource.c] [loader/task.c]
[objects/cursoricon.c] [windows/user.c]
Added some obscure features to fix memory leaks.
Fri Sep 5 00:46:28 1997 Jan Willamowius <jan@janhh.shnet.org>
* [if1632/kernel32.spec] [win32/newfns.c]
Added stub for UTRegister() and UTUnRegister().
Thu Sep 4 12:03:12 1997 Frans van Dorsselaer <dorssel@rulhmpc49.LeidenUniv.nl>
* [controls/edit.c]
Allow ASCII codes > 127 in WM_CHAR.
Mon Sep 1 17:23:24 1997 Dimitrie O. Paun <dimi@mail.cs.toronto.edu>
* [controls/widgets.c]
In InitCommonControls, remember the name of the class
because lpszClassName was made to point to a local array
Added the ProgressBar to the list of implemented controls.
Call InitCommonControls from WIDGETS_Init to register all
implemented Common Controls.
* [include/commctrl.h]
Added misc decl for the Progress Bar.
* [controls/progress.c] [include/progress.h]
First attempt at implementiong the Progress Bar class.
* [objects/brush.h]
Implementation for GetSysColorBrush[16|32]
* [controls/status.c]
Use DrawEdge to draw the borders and fill the background
* [controls/uitools.c]
Added DrawDiagEdge32 and DrawRectEdge32
* [graphics/painting.c]
Implement DrawEdge[16|32]
Started DrawFrameControl32
Mon Sep 1 10:07:09 1997 Lawson Whitney <lawson_whitney@juno.com>
* [misc/comm.c] [include/windows.h]
SetCommEventMask returns a SEGPTR.
Sun Aug 31 23:28:32 1997 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [loader/pe_image.c][loader/module.c][include/pe_image.h]
[include/module.h]
Cleaned up the whole Win32 library mess (a bit).
* [debugger/stabs.c]
If 'wine' has no absolute path and isn't found, check $PATH too.
* [misc/ole2nls.c]
Some fixes.
* [misc/ver.c]
Added support for PE style version resources.
* [memory/string.c]
Check for NULL pointers to _lstr* functions, just as Windows95 does.
* [multimedia/time.c]
Made list of timers a simple linked list.
* [loader/resource.c]
Netscape 3 seems to pass NEGATIVE resource Ids (in an
unsigned int, yes). Don't know why, fixed it anyway.
* [objects/bitmap.c]
LoadImageW added.
* [include/win.h][windows/win.c]
Change wIDmenu from UINT16 to UINT32 and changed the
SetWindow(Long|Word) accordingly.
Thu Aug 28 19:30:08 1997 Morten Welinder <terra@diku.dk>
* [include/windows.h]
Add a few more colors defined for Win95.
Add a few more brush styles.
* [windows/syscolor.c]
Add error checks for SYSCOLOR_SetColor, SYSCOLOR_Init,
GetSysColor16, GetSysColor32. Add support for above colors.
Sun Aug 24 16:22:57 1997 Andrew Taylor <andrew@riscan.com>
* [multimedia/mmsystem.c]
Changed mmioDescend to use mmio functions for file I/O, neccessary
for memory files.
1997-09-14 19:17:23 +02:00
|
|
|
/* device layer returns values in device units
|
|
|
|
* therefore we have to convert them to logical */
|
|
|
|
|
2007-03-15 07:12:09 +01:00
|
|
|
metrics->tmDigitizedAspectX = GetDeviceCaps(hdc, LOGPIXELSX);
|
|
|
|
metrics->tmDigitizedAspectY = GetDeviceCaps(hdc, LOGPIXELSY);
|
2013-09-11 18:31:01 +02:00
|
|
|
metrics->tmHeight = height_to_LP( dc, metrics->tmHeight );
|
|
|
|
metrics->tmAscent = height_to_LP( dc, metrics->tmAscent );
|
|
|
|
metrics->tmDescent = height_to_LP( dc, metrics->tmDescent );
|
|
|
|
metrics->tmInternalLeading = height_to_LP( dc, metrics->tmInternalLeading );
|
|
|
|
metrics->tmExternalLeading = height_to_LP( dc, metrics->tmExternalLeading );
|
|
|
|
metrics->tmAveCharWidth = width_to_LP( dc, metrics->tmAveCharWidth );
|
|
|
|
metrics->tmMaxCharWidth = width_to_LP( dc, metrics->tmMaxCharWidth );
|
|
|
|
metrics->tmOverhang = width_to_LP( dc, metrics->tmOverhang );
|
2000-08-19 23:38:55 +02:00
|
|
|
ret = TRUE;
|
2013-09-11 18:31:01 +02:00
|
|
|
|
|
|
|
TRACE("text metrics:\n"
|
2006-10-12 22:56:56 +02:00
|
|
|
" Weight = %03i\t FirstChar = %i\t AveCharWidth = %i\n"
|
|
|
|
" Italic = % 3i\t LastChar = %i\t\t MaxCharWidth = %i\n"
|
|
|
|
" UnderLined = %01i\t DefaultChar = %i\t Overhang = %i\n"
|
2001-03-16 17:43:14 +01:00
|
|
|
" StruckOut = %01i\t BreakChar = %i\t CharSet = %i\n"
|
1999-12-08 04:56:23 +01:00
|
|
|
" PitchAndFamily = %02x\n"
|
|
|
|
" --------------------\n"
|
2006-10-12 22:56:56 +02:00
|
|
|
" InternalLeading = %i\n"
|
|
|
|
" Ascent = %i\n"
|
|
|
|
" Descent = %i\n"
|
|
|
|
" Height = %i\n",
|
1999-12-08 04:56:23 +01:00
|
|
|
metrics->tmWeight, metrics->tmFirstChar, metrics->tmAveCharWidth,
|
|
|
|
metrics->tmItalic, metrics->tmLastChar, metrics->tmMaxCharWidth,
|
|
|
|
metrics->tmUnderlined, metrics->tmDefaultChar, metrics->tmOverhang,
|
|
|
|
metrics->tmStruckOut, metrics->tmBreakChar, metrics->tmCharSet,
|
|
|
|
metrics->tmPitchAndFamily,
|
|
|
|
metrics->tmInternalLeading,
|
|
|
|
metrics->tmAscent,
|
|
|
|
metrics->tmDescent,
|
|
|
|
metrics->tmHeight );
|
2000-08-19 23:38:55 +02:00
|
|
|
}
|
2008-02-05 21:16:27 +01:00
|
|
|
release_dc_ptr( dc );
|
2000-08-19 23:38:55 +02:00
|
|
|
return ret;
|
1996-07-05 19:14:13 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
1998-10-14 20:15:43 +02:00
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* GetOutlineTextMetricsA (GDI32.@)
|
|
|
|
* Gets metrics for TrueType fonts.
|
1998-10-14 20:15:43 +02:00
|
|
|
*
|
2003-11-11 21:39:54 +01:00
|
|
|
* NOTES
|
|
|
|
* If the supplied buffer isn't big enough Windows partially fills it up to
|
|
|
|
* its given length and returns that length.
|
1998-10-14 20:15:43 +02:00
|
|
|
*
|
|
|
|
* RETURNS
|
|
|
|
* Success: Non-zero or size of required buffer
|
|
|
|
* Failure: 0
|
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
UINT WINAPI GetOutlineTextMetricsA(
|
|
|
|
HDC hdc, /* [in] Handle of device context */
|
|
|
|
UINT cbData, /* [in] Size of metric data array */
|
|
|
|
LPOUTLINETEXTMETRICA lpOTM) /* [out] Address of metric data array */
|
1998-10-14 20:15:43 +02:00
|
|
|
{
|
2001-09-12 22:21:06 +02:00
|
|
|
char buf[512], *ptr;
|
|
|
|
UINT ret, needed;
|
|
|
|
OUTLINETEXTMETRICW *lpOTMW = (OUTLINETEXTMETRICW *)buf;
|
2003-11-11 21:39:54 +01:00
|
|
|
OUTLINETEXTMETRICA *output = lpOTM;
|
2001-09-12 22:21:06 +02:00
|
|
|
INT left, len;
|
1998-10-14 20:15:43 +02:00
|
|
|
|
2003-11-11 21:39:54 +01:00
|
|
|
if((ret = GetOutlineTextMetricsW(hdc, 0, NULL)) == 0)
|
|
|
|
return 0;
|
|
|
|
if(ret > sizeof(buf))
|
2001-09-12 22:21:06 +02:00
|
|
|
lpOTMW = HeapAlloc(GetProcessHeap(), 0, ret);
|
2003-11-11 21:39:54 +01:00
|
|
|
GetOutlineTextMetricsW(hdc, ret, lpOTMW);
|
1998-10-14 20:15:43 +02:00
|
|
|
|
2001-09-12 22:21:06 +02:00
|
|
|
needed = sizeof(OUTLINETEXTMETRICA);
|
|
|
|
if(lpOTMW->otmpFamilyName)
|
|
|
|
needed += WideCharToMultiByte(CP_ACP, 0,
|
2002-06-01 01:06:46 +02:00
|
|
|
(WCHAR*)((char*)lpOTMW + (ptrdiff_t)lpOTMW->otmpFamilyName), -1,
|
2001-09-12 22:21:06 +02:00
|
|
|
NULL, 0, NULL, NULL);
|
|
|
|
if(lpOTMW->otmpFaceName)
|
|
|
|
needed += WideCharToMultiByte(CP_ACP, 0,
|
2002-06-01 01:06:46 +02:00
|
|
|
(WCHAR*)((char*)lpOTMW + (ptrdiff_t)lpOTMW->otmpFaceName), -1,
|
2001-09-12 22:21:06 +02:00
|
|
|
NULL, 0, NULL, NULL);
|
|
|
|
if(lpOTMW->otmpStyleName)
|
|
|
|
needed += WideCharToMultiByte(CP_ACP, 0,
|
2002-06-01 01:06:46 +02:00
|
|
|
(WCHAR*)((char*)lpOTMW + (ptrdiff_t)lpOTMW->otmpStyleName), -1,
|
2001-09-12 22:21:06 +02:00
|
|
|
NULL, 0, NULL, NULL);
|
|
|
|
if(lpOTMW->otmpFullName)
|
|
|
|
needed += WideCharToMultiByte(CP_ACP, 0,
|
2002-06-01 01:06:46 +02:00
|
|
|
(WCHAR*)((char*)lpOTMW + (ptrdiff_t)lpOTMW->otmpFullName), -1,
|
2001-09-12 22:21:06 +02:00
|
|
|
NULL, 0, NULL, NULL);
|
|
|
|
|
|
|
|
if(!lpOTM) {
|
|
|
|
ret = needed;
|
|
|
|
goto end;
|
|
|
|
}
|
1998-10-14 20:15:43 +02:00
|
|
|
|
2003-11-11 21:39:54 +01:00
|
|
|
TRACE("needed = %d\n", needed);
|
|
|
|
if(needed > cbData)
|
|
|
|
/* Since the supplied buffer isn't big enough, we'll alloc one
|
|
|
|
that is and memcpy the first cbData bytes into the lpOTM at
|
|
|
|
the end. */
|
|
|
|
output = HeapAlloc(GetProcessHeap(), 0, needed);
|
|
|
|
|
|
|
|
ret = output->otmSize = min(needed, cbData);
|
|
|
|
FONT_TextMetricWToA( &lpOTMW->otmTextMetrics, &output->otmTextMetrics );
|
|
|
|
output->otmFiller = 0;
|
|
|
|
output->otmPanoseNumber = lpOTMW->otmPanoseNumber;
|
|
|
|
output->otmfsSelection = lpOTMW->otmfsSelection;
|
|
|
|
output->otmfsType = lpOTMW->otmfsType;
|
|
|
|
output->otmsCharSlopeRise = lpOTMW->otmsCharSlopeRise;
|
|
|
|
output->otmsCharSlopeRun = lpOTMW->otmsCharSlopeRun;
|
|
|
|
output->otmItalicAngle = lpOTMW->otmItalicAngle;
|
|
|
|
output->otmEMSquare = lpOTMW->otmEMSquare;
|
|
|
|
output->otmAscent = lpOTMW->otmAscent;
|
|
|
|
output->otmDescent = lpOTMW->otmDescent;
|
|
|
|
output->otmLineGap = lpOTMW->otmLineGap;
|
|
|
|
output->otmsCapEmHeight = lpOTMW->otmsCapEmHeight;
|
|
|
|
output->otmsXHeight = lpOTMW->otmsXHeight;
|
|
|
|
output->otmrcFontBox = lpOTMW->otmrcFontBox;
|
|
|
|
output->otmMacAscent = lpOTMW->otmMacAscent;
|
|
|
|
output->otmMacDescent = lpOTMW->otmMacDescent;
|
|
|
|
output->otmMacLineGap = lpOTMW->otmMacLineGap;
|
|
|
|
output->otmusMinimumPPEM = lpOTMW->otmusMinimumPPEM;
|
|
|
|
output->otmptSubscriptSize = lpOTMW->otmptSubscriptSize;
|
|
|
|
output->otmptSubscriptOffset = lpOTMW->otmptSubscriptOffset;
|
|
|
|
output->otmptSuperscriptSize = lpOTMW->otmptSuperscriptSize;
|
|
|
|
output->otmptSuperscriptOffset = lpOTMW->otmptSuperscriptOffset;
|
|
|
|
output->otmsStrikeoutSize = lpOTMW->otmsStrikeoutSize;
|
|
|
|
output->otmsStrikeoutPosition = lpOTMW->otmsStrikeoutPosition;
|
|
|
|
output->otmsUnderscoreSize = lpOTMW->otmsUnderscoreSize;
|
|
|
|
output->otmsUnderscorePosition = lpOTMW->otmsUnderscorePosition;
|
|
|
|
|
|
|
|
|
|
|
|
ptr = (char*)(output + 1);
|
|
|
|
left = needed - sizeof(*output);
|
2001-09-12 22:21:06 +02:00
|
|
|
|
|
|
|
if(lpOTMW->otmpFamilyName) {
|
2003-11-11 21:39:54 +01:00
|
|
|
output->otmpFamilyName = (LPSTR)(ptr - (char*)output);
|
2001-09-12 22:21:06 +02:00
|
|
|
len = WideCharToMultiByte(CP_ACP, 0,
|
2002-06-01 01:06:46 +02:00
|
|
|
(WCHAR*)((char*)lpOTMW + (ptrdiff_t)lpOTMW->otmpFamilyName), -1,
|
2001-09-12 22:21:06 +02:00
|
|
|
ptr, left, NULL, NULL);
|
|
|
|
left -= len;
|
|
|
|
ptr += len;
|
1998-10-14 20:15:43 +02:00
|
|
|
} else
|
2003-11-11 21:39:54 +01:00
|
|
|
output->otmpFamilyName = 0;
|
2001-09-12 22:21:06 +02:00
|
|
|
|
|
|
|
if(lpOTMW->otmpFaceName) {
|
2003-11-11 21:39:54 +01:00
|
|
|
output->otmpFaceName = (LPSTR)(ptr - (char*)output);
|
2001-09-12 22:21:06 +02:00
|
|
|
len = WideCharToMultiByte(CP_ACP, 0,
|
2002-06-01 01:06:46 +02:00
|
|
|
(WCHAR*)((char*)lpOTMW + (ptrdiff_t)lpOTMW->otmpFaceName), -1,
|
2001-09-12 22:21:06 +02:00
|
|
|
ptr, left, NULL, NULL);
|
|
|
|
left -= len;
|
|
|
|
ptr += len;
|
1998-10-14 20:15:43 +02:00
|
|
|
} else
|
2003-11-11 21:39:54 +01:00
|
|
|
output->otmpFaceName = 0;
|
2001-09-12 22:21:06 +02:00
|
|
|
|
|
|
|
if(lpOTMW->otmpStyleName) {
|
2003-11-11 21:39:54 +01:00
|
|
|
output->otmpStyleName = (LPSTR)(ptr - (char*)output);
|
2001-09-12 22:21:06 +02:00
|
|
|
len = WideCharToMultiByte(CP_ACP, 0,
|
2002-06-01 01:06:46 +02:00
|
|
|
(WCHAR*)((char*)lpOTMW + (ptrdiff_t)lpOTMW->otmpStyleName), -1,
|
2001-09-12 22:21:06 +02:00
|
|
|
ptr, left, NULL, NULL);
|
|
|
|
left -= len;
|
|
|
|
ptr += len;
|
|
|
|
} else
|
2003-11-11 21:39:54 +01:00
|
|
|
output->otmpStyleName = 0;
|
2001-09-12 22:21:06 +02:00
|
|
|
|
|
|
|
if(lpOTMW->otmpFullName) {
|
2003-11-11 21:39:54 +01:00
|
|
|
output->otmpFullName = (LPSTR)(ptr - (char*)output);
|
2001-09-12 22:21:06 +02:00
|
|
|
len = WideCharToMultiByte(CP_ACP, 0,
|
2002-06-01 01:06:46 +02:00
|
|
|
(WCHAR*)((char*)lpOTMW + (ptrdiff_t)lpOTMW->otmpFullName), -1,
|
2001-09-12 22:21:06 +02:00
|
|
|
ptr, left, NULL, NULL);
|
|
|
|
left -= len;
|
|
|
|
} else
|
2003-11-11 21:39:54 +01:00
|
|
|
output->otmpFullName = 0;
|
2002-06-01 01:06:46 +02:00
|
|
|
|
2001-09-12 22:21:06 +02:00
|
|
|
assert(left == 0);
|
2002-06-01 01:06:46 +02:00
|
|
|
|
2003-11-11 21:39:54 +01:00
|
|
|
if(output != lpOTM) {
|
|
|
|
memcpy(lpOTM, output, cbData);
|
|
|
|
HeapFree(GetProcessHeap(), 0, output);
|
2006-09-18 12:00:44 +02:00
|
|
|
|
|
|
|
/* check if the string offsets really fit into the provided size */
|
|
|
|
/* FIXME: should we check string length as well? */
|
2007-02-02 11:18:15 +01:00
|
|
|
/* make sure that we don't read/write beyond the provided buffer */
|
|
|
|
if (lpOTM->otmSize >= FIELD_OFFSET(OUTLINETEXTMETRICA, otmpFamilyName) + sizeof(LPSTR))
|
|
|
|
{
|
|
|
|
if ((UINT_PTR)lpOTM->otmpFamilyName >= lpOTM->otmSize)
|
|
|
|
lpOTM->otmpFamilyName = 0; /* doesn't fit */
|
|
|
|
}
|
2006-09-18 12:00:44 +02:00
|
|
|
|
2007-02-02 11:18:15 +01:00
|
|
|
/* make sure that we don't read/write beyond the provided buffer */
|
|
|
|
if (lpOTM->otmSize >= FIELD_OFFSET(OUTLINETEXTMETRICA, otmpFaceName) + sizeof(LPSTR))
|
|
|
|
{
|
|
|
|
if ((UINT_PTR)lpOTM->otmpFaceName >= lpOTM->otmSize)
|
|
|
|
lpOTM->otmpFaceName = 0; /* doesn't fit */
|
|
|
|
}
|
2006-09-18 12:00:44 +02:00
|
|
|
|
2007-02-02 11:18:15 +01:00
|
|
|
/* make sure that we don't read/write beyond the provided buffer */
|
|
|
|
if (lpOTM->otmSize >= FIELD_OFFSET(OUTLINETEXTMETRICA, otmpStyleName) + sizeof(LPSTR))
|
|
|
|
{
|
|
|
|
if ((UINT_PTR)lpOTM->otmpStyleName >= lpOTM->otmSize)
|
|
|
|
lpOTM->otmpStyleName = 0; /* doesn't fit */
|
|
|
|
}
|
2006-09-18 12:00:44 +02:00
|
|
|
|
2007-02-02 11:18:15 +01:00
|
|
|
/* make sure that we don't read/write beyond the provided buffer */
|
|
|
|
if (lpOTM->otmSize >= FIELD_OFFSET(OUTLINETEXTMETRICA, otmpFullName) + sizeof(LPSTR))
|
|
|
|
{
|
|
|
|
if ((UINT_PTR)lpOTM->otmpFullName >= lpOTM->otmSize)
|
|
|
|
lpOTM->otmpFullName = 0; /* doesn't fit */
|
|
|
|
}
|
2003-11-11 21:39:54 +01:00
|
|
|
}
|
2001-09-12 22:21:06 +02:00
|
|
|
|
|
|
|
end:
|
|
|
|
if(lpOTMW != (OUTLINETEXTMETRICW *)buf)
|
|
|
|
HeapFree(GetProcessHeap(), 0, lpOTMW);
|
|
|
|
|
|
|
|
return ret;
|
1998-10-14 20:15:43 +02:00
|
|
|
}
|
|
|
|
|
2001-09-12 22:21:06 +02:00
|
|
|
|
1998-12-10 16:49:22 +01:00
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* GetOutlineTextMetricsW [GDI32.@]
|
1998-12-10 16:49:22 +01:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
UINT WINAPI GetOutlineTextMetricsW(
|
|
|
|
HDC hdc, /* [in] Handle of device context */
|
|
|
|
UINT cbData, /* [in] Size of metric data array */
|
|
|
|
LPOUTLINETEXTMETRICW lpOTM) /* [out] Address of metric data array */
|
1998-12-10 16:49:22 +01:00
|
|
|
{
|
2008-02-05 21:16:27 +01:00
|
|
|
DC *dc = get_dc_ptr( hdc );
|
2003-11-11 21:39:54 +01:00
|
|
|
OUTLINETEXTMETRICW *output = lpOTM;
|
2011-10-20 16:49:18 +02:00
|
|
|
PHYSDEV dev;
|
2001-09-12 22:21:06 +02:00
|
|
|
UINT ret;
|
|
|
|
|
2002-11-22 23:16:53 +01:00
|
|
|
TRACE("(%p,%d,%p)\n", hdc, cbData, lpOTM);
|
2001-09-12 22:21:06 +02:00
|
|
|
if(!dc) return 0;
|
|
|
|
|
2011-10-20 16:49:18 +02:00
|
|
|
dev = GET_DC_PHYSDEV( dc, pGetOutlineTextMetrics );
|
|
|
|
ret = dev->funcs->pGetOutlineTextMetrics( dev, cbData, output );
|
2003-11-11 21:39:54 +01:00
|
|
|
|
2011-10-20 16:49:18 +02:00
|
|
|
if (lpOTM && ret > cbData)
|
|
|
|
{
|
|
|
|
output = HeapAlloc(GetProcessHeap(), 0, ret);
|
|
|
|
ret = dev->funcs->pGetOutlineTextMetrics( dev, ret, output );
|
|
|
|
}
|
|
|
|
|
|
|
|
if (lpOTM && ret)
|
|
|
|
{
|
2008-06-24 09:10:08 +02:00
|
|
|
output->otmTextMetrics.tmDigitizedAspectX = GetDeviceCaps(hdc, LOGPIXELSX);
|
|
|
|
output->otmTextMetrics.tmDigitizedAspectY = GetDeviceCaps(hdc, LOGPIXELSY);
|
2013-09-11 18:31:01 +02:00
|
|
|
output->otmTextMetrics.tmHeight = height_to_LP( dc, output->otmTextMetrics.tmHeight );
|
|
|
|
output->otmTextMetrics.tmAscent = height_to_LP( dc, output->otmTextMetrics.tmAscent );
|
|
|
|
output->otmTextMetrics.tmDescent = height_to_LP( dc, output->otmTextMetrics.tmDescent );
|
|
|
|
output->otmTextMetrics.tmInternalLeading = height_to_LP( dc, output->otmTextMetrics.tmInternalLeading );
|
|
|
|
output->otmTextMetrics.tmExternalLeading = height_to_LP( dc, output->otmTextMetrics.tmExternalLeading );
|
|
|
|
output->otmTextMetrics.tmAveCharWidth = width_to_LP( dc, output->otmTextMetrics.tmAveCharWidth );
|
|
|
|
output->otmTextMetrics.tmMaxCharWidth = width_to_LP( dc, output->otmTextMetrics.tmMaxCharWidth );
|
|
|
|
output->otmTextMetrics.tmOverhang = width_to_LP( dc, output->otmTextMetrics.tmOverhang );
|
|
|
|
output->otmAscent = height_to_LP( dc, output->otmAscent);
|
|
|
|
output->otmDescent = height_to_LP( dc, output->otmDescent);
|
|
|
|
output->otmLineGap = abs(INTERNAL_YDSTOWS(dc,output->otmLineGap));
|
|
|
|
output->otmsCapEmHeight = abs(INTERNAL_YDSTOWS(dc,output->otmsCapEmHeight));
|
|
|
|
output->otmsXHeight = abs(INTERNAL_YDSTOWS(dc,output->otmsXHeight));
|
|
|
|
output->otmrcFontBox.top = height_to_LP( dc, output->otmrcFontBox.top);
|
|
|
|
output->otmrcFontBox.bottom = height_to_LP( dc, output->otmrcFontBox.bottom);
|
|
|
|
output->otmrcFontBox.left = width_to_LP( dc, output->otmrcFontBox.left);
|
|
|
|
output->otmrcFontBox.right = width_to_LP( dc, output->otmrcFontBox.right);
|
|
|
|
output->otmMacAscent = height_to_LP( dc, output->otmMacAscent);
|
|
|
|
output->otmMacDescent = height_to_LP( dc, output->otmMacDescent);
|
|
|
|
output->otmMacLineGap = abs(INTERNAL_YDSTOWS(dc,output->otmMacLineGap));
|
|
|
|
output->otmptSubscriptSize.x = width_to_LP( dc, output->otmptSubscriptSize.x);
|
|
|
|
output->otmptSubscriptSize.y = height_to_LP( dc, output->otmptSubscriptSize.y);
|
|
|
|
output->otmptSubscriptOffset.x = width_to_LP( dc, output->otmptSubscriptOffset.x);
|
|
|
|
output->otmptSubscriptOffset.y = height_to_LP( dc, output->otmptSubscriptOffset.y);
|
|
|
|
output->otmptSuperscriptSize.x = width_to_LP( dc, output->otmptSuperscriptSize.x);
|
|
|
|
output->otmptSuperscriptSize.y = height_to_LP( dc, output->otmptSuperscriptSize.y);
|
|
|
|
output->otmptSuperscriptOffset.x = width_to_LP( dc, output->otmptSuperscriptOffset.x);
|
|
|
|
output->otmptSuperscriptOffset.y = height_to_LP( dc, output->otmptSuperscriptOffset.y);
|
|
|
|
output->otmsStrikeoutSize = abs(INTERNAL_YDSTOWS(dc,output->otmsStrikeoutSize));
|
|
|
|
output->otmsStrikeoutPosition = height_to_LP( dc, output->otmsStrikeoutPosition);
|
|
|
|
output->otmsUnderscoreSize = height_to_LP( dc, output->otmsUnderscoreSize);
|
|
|
|
output->otmsUnderscorePosition = height_to_LP( dc, output->otmsUnderscorePosition);
|
2014-11-24 14:23:11 +01:00
|
|
|
|
2011-10-20 16:49:18 +02:00
|
|
|
if(output != lpOTM)
|
|
|
|
{
|
|
|
|
memcpy(lpOTM, output, cbData);
|
|
|
|
HeapFree(GetProcessHeap(), 0, output);
|
|
|
|
ret = cbData;
|
|
|
|
}
|
2001-09-12 22:21:06 +02:00
|
|
|
}
|
2008-02-05 21:16:27 +01:00
|
|
|
release_dc_ptr(dc);
|
2001-09-12 22:21:06 +02:00
|
|
|
return ret;
|
1998-12-10 16:49:22 +01:00
|
|
|
}
|
1998-10-14 20:15:43 +02:00
|
|
|
|
2011-01-26 17:09:03 +01:00
|
|
|
static LPSTR FONT_GetCharsByRangeA(HDC hdc, UINT firstChar, UINT lastChar, PINT pByteLen)
|
2011-01-16 15:00:25 +01:00
|
|
|
{
|
|
|
|
INT i, count = lastChar - firstChar + 1;
|
2011-12-26 10:27:37 +01:00
|
|
|
UINT mbcp;
|
2011-01-16 15:00:25 +01:00
|
|
|
UINT c;
|
|
|
|
LPSTR str;
|
|
|
|
|
|
|
|
if (count <= 0)
|
|
|
|
return NULL;
|
|
|
|
|
2011-12-26 10:27:37 +01:00
|
|
|
mbcp = GdiGetCodePage(hdc);
|
|
|
|
switch (mbcp)
|
2011-01-26 17:09:03 +01:00
|
|
|
{
|
|
|
|
case 932:
|
|
|
|
case 936:
|
|
|
|
case 949:
|
|
|
|
case 950:
|
|
|
|
case 1361:
|
|
|
|
if (lastChar > 0xffff)
|
|
|
|
return NULL;
|
2011-02-01 17:37:09 +01:00
|
|
|
if ((firstChar ^ lastChar) > 0xff)
|
|
|
|
return NULL;
|
2011-01-26 17:09:03 +01:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
if (lastChar > 0xff)
|
|
|
|
return NULL;
|
2011-12-26 10:27:37 +01:00
|
|
|
mbcp = 0;
|
2011-01-26 17:09:03 +01:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2011-01-16 15:00:25 +01:00
|
|
|
str = HeapAlloc(GetProcessHeap(), 0, count * 2 + 1);
|
|
|
|
if (str == NULL)
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
for(i = 0, c = firstChar; c <= lastChar; i++, c++)
|
|
|
|
{
|
2011-12-26 10:27:37 +01:00
|
|
|
if (mbcp) {
|
|
|
|
if (c > 0xff)
|
|
|
|
str[i++] = (BYTE)(c >> 8);
|
|
|
|
if (c <= 0xff && IsDBCSLeadByteEx(mbcp, c))
|
|
|
|
str[i] = 0x1f; /* FIXME: use default character */
|
|
|
|
else
|
|
|
|
str[i] = (BYTE)c;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
str[i] = (BYTE)c;
|
2011-01-16 15:00:25 +01:00
|
|
|
}
|
|
|
|
str[i] = '\0';
|
|
|
|
|
|
|
|
*pByteLen = i;
|
|
|
|
|
|
|
|
return str;
|
|
|
|
}
|
2001-09-12 22:21:06 +02:00
|
|
|
|
1996-12-22 19:27:48 +01:00
|
|
|
/***********************************************************************
|
2001-11-06 00:56:22 +01:00
|
|
|
* GetCharWidthW (GDI32.@)
|
|
|
|
* GetCharWidth32W (GDI32.@)
|
Release 0.4.7
Mon Nov 1 14:40:21 1993 julliard@di.epfl.ch (Alexandre Julliard)
* [if1632/user.spec]
Removed some duplicate entries.
* [include/dialog.h] [windows/dialog.c]
Implemented dialog units and fonts.
Added preliminary loading of dialog resources.
Preliminary implementation of DialogBox().
Implemented Get/SetDlgItem* functions.
* [windows/win.c]
Implemented WM_PARENTNOTIFY message.
Implemented CreateWindowEx() and GetWindow().
Completed DestroyWindow().
Mon Nov 1 18:19:34 1993 Erik Bos
* [loader/signal.c]
Added support for int 0x11 & 0x12.
* [loader/int21.c]
Improved function handling.
Sun Oct 31 12:38:09 1993 David Metcalfe <david@prism.demon.co.uk>
* [objects/font.c]
Implemented GetCharWidth().
Wed Oct 27 09:56:06 1993 John Brezak <brezak@ch.hp.com>
* [Makefile]
Use GNU malloc.
* [include/int21.h include/wine.h]
Change sc_eflags to sc_efl .
* [include/wine.h]
Fix misplaced #endif
Include <signal.h> for NetBSD
* [loader/int21.c]
Don't include <sys/vfs.h> in NetBSD
Do include <sys/mount.h> in NetBSD
Cleanup some lint.
Mon Oct 26 17:59:01 1993 Erik Bos
* [include/int21.h]
Added.
* [loader/int21.c]
Added support for many dos ints.
* [misc/file.c] [include/files.h]
Moved OPEN_MAX and DosDriveStruct to files.h.
Sun Oct 24 13:36:50 1993 David Metcalfe <david@prism.demon.co.uk>
* [controls/button.c]
Implemented CHECKBOX, AUTOCHECKBOX, 3STATE, AUTO3STATE,
RADIOBUTTON, AUTORADIOBUTTON, GROUPBOX controls, together with
a preliminary USERBUTTON control.
* [objects/text.c]
Corrected bugs in TEXT_NextLine() and added handling of prefix
character.
* [controls/button.c]
Disabled focus handling by commenting out SetFocus() calls until
serious bug can be found.
Oct 20, 93 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)
* [controls/listbox.c]
Listbox control window
Painting cleanup, new messages processed.
* [controls/scroll.c]
Scroll bar control window
Painting cleanup.
* [controls/combo.c]
Combo box control window
Painting cleanup.
Tue Oct 12 17:50:11 1993 julliard@di.epfl.ch (Alexandre Julliard)
* [objects/color.c] [objects/palette.c] [windows/syscolor.c]
Better support for the private color map.
Using a private map is now the default.
* [windows/win.c]
Bug fix.
* [include/dialog.h] [windows/dialog.c]
Implemented CreateDialog*() and IsDialogMessage().
* [misc/xt.c] [windows/defwnd.c]
Moved DefWindowProc() to defwnd.c.
Added WM_NCCREATE, WM_NCDESTROY and WM_CTLCOLOR handling.
* [windows/defdlg.c]
Started the implementation of DefDlgProc().
* [windows/win.c]
Added WM_NCCREATE and WM_NCDESTROY messages.
Implemented IsChild().
Tue Oct 12 17:50:20 1993 David Metcalfe <david@prism.demon.co.uk>
* [windows/focus.c]
Implemented GetFocus() and SetFocus().
* [windows/event.c]
Added processing of FocusIn and FocusOut events.
* [windows/graphics.c]
Added DrawFocusRect().
Sat Oct 9 14:36:57 1993 Erik Bos
* [loader/int1a.c]
Added more function handling.
Wed Oct 6 12:21:22 1993 Erik Bos
* [loader/signal.c]
Split signal.c into int1a.c, int21.c and signal.c.
Tue Oct 5 22:12:40 1993 David Metcalfe
* [controls/static.c] [control/widgets.c]
Static control class.
* [objects/text.c]
Added processing of additional DT_ flags to DrawText().
* [windows/win.c] [misc/xt.c]
Added SetWindowText() and WM_SETTEXT processing.
Tue Oct 5 22:12:40 1993 Martin Ayotte
* [controls/listbox.c]
Listbox control window
* [controls/scroll.c]
Scroll bar control window
* [controls/combo.c]
Combo box control window
* [include/combo.h]
Combo box definitions
* [include/listbox.h]
Listbox definitions
* [include/scroll.h]
Scroll bar definitions
Sat Oct 2 09:35:54 1993 Bob Amstadt (bob at pooh)
* [if1632/callback.c]
Fixed bug in MakeProcInstance().
* [debugger/info.c]
Changed x/w and x/b to display in hex.
* [debugger/i386-pinsn.c]
Added code to properly unassemble 16-bit indexing.
Fri Oct 1 08:29:05 1993 Bob Amstadt (bob at pooh)
* [loader/files.c] [misc/profile.c]
System initialization file is now called "wine.ini" and can
be located in the current directory, the user's home directory,
or any directories specified in the WINEPATH environment variable.
* [tools/build.c] [if1632/call.S] [include/regfunc.h]
Changed register function stack to match sigcontext structure.
Thu Sep 30 22:30:21 1993 Bob Amstadt (bob at pooh)
* [loader/files.c]
Created function to search a path for files to load.
* [loader/wine.c]
Modified exe and dll file loading to search through path
specified by the environment variable WINEPATH.
Thu Sep 30 22:30:21 1993 Eric Youngdale
* [loader/signal.c]
Bug fix.
Thu Sep 30 22:30:21 1993 John Brezak
* [debugger/dbg.y] [debugger/debug.l] [debugger/dtest.c]
[debugger/obstack.h]
Updates to allow debugger to function under NetBSD.
1993-11-03 20:23:37 +01:00
|
|
|
*/
|
2001-11-06 00:56:22 +01:00
|
|
|
BOOL WINAPI GetCharWidth32W( HDC hdc, UINT firstChar, UINT lastChar,
|
1999-02-26 12:11:13 +01:00
|
|
|
LPINT buffer )
|
Release 0.4.7
Mon Nov 1 14:40:21 1993 julliard@di.epfl.ch (Alexandre Julliard)
* [if1632/user.spec]
Removed some duplicate entries.
* [include/dialog.h] [windows/dialog.c]
Implemented dialog units and fonts.
Added preliminary loading of dialog resources.
Preliminary implementation of DialogBox().
Implemented Get/SetDlgItem* functions.
* [windows/win.c]
Implemented WM_PARENTNOTIFY message.
Implemented CreateWindowEx() and GetWindow().
Completed DestroyWindow().
Mon Nov 1 18:19:34 1993 Erik Bos
* [loader/signal.c]
Added support for int 0x11 & 0x12.
* [loader/int21.c]
Improved function handling.
Sun Oct 31 12:38:09 1993 David Metcalfe <david@prism.demon.co.uk>
* [objects/font.c]
Implemented GetCharWidth().
Wed Oct 27 09:56:06 1993 John Brezak <brezak@ch.hp.com>
* [Makefile]
Use GNU malloc.
* [include/int21.h include/wine.h]
Change sc_eflags to sc_efl .
* [include/wine.h]
Fix misplaced #endif
Include <signal.h> for NetBSD
* [loader/int21.c]
Don't include <sys/vfs.h> in NetBSD
Do include <sys/mount.h> in NetBSD
Cleanup some lint.
Mon Oct 26 17:59:01 1993 Erik Bos
* [include/int21.h]
Added.
* [loader/int21.c]
Added support for many dos ints.
* [misc/file.c] [include/files.h]
Moved OPEN_MAX and DosDriveStruct to files.h.
Sun Oct 24 13:36:50 1993 David Metcalfe <david@prism.demon.co.uk>
* [controls/button.c]
Implemented CHECKBOX, AUTOCHECKBOX, 3STATE, AUTO3STATE,
RADIOBUTTON, AUTORADIOBUTTON, GROUPBOX controls, together with
a preliminary USERBUTTON control.
* [objects/text.c]
Corrected bugs in TEXT_NextLine() and added handling of prefix
character.
* [controls/button.c]
Disabled focus handling by commenting out SetFocus() calls until
serious bug can be found.
Oct 20, 93 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)
* [controls/listbox.c]
Listbox control window
Painting cleanup, new messages processed.
* [controls/scroll.c]
Scroll bar control window
Painting cleanup.
* [controls/combo.c]
Combo box control window
Painting cleanup.
Tue Oct 12 17:50:11 1993 julliard@di.epfl.ch (Alexandre Julliard)
* [objects/color.c] [objects/palette.c] [windows/syscolor.c]
Better support for the private color map.
Using a private map is now the default.
* [windows/win.c]
Bug fix.
* [include/dialog.h] [windows/dialog.c]
Implemented CreateDialog*() and IsDialogMessage().
* [misc/xt.c] [windows/defwnd.c]
Moved DefWindowProc() to defwnd.c.
Added WM_NCCREATE, WM_NCDESTROY and WM_CTLCOLOR handling.
* [windows/defdlg.c]
Started the implementation of DefDlgProc().
* [windows/win.c]
Added WM_NCCREATE and WM_NCDESTROY messages.
Implemented IsChild().
Tue Oct 12 17:50:20 1993 David Metcalfe <david@prism.demon.co.uk>
* [windows/focus.c]
Implemented GetFocus() and SetFocus().
* [windows/event.c]
Added processing of FocusIn and FocusOut events.
* [windows/graphics.c]
Added DrawFocusRect().
Sat Oct 9 14:36:57 1993 Erik Bos
* [loader/int1a.c]
Added more function handling.
Wed Oct 6 12:21:22 1993 Erik Bos
* [loader/signal.c]
Split signal.c into int1a.c, int21.c and signal.c.
Tue Oct 5 22:12:40 1993 David Metcalfe
* [controls/static.c] [control/widgets.c]
Static control class.
* [objects/text.c]
Added processing of additional DT_ flags to DrawText().
* [windows/win.c] [misc/xt.c]
Added SetWindowText() and WM_SETTEXT processing.
Tue Oct 5 22:12:40 1993 Martin Ayotte
* [controls/listbox.c]
Listbox control window
* [controls/scroll.c]
Scroll bar control window
* [controls/combo.c]
Combo box control window
* [include/combo.h]
Combo box definitions
* [include/listbox.h]
Listbox definitions
* [include/scroll.h]
Scroll bar definitions
Sat Oct 2 09:35:54 1993 Bob Amstadt (bob at pooh)
* [if1632/callback.c]
Fixed bug in MakeProcInstance().
* [debugger/info.c]
Changed x/w and x/b to display in hex.
* [debugger/i386-pinsn.c]
Added code to properly unassemble 16-bit indexing.
Fri Oct 1 08:29:05 1993 Bob Amstadt (bob at pooh)
* [loader/files.c] [misc/profile.c]
System initialization file is now called "wine.ini" and can
be located in the current directory, the user's home directory,
or any directories specified in the WINEPATH environment variable.
* [tools/build.c] [if1632/call.S] [include/regfunc.h]
Changed register function stack to match sigcontext structure.
Thu Sep 30 22:30:21 1993 Bob Amstadt (bob at pooh)
* [loader/files.c]
Created function to search a path for files to load.
* [loader/wine.c]
Modified exe and dll file loading to search through path
specified by the environment variable WINEPATH.
Thu Sep 30 22:30:21 1993 Eric Youngdale
* [loader/signal.c]
Bug fix.
Thu Sep 30 22:30:21 1993 John Brezak
* [debugger/dbg.y] [debugger/debug.l] [debugger/dtest.c]
[debugger/obstack.h]
Updates to allow debugger to function under NetBSD.
1993-11-03 20:23:37 +01:00
|
|
|
{
|
2003-08-05 21:17:40 +02:00
|
|
|
UINT i;
|
2011-03-15 20:42:49 +01:00
|
|
|
BOOL ret;
|
2011-10-19 13:38:10 +02:00
|
|
|
PHYSDEV dev;
|
2008-02-05 21:16:27 +01:00
|
|
|
DC * dc = get_dc_ptr( hdc );
|
2011-10-19 13:38:10 +02:00
|
|
|
|
2000-08-19 23:38:55 +02:00
|
|
|
if (!dc) return FALSE;
|
1997-06-29 20:08:02 +02:00
|
|
|
|
2011-10-19 13:38:10 +02:00
|
|
|
dev = GET_DC_PHYSDEV( dc, pGetCharWidth );
|
|
|
|
ret = dev->funcs->pGetCharWidth( dev, firstChar, lastChar, buffer );
|
2001-09-12 22:21:06 +02:00
|
|
|
|
|
|
|
if (ret)
|
2000-08-19 23:38:55 +02:00
|
|
|
{
|
|
|
|
/* convert device units to logical */
|
|
|
|
for( i = firstChar; i <= lastChar; i++, buffer++ )
|
2013-09-11 18:31:01 +02:00
|
|
|
*buffer = width_to_LP( dc, *buffer );
|
2000-08-19 23:38:55 +02:00
|
|
|
}
|
2008-02-05 21:16:27 +01:00
|
|
|
release_dc_ptr( dc );
|
2000-08-19 23:38:55 +02:00
|
|
|
return ret;
|
Release 0.4.7
Mon Nov 1 14:40:21 1993 julliard@di.epfl.ch (Alexandre Julliard)
* [if1632/user.spec]
Removed some duplicate entries.
* [include/dialog.h] [windows/dialog.c]
Implemented dialog units and fonts.
Added preliminary loading of dialog resources.
Preliminary implementation of DialogBox().
Implemented Get/SetDlgItem* functions.
* [windows/win.c]
Implemented WM_PARENTNOTIFY message.
Implemented CreateWindowEx() and GetWindow().
Completed DestroyWindow().
Mon Nov 1 18:19:34 1993 Erik Bos
* [loader/signal.c]
Added support for int 0x11 & 0x12.
* [loader/int21.c]
Improved function handling.
Sun Oct 31 12:38:09 1993 David Metcalfe <david@prism.demon.co.uk>
* [objects/font.c]
Implemented GetCharWidth().
Wed Oct 27 09:56:06 1993 John Brezak <brezak@ch.hp.com>
* [Makefile]
Use GNU malloc.
* [include/int21.h include/wine.h]
Change sc_eflags to sc_efl .
* [include/wine.h]
Fix misplaced #endif
Include <signal.h> for NetBSD
* [loader/int21.c]
Don't include <sys/vfs.h> in NetBSD
Do include <sys/mount.h> in NetBSD
Cleanup some lint.
Mon Oct 26 17:59:01 1993 Erik Bos
* [include/int21.h]
Added.
* [loader/int21.c]
Added support for many dos ints.
* [misc/file.c] [include/files.h]
Moved OPEN_MAX and DosDriveStruct to files.h.
Sun Oct 24 13:36:50 1993 David Metcalfe <david@prism.demon.co.uk>
* [controls/button.c]
Implemented CHECKBOX, AUTOCHECKBOX, 3STATE, AUTO3STATE,
RADIOBUTTON, AUTORADIOBUTTON, GROUPBOX controls, together with
a preliminary USERBUTTON control.
* [objects/text.c]
Corrected bugs in TEXT_NextLine() and added handling of prefix
character.
* [controls/button.c]
Disabled focus handling by commenting out SetFocus() calls until
serious bug can be found.
Oct 20, 93 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)
* [controls/listbox.c]
Listbox control window
Painting cleanup, new messages processed.
* [controls/scroll.c]
Scroll bar control window
Painting cleanup.
* [controls/combo.c]
Combo box control window
Painting cleanup.
Tue Oct 12 17:50:11 1993 julliard@di.epfl.ch (Alexandre Julliard)
* [objects/color.c] [objects/palette.c] [windows/syscolor.c]
Better support for the private color map.
Using a private map is now the default.
* [windows/win.c]
Bug fix.
* [include/dialog.h] [windows/dialog.c]
Implemented CreateDialog*() and IsDialogMessage().
* [misc/xt.c] [windows/defwnd.c]
Moved DefWindowProc() to defwnd.c.
Added WM_NCCREATE, WM_NCDESTROY and WM_CTLCOLOR handling.
* [windows/defdlg.c]
Started the implementation of DefDlgProc().
* [windows/win.c]
Added WM_NCCREATE and WM_NCDESTROY messages.
Implemented IsChild().
Tue Oct 12 17:50:20 1993 David Metcalfe <david@prism.demon.co.uk>
* [windows/focus.c]
Implemented GetFocus() and SetFocus().
* [windows/event.c]
Added processing of FocusIn and FocusOut events.
* [windows/graphics.c]
Added DrawFocusRect().
Sat Oct 9 14:36:57 1993 Erik Bos
* [loader/int1a.c]
Added more function handling.
Wed Oct 6 12:21:22 1993 Erik Bos
* [loader/signal.c]
Split signal.c into int1a.c, int21.c and signal.c.
Tue Oct 5 22:12:40 1993 David Metcalfe
* [controls/static.c] [control/widgets.c]
Static control class.
* [objects/text.c]
Added processing of additional DT_ flags to DrawText().
* [windows/win.c] [misc/xt.c]
Added SetWindowText() and WM_SETTEXT processing.
Tue Oct 5 22:12:40 1993 Martin Ayotte
* [controls/listbox.c]
Listbox control window
* [controls/scroll.c]
Scroll bar control window
* [controls/combo.c]
Combo box control window
* [include/combo.h]
Combo box definitions
* [include/listbox.h]
Listbox definitions
* [include/scroll.h]
Scroll bar definitions
Sat Oct 2 09:35:54 1993 Bob Amstadt (bob at pooh)
* [if1632/callback.c]
Fixed bug in MakeProcInstance().
* [debugger/info.c]
Changed x/w and x/b to display in hex.
* [debugger/i386-pinsn.c]
Added code to properly unassemble 16-bit indexing.
Fri Oct 1 08:29:05 1993 Bob Amstadt (bob at pooh)
* [loader/files.c] [misc/profile.c]
System initialization file is now called "wine.ini" and can
be located in the current directory, the user's home directory,
or any directories specified in the WINEPATH environment variable.
* [tools/build.c] [if1632/call.S] [include/regfunc.h]
Changed register function stack to match sigcontext structure.
Thu Sep 30 22:30:21 1993 Bob Amstadt (bob at pooh)
* [loader/files.c]
Created function to search a path for files to load.
* [loader/wine.c]
Modified exe and dll file loading to search through path
specified by the environment variable WINEPATH.
Thu Sep 30 22:30:21 1993 Eric Youngdale
* [loader/signal.c]
Bug fix.
Thu Sep 30 22:30:21 1993 John Brezak
* [debugger/dbg.y] [debugger/debug.l] [debugger/dtest.c]
[debugger/obstack.h]
Updates to allow debugger to function under NetBSD.
1993-11-03 20:23:37 +01:00
|
|
|
}
|
Release 940420
Wed Apr 20 14:53:35 1994 Bob Amstadt (bob@pooh)
* [tools/build.c] [if1632/call.S] [if1632/Imakefile]
Fixed bug for non-Linux systems.
Apr 18, 94 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)
* [windows/win.c]
Bug fixed in CreateWindowEx() : Now use SetMenu() for menubar setup.
New empty stub for function SetSysModalWindow().
* [misc/exec.c]
New empty stub for function ExitWindows().
* [objects/font.c]
New empty stub for function EnumFonts().
* New file [misc/property.c]
New functions RemoveProp(), GetProp(), SetProp() & EnumProps().
* New file [misc/shell.c]
New empty stubs for function RegisterShellProc(),
ShellExecute() & ShellProc().
* New files [loader/task.c] & [include/task.h]
Move functions GetWindowTask(), GetNumTask(), EnumTaskWindows()
from 'loader/library.c'.
* [if1632/user.c] [if1632/kernel.c]
Put Atoms functions entries.
* [controls/combo.c]
New functions DirDlgSelectComboBox() & DirDlgListComboBox().
* [controls/listbox.c]
New functions DirDlgSelect() & DirDlgList().
Sun Apr 17 20:57:59 1994 Erik Bos (erik@trashcan.hacktic.nl)
* [objects/test.c]
GrayString() added.
* [if1632/callback.c]
CallGrayStringProc() added.
* [if1632/relay.c] [if1632/mmsystem.spec]
Added.
* [if1632/kernel.spec] [if1632/user.spec]
Added forgotten specs for atom functions.
Tue Apr 12 00:05:31 1994 Bob Amstadt (bob@pooh)
* misc/spy.c (SpyInit): Added more message types
* [windows/mdi.c] [include/mdi.h]
Maximizing and restoring child windows.
Tiling of child windows.
Mon Apr 11 20:48:28 1994 Alexandre Julliard (julliard@lamisun.epfl.ch)
* [windows/winpos.c]
Revert focus and activation to previous window when hiding a window.
* [windows/syscolor.c]
Implemented system color objects (brushes and pens created at
SetSysColor() time for better performance).
* [windows/graphics.c] [windows/nonclient.c] [controls/button.c]
Changed painting code to use system color objects.
* [windows/message.c]
New function MSG_InternalGetMessage() for internal messages
loops (e.g. for dialogs or menus).
* [windows/hook.c] [include/hook.h] (New files)
Beginning of the window hooks implementation.
* [windows/dialog.c]
Use new function MSG_InternalGetMessage() in DialogBox().
* [if1632/callback.c]
Added function CallHookProc().
Apr 11, 94 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)
* [windows/event.c]
Bug fix : WM_CHARs are sent to focused window like WM_KEY???.
* [misc/exec.c]
Nothing much more than a stub for LoadModule(), I saw there a lot
to be done in that corner, I will come back later ...
* [loader/library.c]
New functions GetWindowTask(), GetNumTask(), EnumTaskWindows()
and associated modules & tasks linked-lists.
(it's only an 'emerging bud', more to come next weeks).
* [loader/wine.c]
Use LoadLibrary() instead of LoadImage() for 'sysres.dll'.
* [control/menu.c]
You can now click outside menu region without problem.
Keyboard navig more smootly, even if a child has the focus.
Bug fix in InsertItem(), (bad linklist when insert point not found).
change Realloc for Free & Alloc in ModifyItem().
MF_STRING now set BLACK_PEN to fix bug of bad color of the underscores
done by DrawText(), (maybe it should done in DrawText() itself ?).
Sun Apr 10 14:06:08 1994 Erik Bos (erik@trashcan.hacktic.nl)
* [misc/profile.c]
.INI files will now be stored in / loaded from the windows dir
if no path is supplied.
* [if1632/kernel.spec]
Fixed GetDriveType's prototype.
* [if1632/winsock.spec] [include/winsock.h] [misc/winsocket.c]
Fixed prototypes: winsock uses a word as socket handle not an int.
* [misc/winsocket.c]
Added heap allocation for returned structures.
Added non-blocking WSAAsyncGetXbyY() functions as blocking ones.
* [loader/wine.c]
Added IsDLLLoaded(), used in LoadImage() to prevent loading
a dll multiple times.
Directory is added to wine's path when a fullpath is supplied when
starting wine.
LoadImage(): DLL filename used instead DLL's own internal name,
fixes 'Bad DLL name' errors.
Sat Apr 9 08:26:03 1994 David Metcalfe <david@prism.demon.co.uk>
* [controls/edit.c] [controls/widgets.c]
First release of edit control.
1994-04-21 03:20:00 +02:00
|
|
|
|
1994-11-07 19:20:42 +01:00
|
|
|
|
1996-12-22 19:27:48 +01:00
|
|
|
/***********************************************************************
|
2001-11-06 00:56:22 +01:00
|
|
|
* GetCharWidthA (GDI32.@)
|
|
|
|
* GetCharWidth32A (GDI32.@)
|
1996-12-22 19:27:48 +01:00
|
|
|
*/
|
2001-11-06 00:56:22 +01:00
|
|
|
BOOL WINAPI GetCharWidth32A( HDC hdc, UINT firstChar, UINT lastChar,
|
1999-02-26 12:11:13 +01:00
|
|
|
LPINT buffer )
|
1996-12-22 19:27:48 +01:00
|
|
|
{
|
2011-01-16 15:00:27 +01:00
|
|
|
INT i, wlen;
|
2001-11-06 00:56:22 +01:00
|
|
|
LPSTR str;
|
|
|
|
LPWSTR wstr;
|
|
|
|
BOOL ret = TRUE;
|
|
|
|
|
2011-01-26 17:09:03 +01:00
|
|
|
str = FONT_GetCharsByRangeA(hdc, firstChar, lastChar, &i);
|
2011-01-16 15:00:27 +01:00
|
|
|
if(str == NULL)
|
|
|
|
return FALSE;
|
2001-11-06 00:56:22 +01:00
|
|
|
|
2011-01-16 15:00:27 +01:00
|
|
|
wstr = FONT_mbtowc(hdc, str, i, &wlen, NULL);
|
2001-11-06 00:56:22 +01:00
|
|
|
|
|
|
|
for(i = 0; i < wlen; i++)
|
|
|
|
{
|
|
|
|
if(!GetCharWidth32W(hdc, wstr[i], wstr[i], buffer))
|
|
|
|
{
|
|
|
|
ret = FALSE;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
buffer++;
|
|
|
|
}
|
|
|
|
|
|
|
|
HeapFree(GetProcessHeap(), 0, str);
|
|
|
|
HeapFree(GetProcessHeap(), 0, wstr);
|
|
|
|
|
|
|
|
return ret;
|
1996-12-22 19:27:48 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2011-11-17 11:57:53 +01:00
|
|
|
/* helper for nulldrv_ExtTextOut */
|
2012-12-05 16:41:08 +01:00
|
|
|
static DWORD get_glyph_bitmap( HDC hdc, UINT index, UINT flags, UINT aa_flags,
|
2011-11-17 11:57:53 +01:00
|
|
|
GLYPHMETRICS *metrics, struct gdi_image_bits *image )
|
|
|
|
{
|
|
|
|
static const MAT2 identity = { {0,1}, {0,0}, {0,0}, {0,1} };
|
|
|
|
UINT indices[3] = {0, 0, 0x20};
|
2013-01-20 00:12:49 +01:00
|
|
|
unsigned int i;
|
2011-11-17 11:57:53 +01:00
|
|
|
DWORD ret, size;
|
|
|
|
int stride;
|
|
|
|
|
|
|
|
indices[0] = index;
|
2012-12-05 16:41:08 +01:00
|
|
|
if (flags & ETO_GLYPH_INDEX) aa_flags |= GGO_GLYPH_INDEX;
|
2011-11-17 11:57:53 +01:00
|
|
|
|
2011-11-24 10:26:45 +01:00
|
|
|
for (i = 0; i < sizeof(indices) / sizeof(indices[0]); i++)
|
2011-11-17 11:57:53 +01:00
|
|
|
{
|
2011-11-24 10:26:45 +01:00
|
|
|
index = indices[i];
|
2012-12-05 16:41:08 +01:00
|
|
|
ret = GetGlyphOutlineW( hdc, index, aa_flags, metrics, 0, NULL, &identity );
|
2011-11-17 11:57:53 +01:00
|
|
|
if (ret != GDI_ERROR) break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ret == GDI_ERROR) return ERROR_NOT_FOUND;
|
|
|
|
if (!image) return ERROR_SUCCESS;
|
|
|
|
|
|
|
|
image->ptr = NULL;
|
|
|
|
image->free = NULL;
|
2013-09-19 17:57:53 +02:00
|
|
|
if (!ret) /* empty glyph */
|
|
|
|
{
|
|
|
|
metrics->gmBlackBoxX = metrics->gmBlackBoxY = 0;
|
|
|
|
return ERROR_SUCCESS;
|
|
|
|
}
|
2011-11-17 11:57:53 +01:00
|
|
|
|
|
|
|
stride = get_dib_stride( metrics->gmBlackBoxX, 1 );
|
|
|
|
size = metrics->gmBlackBoxY * stride;
|
|
|
|
|
|
|
|
if (!(image->ptr = HeapAlloc( GetProcessHeap(), 0, size ))) return ERROR_OUTOFMEMORY;
|
|
|
|
image->is_copy = TRUE;
|
|
|
|
image->free = free_heap_bits;
|
|
|
|
|
2012-12-05 16:41:08 +01:00
|
|
|
ret = GetGlyphOutlineW( hdc, index, aa_flags, metrics, size, image->ptr, &identity );
|
2011-11-17 11:57:53 +01:00
|
|
|
if (ret == GDI_ERROR)
|
|
|
|
{
|
|
|
|
HeapFree( GetProcessHeap(), 0, image->ptr );
|
|
|
|
return ERROR_NOT_FOUND;
|
|
|
|
}
|
|
|
|
return ERROR_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2011-11-17 16:55:16 +01:00
|
|
|
/* helper for nulldrv_ExtTextOut */
|
|
|
|
static RECT get_total_extents( HDC hdc, INT x, INT y, UINT flags, UINT aa_flags,
|
|
|
|
LPCWSTR str, UINT count, const INT *dx )
|
|
|
|
{
|
2013-01-20 00:12:49 +01:00
|
|
|
UINT i;
|
2012-04-10 16:04:39 +02:00
|
|
|
RECT rect, bounds;
|
2011-11-17 16:55:16 +01:00
|
|
|
|
2012-04-10 16:04:39 +02:00
|
|
|
reset_bounds( &bounds );
|
2011-11-17 16:55:16 +01:00
|
|
|
for (i = 0; i < count; i++)
|
|
|
|
{
|
|
|
|
GLYPHMETRICS metrics;
|
|
|
|
|
2012-12-05 16:41:08 +01:00
|
|
|
if (get_glyph_bitmap( hdc, str[i], flags, aa_flags, &metrics, NULL )) continue;
|
2011-11-17 16:55:16 +01:00
|
|
|
|
2012-04-10 16:04:39 +02:00
|
|
|
rect.left = x + metrics.gmptGlyphOrigin.x;
|
|
|
|
rect.top = y - metrics.gmptGlyphOrigin.y;
|
|
|
|
rect.right = rect.left + metrics.gmBlackBoxX;
|
|
|
|
rect.bottom = rect.top + metrics.gmBlackBoxY;
|
|
|
|
add_bounds_rect( &bounds, &rect );
|
2011-11-17 16:55:16 +01:00
|
|
|
|
|
|
|
if (dx)
|
|
|
|
{
|
|
|
|
if (flags & ETO_PDY)
|
|
|
|
{
|
|
|
|
x += dx[ i * 2 ];
|
|
|
|
y += dx[ i * 2 + 1];
|
|
|
|
}
|
|
|
|
else x += dx[ i ];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
x += metrics.gmCellIncX;
|
|
|
|
y += metrics.gmCellIncY;
|
|
|
|
}
|
|
|
|
}
|
2012-04-10 16:04:39 +02:00
|
|
|
return bounds;
|
2011-11-17 16:55:16 +01:00
|
|
|
}
|
|
|
|
|
2011-11-17 11:57:53 +01:00
|
|
|
/* helper for nulldrv_ExtTextOut */
|
2016-07-29 16:09:32 +02:00
|
|
|
static void draw_glyph( DC *dc, INT origin_x, INT origin_y, const GLYPHMETRICS *metrics,
|
2011-11-17 11:57:53 +01:00
|
|
|
const struct gdi_image_bits *image, const RECT *clip )
|
|
|
|
{
|
|
|
|
static const BYTE masks[8] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
|
2013-01-20 00:12:49 +01:00
|
|
|
UINT i, count, max_count;
|
|
|
|
LONG x, y;
|
2011-11-17 11:57:53 +01:00
|
|
|
BYTE *ptr = image->ptr;
|
|
|
|
int stride = get_dib_stride( metrics->gmBlackBoxX, 1 );
|
|
|
|
POINT *pts;
|
|
|
|
RECT rect, clipped_rect;
|
|
|
|
|
|
|
|
rect.left = origin_x + metrics->gmptGlyphOrigin.x;
|
|
|
|
rect.top = origin_y - metrics->gmptGlyphOrigin.y;
|
|
|
|
rect.right = rect.left + metrics->gmBlackBoxX;
|
|
|
|
rect.bottom = rect.top + metrics->gmBlackBoxY;
|
|
|
|
if (!clip) clipped_rect = rect;
|
|
|
|
else if (!intersect_rect( &clipped_rect, &rect, clip )) return;
|
|
|
|
|
2012-07-02 10:58:23 +02:00
|
|
|
max_count = (metrics->gmBlackBoxX + 1) * metrics->gmBlackBoxY;
|
|
|
|
pts = HeapAlloc( GetProcessHeap(), 0, max_count * sizeof(*pts) );
|
2011-11-17 11:57:53 +01:00
|
|
|
if (!pts) return;
|
|
|
|
|
|
|
|
count = 0;
|
|
|
|
ptr += (clipped_rect.top - rect.top) * stride;
|
|
|
|
for (y = clipped_rect.top; y < clipped_rect.bottom; y++, ptr += stride)
|
|
|
|
{
|
|
|
|
for (x = clipped_rect.left - rect.left; x < clipped_rect.right - rect.left; x++)
|
|
|
|
{
|
|
|
|
while (x < clipped_rect.right - rect.left && !(ptr[x / 8] & masks[x % 8])) x++;
|
|
|
|
pts[count].x = rect.left + x;
|
|
|
|
while (x < clipped_rect.right - rect.left && (ptr[x / 8] & masks[x % 8])) x++;
|
|
|
|
pts[count + 1].x = rect.left + x;
|
|
|
|
if (pts[count + 1].x > pts[count].x)
|
|
|
|
{
|
|
|
|
pts[count].y = pts[count + 1].y = y;
|
|
|
|
count += 2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-07-02 10:58:23 +02:00
|
|
|
assert( count <= max_count );
|
2016-07-29 16:09:32 +02:00
|
|
|
dp_to_lp( dc, pts, count );
|
|
|
|
for (i = 0; i < count; i += 2) Polyline( dc->hSelf, pts + i, 2 );
|
2011-11-17 11:57:53 +01:00
|
|
|
HeapFree( GetProcessHeap(), 0, pts );
|
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* nulldrv_ExtTextOut
|
|
|
|
*/
|
|
|
|
BOOL nulldrv_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags, const RECT *rect,
|
|
|
|
LPCWSTR str, UINT count, const INT *dx )
|
|
|
|
{
|
2011-11-17 16:55:16 +01:00
|
|
|
DC *dc = get_nulldrv_dc( dev );
|
2012-10-31 15:55:29 +01:00
|
|
|
UINT i;
|
2011-11-17 11:57:53 +01:00
|
|
|
DWORD err;
|
|
|
|
HGDIOBJ orig;
|
|
|
|
HPEN pen;
|
|
|
|
|
|
|
|
if (flags & ETO_OPAQUE)
|
|
|
|
{
|
|
|
|
RECT rc = *rect;
|
2016-07-29 16:09:35 +02:00
|
|
|
HBRUSH brush = CreateSolidBrush( GetNearestColor( dev->hdc, dc->backgroundColor ) );
|
2011-11-17 11:57:53 +01:00
|
|
|
|
|
|
|
if (brush)
|
|
|
|
{
|
|
|
|
orig = SelectObject( dev->hdc, brush );
|
2016-07-29 16:09:32 +02:00
|
|
|
dp_to_lp( dc, (POINT *)&rc, 2 );
|
2011-11-17 11:57:53 +01:00
|
|
|
PatBlt( dev->hdc, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, PATCOPY );
|
|
|
|
SelectObject( dev->hdc, orig );
|
|
|
|
DeleteObject( brush );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!count) return TRUE;
|
|
|
|
|
2012-10-31 15:55:29 +01:00
|
|
|
if (dc->aa_flags != GGO_BITMAP)
|
2011-11-17 16:55:16 +01:00
|
|
|
{
|
|
|
|
char buffer[FIELD_OFFSET( BITMAPINFO, bmiColors[256] )];
|
|
|
|
BITMAPINFO *info = (BITMAPINFO *)buffer;
|
|
|
|
struct gdi_image_bits bits;
|
|
|
|
struct bitblt_coords src, dst;
|
|
|
|
PHYSDEV dst_dev;
|
2012-10-30 14:22:16 +01:00
|
|
|
/* FIXME Subpixel modes */
|
2012-10-31 15:55:29 +01:00
|
|
|
UINT aa_flags = GGO_GRAY4_BITMAP;
|
2012-10-30 14:22:16 +01:00
|
|
|
|
2011-11-17 16:55:16 +01:00
|
|
|
dst_dev = GET_DC_PHYSDEV( dc, pPutImage );
|
|
|
|
src.visrect = get_total_extents( dev->hdc, x, y, flags, aa_flags, str, count, dx );
|
|
|
|
if (flags & ETO_CLIPPED) intersect_rect( &src.visrect, &src.visrect, rect );
|
2011-12-06 12:57:30 +01:00
|
|
|
if (!clip_visrect( dc, &src.visrect, &src.visrect )) return TRUE;
|
2011-11-17 16:55:16 +01:00
|
|
|
|
|
|
|
/* FIXME: check for ETO_OPAQUE and avoid GetImage */
|
|
|
|
src.x = src.visrect.left;
|
|
|
|
src.y = src.visrect.top;
|
|
|
|
src.width = src.visrect.right - src.visrect.left;
|
|
|
|
src.height = src.visrect.bottom - src.visrect.top;
|
|
|
|
dst = src;
|
|
|
|
if ((flags & ETO_OPAQUE) && (src.visrect.left >= rect->left) && (src.visrect.top >= rect->top) &&
|
|
|
|
(src.visrect.right <= rect->right) && (src.visrect.bottom <= rect->bottom))
|
|
|
|
{
|
|
|
|
/* we can avoid the GetImage, just query the needed format */
|
|
|
|
memset( &info->bmiHeader, 0, sizeof(info->bmiHeader) );
|
|
|
|
info->bmiHeader.biSize = sizeof(info->bmiHeader);
|
|
|
|
info->bmiHeader.biWidth = src.width;
|
|
|
|
info->bmiHeader.biHeight = -src.height;
|
2017-02-13 15:07:59 +01:00
|
|
|
info->bmiHeader.biSizeImage = get_dib_image_size( info );
|
2012-05-23 23:36:20 +02:00
|
|
|
err = dst_dev->funcs->pPutImage( dst_dev, 0, info, NULL, NULL, NULL, 0 );
|
2011-11-17 16:55:16 +01:00
|
|
|
if (!err || err == ERROR_BAD_FORMAT)
|
|
|
|
{
|
|
|
|
/* make the source rectangle relative to the source bits */
|
|
|
|
src.x = src.y = 0;
|
|
|
|
src.visrect.left = src.visrect.top = 0;
|
|
|
|
src.visrect.right = src.width;
|
|
|
|
src.visrect.bottom = src.height;
|
|
|
|
|
2017-02-13 15:07:59 +01:00
|
|
|
bits.ptr = HeapAlloc( GetProcessHeap(), 0, info->bmiHeader.biSizeImage );
|
2011-11-17 16:55:16 +01:00
|
|
|
if (!bits.ptr) return ERROR_OUTOFMEMORY;
|
|
|
|
bits.is_copy = TRUE;
|
|
|
|
bits.free = free_heap_bits;
|
|
|
|
err = ERROR_SUCCESS;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
PHYSDEV src_dev = GET_DC_PHYSDEV( dc, pGetImage );
|
2012-05-23 23:36:20 +02:00
|
|
|
err = src_dev->funcs->pGetImage( src_dev, info, &bits, &src );
|
2011-11-17 16:55:16 +01:00
|
|
|
if (!err && !bits.is_copy)
|
|
|
|
{
|
2017-02-13 15:07:59 +01:00
|
|
|
void *ptr = HeapAlloc( GetProcessHeap(), 0, info->bmiHeader.biSizeImage );
|
2011-11-17 16:55:16 +01:00
|
|
|
if (!ptr)
|
|
|
|
{
|
|
|
|
if (bits.free) bits.free( &bits );
|
|
|
|
return ERROR_OUTOFMEMORY;
|
|
|
|
}
|
2017-02-13 15:07:59 +01:00
|
|
|
memcpy( ptr, bits.ptr, info->bmiHeader.biSizeImage );
|
2011-11-17 16:55:16 +01:00
|
|
|
if (bits.free) bits.free( &bits );
|
|
|
|
bits.ptr = ptr;
|
|
|
|
bits.is_copy = TRUE;
|
|
|
|
bits.free = free_heap_bits;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!err)
|
|
|
|
{
|
|
|
|
/* make x,y relative to the image bits */
|
|
|
|
x += src.visrect.left - dst.visrect.left;
|
|
|
|
y += src.visrect.top - dst.visrect.top;
|
2016-07-28 11:49:47 +02:00
|
|
|
render_aa_text_bitmapinfo( dc, info, &bits, &src, x, y, flags,
|
2011-11-17 16:55:16 +01:00
|
|
|
aa_flags, str, count, dx );
|
2012-05-23 23:36:20 +02:00
|
|
|
err = dst_dev->funcs->pPutImage( dst_dev, 0, info, &bits, &src, &dst, SRCCOPY );
|
2011-11-17 16:55:16 +01:00
|
|
|
if (bits.free) bits.free( &bits );
|
|
|
|
return !err;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-07-29 16:09:35 +02:00
|
|
|
pen = CreatePen( PS_SOLID, 1, dc->textColor );
|
2011-11-17 11:57:53 +01:00
|
|
|
orig = SelectObject( dev->hdc, pen );
|
|
|
|
|
|
|
|
for (i = 0; i < count; i++)
|
|
|
|
{
|
|
|
|
GLYPHMETRICS metrics;
|
|
|
|
struct gdi_image_bits image;
|
|
|
|
|
2012-12-05 16:41:08 +01:00
|
|
|
err = get_glyph_bitmap( dev->hdc, str[i], flags, GGO_BITMAP, &metrics, &image );
|
2011-11-17 11:57:53 +01:00
|
|
|
if (err) continue;
|
|
|
|
|
2016-07-29 16:09:32 +02:00
|
|
|
if (image.ptr) draw_glyph( dc, x, y, &metrics, &image, (flags & ETO_CLIPPED) ? rect : NULL );
|
2011-11-17 11:57:53 +01:00
|
|
|
if (image.free) image.free( &image );
|
|
|
|
|
|
|
|
if (dx)
|
|
|
|
{
|
|
|
|
if (flags & ETO_PDY)
|
|
|
|
{
|
|
|
|
x += dx[ i * 2 ];
|
|
|
|
y += dx[ i * 2 + 1];
|
|
|
|
}
|
|
|
|
else x += dx[ i ];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
x += metrics.gmCellIncX;
|
|
|
|
y += metrics.gmCellIncY;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
SelectObject( dev->hdc, orig );
|
|
|
|
DeleteObject( pen );
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2004-07-21 06:07:28 +02:00
|
|
|
/***********************************************************************
|
|
|
|
* ExtTextOutA (GDI32.@)
|
2005-01-05 14:24:52 +01:00
|
|
|
*
|
|
|
|
* See ExtTextOutW.
|
2004-07-21 06:07:28 +02:00
|
|
|
*/
|
|
|
|
BOOL WINAPI ExtTextOutA( HDC hdc, INT x, INT y, UINT flags,
|
|
|
|
const RECT *lprect, LPCSTR str, UINT count, const INT *lpDx )
|
|
|
|
{
|
|
|
|
INT wlen;
|
2007-02-15 08:52:33 +01:00
|
|
|
UINT codepage;
|
2006-04-11 21:20:52 +02:00
|
|
|
LPWSTR p;
|
2004-07-21 06:07:28 +02:00
|
|
|
BOOL ret;
|
|
|
|
LPINT lpDxW = NULL;
|
|
|
|
|
2006-04-11 21:20:52 +02:00
|
|
|
if (flags & ETO_GLYPH_INDEX)
|
|
|
|
return ExtTextOutW( hdc, x, y, flags, lprect, (LPCWSTR)str, count, lpDx );
|
|
|
|
|
2007-02-15 08:52:33 +01:00
|
|
|
p = FONT_mbtowc(hdc, str, count, &wlen, &codepage);
|
2006-04-11 21:20:52 +02:00
|
|
|
|
2004-07-21 06:07:28 +02:00
|
|
|
if (lpDx) {
|
|
|
|
unsigned int i = 0, j = 0;
|
|
|
|
|
2010-05-05 15:59:07 +02:00
|
|
|
/* allocate enough for a ETO_PDY */
|
|
|
|
lpDxW = HeapAlloc( GetProcessHeap(), 0, 2*wlen*sizeof(INT));
|
2004-07-21 06:07:28 +02:00
|
|
|
while(i < count) {
|
2010-05-05 15:59:07 +02:00
|
|
|
if(IsDBCSLeadByteEx(codepage, str[i]))
|
|
|
|
{
|
|
|
|
if(flags & ETO_PDY)
|
|
|
|
{
|
|
|
|
lpDxW[j++] = lpDx[i * 2] + lpDx[(i + 1) * 2];
|
|
|
|
lpDxW[j++] = lpDx[i * 2 + 1] + lpDx[(i + 1) * 2 + 1];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
lpDxW[j++] = lpDx[i] + lpDx[i + 1];
|
2004-07-21 06:07:28 +02:00
|
|
|
i = i + 2;
|
2010-05-05 15:59:07 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if(flags & ETO_PDY)
|
|
|
|
{
|
|
|
|
lpDxW[j++] = lpDx[i * 2];
|
|
|
|
lpDxW[j++] = lpDx[i * 2 + 1];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
lpDxW[j++] = lpDx[i];
|
2004-07-21 06:07:28 +02:00
|
|
|
i = i + 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
ret = ExtTextOutW( hdc, x, y, flags, lprect, p, wlen, lpDxW );
|
|
|
|
|
|
|
|
HeapFree( GetProcessHeap(), 0, p );
|
2004-12-23 18:06:43 +01:00
|
|
|
HeapFree( GetProcessHeap(), 0, lpDxW );
|
2004-07-21 06:07:28 +02:00
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2015-05-19 09:58:24 +02:00
|
|
|
/***********************************************************************
|
|
|
|
* get_line_width
|
|
|
|
*
|
|
|
|
* Scale the underline / strikeout line width.
|
|
|
|
*/
|
|
|
|
static inline int get_line_width( DC *dc, int metric_size )
|
|
|
|
{
|
|
|
|
int width = abs( INTERNAL_YWSTODS( dc, metric_size ));
|
|
|
|
if (width == 0) width = 1;
|
|
|
|
if (metric_size < 0) width = -width;
|
|
|
|
return width;
|
|
|
|
}
|
2004-07-21 06:07:28 +02:00
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* ExtTextOutW (GDI32.@)
|
2005-01-05 14:24:52 +01:00
|
|
|
*
|
|
|
|
* Draws text using the currently selected font, background color, and text color.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* PARAMS
|
|
|
|
* x,y [I] coordinates of string
|
|
|
|
* flags [I]
|
|
|
|
* ETO_GRAYED - undocumented on MSDN
|
|
|
|
* ETO_OPAQUE - use background color for fill the rectangle
|
|
|
|
* ETO_CLIPPED - clipping text to the rectangle
|
|
|
|
* ETO_GLYPH_INDEX - Buffer is of glyph locations in fonts rather
|
|
|
|
* than encoded characters. Implies ETO_IGNORELANGUAGE
|
|
|
|
* ETO_RTLREADING - Paragraph is basically a right-to-left paragraph.
|
|
|
|
* Affects BiDi ordering
|
|
|
|
* ETO_IGNORELANGUAGE - Undocumented in MSDN - instructs ExtTextOut not to do BiDi reordering
|
|
|
|
* ETO_PDY - unimplemented
|
|
|
|
* ETO_NUMERICSLATIN - unimplemented always assumed -
|
|
|
|
* do not translate numbers into locale representations
|
|
|
|
* ETO_NUMERICSLOCAL - unimplemented - Numerals in Arabic/Farsi context should assume local form
|
|
|
|
* lprect [I] dimensions for clipping or/and opaquing
|
|
|
|
* str [I] text string
|
|
|
|
* count [I] number of symbols in string
|
|
|
|
* lpDx [I] optional parameter with distance between drawing characters
|
|
|
|
*
|
|
|
|
* RETURNS
|
|
|
|
* Success: TRUE
|
|
|
|
* Failure: FALSE
|
2004-07-21 06:07:28 +02:00
|
|
|
*/
|
|
|
|
BOOL WINAPI ExtTextOutW( HDC hdc, INT x, INT y, UINT flags,
|
|
|
|
const RECT *lprect, LPCWSTR str, UINT count, const INT *lpDx )
|
|
|
|
{
|
|
|
|
BOOL ret = FALSE;
|
2005-08-23 11:38:58 +02:00
|
|
|
LPWSTR reordered_str = (LPWSTR)str;
|
2005-09-19 16:36:32 +02:00
|
|
|
WORD *glyphs = NULL;
|
2016-07-29 16:09:35 +02:00
|
|
|
UINT align;
|
|
|
|
DWORD layout;
|
2005-08-23 11:38:58 +02:00
|
|
|
POINT pt;
|
|
|
|
TEXTMETRICW tm;
|
|
|
|
LOGFONTW lf;
|
|
|
|
double cosEsc, sinEsc;
|
2010-05-06 15:05:39 +02:00
|
|
|
INT char_extra;
|
2005-08-23 11:38:58 +02:00
|
|
|
SIZE sz;
|
|
|
|
RECT rc;
|
2010-05-06 15:05:39 +02:00
|
|
|
POINT *deltas = NULL, width = {0, 0};
|
2005-08-23 11:38:58 +02:00
|
|
|
DWORD type;
|
2007-09-17 16:49:37 +02:00
|
|
|
DC * dc = get_dc_ptr( hdc );
|
2011-03-15 20:42:49 +01:00
|
|
|
PHYSDEV physdev;
|
2007-02-08 16:12:08 +01:00
|
|
|
INT breakRem;
|
2008-10-17 02:09:56 +02:00
|
|
|
static int quietfixme = 0;
|
2005-08-23 11:38:58 +02:00
|
|
|
|
|
|
|
if (!dc) return FALSE;
|
|
|
|
|
2016-07-29 16:09:35 +02:00
|
|
|
align = dc->textAlign;
|
2007-02-08 16:12:08 +01:00
|
|
|
breakRem = dc->breakRem;
|
2016-07-29 16:09:35 +02:00
|
|
|
layout = dc->layout;
|
2007-02-08 16:12:08 +01:00
|
|
|
|
2010-05-06 15:05:39 +02:00
|
|
|
if (quietfixme == 0 && flags & (ETO_NUMERICSLOCAL | ETO_NUMERICSLATIN))
|
2008-10-17 02:09:56 +02:00
|
|
|
{
|
2010-05-06 15:05:39 +02:00
|
|
|
FIXME("flags ETO_NUMERICSLOCAL | ETO_NUMERICSLATIN unimplemented\n");
|
2008-10-17 02:09:56 +02:00
|
|
|
quietfixme = 1;
|
|
|
|
}
|
2005-08-23 11:38:58 +02:00
|
|
|
|
2007-09-17 16:49:37 +02:00
|
|
|
update_dc( dc );
|
2011-03-15 20:42:49 +01:00
|
|
|
physdev = GET_DC_PHYSDEV( dc, pExtTextOut );
|
2005-08-23 11:38:58 +02:00
|
|
|
type = GetObjectType(hdc);
|
|
|
|
if(type == OBJ_METADC || type == OBJ_ENHMETADC)
|
|
|
|
{
|
2011-03-15 20:42:49 +01:00
|
|
|
ret = physdev->funcs->pExtTextOut( physdev, x, y, flags, lprect, str, count, lpDx );
|
2007-09-17 16:49:37 +02:00
|
|
|
release_dc_ptr( dc );
|
2005-08-23 11:38:58 +02:00
|
|
|
return ret;
|
|
|
|
}
|
2006-06-06 05:42:45 +02:00
|
|
|
|
2010-07-29 13:37:20 +02:00
|
|
|
if (flags & ETO_RTLREADING) align |= TA_RTLREADING;
|
|
|
|
if (layout & LAYOUT_RTL)
|
|
|
|
{
|
|
|
|
if ((align & TA_CENTER) != TA_CENTER) align ^= TA_RIGHT;
|
|
|
|
align ^= TA_RTLREADING;
|
|
|
|
}
|
|
|
|
|
2007-09-11 13:07:56 +02:00
|
|
|
if( !(flags & (ETO_GLYPH_INDEX | ETO_IGNORELANGUAGE)) && count > 0 )
|
2005-08-23 11:38:58 +02:00
|
|
|
{
|
2010-05-21 22:11:34 +02:00
|
|
|
INT cGlyphs;
|
2005-08-23 11:38:58 +02:00
|
|
|
reordered_str = HeapAlloc(GetProcessHeap(), 0, count*sizeof(WCHAR));
|
|
|
|
|
2010-05-13 17:43:26 +02:00
|
|
|
BIDI_Reorder( hdc, str, count, GCP_REORDER,
|
2010-07-29 13:37:20 +02:00
|
|
|
(align & TA_RTLREADING) ? WINE_GCPW_FORCE_RTL : WINE_GCPW_FORCE_LTR,
|
2010-05-21 22:11:34 +02:00
|
|
|
reordered_str, count, NULL, &glyphs, &cGlyphs);
|
2010-07-29 13:37:20 +02:00
|
|
|
|
2005-08-23 11:38:58 +02:00
|
|
|
flags |= ETO_IGNORELANGUAGE;
|
2010-05-13 17:43:26 +02:00
|
|
|
if (glyphs)
|
2010-05-21 22:11:34 +02:00
|
|
|
{
|
2010-05-13 17:43:26 +02:00
|
|
|
flags |= ETO_GLYPH_INDEX;
|
2010-05-21 22:11:34 +02:00
|
|
|
if (cGlyphs != count)
|
|
|
|
count = cGlyphs;
|
|
|
|
}
|
2005-08-23 11:38:58 +02:00
|
|
|
}
|
2010-05-13 17:43:26 +02:00
|
|
|
else if(flags & ETO_GLYPH_INDEX)
|
|
|
|
glyphs = reordered_str;
|
2005-08-23 11:38:58 +02:00
|
|
|
|
2010-07-28 23:15:01 +02:00
|
|
|
TRACE("%p, %d, %d, %08x, %s, %s, %d, %p)\n", hdc, x, y, flags,
|
|
|
|
wine_dbgstr_rect(lprect), debugstr_wn(str, count), count, lpDx);
|
2016-07-29 16:09:35 +02:00
|
|
|
TRACE("align = %x bkmode = %x mapmode = %x\n", align, dc->backgroundMode, dc->MapMode);
|
2005-08-23 11:38:58 +02:00
|
|
|
|
|
|
|
if(align & TA_UPDATECP)
|
|
|
|
{
|
2016-07-29 16:09:35 +02:00
|
|
|
pt = dc->cur_pos;
|
2005-08-23 11:38:58 +02:00
|
|
|
x = pt.x;
|
|
|
|
y = pt.y;
|
|
|
|
}
|
|
|
|
|
|
|
|
GetTextMetricsW(hdc, &tm);
|
2016-07-29 16:09:34 +02:00
|
|
|
GetObjectW(dc->hFont, sizeof(lf), &lf);
|
2005-08-23 11:38:58 +02:00
|
|
|
|
|
|
|
if(!(tm.tmPitchAndFamily & TMPF_VECTOR)) /* Non-scalable fonts shouldn't be rotated */
|
|
|
|
lf.lfEscapement = 0;
|
|
|
|
|
2011-02-25 13:19:55 +01:00
|
|
|
if ((dc->GraphicsMode == GM_COMPATIBLE) &&
|
|
|
|
(dc->vport2WorldValid && dc->xformWorld2Vport.eM11 * dc->xformWorld2Vport.eM22 < 0))
|
|
|
|
{
|
|
|
|
lf.lfEscapement = -lf.lfEscapement;
|
|
|
|
}
|
|
|
|
|
2005-08-23 11:38:58 +02:00
|
|
|
if(lf.lfEscapement != 0)
|
|
|
|
{
|
|
|
|
cosEsc = cos(lf.lfEscapement * M_PI / 1800);
|
|
|
|
sinEsc = sin(lf.lfEscapement * M_PI / 1800);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
cosEsc = 1;
|
|
|
|
sinEsc = 0;
|
|
|
|
}
|
|
|
|
|
2015-06-04 01:22:53 +02:00
|
|
|
if (lprect && (flags & (ETO_OPAQUE | ETO_CLIPPED)))
|
2005-08-23 11:38:58 +02:00
|
|
|
{
|
2012-12-20 15:08:23 +01:00
|
|
|
rc = *lprect;
|
2016-07-18 12:32:56 +02:00
|
|
|
lp_to_dp(dc, (POINT*)&rc, 2);
|
2012-12-14 16:55:56 +01:00
|
|
|
order_rect( &rc );
|
2012-12-20 15:08:23 +01:00
|
|
|
if (flags & ETO_OPAQUE)
|
|
|
|
physdev->funcs->pExtTextOut( physdev, 0, 0, ETO_OPAQUE, &rc, NULL, 0, NULL );
|
2005-08-23 11:38:58 +02:00
|
|
|
}
|
2012-12-20 15:08:23 +01:00
|
|
|
else flags &= ~ETO_CLIPPED;
|
2005-01-05 14:24:52 +01:00
|
|
|
|
2005-08-23 11:38:58 +02:00
|
|
|
if(count == 0)
|
2005-09-08 20:55:07 +02:00
|
|
|
{
|
|
|
|
ret = TRUE;
|
2005-08-23 11:38:58 +02:00
|
|
|
goto done;
|
2005-09-08 20:55:07 +02:00
|
|
|
}
|
2005-08-23 11:38:58 +02:00
|
|
|
|
|
|
|
pt.x = x;
|
|
|
|
pt.y = y;
|
2016-07-18 12:32:56 +02:00
|
|
|
lp_to_dp(dc, &pt, 1);
|
2005-08-23 11:38:58 +02:00
|
|
|
x = pt.x;
|
|
|
|
y = pt.y;
|
|
|
|
|
|
|
|
char_extra = GetTextCharacterExtra(hdc);
|
2013-03-26 12:14:26 +01:00
|
|
|
if (char_extra && lpDx && GetDeviceCaps( hdc, TECHNOLOGY ) == DT_RASPRINTER)
|
|
|
|
char_extra = 0; /* Printer drivers don't add char_extra if lpDx is supplied */
|
|
|
|
|
2007-05-31 13:47:19 +02:00
|
|
|
if(char_extra || dc->breakExtra || breakRem || lpDx || lf.lfEscapement != 0)
|
2005-08-23 11:38:58 +02:00
|
|
|
{
|
|
|
|
UINT i;
|
2010-05-06 15:05:39 +02:00
|
|
|
POINT total = {0, 0}, desired[2];
|
|
|
|
|
|
|
|
deltas = HeapAlloc(GetProcessHeap(), 0, count * sizeof(*deltas));
|
2012-12-20 14:32:58 +01:00
|
|
|
if (lpDx)
|
2004-07-21 06:07:28 +02:00
|
|
|
{
|
2012-12-20 14:32:58 +01:00
|
|
|
if (flags & ETO_PDY)
|
2010-05-06 15:05:39 +02:00
|
|
|
{
|
2012-12-20 14:32:58 +01:00
|
|
|
for (i = 0; i < count; i++)
|
2010-05-06 15:05:39 +02:00
|
|
|
{
|
|
|
|
deltas[i].x = lpDx[i * 2] + char_extra;
|
|
|
|
deltas[i].y = -lpDx[i * 2 + 1];
|
|
|
|
}
|
2012-12-20 14:32:58 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
for (i = 0; i < count; i++)
|
2010-05-06 15:05:39 +02:00
|
|
|
{
|
|
|
|
deltas[i].x = lpDx[i] + char_extra;
|
|
|
|
deltas[i].y = 0;
|
|
|
|
}
|
|
|
|
}
|
2012-12-20 14:32:58 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
INT *dx = HeapAlloc( GetProcessHeap(), 0, count * sizeof(*dx) );
|
|
|
|
|
|
|
|
if (flags & ETO_GLYPH_INDEX)
|
|
|
|
GetTextExtentExPointI( hdc, glyphs, count, -1, NULL, dx, &sz );
|
2005-08-23 11:38:58 +02:00
|
|
|
else
|
2012-12-20 14:32:58 +01:00
|
|
|
GetTextExtentExPointW( hdc, reordered_str, count, -1, NULL, dx, &sz );
|
2004-07-21 06:07:28 +02:00
|
|
|
|
2012-12-20 14:32:58 +01:00
|
|
|
deltas[0].x = dx[0];
|
|
|
|
deltas[0].y = 0;
|
|
|
|
for (i = 1; i < count; i++)
|
2005-08-23 11:38:58 +02:00
|
|
|
{
|
2012-12-20 14:32:58 +01:00
|
|
|
deltas[i].x = dx[i] - dx[i - 1];
|
|
|
|
deltas[i].y = 0;
|
2005-08-23 11:38:58 +02:00
|
|
|
}
|
2012-12-20 14:32:58 +01:00
|
|
|
HeapFree( GetProcessHeap(), 0, dx );
|
|
|
|
}
|
|
|
|
|
|
|
|
for(i = 0; i < count; i++)
|
|
|
|
{
|
2010-05-06 15:05:39 +02:00
|
|
|
total.x += deltas[i].x;
|
|
|
|
total.y += deltas[i].y;
|
|
|
|
|
|
|
|
desired[0].x = desired[0].y = 0;
|
|
|
|
|
|
|
|
desired[1].x = cosEsc * total.x + sinEsc * total.y;
|
|
|
|
desired[1].y = -sinEsc * total.x + cosEsc * total.y;
|
|
|
|
|
2016-07-18 12:32:56 +02:00
|
|
|
lp_to_dp(dc, desired, 2);
|
2010-05-06 15:05:39 +02:00
|
|
|
desired[1].x -= desired[0].x;
|
|
|
|
desired[1].y -= desired[0].y;
|
2011-02-25 13:19:55 +01:00
|
|
|
|
|
|
|
if (dc->GraphicsMode == GM_COMPATIBLE)
|
|
|
|
{
|
|
|
|
if (dc->vport2WorldValid && dc->xformWorld2Vport.eM11 < 0)
|
|
|
|
desired[1].x = -desired[1].x;
|
|
|
|
if (dc->vport2WorldValid && dc->xformWorld2Vport.eM22 < 0)
|
|
|
|
desired[1].y = -desired[1].y;
|
|
|
|
}
|
2010-05-06 15:05:39 +02:00
|
|
|
|
|
|
|
deltas[i].x = desired[1].x - width.x;
|
|
|
|
deltas[i].y = desired[1].y - width.y;
|
|
|
|
|
|
|
|
width = desired[1];
|
2005-08-23 11:38:58 +02:00
|
|
|
}
|
2010-05-06 15:05:39 +02:00
|
|
|
flags |= ETO_PDY;
|
2005-08-23 11:38:58 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2012-12-10 14:33:53 +01:00
|
|
|
POINT desired[2];
|
|
|
|
|
2012-12-20 15:08:23 +01:00
|
|
|
if(flags & ETO_GLYPH_INDEX)
|
|
|
|
GetTextExtentPointI(hdc, glyphs, count, &sz);
|
|
|
|
else
|
|
|
|
GetTextExtentPointW(hdc, reordered_str, count, &sz);
|
2012-12-10 14:33:53 +01:00
|
|
|
desired[0].x = desired[0].y = 0;
|
|
|
|
desired[1].x = sz.cx;
|
|
|
|
desired[1].y = 0;
|
2016-07-18 12:32:56 +02:00
|
|
|
lp_to_dp(dc, desired, 2);
|
2012-12-10 14:33:53 +01:00
|
|
|
desired[1].x -= desired[0].x;
|
|
|
|
desired[1].y -= desired[0].y;
|
|
|
|
|
|
|
|
if (dc->GraphicsMode == GM_COMPATIBLE)
|
|
|
|
{
|
|
|
|
if (dc->vport2WorldValid && dc->xformWorld2Vport.eM11 < 0)
|
|
|
|
desired[1].x = -desired[1].x;
|
|
|
|
if (dc->vport2WorldValid && dc->xformWorld2Vport.eM22 < 0)
|
|
|
|
desired[1].y = -desired[1].y;
|
|
|
|
}
|
|
|
|
width = desired[1];
|
2005-08-23 11:38:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
tm.tmAscent = abs(INTERNAL_YWSTODS(dc, tm.tmAscent));
|
|
|
|
tm.tmDescent = abs(INTERNAL_YWSTODS(dc, tm.tmDescent));
|
|
|
|
switch( align & (TA_LEFT | TA_RIGHT | TA_CENTER) )
|
|
|
|
{
|
|
|
|
case TA_LEFT:
|
|
|
|
if (align & TA_UPDATECP)
|
|
|
|
{
|
2010-05-06 15:05:39 +02:00
|
|
|
pt.x = x + width.x;
|
2010-06-17 17:25:04 +02:00
|
|
|
pt.y = y + width.y;
|
2016-07-29 16:09:32 +02:00
|
|
|
dp_to_lp(dc, &pt, 1);
|
2005-08-23 11:38:58 +02:00
|
|
|
MoveToEx(hdc, pt.x, pt.y, NULL);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case TA_CENTER:
|
2010-05-06 15:05:39 +02:00
|
|
|
x -= width.x / 2;
|
2010-06-17 17:25:04 +02:00
|
|
|
y -= width.y / 2;
|
2005-08-23 11:38:58 +02:00
|
|
|
break;
|
2005-08-19 11:58:57 +02:00
|
|
|
|
2005-08-23 11:38:58 +02:00
|
|
|
case TA_RIGHT:
|
2010-05-06 15:05:39 +02:00
|
|
|
x -= width.x;
|
2010-06-17 17:25:04 +02:00
|
|
|
y -= width.y;
|
2005-08-23 11:38:58 +02:00
|
|
|
if (align & TA_UPDATECP)
|
|
|
|
{
|
|
|
|
pt.x = x;
|
|
|
|
pt.y = y;
|
2016-07-29 16:09:32 +02:00
|
|
|
dp_to_lp(dc, &pt, 1);
|
2005-08-23 11:38:58 +02:00
|
|
|
MoveToEx(hdc, pt.x, pt.y, NULL);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch( align & (TA_TOP | TA_BOTTOM | TA_BASELINE) )
|
|
|
|
{
|
|
|
|
case TA_TOP:
|
|
|
|
y += tm.tmAscent * cosEsc;
|
|
|
|
x += tm.tmAscent * sinEsc;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case TA_BOTTOM:
|
|
|
|
y -= tm.tmDescent * cosEsc;
|
|
|
|
x -= tm.tmDescent * sinEsc;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case TA_BASELINE:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2016-07-29 16:09:35 +02:00
|
|
|
if (dc->backgroundMode != TRANSPARENT)
|
2005-08-23 11:38:58 +02:00
|
|
|
{
|
|
|
|
if(!((flags & ETO_CLIPPED) && (flags & ETO_OPAQUE)))
|
|
|
|
{
|
2012-02-21 17:20:48 +01:00
|
|
|
if(!(flags & ETO_OPAQUE) || !lprect ||
|
|
|
|
x < rc.left || x + width.x >= rc.right ||
|
2005-08-23 11:38:58 +02:00
|
|
|
y - tm.tmAscent < rc.top || y + tm.tmDescent >= rc.bottom)
|
|
|
|
{
|
2012-02-09 12:19:01 +01:00
|
|
|
RECT text_box;
|
|
|
|
text_box.left = x;
|
|
|
|
text_box.right = x + width.x;
|
|
|
|
text_box.top = y - tm.tmAscent;
|
|
|
|
text_box.bottom = y + tm.tmDescent;
|
2011-01-30 13:47:55 +01:00
|
|
|
|
2012-02-09 12:19:02 +01:00
|
|
|
if (flags & ETO_CLIPPED) intersect_rect( &text_box, &text_box, &rc );
|
|
|
|
if (!is_rect_empty( &text_box ))
|
2012-02-09 12:19:01 +01:00
|
|
|
physdev->funcs->pExtTextOut( physdev, 0, 0, ETO_OPAQUE, &text_box, NULL, 0, NULL );
|
2005-08-19 11:58:57 +02:00
|
|
|
}
|
2005-08-23 11:38:58 +02:00
|
|
|
}
|
|
|
|
}
|
2005-08-19 11:58:57 +02:00
|
|
|
|
2012-12-05 16:44:15 +01:00
|
|
|
ret = physdev->funcs->pExtTextOut( physdev, x, y, (flags & ~ETO_OPAQUE), &rc,
|
|
|
|
glyphs ? glyphs : reordered_str, count, (INT*)deltas );
|
2005-08-23 11:38:58 +02:00
|
|
|
|
2005-09-21 11:41:13 +02:00
|
|
|
done:
|
|
|
|
HeapFree(GetProcessHeap(), 0, deltas);
|
|
|
|
if(glyphs != reordered_str)
|
|
|
|
HeapFree(GetProcessHeap(), 0, glyphs);
|
|
|
|
if(reordered_str != str)
|
|
|
|
HeapFree(GetProcessHeap(), 0, reordered_str);
|
|
|
|
|
|
|
|
if (ret && (lf.lfUnderline || lf.lfStrikeOut))
|
2005-08-23 11:38:58 +02:00
|
|
|
{
|
|
|
|
int underlinePos, strikeoutPos;
|
|
|
|
int underlineWidth, strikeoutWidth;
|
2005-09-21 11:41:13 +02:00
|
|
|
UINT size = GetOutlineTextMetricsW(hdc, 0, NULL);
|
2005-08-23 11:38:58 +02:00
|
|
|
OUTLINETEXTMETRICW* otm = NULL;
|
2011-10-25 18:14:04 +02:00
|
|
|
POINT pts[5];
|
|
|
|
HPEN hpen = SelectObject(hdc, GetStockObject(NULL_PEN));
|
2016-07-29 16:09:35 +02:00
|
|
|
HBRUSH hbrush = CreateSolidBrush(dc->textColor);
|
2011-10-25 18:14:04 +02:00
|
|
|
|
|
|
|
hbrush = SelectObject(hdc, hbrush);
|
2005-08-23 11:38:58 +02:00
|
|
|
|
2005-09-21 11:41:13 +02:00
|
|
|
if(!size)
|
2005-08-23 11:38:58 +02:00
|
|
|
{
|
|
|
|
underlinePos = 0;
|
|
|
|
underlineWidth = tm.tmAscent / 20 + 1;
|
|
|
|
strikeoutPos = tm.tmAscent / 2;
|
|
|
|
strikeoutWidth = underlineWidth;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2005-09-21 11:41:13 +02:00
|
|
|
otm = HeapAlloc(GetProcessHeap(), 0, size);
|
|
|
|
GetOutlineTextMetricsW(hdc, size, otm);
|
2011-11-07 13:41:18 +01:00
|
|
|
underlinePos = abs( INTERNAL_YWSTODS( dc, otm->otmsUnderscorePosition ));
|
|
|
|
if (otm->otmsUnderscorePosition < 0) underlinePos = -underlinePos;
|
2015-05-19 09:58:24 +02:00
|
|
|
underlineWidth = get_line_width( dc, otm->otmsUnderscoreSize );
|
2011-11-07 13:41:18 +01:00
|
|
|
strikeoutPos = abs( INTERNAL_YWSTODS( dc, otm->otmsStrikeoutPosition ));
|
|
|
|
if (otm->otmsStrikeoutPosition < 0) strikeoutPos = -strikeoutPos;
|
2015-05-19 09:58:24 +02:00
|
|
|
strikeoutWidth = get_line_width( dc, otm->otmsStrikeoutSize );
|
2005-09-21 11:41:13 +02:00
|
|
|
HeapFree(GetProcessHeap(), 0, otm);
|
2005-08-23 11:38:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2011-10-25 18:14:04 +02:00
|
|
|
if (lf.lfUnderline)
|
2005-08-23 11:38:58 +02:00
|
|
|
{
|
2011-11-07 13:41:18 +01:00
|
|
|
pts[0].x = x - (underlinePos + underlineWidth / 2) * sinEsc;
|
|
|
|
pts[0].y = y - (underlinePos + underlineWidth / 2) * cosEsc;
|
|
|
|
pts[1].x = x + width.x - (underlinePos + underlineWidth / 2) * sinEsc;
|
|
|
|
pts[1].y = y + width.y - (underlinePos + underlineWidth / 2) * cosEsc;
|
2011-10-25 18:14:04 +02:00
|
|
|
pts[2].x = pts[1].x + underlineWidth * sinEsc;
|
|
|
|
pts[2].y = pts[1].y + underlineWidth * cosEsc;
|
|
|
|
pts[3].x = pts[0].x + underlineWidth * sinEsc;
|
|
|
|
pts[3].y = pts[0].y + underlineWidth * cosEsc;
|
|
|
|
pts[4].x = pts[0].x;
|
|
|
|
pts[4].y = pts[0].y;
|
2016-07-29 16:09:32 +02:00
|
|
|
dp_to_lp(dc, pts, 5);
|
2011-10-25 18:14:04 +02:00
|
|
|
Polygon(hdc, pts, 5);
|
|
|
|
}
|
2005-09-28 12:14:45 +02:00
|
|
|
|
2011-10-25 18:14:04 +02:00
|
|
|
if (lf.lfStrikeOut)
|
|
|
|
{
|
2011-11-07 13:41:18 +01:00
|
|
|
pts[0].x = x - (strikeoutPos + strikeoutWidth / 2) * sinEsc;
|
|
|
|
pts[0].y = y - (strikeoutPos + strikeoutWidth / 2) * cosEsc;
|
|
|
|
pts[1].x = x + width.x - (strikeoutPos + strikeoutWidth / 2) * sinEsc;
|
|
|
|
pts[1].y = y + width.y - (strikeoutPos + strikeoutWidth / 2) * cosEsc;
|
2011-10-25 18:14:04 +02:00
|
|
|
pts[2].x = pts[1].x + strikeoutWidth * sinEsc;
|
|
|
|
pts[2].y = pts[1].y + strikeoutWidth * cosEsc;
|
|
|
|
pts[3].x = pts[0].x + strikeoutWidth * sinEsc;
|
|
|
|
pts[3].y = pts[0].y + strikeoutWidth * cosEsc;
|
|
|
|
pts[4].x = pts[0].x;
|
|
|
|
pts[4].y = pts[0].y;
|
2016-07-29 16:09:32 +02:00
|
|
|
dp_to_lp(dc, pts, 5);
|
2011-10-25 18:14:04 +02:00
|
|
|
Polygon(hdc, pts, 5);
|
2004-07-21 06:07:28 +02:00
|
|
|
}
|
2011-10-25 18:14:04 +02:00
|
|
|
|
|
|
|
SelectObject(hdc, hpen);
|
|
|
|
hbrush = SelectObject(hdc, hbrush);
|
|
|
|
DeleteObject(hbrush);
|
2004-07-21 06:07:28 +02:00
|
|
|
}
|
2005-08-23 11:38:58 +02:00
|
|
|
|
2016-07-29 16:09:32 +02:00
|
|
|
release_dc_ptr( dc );
|
|
|
|
|
2004-07-21 06:07:28 +02:00
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* TextOutA (GDI32.@)
|
|
|
|
*/
|
|
|
|
BOOL WINAPI TextOutA( HDC hdc, INT x, INT y, LPCSTR str, INT count )
|
|
|
|
{
|
|
|
|
return ExtTextOutA( hdc, x, y, 0, NULL, str, count, NULL );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* TextOutW (GDI32.@)
|
|
|
|
*/
|
|
|
|
BOOL WINAPI TextOutW(HDC hdc, INT x, INT y, LPCWSTR str, INT count)
|
|
|
|
{
|
|
|
|
return ExtTextOutW( hdc, x, y, 0, NULL, str, count, NULL );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* PolyTextOutA (GDI32.@)
|
|
|
|
*
|
2005-11-05 11:45:02 +01:00
|
|
|
* See PolyTextOutW.
|
2004-07-21 06:07:28 +02:00
|
|
|
*/
|
2007-04-29 14:17:29 +02:00
|
|
|
BOOL WINAPI PolyTextOutA( HDC hdc, const POLYTEXTA *pptxt, INT cStrings )
|
2004-07-21 06:07:28 +02:00
|
|
|
{
|
|
|
|
for (; cStrings>0; cStrings--, pptxt++)
|
|
|
|
if (!ExtTextOutA( hdc, pptxt->x, pptxt->y, pptxt->uiFlags, &pptxt->rcl, pptxt->lpstr, pptxt->n, pptxt->pdx ))
|
|
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* PolyTextOutW (GDI32.@)
|
|
|
|
*
|
|
|
|
* Draw several Strings
|
2005-11-05 11:45:02 +01:00
|
|
|
*
|
|
|
|
* RETURNS
|
|
|
|
* TRUE: Success.
|
|
|
|
* FALSE: Failure.
|
2004-07-21 06:07:28 +02:00
|
|
|
*/
|
2007-04-29 14:17:29 +02:00
|
|
|
BOOL WINAPI PolyTextOutW( HDC hdc, const POLYTEXTW *pptxt, INT cStrings )
|
2004-07-21 06:07:28 +02:00
|
|
|
{
|
|
|
|
for (; cStrings>0; cStrings--, pptxt++)
|
|
|
|
if (!ExtTextOutW( hdc, pptxt->x, pptxt->y, pptxt->uiFlags, &pptxt->rcl, pptxt->lpstr, pptxt->n, pptxt->pdx ))
|
|
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
1997-03-05 09:22:35 +01:00
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* SetMapperFlags (GDI32.@)
|
1994-11-07 19:20:42 +01:00
|
|
|
*/
|
2011-03-10 21:58:47 +01:00
|
|
|
DWORD WINAPI SetMapperFlags( HDC hdc, DWORD flags )
|
1994-11-07 19:20:42 +01:00
|
|
|
{
|
2011-03-10 21:58:47 +01:00
|
|
|
DC *dc = get_dc_ptr( hdc );
|
|
|
|
DWORD ret = GDI_ERROR;
|
|
|
|
|
|
|
|
if (dc)
|
2005-10-27 20:28:43 +02:00
|
|
|
{
|
2011-03-10 21:58:47 +01:00
|
|
|
PHYSDEV physdev = GET_DC_PHYSDEV( dc, pSetMapperFlags );
|
|
|
|
flags = physdev->funcs->pSetMapperFlags( physdev, flags );
|
|
|
|
if (flags != GDI_ERROR)
|
|
|
|
{
|
|
|
|
ret = dc->mapperFlags;
|
|
|
|
dc->mapperFlags = flags;
|
|
|
|
}
|
|
|
|
release_dc_ptr( dc );
|
2005-10-27 20:28:43 +02:00
|
|
|
}
|
1999-04-25 11:24:23 +02:00
|
|
|
return ret;
|
1994-11-07 19:20:42 +01:00
|
|
|
}
|
|
|
|
|
1998-12-15 16:38:36 +01:00
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* GetAspectRatioFilterEx (GDI32.@)
|
1998-12-15 16:38:36 +01:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
BOOL WINAPI GetAspectRatioFilterEx( HDC hdc, LPSIZE pAspectRatio )
|
1998-12-15 16:38:36 +01:00
|
|
|
{
|
2002-11-22 23:16:53 +01:00
|
|
|
FIXME("(%p, %p): -- Empty Stub !\n", hdc, pAspectRatio);
|
1998-12-15 16:38:36 +01:00
|
|
|
return FALSE;
|
|
|
|
}
|
1994-11-07 19:20:42 +01:00
|
|
|
|
1997-03-05 09:22:35 +01:00
|
|
|
|
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* GetCharABCWidthsA (GDI32.@)
|
2005-11-05 11:45:02 +01:00
|
|
|
*
|
|
|
|
* See GetCharABCWidthsW.
|
1997-03-05 09:22:35 +01:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
BOOL WINAPI GetCharABCWidthsA(HDC hdc, UINT firstChar, UINT lastChar,
|
|
|
|
LPABC abc )
|
1997-03-05 09:22:35 +01:00
|
|
|
{
|
2011-01-16 15:00:25 +01:00
|
|
|
INT i, wlen;
|
2002-01-29 04:02:50 +01:00
|
|
|
LPSTR str;
|
|
|
|
LPWSTR wstr;
|
|
|
|
BOOL ret = TRUE;
|
|
|
|
|
2011-01-26 17:09:03 +01:00
|
|
|
str = FONT_GetCharsByRangeA(hdc, firstChar, lastChar, &i);
|
2011-01-13 11:18:16 +01:00
|
|
|
if (str == NULL)
|
|
|
|
return FALSE;
|
2002-01-29 04:02:50 +01:00
|
|
|
|
2011-01-16 15:00:18 +01:00
|
|
|
wstr = FONT_mbtowc(hdc, str, i, &wlen, NULL);
|
2011-01-13 11:18:16 +01:00
|
|
|
if (wstr == NULL)
|
|
|
|
{
|
|
|
|
HeapFree(GetProcessHeap(), 0, str);
|
|
|
|
return FALSE;
|
|
|
|
}
|
2002-01-29 04:02:50 +01:00
|
|
|
|
|
|
|
for(i = 0; i < wlen; i++)
|
|
|
|
{
|
|
|
|
if(!GetCharABCWidthsW(hdc, wstr[i], wstr[i], abc))
|
|
|
|
{
|
|
|
|
ret = FALSE;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
abc++;
|
|
|
|
}
|
|
|
|
|
|
|
|
HeapFree(GetProcessHeap(), 0, str);
|
|
|
|
HeapFree(GetProcessHeap(), 0, wstr);
|
|
|
|
|
|
|
|
return ret;
|
1997-03-05 09:22:35 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
Release 980503
Thu Apr 30 16:28:12 1998 James Juran <jrj120@psu.edu>
* [scheduler/process.c]
Implemented GetExitCodeProcess. The code is a direct translation
of GetExitCodeThread.
Mon Apr 27 22:20:25 1998 Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
* [loader/pe_image.c]
Unload dummy module when PE_LoadLibraryEx32A fails with
PE_LoadImage (makes Encarta 98 installer proceed).
* [files/drive.c]
Make GetDriveType16 return DRIVE_REMOVABLE for TYPE_CDROM.
Make GetCurrentDirectory32 behave like the code does and not
like the help describes.
* [files/profile.c]
Revoke recent change in PROFILE_GetSection and try better
handling of special case.
* [include/windows.h]
Change definition of ACCEL32.
* [misc/commdlg.c]
Replace the GetXXXFilename32 macros by normal code.
Fix two reported bugs in my changes to commdlg.
* [windows/win.c]
Add a hook to catch bogus WM_SIZE messages by emitting a warning
in the appropriate case.
* [objects/bitmap.c]
Reject unreasonbable large size arguments in
CreateCompatibleBitmap32 and add an fixme for that situation.
Sun Apr 26 18:30:07 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
* [include/ldt.h] [debugger/*.c] [miscemu/instr.c]
Added IS_SELECTOR_SYSTEM and IS_SELECTOR_32BIT macros.
Make instruction emulation support system selectors.
* [loader/*.c]
Started moving NE specific functions to the new loader/ne
directory.
* [memory/environ.c]
Enforce the 127 chars limit only when creating the environment of
a Win16 process.
Sun Apr 26 12:22:23 1998 Andreas Mohr <100.30936@germany.net>
* [files/file.c]
Fixed an incredible typo in CopyFile32A that made it unusable
since a rewrite in 970112 (!!).
* [files/directory.c]
Fixed GetTempPath32A/W to include trailing backslash.
* [misc/ver.c]
Make find_pe_resource "work" with corrupt files.
* [misc/wsprintf.c]
Altered WPRINTF_ParseFormatA/W to treat invalid format chars
as normal output, too.
* [msdos/dpmi.c]
Implemented "Allocate/Free real mode callback" (0x0303/0x0304).
Cross your fingers if you need to use it ;) (completely untested)
Implemented "Call real mode proc with far return" (0x0301, tested).
* [msdos/int21.c]
Fixed ioctlGenericBlkDevReq/0x60.
* [relay32/dplayx.spec] [relay32/builtin32.c] [relay32/Makefile.in]
Added built-in DPLAYX.DLL.
* [windows/win.c]
Fixed GetWindowWord()/GWW_HWNDPARENT to return the window's owner
if it has no parent (SDK).
Sat Apr 25 15:09:53 1998 M.T.Fortescue <mark@mtfhpc.demon.co.uk>
* [debugger/db_disasm.c]
Fixed disassemble bug for no-display option and 'lock',
'repne' and 'repe' prefixes.
* [debugger/registers.c]
Added textual flag description output on 'info regs'.
Sat Apr 25 14:18:26 1998 Matthew Becker <mbecker@glasscity.net>
* [*/*.c]
Added stubs and/or documentation for the following functions:
LookupPrivilegeValue, OpenService, ControlService, RegGetKeySecurity,
StartService, SetComputerName, DeleteService, CloseServiceHandle,
OpenProcessToken, OpenSCManager, DeregisterEventSource,
WaitForDebugEvent, WaitForInputIdle, RegisterEventSource,
SetDebugErrorLevel, SetConsoleCursorPosition, ChoosePixelFormat,
SetPixelFormat, GetPixelFormat, DescribePixelFormat, SwapBuffers,
PolyBezier, AbortPath, DestroyAcceleratorTable, HeapWalk,
DdeInitialize, DdeUninitialize, DdeConnectList, DdeDisconnectList,
DdeCreateStringHandle, DdePostAdvise, DdeGetData, DdeNameService,
DdeGetLastError, WNetGetDirectoryType, EnumPrinters, RegFlushKey,
RegGetKeySecurity, DllGetClassObject, DllCanUnloadNow, CreateBitmap,
CreateCompatibleBitmap, CreateBitmapIndirect, GetBitmapBits,
SetBitmapBits, LoadImage, CopyImage, LoadBitmap, DrawIcon,
CreateDiscardableBitmap, SetDIBits, GetCharABCWidths, LoadTypeLib,
SetConsoleCtrlHandler, CreateConsoleScreenBuffer, ReadConsoleInput,
GetConsoleCursorInfo, SetConsoleCursorInfo, SetConsoleWindowInfo,
SetConsoleTextAttribute, SetConsoleScreenBufferSize,
FillConsoleOutputCharacter, FillConsoleOutputAttribute,
CreateMailslot, GetMailslotInfo, GetCompressedFileSize,
GetProcessWindowStation, GetThreadDesktop, SetDebugErrorLevel,
WaitForDebugEvent, SetComputerName, CreateMDIWindow.
Thu Apr 23 23:54:04 1998 Douglas Ridgway <ridgway@winehq.com>
* [include/windows.h] [objects/enhmetafile.c] [relay32/gdi32.spec]
Implement CopyEnhMetaFile, Get/SetEnhMetaFileBits, other fixes.
* [include/windows.h] [objects/metafile.c] [relay32/gdi32.spec]
32-bit metafile fixes, implement EnumMetaFile32, GetMetaFileBitsEx.
* [objects/font.c] [graphics/x11drv/xfont.c] [graphics/x11drv/text.c]
Some rotated text support for X11R6 displays.
* [win32/newfns.c] [ole/ole2nls.c]
Moved GetNumberFormat32A.
Wed Apr 22 17:38:20 1998 David Lee Lambert <lamber45@egr.msu.edu>
* [ole/ole2nls.c] [misc/network.c]
Changed some function documentation to the new style.
* [misc/network.c] [include/windows.h] [if1632/user.spec]
[relay32/mpr.spec] [misc/mpr.c]
Added stubs for some Win32 network functions; renamed some
16-bit ones with 32-bit counterparts, as well as
WNetGetDirectoryType; moved the stubs in misc/mpr.c (three of
them!) to misc/network.c.
* [ole/compobj.c] [ole/storage.c] [ole/ole2disp.c]
[ole/ole2nls.c] [ole/folders.c] [ole/moniker.c] [ole/ole2.c]
[graphics/fontengine.c] [graphics/ddraw.c] [graphics/env.c]
[graphics/driver.c] [graphics/escape.c]
Changed fprintf's to proper debug-macros.
* [include/winnls.h]
Added some flags (for internal use).
* [ole/ole2nls.c]
Added the Unicode core function, and worked out a way to hide
the commonality of the core.
* [relay32/kernel32.spec]
Added support for GetDate/Time32A/W.
Wed Apr 22 09:16:03 1998 Gordon Chaffee <chaffee@cs.berkeley.edu>
* [win32/code_page.c]
Fixed problem with MultiByteToWideChar that was introduced in
last release. Made MultiByteToWideChar more compatible with Win32.
* [graphics/x11drv/graphics.c]
Fixed problem with drawing arcs.
Tue Apr 21 11:24:58 1998 Constantine Sapuntzakis <csapuntz@tma-1.lcs.mit.edu>
* [ole/ole2nls.c]
Move stuff from 0x409 case to Lang_En.
* [relay32/user32.spec] [windows/winpos.c]
Added stubs for GetWindowRgn32 and SetWindowRgn32. Makes Office
Paperclip happy.
Tue Apr 21 11:16:16 1998 Constantine Sapuntzakis <csapuntz@tma-1.lcs.mit.edu>
* [loader/pe_image.c]
If image is relocated, TLS addresses need to be adjusted.
* [debugger/*.c]
Generalized tests for 32-bit segments.
Tue Apr 21 02:04:59 1998 James Juran <jrj120@psu.edu>
* [misc/*.c] [miscemu/*.c] [msdos/*.c] [if1632/*.c]
[include/*.h] [loader/*.c] [memory/*.c] [multimedia/*.c]
[objects/*.c]
Almost all fprintf statements converted to appropriate
debug messages.
* [README]
Updated "GETTING MORE INFORMATION" section to include WineHQ.
* [documentation/debugger]
Fixed typo.
* [windows/defwnd.c]
Added function documentation.
Sun Apr 19 16:30:58 1998 Marcus Meissner <marcus@mud.de>
* [Make.rules.in]
Added lint target (using lclint).
* [relay32/oleaut32.spec][relay32/Makefile.in][ole/typelib.c]
[ole/ole2disp.c]
Added oleaut32 spec, added some SysString functions.
* [if1632/signal.c]
Added printing of faultaddress in Linux (using CR2 debug register).
* [configure.in]
Added <sys/types.h> for statfs checks.
* [loader/*.c][debugger/break.c][debugger/hash.c]
Started to split win32/win16 module handling, preparing support
for other binary formats (like ELF).
Sat Apr 18 10:07:41 1998 Rein Klazes <rklazes@casema.net>
* [misc/registry.c]
Fixed a bug that made RegQueryValuexxx returning
incorrect registry values.
Fri Apr 17 22:59:22 1998 Alexander V. Lukyanov <lav@long.yar.ru>
* [misc/lstr.c]
FormatMessage32*: remove linefeed when nolinefeed set;
check for target underflow.
Fri Apr 17 00:38:14 1998 Alexander V. Lukyanov <lav@long.yar.ru>
* [misc/crtdll.c]
Implement xlat_file_ptr for CRT stdin/stdout/stderr address
translation.
Wed Apr 15 20:43:56 1998 Jim Peterson <jspeter@birch.ee.vt.edu>
* [controls/menu.c]
Added 'odaction' parameter to MENU_DrawMenuItem() and redirected
WM_DRAWITEM messages to GetWindow(hwnd,GW_OWNER).
Tue Apr 14 16:17:55 1998 Berend Reitsma <berend@united-info.com>
* [graphics/metafiledrv/init.c] [graphics/painting.c]
[graphics/win16drv/init.c] [graphics/x11drv/graphics.c]
[graphics/x11drv/init.c] [include/gdi.h] [include/x11drv.h]
[relay32/gdi32.spec]
Added PolyPolyline routine.
* [windows/winproc.c]
Changed WINPROC_GetProc() to return proc instead of &(jmp proc).
1998-05-03 21:01:20 +02:00
|
|
|
/******************************************************************************
|
2004-02-09 21:47:42 +01:00
|
|
|
* GetCharABCWidthsW [GDI32.@]
|
|
|
|
*
|
|
|
|
* Retrieves widths of characters in range.
|
Release 980503
Thu Apr 30 16:28:12 1998 James Juran <jrj120@psu.edu>
* [scheduler/process.c]
Implemented GetExitCodeProcess. The code is a direct translation
of GetExitCodeThread.
Mon Apr 27 22:20:25 1998 Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
* [loader/pe_image.c]
Unload dummy module when PE_LoadLibraryEx32A fails with
PE_LoadImage (makes Encarta 98 installer proceed).
* [files/drive.c]
Make GetDriveType16 return DRIVE_REMOVABLE for TYPE_CDROM.
Make GetCurrentDirectory32 behave like the code does and not
like the help describes.
* [files/profile.c]
Revoke recent change in PROFILE_GetSection and try better
handling of special case.
* [include/windows.h]
Change definition of ACCEL32.
* [misc/commdlg.c]
Replace the GetXXXFilename32 macros by normal code.
Fix two reported bugs in my changes to commdlg.
* [windows/win.c]
Add a hook to catch bogus WM_SIZE messages by emitting a warning
in the appropriate case.
* [objects/bitmap.c]
Reject unreasonbable large size arguments in
CreateCompatibleBitmap32 and add an fixme for that situation.
Sun Apr 26 18:30:07 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
* [include/ldt.h] [debugger/*.c] [miscemu/instr.c]
Added IS_SELECTOR_SYSTEM and IS_SELECTOR_32BIT macros.
Make instruction emulation support system selectors.
* [loader/*.c]
Started moving NE specific functions to the new loader/ne
directory.
* [memory/environ.c]
Enforce the 127 chars limit only when creating the environment of
a Win16 process.
Sun Apr 26 12:22:23 1998 Andreas Mohr <100.30936@germany.net>
* [files/file.c]
Fixed an incredible typo in CopyFile32A that made it unusable
since a rewrite in 970112 (!!).
* [files/directory.c]
Fixed GetTempPath32A/W to include trailing backslash.
* [misc/ver.c]
Make find_pe_resource "work" with corrupt files.
* [misc/wsprintf.c]
Altered WPRINTF_ParseFormatA/W to treat invalid format chars
as normal output, too.
* [msdos/dpmi.c]
Implemented "Allocate/Free real mode callback" (0x0303/0x0304).
Cross your fingers if you need to use it ;) (completely untested)
Implemented "Call real mode proc with far return" (0x0301, tested).
* [msdos/int21.c]
Fixed ioctlGenericBlkDevReq/0x60.
* [relay32/dplayx.spec] [relay32/builtin32.c] [relay32/Makefile.in]
Added built-in DPLAYX.DLL.
* [windows/win.c]
Fixed GetWindowWord()/GWW_HWNDPARENT to return the window's owner
if it has no parent (SDK).
Sat Apr 25 15:09:53 1998 M.T.Fortescue <mark@mtfhpc.demon.co.uk>
* [debugger/db_disasm.c]
Fixed disassemble bug for no-display option and 'lock',
'repne' and 'repe' prefixes.
* [debugger/registers.c]
Added textual flag description output on 'info regs'.
Sat Apr 25 14:18:26 1998 Matthew Becker <mbecker@glasscity.net>
* [*/*.c]
Added stubs and/or documentation for the following functions:
LookupPrivilegeValue, OpenService, ControlService, RegGetKeySecurity,
StartService, SetComputerName, DeleteService, CloseServiceHandle,
OpenProcessToken, OpenSCManager, DeregisterEventSource,
WaitForDebugEvent, WaitForInputIdle, RegisterEventSource,
SetDebugErrorLevel, SetConsoleCursorPosition, ChoosePixelFormat,
SetPixelFormat, GetPixelFormat, DescribePixelFormat, SwapBuffers,
PolyBezier, AbortPath, DestroyAcceleratorTable, HeapWalk,
DdeInitialize, DdeUninitialize, DdeConnectList, DdeDisconnectList,
DdeCreateStringHandle, DdePostAdvise, DdeGetData, DdeNameService,
DdeGetLastError, WNetGetDirectoryType, EnumPrinters, RegFlushKey,
RegGetKeySecurity, DllGetClassObject, DllCanUnloadNow, CreateBitmap,
CreateCompatibleBitmap, CreateBitmapIndirect, GetBitmapBits,
SetBitmapBits, LoadImage, CopyImage, LoadBitmap, DrawIcon,
CreateDiscardableBitmap, SetDIBits, GetCharABCWidths, LoadTypeLib,
SetConsoleCtrlHandler, CreateConsoleScreenBuffer, ReadConsoleInput,
GetConsoleCursorInfo, SetConsoleCursorInfo, SetConsoleWindowInfo,
SetConsoleTextAttribute, SetConsoleScreenBufferSize,
FillConsoleOutputCharacter, FillConsoleOutputAttribute,
CreateMailslot, GetMailslotInfo, GetCompressedFileSize,
GetProcessWindowStation, GetThreadDesktop, SetDebugErrorLevel,
WaitForDebugEvent, SetComputerName, CreateMDIWindow.
Thu Apr 23 23:54:04 1998 Douglas Ridgway <ridgway@winehq.com>
* [include/windows.h] [objects/enhmetafile.c] [relay32/gdi32.spec]
Implement CopyEnhMetaFile, Get/SetEnhMetaFileBits, other fixes.
* [include/windows.h] [objects/metafile.c] [relay32/gdi32.spec]
32-bit metafile fixes, implement EnumMetaFile32, GetMetaFileBitsEx.
* [objects/font.c] [graphics/x11drv/xfont.c] [graphics/x11drv/text.c]
Some rotated text support for X11R6 displays.
* [win32/newfns.c] [ole/ole2nls.c]
Moved GetNumberFormat32A.
Wed Apr 22 17:38:20 1998 David Lee Lambert <lamber45@egr.msu.edu>
* [ole/ole2nls.c] [misc/network.c]
Changed some function documentation to the new style.
* [misc/network.c] [include/windows.h] [if1632/user.spec]
[relay32/mpr.spec] [misc/mpr.c]
Added stubs for some Win32 network functions; renamed some
16-bit ones with 32-bit counterparts, as well as
WNetGetDirectoryType; moved the stubs in misc/mpr.c (three of
them!) to misc/network.c.
* [ole/compobj.c] [ole/storage.c] [ole/ole2disp.c]
[ole/ole2nls.c] [ole/folders.c] [ole/moniker.c] [ole/ole2.c]
[graphics/fontengine.c] [graphics/ddraw.c] [graphics/env.c]
[graphics/driver.c] [graphics/escape.c]
Changed fprintf's to proper debug-macros.
* [include/winnls.h]
Added some flags (for internal use).
* [ole/ole2nls.c]
Added the Unicode core function, and worked out a way to hide
the commonality of the core.
* [relay32/kernel32.spec]
Added support for GetDate/Time32A/W.
Wed Apr 22 09:16:03 1998 Gordon Chaffee <chaffee@cs.berkeley.edu>
* [win32/code_page.c]
Fixed problem with MultiByteToWideChar that was introduced in
last release. Made MultiByteToWideChar more compatible with Win32.
* [graphics/x11drv/graphics.c]
Fixed problem with drawing arcs.
Tue Apr 21 11:24:58 1998 Constantine Sapuntzakis <csapuntz@tma-1.lcs.mit.edu>
* [ole/ole2nls.c]
Move stuff from 0x409 case to Lang_En.
* [relay32/user32.spec] [windows/winpos.c]
Added stubs for GetWindowRgn32 and SetWindowRgn32. Makes Office
Paperclip happy.
Tue Apr 21 11:16:16 1998 Constantine Sapuntzakis <csapuntz@tma-1.lcs.mit.edu>
* [loader/pe_image.c]
If image is relocated, TLS addresses need to be adjusted.
* [debugger/*.c]
Generalized tests for 32-bit segments.
Tue Apr 21 02:04:59 1998 James Juran <jrj120@psu.edu>
* [misc/*.c] [miscemu/*.c] [msdos/*.c] [if1632/*.c]
[include/*.h] [loader/*.c] [memory/*.c] [multimedia/*.c]
[objects/*.c]
Almost all fprintf statements converted to appropriate
debug messages.
* [README]
Updated "GETTING MORE INFORMATION" section to include WineHQ.
* [documentation/debugger]
Fixed typo.
* [windows/defwnd.c]
Added function documentation.
Sun Apr 19 16:30:58 1998 Marcus Meissner <marcus@mud.de>
* [Make.rules.in]
Added lint target (using lclint).
* [relay32/oleaut32.spec][relay32/Makefile.in][ole/typelib.c]
[ole/ole2disp.c]
Added oleaut32 spec, added some SysString functions.
* [if1632/signal.c]
Added printing of faultaddress in Linux (using CR2 debug register).
* [configure.in]
Added <sys/types.h> for statfs checks.
* [loader/*.c][debugger/break.c][debugger/hash.c]
Started to split win32/win16 module handling, preparing support
for other binary formats (like ELF).
Sat Apr 18 10:07:41 1998 Rein Klazes <rklazes@casema.net>
* [misc/registry.c]
Fixed a bug that made RegQueryValuexxx returning
incorrect registry values.
Fri Apr 17 22:59:22 1998 Alexander V. Lukyanov <lav@long.yar.ru>
* [misc/lstr.c]
FormatMessage32*: remove linefeed when nolinefeed set;
check for target underflow.
Fri Apr 17 00:38:14 1998 Alexander V. Lukyanov <lav@long.yar.ru>
* [misc/crtdll.c]
Implement xlat_file_ptr for CRT stdin/stdout/stderr address
translation.
Wed Apr 15 20:43:56 1998 Jim Peterson <jspeter@birch.ee.vt.edu>
* [controls/menu.c]
Added 'odaction' parameter to MENU_DrawMenuItem() and redirected
WM_DRAWITEM messages to GetWindow(hwnd,GW_OWNER).
Tue Apr 14 16:17:55 1998 Berend Reitsma <berend@united-info.com>
* [graphics/metafiledrv/init.c] [graphics/painting.c]
[graphics/win16drv/init.c] [graphics/x11drv/graphics.c]
[graphics/x11drv/init.c] [include/gdi.h] [include/x11drv.h]
[relay32/gdi32.spec]
Added PolyPolyline routine.
* [windows/winproc.c]
Changed WINPROC_GetProc() to return proc instead of &(jmp proc).
1998-05-03 21:01:20 +02:00
|
|
|
*
|
|
|
|
* PARAMS
|
|
|
|
* hdc [I] Handle of device context
|
|
|
|
* firstChar [I] First character in range to query
|
|
|
|
* lastChar [I] Last character in range to query
|
|
|
|
* abc [O] Address of character-width structure
|
|
|
|
*
|
|
|
|
* NOTES
|
|
|
|
* Only works with TrueType fonts
|
|
|
|
*
|
|
|
|
* RETURNS
|
|
|
|
* Success: TRUE
|
|
|
|
* Failure: FALSE
|
1997-03-05 09:22:35 +01:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
BOOL WINAPI GetCharABCWidthsW( HDC hdc, UINT firstChar, UINT lastChar,
|
|
|
|
LPABC abc )
|
1994-11-07 19:20:42 +01:00
|
|
|
{
|
2008-02-05 21:16:27 +01:00
|
|
|
DC *dc = get_dc_ptr(hdc);
|
2011-10-21 11:33:04 +02:00
|
|
|
PHYSDEV dev;
|
2004-09-08 03:23:57 +02:00
|
|
|
unsigned int i;
|
2011-10-21 11:33:04 +02:00
|
|
|
BOOL ret;
|
2011-12-12 11:14:09 +01:00
|
|
|
TEXTMETRICW tm;
|
2001-04-23 20:11:58 +02:00
|
|
|
|
2006-04-08 22:27:34 +02:00
|
|
|
if (!dc) return FALSE;
|
|
|
|
|
2007-12-08 22:55:01 +01:00
|
|
|
if (!abc)
|
|
|
|
{
|
2008-02-05 21:16:27 +01:00
|
|
|
release_dc_ptr( dc );
|
2007-12-08 22:55:01 +01:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2012-09-26 22:42:28 +02:00
|
|
|
/* unlike GetCharABCWidthsFloatW, this one is supposed to fail on non-scalable fonts */
|
2011-12-12 11:14:09 +01:00
|
|
|
dev = GET_DC_PHYSDEV( dc, pGetTextMetrics );
|
2012-09-26 22:42:28 +02:00
|
|
|
if (!dev->funcs->pGetTextMetrics( dev, &tm ) || !(tm.tmPitchAndFamily & TMPF_VECTOR))
|
2011-12-12 11:14:09 +01:00
|
|
|
{
|
|
|
|
release_dc_ptr( dc );
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2011-10-21 11:33:04 +02:00
|
|
|
dev = GET_DC_PHYSDEV( dc, pGetCharABCWidths );
|
|
|
|
ret = dev->funcs->pGetCharABCWidths( dev, firstChar, lastChar, abc );
|
2004-02-12 21:05:47 +01:00
|
|
|
if (ret)
|
|
|
|
{
|
|
|
|
/* convert device units to logical */
|
|
|
|
for( i = firstChar; i <= lastChar; i++, abc++ ) {
|
2013-09-12 20:01:56 +02:00
|
|
|
abc->abcA = width_to_LP(dc, abc->abcA);
|
|
|
|
abc->abcB = width_to_LP(dc, abc->abcB);
|
|
|
|
abc->abcC = width_to_LP(dc, abc->abcC);
|
2006-04-19 11:20:50 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-02-05 21:16:27 +01:00
|
|
|
release_dc_ptr( dc );
|
2006-04-19 11:20:50 +02:00
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
|
|
* GetCharABCWidthsI [GDI32.@]
|
|
|
|
*
|
|
|
|
* Retrieves widths of characters in range.
|
|
|
|
*
|
|
|
|
* PARAMS
|
|
|
|
* hdc [I] Handle of device context
|
|
|
|
* firstChar [I] First glyphs in range to query
|
|
|
|
* count [I] Last glyphs in range to query
|
|
|
|
* pgi [i] Array of glyphs to query
|
|
|
|
* abc [O] Address of character-width structure
|
|
|
|
*
|
|
|
|
* NOTES
|
|
|
|
* Only works with TrueType fonts
|
|
|
|
*
|
|
|
|
* RETURNS
|
|
|
|
* Success: TRUE
|
|
|
|
* Failure: FALSE
|
|
|
|
*/
|
|
|
|
BOOL WINAPI GetCharABCWidthsI( HDC hdc, UINT firstChar, UINT count,
|
|
|
|
LPWORD pgi, LPABC abc)
|
|
|
|
{
|
2008-02-05 21:16:27 +01:00
|
|
|
DC *dc = get_dc_ptr(hdc);
|
2011-10-19 22:00:55 +02:00
|
|
|
PHYSDEV dev;
|
2006-04-19 11:20:50 +02:00
|
|
|
unsigned int i;
|
2011-10-19 22:00:55 +02:00
|
|
|
BOOL ret;
|
2006-04-19 11:20:50 +02:00
|
|
|
|
|
|
|
if (!dc) return FALSE;
|
|
|
|
|
2007-12-08 22:55:01 +01:00
|
|
|
if (!abc)
|
|
|
|
{
|
2008-02-05 21:16:27 +01:00
|
|
|
release_dc_ptr( dc );
|
2007-12-08 22:55:01 +01:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2011-10-19 22:00:55 +02:00
|
|
|
dev = GET_DC_PHYSDEV( dc, pGetCharABCWidthsI );
|
|
|
|
ret = dev->funcs->pGetCharABCWidthsI( dev, firstChar, count, pgi, abc );
|
2006-04-19 11:20:50 +02:00
|
|
|
if (ret)
|
|
|
|
{
|
|
|
|
/* convert device units to logical */
|
2006-08-01 17:52:48 +02:00
|
|
|
for( i = 0; i < count; i++, abc++ ) {
|
2013-09-12 20:01:56 +02:00
|
|
|
abc->abcA = width_to_LP(dc, abc->abcA);
|
|
|
|
abc->abcB = width_to_LP(dc, abc->abcB);
|
|
|
|
abc->abcC = width_to_LP(dc, abc->abcC);
|
2002-01-29 04:02:50 +01:00
|
|
|
}
|
2001-04-23 20:11:58 +02:00
|
|
|
}
|
2004-02-12 21:05:47 +01:00
|
|
|
|
2008-02-05 21:16:27 +01:00
|
|
|
release_dc_ptr( dc );
|
2002-01-29 04:02:50 +01:00
|
|
|
return ret;
|
1994-11-07 19:20:42 +01:00
|
|
|
}
|
|
|
|
|
1997-03-05 09:22:35 +01:00
|
|
|
|
1997-06-16 19:43:53 +02:00
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* GetGlyphOutlineA (GDI32.@)
|
Release 961201
Sat Nov 30 19:21:17 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [configure]
Re-generated with autoconf 2.11. Let me know if you have
problems.
* [controls/listbox.c] [controls/oldlbox.c]
Listboxes rewritten from scratch. Moved old code still used by
comboboxes to oldlbox.c
* [misc/registry.c]
Use temporary file when saving registry.
* [windows/dialog.c]
Implemented Win32 version of DlgDirList() and DlgDirListComboBox().
* [windows/winproc.c]
Added translation for listbox Win32 messages.
Sat Nov 30 21:00:00 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [controls/widgets.c] [controls/button.c]
Fixed some incompatibilities with CTL3D DLL.
* [windows/dialog.c]
Made dialog windows fit into the desktop.
* [misc/winsock.c] [misc/winsock_async.c]
New Winsock engine.
* [windows/message.c]
GetMessage() fixes.
* [windows/queue.c] [windows/hook.c] [windows/win.c]
SetMessageQueue() fixes.
Fri Nov 29 10:25:12 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [objects/text.c]
DrawText16(): Fixed return value.
Tue Nov 26 14:47:09 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/profile.c] [*/*]
Added Win32 profile functions, updated to new naming standard.
* [objects/font.c] [if1632/thunk.c] [include/windows.h]
Added EnumFonts32*, EnumFontFamiliesEx*, changed prototypes and
structures.
* [misc/ole2nls.c] [if1632/thunk.c]
Added EnumSystemLocales() (winhelp.exe).
* [misc/registry.c]
Added Windows 3.1 registry loader supplied by Tor Sjxwall, tor@sn.no
* [win32/file.c]
Partially fixed CreateFileMapping(), added UnmapViewOfFile().
Sat Nov 23 23:36:05 1996 Ronan Waide <waider@waider.ie>
* [misc/shell.c]
Fixed some FIXMEs relating to ShellExec() and FindExecutable().
* [misc/main.c]
Implemented a few more of the SystemParametersInfo() cases.
Tue Nov 19 01:24:34 1996 Philippe De Muyter <phdm@info.ucl.ac.be>
* [include/keyboard.h]
New file, new macro WINE_VKEY_MAPPINGS (using code taken from event.c).
* [include/windows.h]
New [VK_A, VK_Z] and [VK_0, VK9] macros.
* [misc/keyboard.c]
Fixes in KeyTable and ToAscii.
* [objects/font.c]
FONT_init : Give default value for MSWIN "system" font.
FONT_MatchFont : Do not try every size of a font family if the
family does not exist.
* [windows/event.c]
lastEventChar hack removed.
KeyStateTable replaced by InputKeyStateTable (maintained in event.c)
and QueueKeyStateTable (maintained in message.c).
EVENT_key : Corrections to the extended bit setting.
* [windows/message.c] [windows/keyboard.c]
Implementation of a new QueueKeyStateTable : table of key states
valid when messages are retrieved by GetMessage or PeekMessage,
and valid for TranslateMessage.
TranslateMessage : Convert WM*KEY messages using QueueKeyStateTable
and ToAscii.
Mon Nov 18 16:59:01 1996 Robert Pouliot <krynos@clic.net>
* [graphics/Makefile.in] [graphics/wing.c]
[if1632/wing.spec]
Some functions for WinG support, mostly empty stubs.
* [misc/crtdll.c] [if1632/crtdll.spec]
Many functions added to CRTDLL, mostly calls to Unix C library.
1996-12-01 18:17:47 +01:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
DWORD WINAPI GetGlyphOutlineA( HDC hdc, UINT uChar, UINT fuFormat,
|
|
|
|
LPGLYPHMETRICS lpgm, DWORD cbBuffer,
|
1997-08-24 18:00:30 +02:00
|
|
|
LPVOID lpBuffer, const MAT2 *lpmat2 )
|
Release 961201
Sat Nov 30 19:21:17 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [configure]
Re-generated with autoconf 2.11. Let me know if you have
problems.
* [controls/listbox.c] [controls/oldlbox.c]
Listboxes rewritten from scratch. Moved old code still used by
comboboxes to oldlbox.c
* [misc/registry.c]
Use temporary file when saving registry.
* [windows/dialog.c]
Implemented Win32 version of DlgDirList() and DlgDirListComboBox().
* [windows/winproc.c]
Added translation for listbox Win32 messages.
Sat Nov 30 21:00:00 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [controls/widgets.c] [controls/button.c]
Fixed some incompatibilities with CTL3D DLL.
* [windows/dialog.c]
Made dialog windows fit into the desktop.
* [misc/winsock.c] [misc/winsock_async.c]
New Winsock engine.
* [windows/message.c]
GetMessage() fixes.
* [windows/queue.c] [windows/hook.c] [windows/win.c]
SetMessageQueue() fixes.
Fri Nov 29 10:25:12 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [objects/text.c]
DrawText16(): Fixed return value.
Tue Nov 26 14:47:09 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/profile.c] [*/*]
Added Win32 profile functions, updated to new naming standard.
* [objects/font.c] [if1632/thunk.c] [include/windows.h]
Added EnumFonts32*, EnumFontFamiliesEx*, changed prototypes and
structures.
* [misc/ole2nls.c] [if1632/thunk.c]
Added EnumSystemLocales() (winhelp.exe).
* [misc/registry.c]
Added Windows 3.1 registry loader supplied by Tor Sjxwall, tor@sn.no
* [win32/file.c]
Partially fixed CreateFileMapping(), added UnmapViewOfFile().
Sat Nov 23 23:36:05 1996 Ronan Waide <waider@waider.ie>
* [misc/shell.c]
Fixed some FIXMEs relating to ShellExec() and FindExecutable().
* [misc/main.c]
Implemented a few more of the SystemParametersInfo() cases.
Tue Nov 19 01:24:34 1996 Philippe De Muyter <phdm@info.ucl.ac.be>
* [include/keyboard.h]
New file, new macro WINE_VKEY_MAPPINGS (using code taken from event.c).
* [include/windows.h]
New [VK_A, VK_Z] and [VK_0, VK9] macros.
* [misc/keyboard.c]
Fixes in KeyTable and ToAscii.
* [objects/font.c]
FONT_init : Give default value for MSWIN "system" font.
FONT_MatchFont : Do not try every size of a font family if the
family does not exist.
* [windows/event.c]
lastEventChar hack removed.
KeyStateTable replaced by InputKeyStateTable (maintained in event.c)
and QueueKeyStateTable (maintained in message.c).
EVENT_key : Corrections to the extended bit setting.
* [windows/message.c] [windows/keyboard.c]
Implementation of a new QueueKeyStateTable : table of key states
valid when messages are retrieved by GetMessage or PeekMessage,
and valid for TranslateMessage.
TranslateMessage : Convert WM*KEY messages using QueueKeyStateTable
and ToAscii.
Mon Nov 18 16:59:01 1996 Robert Pouliot <krynos@clic.net>
* [graphics/Makefile.in] [graphics/wing.c]
[if1632/wing.spec]
Some functions for WinG support, mostly empty stubs.
* [misc/crtdll.c] [if1632/crtdll.spec]
Many functions added to CRTDLL, mostly calls to Unix C library.
1996-12-01 18:17:47 +01:00
|
|
|
{
|
2009-02-03 10:55:19 +01:00
|
|
|
if (!lpmat2) return GDI_ERROR;
|
|
|
|
|
2002-01-29 04:02:50 +01:00
|
|
|
if(!(fuFormat & GGO_GLYPH_INDEX)) {
|
2011-02-03 12:07:06 +01:00
|
|
|
UINT cp;
|
2005-02-22 20:37:18 +01:00
|
|
|
int len;
|
|
|
|
char mbchs[2];
|
2011-02-03 12:07:06 +01:00
|
|
|
|
|
|
|
cp = GdiGetCodePage(hdc);
|
|
|
|
if (IsDBCSLeadByteEx(cp, uChar >> 8)) {
|
2005-02-22 20:37:18 +01:00
|
|
|
len = 2;
|
|
|
|
mbchs[0] = (uChar & 0xff00) >> 8;
|
|
|
|
mbchs[1] = (uChar & 0xff);
|
|
|
|
} else {
|
|
|
|
len = 1;
|
|
|
|
mbchs[0] = (uChar & 0xff);
|
|
|
|
}
|
2011-05-04 12:58:16 +02:00
|
|
|
uChar = 0;
|
2011-02-03 12:07:06 +01:00
|
|
|
MultiByteToWideChar(cp, 0, mbchs, len, (LPWSTR)&uChar, 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
return GetGlyphOutlineW(hdc, uChar, fuFormat, lpgm, cbBuffer, lpBuffer,
|
|
|
|
lpmat2);
|
Release 961201
Sat Nov 30 19:21:17 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [configure]
Re-generated with autoconf 2.11. Let me know if you have
problems.
* [controls/listbox.c] [controls/oldlbox.c]
Listboxes rewritten from scratch. Moved old code still used by
comboboxes to oldlbox.c
* [misc/registry.c]
Use temporary file when saving registry.
* [windows/dialog.c]
Implemented Win32 version of DlgDirList() and DlgDirListComboBox().
* [windows/winproc.c]
Added translation for listbox Win32 messages.
Sat Nov 30 21:00:00 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [controls/widgets.c] [controls/button.c]
Fixed some incompatibilities with CTL3D DLL.
* [windows/dialog.c]
Made dialog windows fit into the desktop.
* [misc/winsock.c] [misc/winsock_async.c]
New Winsock engine.
* [windows/message.c]
GetMessage() fixes.
* [windows/queue.c] [windows/hook.c] [windows/win.c]
SetMessageQueue() fixes.
Fri Nov 29 10:25:12 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [objects/text.c]
DrawText16(): Fixed return value.
Tue Nov 26 14:47:09 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/profile.c] [*/*]
Added Win32 profile functions, updated to new naming standard.
* [objects/font.c] [if1632/thunk.c] [include/windows.h]
Added EnumFonts32*, EnumFontFamiliesEx*, changed prototypes and
structures.
* [misc/ole2nls.c] [if1632/thunk.c]
Added EnumSystemLocales() (winhelp.exe).
* [misc/registry.c]
Added Windows 3.1 registry loader supplied by Tor Sjxwall, tor@sn.no
* [win32/file.c]
Partially fixed CreateFileMapping(), added UnmapViewOfFile().
Sat Nov 23 23:36:05 1996 Ronan Waide <waider@waider.ie>
* [misc/shell.c]
Fixed some FIXMEs relating to ShellExec() and FindExecutable().
* [misc/main.c]
Implemented a few more of the SystemParametersInfo() cases.
Tue Nov 19 01:24:34 1996 Philippe De Muyter <phdm@info.ucl.ac.be>
* [include/keyboard.h]
New file, new macro WINE_VKEY_MAPPINGS (using code taken from event.c).
* [include/windows.h]
New [VK_A, VK_Z] and [VK_0, VK9] macros.
* [misc/keyboard.c]
Fixes in KeyTable and ToAscii.
* [objects/font.c]
FONT_init : Give default value for MSWIN "system" font.
FONT_MatchFont : Do not try every size of a font family if the
family does not exist.
* [windows/event.c]
lastEventChar hack removed.
KeyStateTable replaced by InputKeyStateTable (maintained in event.c)
and QueueKeyStateTable (maintained in message.c).
EVENT_key : Corrections to the extended bit setting.
* [windows/message.c] [windows/keyboard.c]
Implementation of a new QueueKeyStateTable : table of key states
valid when messages are retrieved by GetMessage or PeekMessage,
and valid for TranslateMessage.
TranslateMessage : Convert WM*KEY messages using QueueKeyStateTable
and ToAscii.
Mon Nov 18 16:59:01 1996 Robert Pouliot <krynos@clic.net>
* [graphics/Makefile.in] [graphics/wing.c]
[if1632/wing.spec]
Some functions for WinG support, mostly empty stubs.
* [misc/crtdll.c] [if1632/crtdll.spec]
Many functions added to CRTDLL, mostly calls to Unix C library.
1996-12-01 18:17:47 +01:00
|
|
|
}
|
|
|
|
|
1997-06-16 19:43:53 +02:00
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* GetGlyphOutlineW (GDI32.@)
|
Release 961201
Sat Nov 30 19:21:17 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [configure]
Re-generated with autoconf 2.11. Let me know if you have
problems.
* [controls/listbox.c] [controls/oldlbox.c]
Listboxes rewritten from scratch. Moved old code still used by
comboboxes to oldlbox.c
* [misc/registry.c]
Use temporary file when saving registry.
* [windows/dialog.c]
Implemented Win32 version of DlgDirList() and DlgDirListComboBox().
* [windows/winproc.c]
Added translation for listbox Win32 messages.
Sat Nov 30 21:00:00 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [controls/widgets.c] [controls/button.c]
Fixed some incompatibilities with CTL3D DLL.
* [windows/dialog.c]
Made dialog windows fit into the desktop.
* [misc/winsock.c] [misc/winsock_async.c]
New Winsock engine.
* [windows/message.c]
GetMessage() fixes.
* [windows/queue.c] [windows/hook.c] [windows/win.c]
SetMessageQueue() fixes.
Fri Nov 29 10:25:12 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [objects/text.c]
DrawText16(): Fixed return value.
Tue Nov 26 14:47:09 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/profile.c] [*/*]
Added Win32 profile functions, updated to new naming standard.
* [objects/font.c] [if1632/thunk.c] [include/windows.h]
Added EnumFonts32*, EnumFontFamiliesEx*, changed prototypes and
structures.
* [misc/ole2nls.c] [if1632/thunk.c]
Added EnumSystemLocales() (winhelp.exe).
* [misc/registry.c]
Added Windows 3.1 registry loader supplied by Tor Sjxwall, tor@sn.no
* [win32/file.c]
Partially fixed CreateFileMapping(), added UnmapViewOfFile().
Sat Nov 23 23:36:05 1996 Ronan Waide <waider@waider.ie>
* [misc/shell.c]
Fixed some FIXMEs relating to ShellExec() and FindExecutable().
* [misc/main.c]
Implemented a few more of the SystemParametersInfo() cases.
Tue Nov 19 01:24:34 1996 Philippe De Muyter <phdm@info.ucl.ac.be>
* [include/keyboard.h]
New file, new macro WINE_VKEY_MAPPINGS (using code taken from event.c).
* [include/windows.h]
New [VK_A, VK_Z] and [VK_0, VK9] macros.
* [misc/keyboard.c]
Fixes in KeyTable and ToAscii.
* [objects/font.c]
FONT_init : Give default value for MSWIN "system" font.
FONT_MatchFont : Do not try every size of a font family if the
family does not exist.
* [windows/event.c]
lastEventChar hack removed.
KeyStateTable replaced by InputKeyStateTable (maintained in event.c)
and QueueKeyStateTable (maintained in message.c).
EVENT_key : Corrections to the extended bit setting.
* [windows/message.c] [windows/keyboard.c]
Implementation of a new QueueKeyStateTable : table of key states
valid when messages are retrieved by GetMessage or PeekMessage,
and valid for TranslateMessage.
TranslateMessage : Convert WM*KEY messages using QueueKeyStateTable
and ToAscii.
Mon Nov 18 16:59:01 1996 Robert Pouliot <krynos@clic.net>
* [graphics/Makefile.in] [graphics/wing.c]
[if1632/wing.spec]
Some functions for WinG support, mostly empty stubs.
* [misc/crtdll.c] [if1632/crtdll.spec]
Many functions added to CRTDLL, mostly calls to Unix C library.
1996-12-01 18:17:47 +01:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
DWORD WINAPI GetGlyphOutlineW( HDC hdc, UINT uChar, UINT fuFormat,
|
|
|
|
LPGLYPHMETRICS lpgm, DWORD cbBuffer,
|
1997-08-24 18:00:30 +02:00
|
|
|
LPVOID lpBuffer, const MAT2 *lpmat2 )
|
Release 961201
Sat Nov 30 19:21:17 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [configure]
Re-generated with autoconf 2.11. Let me know if you have
problems.
* [controls/listbox.c] [controls/oldlbox.c]
Listboxes rewritten from scratch. Moved old code still used by
comboboxes to oldlbox.c
* [misc/registry.c]
Use temporary file when saving registry.
* [windows/dialog.c]
Implemented Win32 version of DlgDirList() and DlgDirListComboBox().
* [windows/winproc.c]
Added translation for listbox Win32 messages.
Sat Nov 30 21:00:00 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [controls/widgets.c] [controls/button.c]
Fixed some incompatibilities with CTL3D DLL.
* [windows/dialog.c]
Made dialog windows fit into the desktop.
* [misc/winsock.c] [misc/winsock_async.c]
New Winsock engine.
* [windows/message.c]
GetMessage() fixes.
* [windows/queue.c] [windows/hook.c] [windows/win.c]
SetMessageQueue() fixes.
Fri Nov 29 10:25:12 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [objects/text.c]
DrawText16(): Fixed return value.
Tue Nov 26 14:47:09 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/profile.c] [*/*]
Added Win32 profile functions, updated to new naming standard.
* [objects/font.c] [if1632/thunk.c] [include/windows.h]
Added EnumFonts32*, EnumFontFamiliesEx*, changed prototypes and
structures.
* [misc/ole2nls.c] [if1632/thunk.c]
Added EnumSystemLocales() (winhelp.exe).
* [misc/registry.c]
Added Windows 3.1 registry loader supplied by Tor Sjxwall, tor@sn.no
* [win32/file.c]
Partially fixed CreateFileMapping(), added UnmapViewOfFile().
Sat Nov 23 23:36:05 1996 Ronan Waide <waider@waider.ie>
* [misc/shell.c]
Fixed some FIXMEs relating to ShellExec() and FindExecutable().
* [misc/main.c]
Implemented a few more of the SystemParametersInfo() cases.
Tue Nov 19 01:24:34 1996 Philippe De Muyter <phdm@info.ucl.ac.be>
* [include/keyboard.h]
New file, new macro WINE_VKEY_MAPPINGS (using code taken from event.c).
* [include/windows.h]
New [VK_A, VK_Z] and [VK_0, VK9] macros.
* [misc/keyboard.c]
Fixes in KeyTable and ToAscii.
* [objects/font.c]
FONT_init : Give default value for MSWIN "system" font.
FONT_MatchFont : Do not try every size of a font family if the
family does not exist.
* [windows/event.c]
lastEventChar hack removed.
KeyStateTable replaced by InputKeyStateTable (maintained in event.c)
and QueueKeyStateTable (maintained in message.c).
EVENT_key : Corrections to the extended bit setting.
* [windows/message.c] [windows/keyboard.c]
Implementation of a new QueueKeyStateTable : table of key states
valid when messages are retrieved by GetMessage or PeekMessage,
and valid for TranslateMessage.
TranslateMessage : Convert WM*KEY messages using QueueKeyStateTable
and ToAscii.
Mon Nov 18 16:59:01 1996 Robert Pouliot <krynos@clic.net>
* [graphics/Makefile.in] [graphics/wing.c]
[if1632/wing.spec]
Some functions for WinG support, mostly empty stubs.
* [misc/crtdll.c] [if1632/crtdll.spec]
Many functions added to CRTDLL, mostly calls to Unix C library.
1996-12-01 18:17:47 +01:00
|
|
|
{
|
2009-02-03 10:55:19 +01:00
|
|
|
DC *dc;
|
2001-09-12 22:21:06 +02:00
|
|
|
DWORD ret;
|
2011-10-20 16:34:08 +02:00
|
|
|
PHYSDEV dev;
|
2001-09-12 22:21:06 +02:00
|
|
|
|
2006-10-12 22:56:56 +02:00
|
|
|
TRACE("(%p, %04x, %04x, %p, %d, %p, %p)\n",
|
1998-03-29 21:44:57 +02:00
|
|
|
hdc, uChar, fuFormat, lpgm, cbBuffer, lpBuffer, lpmat2 );
|
2001-09-12 22:21:06 +02:00
|
|
|
|
2009-02-03 10:55:19 +01:00
|
|
|
if (!lpmat2) return GDI_ERROR;
|
|
|
|
|
|
|
|
dc = get_dc_ptr(hdc);
|
2001-09-12 22:21:06 +02:00
|
|
|
if(!dc) return GDI_ERROR;
|
|
|
|
|
2011-10-20 16:34:08 +02:00
|
|
|
dev = GET_DC_PHYSDEV( dc, pGetGlyphOutline );
|
|
|
|
ret = dev->funcs->pGetGlyphOutline( dev, uChar, fuFormat, lpgm, cbBuffer, lpBuffer, lpmat2 );
|
2008-02-05 21:16:27 +01:00
|
|
|
release_dc_ptr( dc );
|
2001-09-12 22:21:06 +02:00
|
|
|
return ret;
|
Release 961201
Sat Nov 30 19:21:17 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [configure]
Re-generated with autoconf 2.11. Let me know if you have
problems.
* [controls/listbox.c] [controls/oldlbox.c]
Listboxes rewritten from scratch. Moved old code still used by
comboboxes to oldlbox.c
* [misc/registry.c]
Use temporary file when saving registry.
* [windows/dialog.c]
Implemented Win32 version of DlgDirList() and DlgDirListComboBox().
* [windows/winproc.c]
Added translation for listbox Win32 messages.
Sat Nov 30 21:00:00 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [controls/widgets.c] [controls/button.c]
Fixed some incompatibilities with CTL3D DLL.
* [windows/dialog.c]
Made dialog windows fit into the desktop.
* [misc/winsock.c] [misc/winsock_async.c]
New Winsock engine.
* [windows/message.c]
GetMessage() fixes.
* [windows/queue.c] [windows/hook.c] [windows/win.c]
SetMessageQueue() fixes.
Fri Nov 29 10:25:12 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [objects/text.c]
DrawText16(): Fixed return value.
Tue Nov 26 14:47:09 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/profile.c] [*/*]
Added Win32 profile functions, updated to new naming standard.
* [objects/font.c] [if1632/thunk.c] [include/windows.h]
Added EnumFonts32*, EnumFontFamiliesEx*, changed prototypes and
structures.
* [misc/ole2nls.c] [if1632/thunk.c]
Added EnumSystemLocales() (winhelp.exe).
* [misc/registry.c]
Added Windows 3.1 registry loader supplied by Tor Sjxwall, tor@sn.no
* [win32/file.c]
Partially fixed CreateFileMapping(), added UnmapViewOfFile().
Sat Nov 23 23:36:05 1996 Ronan Waide <waider@waider.ie>
* [misc/shell.c]
Fixed some FIXMEs relating to ShellExec() and FindExecutable().
* [misc/main.c]
Implemented a few more of the SystemParametersInfo() cases.
Tue Nov 19 01:24:34 1996 Philippe De Muyter <phdm@info.ucl.ac.be>
* [include/keyboard.h]
New file, new macro WINE_VKEY_MAPPINGS (using code taken from event.c).
* [include/windows.h]
New [VK_A, VK_Z] and [VK_0, VK9] macros.
* [misc/keyboard.c]
Fixes in KeyTable and ToAscii.
* [objects/font.c]
FONT_init : Give default value for MSWIN "system" font.
FONT_MatchFont : Do not try every size of a font family if the
family does not exist.
* [windows/event.c]
lastEventChar hack removed.
KeyStateTable replaced by InputKeyStateTable (maintained in event.c)
and QueueKeyStateTable (maintained in message.c).
EVENT_key : Corrections to the extended bit setting.
* [windows/message.c] [windows/keyboard.c]
Implementation of a new QueueKeyStateTable : table of key states
valid when messages are retrieved by GetMessage or PeekMessage,
and valid for TranslateMessage.
TranslateMessage : Convert WM*KEY messages using QueueKeyStateTable
and ToAscii.
Mon Nov 18 16:59:01 1996 Robert Pouliot <krynos@clic.net>
* [graphics/Makefile.in] [graphics/wing.c]
[if1632/wing.spec]
Some functions for WinG support, mostly empty stubs.
* [misc/crtdll.c] [if1632/crtdll.spec]
Many functions added to CRTDLL, mostly calls to Unix C library.
1996-12-01 18:17:47 +01:00
|
|
|
}
|
1994-05-18 20:29:32 +02:00
|
|
|
|
Release 961201
Sat Nov 30 19:21:17 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [configure]
Re-generated with autoconf 2.11. Let me know if you have
problems.
* [controls/listbox.c] [controls/oldlbox.c]
Listboxes rewritten from scratch. Moved old code still used by
comboboxes to oldlbox.c
* [misc/registry.c]
Use temporary file when saving registry.
* [windows/dialog.c]
Implemented Win32 version of DlgDirList() and DlgDirListComboBox().
* [windows/winproc.c]
Added translation for listbox Win32 messages.
Sat Nov 30 21:00:00 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [controls/widgets.c] [controls/button.c]
Fixed some incompatibilities with CTL3D DLL.
* [windows/dialog.c]
Made dialog windows fit into the desktop.
* [misc/winsock.c] [misc/winsock_async.c]
New Winsock engine.
* [windows/message.c]
GetMessage() fixes.
* [windows/queue.c] [windows/hook.c] [windows/win.c]
SetMessageQueue() fixes.
Fri Nov 29 10:25:12 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [objects/text.c]
DrawText16(): Fixed return value.
Tue Nov 26 14:47:09 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/profile.c] [*/*]
Added Win32 profile functions, updated to new naming standard.
* [objects/font.c] [if1632/thunk.c] [include/windows.h]
Added EnumFonts32*, EnumFontFamiliesEx*, changed prototypes and
structures.
* [misc/ole2nls.c] [if1632/thunk.c]
Added EnumSystemLocales() (winhelp.exe).
* [misc/registry.c]
Added Windows 3.1 registry loader supplied by Tor Sjxwall, tor@sn.no
* [win32/file.c]
Partially fixed CreateFileMapping(), added UnmapViewOfFile().
Sat Nov 23 23:36:05 1996 Ronan Waide <waider@waider.ie>
* [misc/shell.c]
Fixed some FIXMEs relating to ShellExec() and FindExecutable().
* [misc/main.c]
Implemented a few more of the SystemParametersInfo() cases.
Tue Nov 19 01:24:34 1996 Philippe De Muyter <phdm@info.ucl.ac.be>
* [include/keyboard.h]
New file, new macro WINE_VKEY_MAPPINGS (using code taken from event.c).
* [include/windows.h]
New [VK_A, VK_Z] and [VK_0, VK9] macros.
* [misc/keyboard.c]
Fixes in KeyTable and ToAscii.
* [objects/font.c]
FONT_init : Give default value for MSWIN "system" font.
FONT_MatchFont : Do not try every size of a font family if the
family does not exist.
* [windows/event.c]
lastEventChar hack removed.
KeyStateTable replaced by InputKeyStateTable (maintained in event.c)
and QueueKeyStateTable (maintained in message.c).
EVENT_key : Corrections to the extended bit setting.
* [windows/message.c] [windows/keyboard.c]
Implementation of a new QueueKeyStateTable : table of key states
valid when messages are retrieved by GetMessage or PeekMessage,
and valid for TranslateMessage.
TranslateMessage : Convert WM*KEY messages using QueueKeyStateTable
and ToAscii.
Mon Nov 18 16:59:01 1996 Robert Pouliot <krynos@clic.net>
* [graphics/Makefile.in] [graphics/wing.c]
[if1632/wing.spec]
Some functions for WinG support, mostly empty stubs.
* [misc/crtdll.c] [if1632/crtdll.spec]
Many functions added to CRTDLL, mostly calls to Unix C library.
1996-12-01 18:17:47 +01:00
|
|
|
|
1997-06-16 19:43:53 +02:00
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* CreateScalableFontResourceA (GDI32.@)
|
Release 961201
Sat Nov 30 19:21:17 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [configure]
Re-generated with autoconf 2.11. Let me know if you have
problems.
* [controls/listbox.c] [controls/oldlbox.c]
Listboxes rewritten from scratch. Moved old code still used by
comboboxes to oldlbox.c
* [misc/registry.c]
Use temporary file when saving registry.
* [windows/dialog.c]
Implemented Win32 version of DlgDirList() and DlgDirListComboBox().
* [windows/winproc.c]
Added translation for listbox Win32 messages.
Sat Nov 30 21:00:00 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [controls/widgets.c] [controls/button.c]
Fixed some incompatibilities with CTL3D DLL.
* [windows/dialog.c]
Made dialog windows fit into the desktop.
* [misc/winsock.c] [misc/winsock_async.c]
New Winsock engine.
* [windows/message.c]
GetMessage() fixes.
* [windows/queue.c] [windows/hook.c] [windows/win.c]
SetMessageQueue() fixes.
Fri Nov 29 10:25:12 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [objects/text.c]
DrawText16(): Fixed return value.
Tue Nov 26 14:47:09 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/profile.c] [*/*]
Added Win32 profile functions, updated to new naming standard.
* [objects/font.c] [if1632/thunk.c] [include/windows.h]
Added EnumFonts32*, EnumFontFamiliesEx*, changed prototypes and
structures.
* [misc/ole2nls.c] [if1632/thunk.c]
Added EnumSystemLocales() (winhelp.exe).
* [misc/registry.c]
Added Windows 3.1 registry loader supplied by Tor Sjxwall, tor@sn.no
* [win32/file.c]
Partially fixed CreateFileMapping(), added UnmapViewOfFile().
Sat Nov 23 23:36:05 1996 Ronan Waide <waider@waider.ie>
* [misc/shell.c]
Fixed some FIXMEs relating to ShellExec() and FindExecutable().
* [misc/main.c]
Implemented a few more of the SystemParametersInfo() cases.
Tue Nov 19 01:24:34 1996 Philippe De Muyter <phdm@info.ucl.ac.be>
* [include/keyboard.h]
New file, new macro WINE_VKEY_MAPPINGS (using code taken from event.c).
* [include/windows.h]
New [VK_A, VK_Z] and [VK_0, VK9] macros.
* [misc/keyboard.c]
Fixes in KeyTable and ToAscii.
* [objects/font.c]
FONT_init : Give default value for MSWIN "system" font.
FONT_MatchFont : Do not try every size of a font family if the
family does not exist.
* [windows/event.c]
lastEventChar hack removed.
KeyStateTable replaced by InputKeyStateTable (maintained in event.c)
and QueueKeyStateTable (maintained in message.c).
EVENT_key : Corrections to the extended bit setting.
* [windows/message.c] [windows/keyboard.c]
Implementation of a new QueueKeyStateTable : table of key states
valid when messages are retrieved by GetMessage or PeekMessage,
and valid for TranslateMessage.
TranslateMessage : Convert WM*KEY messages using QueueKeyStateTable
and ToAscii.
Mon Nov 18 16:59:01 1996 Robert Pouliot <krynos@clic.net>
* [graphics/Makefile.in] [graphics/wing.c]
[if1632/wing.spec]
Some functions for WinG support, mostly empty stubs.
* [misc/crtdll.c] [if1632/crtdll.spec]
Many functions added to CRTDLL, mostly calls to Unix C library.
1996-12-01 18:17:47 +01:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
BOOL WINAPI CreateScalableFontResourceA( DWORD fHidden,
|
1997-08-24 18:00:30 +02:00
|
|
|
LPCSTR lpszResourceFile,
|
|
|
|
LPCSTR lpszFontFile,
|
|
|
|
LPCSTR lpszCurrentPath )
|
Release 961201
Sat Nov 30 19:21:17 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [configure]
Re-generated with autoconf 2.11. Let me know if you have
problems.
* [controls/listbox.c] [controls/oldlbox.c]
Listboxes rewritten from scratch. Moved old code still used by
comboboxes to oldlbox.c
* [misc/registry.c]
Use temporary file when saving registry.
* [windows/dialog.c]
Implemented Win32 version of DlgDirList() and DlgDirListComboBox().
* [windows/winproc.c]
Added translation for listbox Win32 messages.
Sat Nov 30 21:00:00 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [controls/widgets.c] [controls/button.c]
Fixed some incompatibilities with CTL3D DLL.
* [windows/dialog.c]
Made dialog windows fit into the desktop.
* [misc/winsock.c] [misc/winsock_async.c]
New Winsock engine.
* [windows/message.c]
GetMessage() fixes.
* [windows/queue.c] [windows/hook.c] [windows/win.c]
SetMessageQueue() fixes.
Fri Nov 29 10:25:12 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [objects/text.c]
DrawText16(): Fixed return value.
Tue Nov 26 14:47:09 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/profile.c] [*/*]
Added Win32 profile functions, updated to new naming standard.
* [objects/font.c] [if1632/thunk.c] [include/windows.h]
Added EnumFonts32*, EnumFontFamiliesEx*, changed prototypes and
structures.
* [misc/ole2nls.c] [if1632/thunk.c]
Added EnumSystemLocales() (winhelp.exe).
* [misc/registry.c]
Added Windows 3.1 registry loader supplied by Tor Sjxwall, tor@sn.no
* [win32/file.c]
Partially fixed CreateFileMapping(), added UnmapViewOfFile().
Sat Nov 23 23:36:05 1996 Ronan Waide <waider@waider.ie>
* [misc/shell.c]
Fixed some FIXMEs relating to ShellExec() and FindExecutable().
* [misc/main.c]
Implemented a few more of the SystemParametersInfo() cases.
Tue Nov 19 01:24:34 1996 Philippe De Muyter <phdm@info.ucl.ac.be>
* [include/keyboard.h]
New file, new macro WINE_VKEY_MAPPINGS (using code taken from event.c).
* [include/windows.h]
New [VK_A, VK_Z] and [VK_0, VK9] macros.
* [misc/keyboard.c]
Fixes in KeyTable and ToAscii.
* [objects/font.c]
FONT_init : Give default value for MSWIN "system" font.
FONT_MatchFont : Do not try every size of a font family if the
family does not exist.
* [windows/event.c]
lastEventChar hack removed.
KeyStateTable replaced by InputKeyStateTable (maintained in event.c)
and QueueKeyStateTable (maintained in message.c).
EVENT_key : Corrections to the extended bit setting.
* [windows/message.c] [windows/keyboard.c]
Implementation of a new QueueKeyStateTable : table of key states
valid when messages are retrieved by GetMessage or PeekMessage,
and valid for TranslateMessage.
TranslateMessage : Convert WM*KEY messages using QueueKeyStateTable
and ToAscii.
Mon Nov 18 16:59:01 1996 Robert Pouliot <krynos@clic.net>
* [graphics/Makefile.in] [graphics/wing.c]
[if1632/wing.spec]
Some functions for WinG support, mostly empty stubs.
* [misc/crtdll.c] [if1632/crtdll.spec]
Many functions added to CRTDLL, mostly calls to Unix C library.
1996-12-01 18:17:47 +01:00
|
|
|
{
|
2008-03-07 17:11:09 +01:00
|
|
|
LPWSTR lpszResourceFileW = NULL;
|
|
|
|
LPWSTR lpszFontFileW = NULL;
|
|
|
|
LPWSTR lpszCurrentPathW = NULL;
|
|
|
|
int len;
|
|
|
|
BOOL ret;
|
2002-07-24 03:58:01 +02:00
|
|
|
|
2008-03-07 17:11:09 +01:00
|
|
|
if (lpszResourceFile)
|
|
|
|
{
|
|
|
|
len = MultiByteToWideChar(CP_ACP, 0, lpszResourceFile, -1, NULL, 0);
|
|
|
|
lpszResourceFileW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
|
|
|
|
MultiByteToWideChar(CP_ACP, 0, lpszResourceFile, -1, lpszResourceFileW, len);
|
|
|
|
}
|
2002-07-24 03:58:01 +02:00
|
|
|
|
2008-03-07 17:11:09 +01:00
|
|
|
if (lpszFontFile)
|
|
|
|
{
|
|
|
|
len = MultiByteToWideChar(CP_ACP, 0, lpszFontFile, -1, NULL, 0);
|
|
|
|
lpszFontFileW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
|
|
|
|
MultiByteToWideChar(CP_ACP, 0, lpszFontFile, -1, lpszFontFileW, len);
|
2002-07-24 03:58:01 +02:00
|
|
|
}
|
2008-03-07 17:11:09 +01:00
|
|
|
|
|
|
|
if (lpszCurrentPath)
|
|
|
|
{
|
|
|
|
len = MultiByteToWideChar(CP_ACP, 0, lpszCurrentPath, -1, NULL, 0);
|
|
|
|
lpszCurrentPathW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
|
|
|
|
MultiByteToWideChar(CP_ACP, 0, lpszCurrentPath, -1, lpszCurrentPathW, len);
|
|
|
|
}
|
|
|
|
|
|
|
|
ret = CreateScalableFontResourceW(fHidden, lpszResourceFileW,
|
|
|
|
lpszFontFileW, lpszCurrentPathW);
|
|
|
|
|
|
|
|
HeapFree(GetProcessHeap(), 0, lpszResourceFileW);
|
|
|
|
HeapFree(GetProcessHeap(), 0, lpszFontFileW);
|
|
|
|
HeapFree(GetProcessHeap(), 0, lpszCurrentPathW);
|
|
|
|
|
|
|
|
return ret;
|
Release 961201
Sat Nov 30 19:21:17 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [configure]
Re-generated with autoconf 2.11. Let me know if you have
problems.
* [controls/listbox.c] [controls/oldlbox.c]
Listboxes rewritten from scratch. Moved old code still used by
comboboxes to oldlbox.c
* [misc/registry.c]
Use temporary file when saving registry.
* [windows/dialog.c]
Implemented Win32 version of DlgDirList() and DlgDirListComboBox().
* [windows/winproc.c]
Added translation for listbox Win32 messages.
Sat Nov 30 21:00:00 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [controls/widgets.c] [controls/button.c]
Fixed some incompatibilities with CTL3D DLL.
* [windows/dialog.c]
Made dialog windows fit into the desktop.
* [misc/winsock.c] [misc/winsock_async.c]
New Winsock engine.
* [windows/message.c]
GetMessage() fixes.
* [windows/queue.c] [windows/hook.c] [windows/win.c]
SetMessageQueue() fixes.
Fri Nov 29 10:25:12 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [objects/text.c]
DrawText16(): Fixed return value.
Tue Nov 26 14:47:09 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/profile.c] [*/*]
Added Win32 profile functions, updated to new naming standard.
* [objects/font.c] [if1632/thunk.c] [include/windows.h]
Added EnumFonts32*, EnumFontFamiliesEx*, changed prototypes and
structures.
* [misc/ole2nls.c] [if1632/thunk.c]
Added EnumSystemLocales() (winhelp.exe).
* [misc/registry.c]
Added Windows 3.1 registry loader supplied by Tor Sjxwall, tor@sn.no
* [win32/file.c]
Partially fixed CreateFileMapping(), added UnmapViewOfFile().
Sat Nov 23 23:36:05 1996 Ronan Waide <waider@waider.ie>
* [misc/shell.c]
Fixed some FIXMEs relating to ShellExec() and FindExecutable().
* [misc/main.c]
Implemented a few more of the SystemParametersInfo() cases.
Tue Nov 19 01:24:34 1996 Philippe De Muyter <phdm@info.ucl.ac.be>
* [include/keyboard.h]
New file, new macro WINE_VKEY_MAPPINGS (using code taken from event.c).
* [include/windows.h]
New [VK_A, VK_Z] and [VK_0, VK9] macros.
* [misc/keyboard.c]
Fixes in KeyTable and ToAscii.
* [objects/font.c]
FONT_init : Give default value for MSWIN "system" font.
FONT_MatchFont : Do not try every size of a font family if the
family does not exist.
* [windows/event.c]
lastEventChar hack removed.
KeyStateTable replaced by InputKeyStateTable (maintained in event.c)
and QueueKeyStateTable (maintained in message.c).
EVENT_key : Corrections to the extended bit setting.
* [windows/message.c] [windows/keyboard.c]
Implementation of a new QueueKeyStateTable : table of key states
valid when messages are retrieved by GetMessage or PeekMessage,
and valid for TranslateMessage.
TranslateMessage : Convert WM*KEY messages using QueueKeyStateTable
and ToAscii.
Mon Nov 18 16:59:01 1996 Robert Pouliot <krynos@clic.net>
* [graphics/Makefile.in] [graphics/wing.c]
[if1632/wing.spec]
Some functions for WinG support, mostly empty stubs.
* [misc/crtdll.c] [if1632/crtdll.spec]
Many functions added to CRTDLL, mostly calls to Unix C library.
1996-12-01 18:17:47 +01:00
|
|
|
}
|
|
|
|
|
1997-06-16 19:43:53 +02:00
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* CreateScalableFontResourceW (GDI32.@)
|
Release 961201
Sat Nov 30 19:21:17 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [configure]
Re-generated with autoconf 2.11. Let me know if you have
problems.
* [controls/listbox.c] [controls/oldlbox.c]
Listboxes rewritten from scratch. Moved old code still used by
comboboxes to oldlbox.c
* [misc/registry.c]
Use temporary file when saving registry.
* [windows/dialog.c]
Implemented Win32 version of DlgDirList() and DlgDirListComboBox().
* [windows/winproc.c]
Added translation for listbox Win32 messages.
Sat Nov 30 21:00:00 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [controls/widgets.c] [controls/button.c]
Fixed some incompatibilities with CTL3D DLL.
* [windows/dialog.c]
Made dialog windows fit into the desktop.
* [misc/winsock.c] [misc/winsock_async.c]
New Winsock engine.
* [windows/message.c]
GetMessage() fixes.
* [windows/queue.c] [windows/hook.c] [windows/win.c]
SetMessageQueue() fixes.
Fri Nov 29 10:25:12 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [objects/text.c]
DrawText16(): Fixed return value.
Tue Nov 26 14:47:09 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/profile.c] [*/*]
Added Win32 profile functions, updated to new naming standard.
* [objects/font.c] [if1632/thunk.c] [include/windows.h]
Added EnumFonts32*, EnumFontFamiliesEx*, changed prototypes and
structures.
* [misc/ole2nls.c] [if1632/thunk.c]
Added EnumSystemLocales() (winhelp.exe).
* [misc/registry.c]
Added Windows 3.1 registry loader supplied by Tor Sjxwall, tor@sn.no
* [win32/file.c]
Partially fixed CreateFileMapping(), added UnmapViewOfFile().
Sat Nov 23 23:36:05 1996 Ronan Waide <waider@waider.ie>
* [misc/shell.c]
Fixed some FIXMEs relating to ShellExec() and FindExecutable().
* [misc/main.c]
Implemented a few more of the SystemParametersInfo() cases.
Tue Nov 19 01:24:34 1996 Philippe De Muyter <phdm@info.ucl.ac.be>
* [include/keyboard.h]
New file, new macro WINE_VKEY_MAPPINGS (using code taken from event.c).
* [include/windows.h]
New [VK_A, VK_Z] and [VK_0, VK9] macros.
* [misc/keyboard.c]
Fixes in KeyTable and ToAscii.
* [objects/font.c]
FONT_init : Give default value for MSWIN "system" font.
FONT_MatchFont : Do not try every size of a font family if the
family does not exist.
* [windows/event.c]
lastEventChar hack removed.
KeyStateTable replaced by InputKeyStateTable (maintained in event.c)
and QueueKeyStateTable (maintained in message.c).
EVENT_key : Corrections to the extended bit setting.
* [windows/message.c] [windows/keyboard.c]
Implementation of a new QueueKeyStateTable : table of key states
valid when messages are retrieved by GetMessage or PeekMessage,
and valid for TranslateMessage.
TranslateMessage : Convert WM*KEY messages using QueueKeyStateTable
and ToAscii.
Mon Nov 18 16:59:01 1996 Robert Pouliot <krynos@clic.net>
* [graphics/Makefile.in] [graphics/wing.c]
[if1632/wing.spec]
Some functions for WinG support, mostly empty stubs.
* [misc/crtdll.c] [if1632/crtdll.spec]
Many functions added to CRTDLL, mostly calls to Unix C library.
1996-12-01 18:17:47 +01:00
|
|
|
*/
|
2012-03-28 15:49:24 +02:00
|
|
|
BOOL WINAPI CreateScalableFontResourceW( DWORD hidden, LPCWSTR resource_file,
|
|
|
|
LPCWSTR font_file, LPCWSTR font_path )
|
|
|
|
{
|
|
|
|
TRACE("(%d, %s, %s, %s)\n", hidden, debugstr_w(resource_file),
|
|
|
|
debugstr_w(font_file), debugstr_w(font_path) );
|
|
|
|
|
|
|
|
return WineEngCreateScalableFontResource( hidden, resource_file,
|
|
|
|
font_file, font_path );
|
1996-11-17 19:59:11 +01:00
|
|
|
}
|
|
|
|
|
1997-03-05 09:22:35 +01:00
|
|
|
/*************************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* GetKerningPairsA (GDI32.@)
|
1997-03-05 09:22:35 +01:00
|
|
|
*/
|
2003-04-27 22:36:35 +02:00
|
|
|
DWORD WINAPI GetKerningPairsA( HDC hDC, DWORD cPairs,
|
2006-09-20 17:18:51 +02:00
|
|
|
LPKERNINGPAIR kern_pairA )
|
1997-03-05 09:22:35 +01:00
|
|
|
{
|
2009-04-06 10:16:48 +02:00
|
|
|
UINT cp;
|
2006-09-20 17:18:51 +02:00
|
|
|
CPINFO cpi;
|
|
|
|
DWORD i, total_kern_pairs, kern_pairs_copied = 0;
|
|
|
|
KERNINGPAIR *kern_pairW;
|
|
|
|
|
|
|
|
if (!cPairs && kern_pairA)
|
|
|
|
{
|
|
|
|
SetLastError(ERROR_INVALID_PARAMETER);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2009-04-06 10:16:48 +02:00
|
|
|
cp = GdiGetCodePage(hDC);
|
|
|
|
|
2007-04-01 13:17:33 +02:00
|
|
|
/* GetCPInfo() will fail on CP_SYMBOL, and WideCharToMultiByte is supposed
|
|
|
|
* to fail on an invalid character for CP_SYMBOL.
|
|
|
|
*/
|
|
|
|
cpi.DefaultChar[0] = 0;
|
2009-04-06 10:16:48 +02:00
|
|
|
if (cp != CP_SYMBOL && !GetCPInfo(cp, &cpi))
|
2006-09-20 17:18:51 +02:00
|
|
|
{
|
2009-04-06 10:16:48 +02:00
|
|
|
FIXME("Can't find codepage %u info\n", cp);
|
2006-09-20 17:18:51 +02:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
total_kern_pairs = GetKerningPairsW(hDC, 0, NULL);
|
|
|
|
if (!total_kern_pairs) return 0;
|
|
|
|
|
|
|
|
kern_pairW = HeapAlloc(GetProcessHeap(), 0, total_kern_pairs * sizeof(*kern_pairW));
|
|
|
|
GetKerningPairsW(hDC, total_kern_pairs, kern_pairW);
|
|
|
|
|
|
|
|
for (i = 0; i < total_kern_pairs; i++)
|
|
|
|
{
|
|
|
|
char first, second;
|
|
|
|
|
2009-04-06 10:16:48 +02:00
|
|
|
if (!WideCharToMultiByte(cp, 0, &kern_pairW[i].wFirst, 1, &first, 1, NULL, NULL))
|
2006-09-20 17:18:51 +02:00
|
|
|
continue;
|
|
|
|
|
2009-04-06 10:16:48 +02:00
|
|
|
if (!WideCharToMultiByte(cp, 0, &kern_pairW[i].wSecond, 1, &second, 1, NULL, NULL))
|
2006-09-20 17:18:51 +02:00
|
|
|
continue;
|
1997-02-02 20:01:52 +01:00
|
|
|
|
2006-09-20 17:18:51 +02:00
|
|
|
if (first == cpi.DefaultChar[0] || second == cpi.DefaultChar[0])
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if (kern_pairA)
|
|
|
|
{
|
|
|
|
if (kern_pairs_copied >= cPairs) break;
|
|
|
|
|
|
|
|
kern_pairA->wFirst = (BYTE)first;
|
|
|
|
kern_pairA->wSecond = (BYTE)second;
|
|
|
|
kern_pairA->iKernAmount = kern_pairW[i].iKernAmount;
|
|
|
|
kern_pairA++;
|
|
|
|
}
|
|
|
|
kern_pairs_copied++;
|
|
|
|
}
|
|
|
|
|
|
|
|
HeapFree(GetProcessHeap(), 0, kern_pairW);
|
|
|
|
|
|
|
|
return kern_pairs_copied;
|
|
|
|
}
|
1997-03-05 09:22:35 +01:00
|
|
|
|
|
|
|
/*************************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* GetKerningPairsW (GDI32.@)
|
1997-03-05 09:22:35 +01:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
DWORD WINAPI GetKerningPairsW( HDC hDC, DWORD cPairs,
|
|
|
|
LPKERNINGPAIR lpKerningPairs )
|
1997-03-05 09:22:35 +01:00
|
|
|
{
|
2006-09-27 16:43:23 +02:00
|
|
|
DC *dc;
|
2011-10-20 16:39:53 +02:00
|
|
|
DWORD ret;
|
|
|
|
PHYSDEV dev;
|
2006-01-12 11:54:20 +01:00
|
|
|
|
2006-10-12 22:56:56 +02:00
|
|
|
TRACE("(%p,%d,%p)\n", hDC, cPairs, lpKerningPairs);
|
2006-01-12 11:54:20 +01:00
|
|
|
|
2006-09-27 16:43:23 +02:00
|
|
|
if (!cPairs && lpKerningPairs)
|
|
|
|
{
|
|
|
|
SetLastError(ERROR_INVALID_PARAMETER);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2008-02-05 21:16:27 +01:00
|
|
|
dc = get_dc_ptr(hDC);
|
2006-09-20 17:18:51 +02:00
|
|
|
if (!dc) return 0;
|
|
|
|
|
2011-10-20 16:39:53 +02:00
|
|
|
dev = GET_DC_PHYSDEV( dc, pGetKerningPairs );
|
|
|
|
ret = dev->funcs->pGetKerningPairs( dev, cPairs, lpKerningPairs );
|
2008-02-05 21:16:27 +01:00
|
|
|
release_dc_ptr( dc );
|
2006-09-20 17:18:51 +02:00
|
|
|
return ret;
|
1997-03-05 09:22:35 +01:00
|
|
|
}
|
1997-06-16 19:43:53 +02:00
|
|
|
|
Release 980712
Sun Jul 12 16:23:36 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
* [server/*] [scheduler/client.c] (new files)
[scheduler/sysdeps.c] [scheduler/thread.c] [scheduler/process.c]
Beginnings of client/server communication for inter-process
synchronisation.
Sat Jul 11 19:45:45 1998 Ulrich Weigand <weigand@informatik.uni-erlangen.de>
* [include/bitmap.h] [objects/bitmap.c] [objects/dib.c]
[objects/oembitmap.c]
Speed up DIB section handling by using pre-allocated colormap and
XImage. Moved DIB section data out of general BITMAPOBJ structure.
Bugfix: GetDIBits32 would overwrite one byte beyond bitmap data.
* [if1632/shell.spec] [if1632/kernel.spec] [win32/kernel32.c]
More verbose error message if ThunkConnect fails.
Implemented KERNEL_475.
* [files/profile.c] [ole/ole2nls.c]
Minor bugfixes.
* [if1632/builtin.c] [if1632/kernel.spec] [include/task.h]
[loader/ne/module.c] [loader/task.c]
Implemented KERNEL.THHOOK.
* [if1632/wprocs.spec] [include/process.h] [msdos/dpmi.c] [msdos/vxd.c]
Implemented Win32s VxD services (W32S.386).
Sat Jul 11 17:52:23 1998 Huw D M Davies <daviesh@abacus.physics.ox.ac.uk>
* [graphics/x11drv/xfont.c] [graphics/x11drv/text.c]
[include/x11font.h]
Improve handling of rotated X11 fonts. Metrics/extents should now be
correct. ExtTextOut should behave better (still doesn't handle lpDx).
* [graphics/painting.c]
DrawFocusRect32: Don't do anything if width or height are zero.
Sat Jul 11 15:21:35 1998 Andreas Mohr <100.30936@germany.net>
* [files/profile.c] [include/windows.h]
The length arguments of *Profile*() need to be treated
as UINTxx instead of INTxx.
* [graphics/env.c] [graphics/win16drv/init.c] [include/print.h]
[misc/printdrv.c]
Many printer driver fixes/changes (many thanks go to Huw !).
Most printers should work again ;)
* [memory/atom.c]
Fixed ATOM_AddAtom to store atoms exactly like Windows.
* [*/*]
Fixed misc compiler warnings.
Fri Jul 10 15:58:36 1998 Marcus Meissner <marcus@jet.franken.de>
* [files/drive.c]
Fixed GetDriveType16 to return DRIVE_REMOTE again.
* [loader/pe_image.c][loader/module.c]
Look for modules that have the same modulename or the same
filename (they sometimes differ).
Fixed up fixup_imports, removed one of the loops.
* [windows/winpos.c]
Added some NULL ptr checks. Needs more.
* [graphics/ddraw.c]
Some stubs added.
* [if1632/snoop.c]
Updated, made WINELIB compatible.
Fri Jul 10 04:39:56 1998 Douglas Ridgway <ridgway@winehq.com>
* [objects/enhmetafile.c] [relay32/gdi32.spec]
Small tweaks for documentation system.
Thu Jul 9 22:00:18 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
* [controls/commctrl.c][include/commctrl.h][relay32/comctl32.spec]
Fixed GetEffectiveClientRect, CreateToolbarEx and CreateMappedBitmap.
Added stub for ShowHideMenuCtl. Added some documentation.
* [documentation/common_controls]
Added and updated some information.
* [controls/toolbar.c][include/toolbar.h]
Added string support.
* [misc/shell.c][misc/shellord.c][relay32/shell.spec]
Changed names of undocumented functions to their real names and
fixed the export table.
* [controls/imagelist.c][relay32/comctl32.spec]
Added stub for ImageList_SetFilter.
Fixed some minor bugs and typos.
* [objects/font.c][include/windows.h][relay32/gdi32.spec]
Added stubs for GetCharacterPlacement32[A/W].
* [objects/region.c][relay32/gdi32.spec]
Added stub for UNDOCUMENTED GetRandomRgn.
* [controls/commctrl.c][controls/*.c][include/*.h]
Added dummy listview, pager, rebar, tooltips, trackbar and
treeview control. This keeps some programs from complaining.
Thu Jul 9 11:23:58 1998 Rein Klazes <rklazes@casema.net>
* [graphics/painting.c] [graphics/*/init.c]
[graphics/x11drv/graphics.c] [relay32/gdi32.spec]
[if1632/gdi.spec] [include/gdi.h] [include/x11drv.h]
Implemented drawing bezier curves: PolyBezier16/32 and
PolyBezierTo16/32.
* [graphics/x11drv/graphics.c]
Improved accuracy of several graphic routines, especially the
drawing of pie's.
* [include/windows.h] [misc/spy.c]
Added 25 window messages related to programs based on MFC and/or OLE.
Wed Jul 8 22:00:00 1998 James Juran <jrj120@psu.edu>
* [documentation/wine.man]
Updated manpage.
* [wine.ini]
Added section for Win95Look=true (commented out by default).
Wed Jul 8 06:23:19 1998 Matthew Becker <mbecker@glasscity.net>
* [misc/registry.c]
Fixed a crash in RegEnumValue32A when the dwType parameter is
NULL.
* [programs/regtest/regtest.c]
Improved the printing of errors.
* [misc/ntdll.c]
Added stub for RtlFormatCurrentUserKeyPath.
* [win32/console.c]
Added stub for ScrollConsoleScreenBuffer.
Mon Jul 6 16:41:47 1998 Per Lindstrm <pelinstr@algonet.se>
* [include/windows.h] [relay32/kernel.spec] [win32/newfns.c]
Added stubs for SleepEx and TerminateProcess.
* [rc/README]
Corrected a grammatical error.
Mon Jul 3 12:00:00 1998 Juergen Schmied <juergen.schmied@metronet.de>
* [misc/shellord.c]
Put some TRACE in.
* [memory/string.c]
Deleted unused variable in lstrcmpi32A.
* [include/windows.h][memory/string.c]
Added functions WideCharToLocal32 LocalToWideChar32 for
OLE-strings
* [include/shlobj.h][include/winerror.h][misc/shell.c]
[ole/folders.c]
Added definition of internal class pidlmgr.
Changed definitions of EnumIDList, IShellFolder.
Added some OLE error constants.
Implemented EnumIDList, IShellFolder, IClassFactory,
PidlMgr, SHELL32_DllGetClassObject, SHGetDesktopFolder,
SHGetSpecialFolderLocation (half), SHGetPathFromIDList
(!!This stuff is not finished yet!!)
* [include/windows.h][misc/network][reley32/mpr.spec]
Added stubs for WNetConnectionDialog32[A|W|API].
Added struct LPCONNECTDLGSTRUCT32[A|W] and some constants.
Added some SetLastError(WN_NO_NETWORK) to the stubs.
Fixed bufferhandling in WNetCancelConnection
Added stub for MultinetGetErrorText[A|W]
* [ole/ole2nls.c]
Rewrote GetTimeFormat32A.
Fri Jul 3 10:27:30 1998 Michael Poole <poole+@andrew.cmu.edu>
* [graphics/ddraw.c] [tsx11/X11_calls]
Implement IDirectDrawPalette_GetEntries.
Use CopyColormapAndFree to avoid erasing previously-set
palette entries.
* [graphics/ddraw.c] [include/ddraw.h]
[tools/make_X11wrappers] [tsx11/X11_calls]
Provide a preliminary, not-yet-working framework for doing
DirectDraw via Xlib or XShm as well as DGA.
Tue Jun 30 00:16:09 1998 Marcel Baur <mbaur@g26.ethz.ch>
* [ole/nls/*.nls]
Added remaining 22 locales (including arabic locales).
1998-07-12 21:29:36 +02:00
|
|
|
/*************************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* TranslateCharsetInfo [GDI32.@]
|
1998-12-18 18:38:39 +01:00
|
|
|
*
|
|
|
|
* Fills a CHARSETINFO structure for a character set, code page, or
|
2007-12-18 09:48:16 +01:00
|
|
|
* font. This allows making the correspondence between different labels
|
2002-06-01 01:06:46 +02:00
|
|
|
* (character set, Windows, ANSI, and OEM codepages, and Unicode ranges)
|
1998-12-18 18:38:39 +01:00
|
|
|
* of the same encoding.
|
|
|
|
*
|
|
|
|
* Only one codepage will be set in lpCs->fs. If TCI_SRCFONTSIG is used,
|
|
|
|
* only one codepage should be set in *lpSrc.
|
|
|
|
*
|
|
|
|
* RETURNS
|
|
|
|
* TRUE on success, FALSE on failure.
|
|
|
|
*
|
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
BOOL WINAPI TranslateCharsetInfo(
|
2000-12-02 00:58:28 +01:00
|
|
|
LPDWORD lpSrc, /* [in]
|
1998-12-18 18:38:39 +01:00
|
|
|
if flags == TCI_SRCFONTSIG: pointer to fsCsb of a FONTSIGNATURE
|
|
|
|
if flags == TCI_SRCCHARSET: a character set value
|
|
|
|
if flags == TCI_SRCCODEPAGE: a code page value
|
|
|
|
*/
|
2000-12-02 00:58:28 +01:00
|
|
|
LPCHARSETINFO lpCs, /* [out] structure to receive charset information */
|
2004-02-09 21:47:42 +01:00
|
|
|
DWORD flags /* [in] determines interpretation of lpSrc */)
|
|
|
|
{
|
1999-01-01 19:41:22 +01:00
|
|
|
int index = 0;
|
|
|
|
switch (flags) {
|
|
|
|
case TCI_SRCFONTSIG:
|
2009-10-19 21:40:28 +02:00
|
|
|
while (index < MAXTCIINDEX && !(*lpSrc>>index & 0x0001)) index++;
|
1999-01-01 19:41:22 +01:00
|
|
|
break;
|
|
|
|
case TCI_SRCCODEPAGE:
|
2009-10-19 21:40:28 +02:00
|
|
|
while (index < MAXTCIINDEX && PtrToUlong(lpSrc) != FONT_tci[index].ciACP) index++;
|
1999-01-01 19:41:22 +01:00
|
|
|
break;
|
|
|
|
case TCI_SRCCHARSET:
|
2009-10-19 21:40:28 +02:00
|
|
|
while (index < MAXTCIINDEX && PtrToUlong(lpSrc) != FONT_tci[index].ciCharset) index++;
|
1999-01-01 19:41:22 +01:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
if (index >= MAXTCIINDEX || FONT_tci[index].ciCharset == DEFAULT_CHARSET) return FALSE;
|
2008-02-27 18:00:06 +01:00
|
|
|
*lpCs = FONT_tci[index];
|
1997-08-24 18:00:30 +02:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
1997-11-30 18:45:40 +01:00
|
|
|
/*************************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* GetFontLanguageInfo (GDI32.@)
|
1997-11-30 18:45:40 +01:00
|
|
|
*/
|
2002-06-15 01:28:55 +02:00
|
|
|
DWORD WINAPI GetFontLanguageInfo(HDC hdc)
|
|
|
|
{
|
|
|
|
FONTSIGNATURE fontsig;
|
2014-01-09 13:07:43 +01:00
|
|
|
static const DWORD GCP_DBCS_MASK=FS_JISJAPAN|FS_CHINESESIMP|FS_WANSUNG|FS_CHINESETRAD|FS_JOHAB,
|
2002-06-15 01:28:55 +02:00
|
|
|
GCP_DIACRITIC_MASK=0x00000000,
|
|
|
|
FLI_GLYPHS_MASK=0x00000000,
|
2014-01-09 13:07:41 +01:00
|
|
|
GCP_GLYPHSHAPE_MASK=FS_ARABIC,
|
2002-06-15 01:28:55 +02:00
|
|
|
GCP_KASHIDA_MASK=0x00000000,
|
|
|
|
GCP_LIGATE_MASK=0x00000000,
|
2014-01-09 13:07:41 +01:00
|
|
|
GCP_REORDER_MASK=FS_HEBREW|FS_ARABIC;
|
2002-07-19 02:30:16 +02:00
|
|
|
|
2002-06-15 01:28:55 +02:00
|
|
|
DWORD result=0;
|
2002-07-19 02:30:16 +02:00
|
|
|
|
2002-06-15 01:28:55 +02:00
|
|
|
GetTextCharsetInfo( hdc, &fontsig, 0 );
|
|
|
|
/* We detect each flag we return using a bitmask on the Codepage Bitfields */
|
|
|
|
|
|
|
|
if( (fontsig.fsCsb[0]&GCP_DBCS_MASK)!=0 )
|
|
|
|
result|=GCP_DBCS;
|
2002-07-19 02:30:16 +02:00
|
|
|
|
2002-06-15 01:28:55 +02:00
|
|
|
if( (fontsig.fsCsb[0]&GCP_DIACRITIC_MASK)!=0 )
|
|
|
|
result|=GCP_DIACRITIC;
|
2002-07-19 02:30:16 +02:00
|
|
|
|
2002-06-15 01:28:55 +02:00
|
|
|
if( (fontsig.fsCsb[0]&FLI_GLYPHS_MASK)!=0 )
|
|
|
|
result|=FLI_GLYPHS;
|
2002-07-19 02:30:16 +02:00
|
|
|
|
2002-06-15 01:28:55 +02:00
|
|
|
if( (fontsig.fsCsb[0]&GCP_GLYPHSHAPE_MASK)!=0 )
|
|
|
|
result|=GCP_GLYPHSHAPE;
|
2002-07-19 02:30:16 +02:00
|
|
|
|
2002-06-15 01:28:55 +02:00
|
|
|
if( (fontsig.fsCsb[0]&GCP_KASHIDA_MASK)!=0 )
|
|
|
|
result|=GCP_KASHIDA;
|
2002-07-19 02:30:16 +02:00
|
|
|
|
2002-06-15 01:28:55 +02:00
|
|
|
if( (fontsig.fsCsb[0]&GCP_LIGATE_MASK)!=0 )
|
|
|
|
result|=GCP_LIGATE;
|
|
|
|
|
2015-06-07 07:44:57 +02:00
|
|
|
if( GetKerningPairsW( hdc, 0, NULL ) )
|
2002-06-15 01:28:55 +02:00
|
|
|
result|=GCP_USEKERNING;
|
2002-07-19 02:30:16 +02:00
|
|
|
|
2004-05-21 22:51:17 +02:00
|
|
|
/* this might need a test for a HEBREW- or ARABIC_CHARSET as well */
|
|
|
|
if( GetTextAlign( hdc) & TA_RTLREADING )
|
|
|
|
if( (fontsig.fsCsb[0]&GCP_REORDER_MASK)!=0 )
|
|
|
|
result|=GCP_REORDER;
|
2002-07-19 02:30:16 +02:00
|
|
|
|
2002-06-15 01:28:55 +02:00
|
|
|
return result;
|
1997-11-30 18:45:40 +01:00
|
|
|
}
|
|
|
|
|
Release 980712
Sun Jul 12 16:23:36 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
* [server/*] [scheduler/client.c] (new files)
[scheduler/sysdeps.c] [scheduler/thread.c] [scheduler/process.c]
Beginnings of client/server communication for inter-process
synchronisation.
Sat Jul 11 19:45:45 1998 Ulrich Weigand <weigand@informatik.uni-erlangen.de>
* [include/bitmap.h] [objects/bitmap.c] [objects/dib.c]
[objects/oembitmap.c]
Speed up DIB section handling by using pre-allocated colormap and
XImage. Moved DIB section data out of general BITMAPOBJ structure.
Bugfix: GetDIBits32 would overwrite one byte beyond bitmap data.
* [if1632/shell.spec] [if1632/kernel.spec] [win32/kernel32.c]
More verbose error message if ThunkConnect fails.
Implemented KERNEL_475.
* [files/profile.c] [ole/ole2nls.c]
Minor bugfixes.
* [if1632/builtin.c] [if1632/kernel.spec] [include/task.h]
[loader/ne/module.c] [loader/task.c]
Implemented KERNEL.THHOOK.
* [if1632/wprocs.spec] [include/process.h] [msdos/dpmi.c] [msdos/vxd.c]
Implemented Win32s VxD services (W32S.386).
Sat Jul 11 17:52:23 1998 Huw D M Davies <daviesh@abacus.physics.ox.ac.uk>
* [graphics/x11drv/xfont.c] [graphics/x11drv/text.c]
[include/x11font.h]
Improve handling of rotated X11 fonts. Metrics/extents should now be
correct. ExtTextOut should behave better (still doesn't handle lpDx).
* [graphics/painting.c]
DrawFocusRect32: Don't do anything if width or height are zero.
Sat Jul 11 15:21:35 1998 Andreas Mohr <100.30936@germany.net>
* [files/profile.c] [include/windows.h]
The length arguments of *Profile*() need to be treated
as UINTxx instead of INTxx.
* [graphics/env.c] [graphics/win16drv/init.c] [include/print.h]
[misc/printdrv.c]
Many printer driver fixes/changes (many thanks go to Huw !).
Most printers should work again ;)
* [memory/atom.c]
Fixed ATOM_AddAtom to store atoms exactly like Windows.
* [*/*]
Fixed misc compiler warnings.
Fri Jul 10 15:58:36 1998 Marcus Meissner <marcus@jet.franken.de>
* [files/drive.c]
Fixed GetDriveType16 to return DRIVE_REMOTE again.
* [loader/pe_image.c][loader/module.c]
Look for modules that have the same modulename or the same
filename (they sometimes differ).
Fixed up fixup_imports, removed one of the loops.
* [windows/winpos.c]
Added some NULL ptr checks. Needs more.
* [graphics/ddraw.c]
Some stubs added.
* [if1632/snoop.c]
Updated, made WINELIB compatible.
Fri Jul 10 04:39:56 1998 Douglas Ridgway <ridgway@winehq.com>
* [objects/enhmetafile.c] [relay32/gdi32.spec]
Small tweaks for documentation system.
Thu Jul 9 22:00:18 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
* [controls/commctrl.c][include/commctrl.h][relay32/comctl32.spec]
Fixed GetEffectiveClientRect, CreateToolbarEx and CreateMappedBitmap.
Added stub for ShowHideMenuCtl. Added some documentation.
* [documentation/common_controls]
Added and updated some information.
* [controls/toolbar.c][include/toolbar.h]
Added string support.
* [misc/shell.c][misc/shellord.c][relay32/shell.spec]
Changed names of undocumented functions to their real names and
fixed the export table.
* [controls/imagelist.c][relay32/comctl32.spec]
Added stub for ImageList_SetFilter.
Fixed some minor bugs and typos.
* [objects/font.c][include/windows.h][relay32/gdi32.spec]
Added stubs for GetCharacterPlacement32[A/W].
* [objects/region.c][relay32/gdi32.spec]
Added stub for UNDOCUMENTED GetRandomRgn.
* [controls/commctrl.c][controls/*.c][include/*.h]
Added dummy listview, pager, rebar, tooltips, trackbar and
treeview control. This keeps some programs from complaining.
Thu Jul 9 11:23:58 1998 Rein Klazes <rklazes@casema.net>
* [graphics/painting.c] [graphics/*/init.c]
[graphics/x11drv/graphics.c] [relay32/gdi32.spec]
[if1632/gdi.spec] [include/gdi.h] [include/x11drv.h]
Implemented drawing bezier curves: PolyBezier16/32 and
PolyBezierTo16/32.
* [graphics/x11drv/graphics.c]
Improved accuracy of several graphic routines, especially the
drawing of pie's.
* [include/windows.h] [misc/spy.c]
Added 25 window messages related to programs based on MFC and/or OLE.
Wed Jul 8 22:00:00 1998 James Juran <jrj120@psu.edu>
* [documentation/wine.man]
Updated manpage.
* [wine.ini]
Added section for Win95Look=true (commented out by default).
Wed Jul 8 06:23:19 1998 Matthew Becker <mbecker@glasscity.net>
* [misc/registry.c]
Fixed a crash in RegEnumValue32A when the dwType parameter is
NULL.
* [programs/regtest/regtest.c]
Improved the printing of errors.
* [misc/ntdll.c]
Added stub for RtlFormatCurrentUserKeyPath.
* [win32/console.c]
Added stub for ScrollConsoleScreenBuffer.
Mon Jul 6 16:41:47 1998 Per Lindstrm <pelinstr@algonet.se>
* [include/windows.h] [relay32/kernel.spec] [win32/newfns.c]
Added stubs for SleepEx and TerminateProcess.
* [rc/README]
Corrected a grammatical error.
Mon Jul 3 12:00:00 1998 Juergen Schmied <juergen.schmied@metronet.de>
* [misc/shellord.c]
Put some TRACE in.
* [memory/string.c]
Deleted unused variable in lstrcmpi32A.
* [include/windows.h][memory/string.c]
Added functions WideCharToLocal32 LocalToWideChar32 for
OLE-strings
* [include/shlobj.h][include/winerror.h][misc/shell.c]
[ole/folders.c]
Added definition of internal class pidlmgr.
Changed definitions of EnumIDList, IShellFolder.
Added some OLE error constants.
Implemented EnumIDList, IShellFolder, IClassFactory,
PidlMgr, SHELL32_DllGetClassObject, SHGetDesktopFolder,
SHGetSpecialFolderLocation (half), SHGetPathFromIDList
(!!This stuff is not finished yet!!)
* [include/windows.h][misc/network][reley32/mpr.spec]
Added stubs for WNetConnectionDialog32[A|W|API].
Added struct LPCONNECTDLGSTRUCT32[A|W] and some constants.
Added some SetLastError(WN_NO_NETWORK) to the stubs.
Fixed bufferhandling in WNetCancelConnection
Added stub for MultinetGetErrorText[A|W]
* [ole/ole2nls.c]
Rewrote GetTimeFormat32A.
Fri Jul 3 10:27:30 1998 Michael Poole <poole+@andrew.cmu.edu>
* [graphics/ddraw.c] [tsx11/X11_calls]
Implement IDirectDrawPalette_GetEntries.
Use CopyColormapAndFree to avoid erasing previously-set
palette entries.
* [graphics/ddraw.c] [include/ddraw.h]
[tools/make_X11wrappers] [tsx11/X11_calls]
Provide a preliminary, not-yet-working framework for doing
DirectDraw via Xlib or XShm as well as DGA.
Tue Jun 30 00:16:09 1998 Marcel Baur <mbaur@g26.ethz.ch>
* [ole/nls/*.nls]
Added remaining 22 locales (including arabic locales).
1998-07-12 21:29:36 +02:00
|
|
|
|
Release 980809
Sat Aug 8 19:11:46 1998 Marcus Meissner <marcus@jet.franken.de>
* [*/*]
Added some missing WINAPI and some missing prototypes for
functions.
* [controls/static.c]
Got rid of the MODULE32_LookupHMODULE error showing up for every
message box.
* [windows/winproc.c]
WM_NOTIFY 16->32 mapping (AOL Instant Messenger or however it is called).
* [misc/winsock.c]
hostent/servent/protoent should not use the same static buffers.
(has broken nt3.15 finger.exe which does hp=gethostbyname(), then
getservbyname("finger","tcp") and the references hp->h_addr_list[0]).
Sat Aug 8 13:21:24 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
* [include/server.h] [tools/make_requests] [server/request.c]
[server/trace.c]
Automated part of the client/server request code generation.
Added tracing of client/server communication.
* [scheduler/*.c] [server/process.c]
Added support for server-side handles.
* [scheduler/thread.c]
Added DLL_THREAD_ATTACH/DETACH notifications.
* [configure.in]
Added check for -lsocket.
* [windows/winproc.c]
Return the thunk address in WINPROC_GetProc if the function types
don't match.
Sat Aug 8 02:44:04 1998 Douglas Ridgway <ridgway@winehq.com>
* [windows/winproc.c][windows/win.c][windows/message.c]
Documentation for CallWindowProc, SetWindowLong, DispatchMessage,
WaitMessage, GetMessage, and PeekMessage.
Sat Aug 8 01:00:00 1998 Juergen Schmied <juergen.schmied@metronet.de>
* [controls/commctrl.c][controls/widgets.c][include/builtin32.h]
[include/commctrl.h][relay32/builtin32.c][relay32/comctl32.spec]
[tools/build.c] [relay32/shell32.spec]
Added the functionality of the LibMain function. The common
controls are properly initialized now.
* [controls/treeview.c][memory/atom.c][scheduler/thread.c][windows/class.c]
[windows/msgbox.c][windows/win.c]
Put TRACE in, put SetLastError() in.
* [include/interfaces.h]
Added IClassFactory::LockServer.
* [include/ole2.h]
Added struct for LPOLEMENUGROUPWIDTHS32, HOLEMENU32.
* [include/shell.h][include/shlobj.h][misc/shell.c][ole/folders.c]
Reorganized and many structs and classes (IShellBrowser,IShellView)
added. shell32.dll should work in many cases now.
Started SHGetFileInfoA implementeation, rewrote SHGetPathFromIDList32A.
New Shell32LibMain started ShellIconCache Implementation.
* [misc/shellord.c]
Rewrote ILCombine, ILGetSize
New stubs SHFind_InitMenuPopup, FileMenu_Create, ShellExecuteEx,
SHSetInstanceExplorer, SHGetInstanceExplorer, SHFreeUnusedLibraries.
* [include/winerror.h]
Class and window related error codes added.
* [memory/heap.c]
Changed lstrlen32A to strlen to get rid of milions of TRACE lines.
* [misc/ddeml.c]
First lines for DdeCreateStringHandle32A / DdeFreeStringHandle32.
* [misc/network.c][relay32/mpr.spec]
Fixed some bugs, changed ordinals.
* [windows/class.c]
Workarounds for incorrect hInstance handling. Fixes parts of
MSWord95/Excel95 and Money95.
Thu Aug 6 21:05:35 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
* [windows/nonclient.c][misc/tweak.c][include/tweak.h]
[documentation/win95look]
Removed some tweak variables. They are no longer needed.
* [files/dos_fs.c]
Added check for null pointer in DOSFS_GetDevice().
* [controls/tooltips.c][include/commctrl.h]
Improved tooltips.
* [controls/status.c][include/commctrl.h]
Cleaned up code and added tooltip support.
* [controls/toolbar.c][include/commctrl.h]
Added tooltip support.
* [documentation/common_controls]
Updated.
Thu Aug 6 00:05:22 1998 Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
* [include/ver.h] [misc/ver.c]
Write VIF_BUFFTOOSMALL, not VIF_BUFTOSMALL.
* [debugger/hash.c] [debugger/stabs.c]
Make debug output more friendly for posting.
* [files/file.c]
Partial implementation of OF_SHARE_EXCLUSIVE.
Needed for Quicklogic/QuickChip (InstallShield).
* [files/profile.c]
When a cached-only entry is found, return it.
* [graphics/x11drv/xfont.c]
Accept a space as delimiter for a fontname and inhibit overrun
(Make xplasim.ex from the Phillips Coolrunner CPLD suite proceed).
* [miscemu/main.c]
Delay setting IF1632_CallLargeStack after loading the executables.
Stops fpgaexp.exe from the Viewlogic FPGA suite from crashing when
showing the Blinker error Message Box.
* [misc/network.c]
Make WNetGetConnection16 recognise a CDROM as a local drive.
* [multimedia/mmsystem.c]
Preliminary check for MCI_ALL_DEVICE_ID in MCI_Close by a FIXME.
Tue Aug 4 21:15:23 1998 James Juran <jrj120@psu.edu>
* [ole/ole2nls.c]
Fixed bug in CompareString32A. strcmp() doesn't necessarily
return -1, 0, or 1, which the previous code depended on.
Changed name of is_punctuation to OLE2NLS_isPunctuation.
Made NORM_IGNOREWIDTH not print a FIXME message in
LCMapString32A.
Other debugging messages, documentation, and code cleanups.
* [objects/font.c] [relay32/gdi32.spec] [include/winerror.h]
Added stub for GetFontData32, and added GDI_ERROR constant
to winerror.h.
Tue Aug 4 07:44:43 1998 Ove Kaaven <ovek@arcticnet.no>
* [multimedia/mmio.c]
Implemented mmioSetBuffer, mmioAdvance, mmioAscend, and
mmioCreateChunk to the best of my knowledge. But watch out,
there's bound to be bugs in there...
* [include/mmsystem.h] [multimedia/mmsystem.c]
Hacked in support for 32-bit multimedia function callbacks.
* [AUTHORS] [misc/shell.c]
Selfishly credited my authorship. Hopefully I'm excused.
* [include/dosexe.h] [include/module.h] [loader/dos/*]
[loader/module.c] [loader/task.c] [Makefile.in]
[configure.in] [Makefile.in]
Added DOS EXE (MZ) loader and virtual machine. Task
structure integration thanks to Ulrich Weigand.
* [files/dos_fs.c]
Work around a null pointer dereference if ioctlGetDeviceInfo-ing
a FILE_DupUnixHandle'd file (i.e. GetStdHandle'd).
* [include/miscemu.h] [include/winnt.h] [loader/main.c]
[memory/global.c] [msdos/dpmi.c] [msdos/dosmem.c]
Added support for DOS memory images, and added
DOSMEM_ResizeBlock() and DOSMEM_Available().
* [msdos/int21.c]
Added support for the DOS virtual machine, tweaked handle
assignment to avoid stdio clashes, forced INT21_FindNext to exit
wildcardless searches after finding one entry, added AH=7, 8, 9,
C, 48, 49, 4A, and 7160 CL=1 (Get Short Filename), and made the
long filename calls only respond if running with with -winver
win95.
* [objects/cursoricon.c]
DestroyCursor32 and DestroyIcon32 should now free the objects
(hopefully) correctly.
Sun Aug 2 21:42:09 1998 Huw D M Davies <daviesh@abacus.physics.ox.ac.uk>
* [graphics/psdrv/*] [include/psdrv.h]
Added PPD file parsing - at the moment it reads a file called
default.ppd from the directory in which you start Wine. Page sizes
other than A4 should now work (landscape may not). All fonts that are
present on your printer (according to the PPD) should be available,
providing you have the AFM files. Fonts should now be the correct size.
Graphics is still basically lines only. See graphics/psdrv/README .
* [misc/printdrv.c]
Yet more Drv[Get/Set]PrinterData fixes.
Fri Jul 31 21:33:22 1998 Per Lindstrm <pelinstr@algonet.se>
* [relay32/crtdll.spec] [misc/crtdll.c]
Added stub for freopen, _findfirst, _findnext, _fstat and _read.
* [files/directory.c]
Modified warning message.
Wed Jul 29 11:25:28 1998 Luiz Otavio L. Zorzella <zorzella@nr.conexware.com>
* [objects/font.c]
Added stub for GetFontData.
* [multimedia/msvideo.c]
Created this file to hold the msvideo.dll calls (and maybe also
msvfw32.dll).
* [objects/cursoricon.c]
Added search in Global Heap for cursor when trying to destroy it
with DestroyCursor16. This test should be done in many (all?)
other functions that use FreeResource.
* [controls/treeview.c] [include/commctrl.h]
Minor correction in name and addition of many placeholders for TVM
messages in TREEVIEW_WindowProc.
* [msdos/dpmi.c]
Fixed a bug in DPMI_xrealloc where in a copy of a memory region
"A" of size "a" to a region "B" of size "b", "b" bytes were being
copied, instead of "a", as the new version does. This both
increases speed, as well as avoids segfaults.
1998-08-09 14:47:43 +02:00
|
|
|
/*************************************************************************
|
2004-02-09 21:47:42 +01:00
|
|
|
* GetFontData [GDI32.@]
|
|
|
|
*
|
|
|
|
* Retrieve data for TrueType font.
|
Release 980809
Sat Aug 8 19:11:46 1998 Marcus Meissner <marcus@jet.franken.de>
* [*/*]
Added some missing WINAPI and some missing prototypes for
functions.
* [controls/static.c]
Got rid of the MODULE32_LookupHMODULE error showing up for every
message box.
* [windows/winproc.c]
WM_NOTIFY 16->32 mapping (AOL Instant Messenger or however it is called).
* [misc/winsock.c]
hostent/servent/protoent should not use the same static buffers.
(has broken nt3.15 finger.exe which does hp=gethostbyname(), then
getservbyname("finger","tcp") and the references hp->h_addr_list[0]).
Sat Aug 8 13:21:24 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
* [include/server.h] [tools/make_requests] [server/request.c]
[server/trace.c]
Automated part of the client/server request code generation.
Added tracing of client/server communication.
* [scheduler/*.c] [server/process.c]
Added support for server-side handles.
* [scheduler/thread.c]
Added DLL_THREAD_ATTACH/DETACH notifications.
* [configure.in]
Added check for -lsocket.
* [windows/winproc.c]
Return the thunk address in WINPROC_GetProc if the function types
don't match.
Sat Aug 8 02:44:04 1998 Douglas Ridgway <ridgway@winehq.com>
* [windows/winproc.c][windows/win.c][windows/message.c]
Documentation for CallWindowProc, SetWindowLong, DispatchMessage,
WaitMessage, GetMessage, and PeekMessage.
Sat Aug 8 01:00:00 1998 Juergen Schmied <juergen.schmied@metronet.de>
* [controls/commctrl.c][controls/widgets.c][include/builtin32.h]
[include/commctrl.h][relay32/builtin32.c][relay32/comctl32.spec]
[tools/build.c] [relay32/shell32.spec]
Added the functionality of the LibMain function. The common
controls are properly initialized now.
* [controls/treeview.c][memory/atom.c][scheduler/thread.c][windows/class.c]
[windows/msgbox.c][windows/win.c]
Put TRACE in, put SetLastError() in.
* [include/interfaces.h]
Added IClassFactory::LockServer.
* [include/ole2.h]
Added struct for LPOLEMENUGROUPWIDTHS32, HOLEMENU32.
* [include/shell.h][include/shlobj.h][misc/shell.c][ole/folders.c]
Reorganized and many structs and classes (IShellBrowser,IShellView)
added. shell32.dll should work in many cases now.
Started SHGetFileInfoA implementeation, rewrote SHGetPathFromIDList32A.
New Shell32LibMain started ShellIconCache Implementation.
* [misc/shellord.c]
Rewrote ILCombine, ILGetSize
New stubs SHFind_InitMenuPopup, FileMenu_Create, ShellExecuteEx,
SHSetInstanceExplorer, SHGetInstanceExplorer, SHFreeUnusedLibraries.
* [include/winerror.h]
Class and window related error codes added.
* [memory/heap.c]
Changed lstrlen32A to strlen to get rid of milions of TRACE lines.
* [misc/ddeml.c]
First lines for DdeCreateStringHandle32A / DdeFreeStringHandle32.
* [misc/network.c][relay32/mpr.spec]
Fixed some bugs, changed ordinals.
* [windows/class.c]
Workarounds for incorrect hInstance handling. Fixes parts of
MSWord95/Excel95 and Money95.
Thu Aug 6 21:05:35 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
* [windows/nonclient.c][misc/tweak.c][include/tweak.h]
[documentation/win95look]
Removed some tweak variables. They are no longer needed.
* [files/dos_fs.c]
Added check for null pointer in DOSFS_GetDevice().
* [controls/tooltips.c][include/commctrl.h]
Improved tooltips.
* [controls/status.c][include/commctrl.h]
Cleaned up code and added tooltip support.
* [controls/toolbar.c][include/commctrl.h]
Added tooltip support.
* [documentation/common_controls]
Updated.
Thu Aug 6 00:05:22 1998 Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
* [include/ver.h] [misc/ver.c]
Write VIF_BUFFTOOSMALL, not VIF_BUFTOSMALL.
* [debugger/hash.c] [debugger/stabs.c]
Make debug output more friendly for posting.
* [files/file.c]
Partial implementation of OF_SHARE_EXCLUSIVE.
Needed for Quicklogic/QuickChip (InstallShield).
* [files/profile.c]
When a cached-only entry is found, return it.
* [graphics/x11drv/xfont.c]
Accept a space as delimiter for a fontname and inhibit overrun
(Make xplasim.ex from the Phillips Coolrunner CPLD suite proceed).
* [miscemu/main.c]
Delay setting IF1632_CallLargeStack after loading the executables.
Stops fpgaexp.exe from the Viewlogic FPGA suite from crashing when
showing the Blinker error Message Box.
* [misc/network.c]
Make WNetGetConnection16 recognise a CDROM as a local drive.
* [multimedia/mmsystem.c]
Preliminary check for MCI_ALL_DEVICE_ID in MCI_Close by a FIXME.
Tue Aug 4 21:15:23 1998 James Juran <jrj120@psu.edu>
* [ole/ole2nls.c]
Fixed bug in CompareString32A. strcmp() doesn't necessarily
return -1, 0, or 1, which the previous code depended on.
Changed name of is_punctuation to OLE2NLS_isPunctuation.
Made NORM_IGNOREWIDTH not print a FIXME message in
LCMapString32A.
Other debugging messages, documentation, and code cleanups.
* [objects/font.c] [relay32/gdi32.spec] [include/winerror.h]
Added stub for GetFontData32, and added GDI_ERROR constant
to winerror.h.
Tue Aug 4 07:44:43 1998 Ove Kaaven <ovek@arcticnet.no>
* [multimedia/mmio.c]
Implemented mmioSetBuffer, mmioAdvance, mmioAscend, and
mmioCreateChunk to the best of my knowledge. But watch out,
there's bound to be bugs in there...
* [include/mmsystem.h] [multimedia/mmsystem.c]
Hacked in support for 32-bit multimedia function callbacks.
* [AUTHORS] [misc/shell.c]
Selfishly credited my authorship. Hopefully I'm excused.
* [include/dosexe.h] [include/module.h] [loader/dos/*]
[loader/module.c] [loader/task.c] [Makefile.in]
[configure.in] [Makefile.in]
Added DOS EXE (MZ) loader and virtual machine. Task
structure integration thanks to Ulrich Weigand.
* [files/dos_fs.c]
Work around a null pointer dereference if ioctlGetDeviceInfo-ing
a FILE_DupUnixHandle'd file (i.e. GetStdHandle'd).
* [include/miscemu.h] [include/winnt.h] [loader/main.c]
[memory/global.c] [msdos/dpmi.c] [msdos/dosmem.c]
Added support for DOS memory images, and added
DOSMEM_ResizeBlock() and DOSMEM_Available().
* [msdos/int21.c]
Added support for the DOS virtual machine, tweaked handle
assignment to avoid stdio clashes, forced INT21_FindNext to exit
wildcardless searches after finding one entry, added AH=7, 8, 9,
C, 48, 49, 4A, and 7160 CL=1 (Get Short Filename), and made the
long filename calls only respond if running with with -winver
win95.
* [objects/cursoricon.c]
DestroyCursor32 and DestroyIcon32 should now free the objects
(hopefully) correctly.
Sun Aug 2 21:42:09 1998 Huw D M Davies <daviesh@abacus.physics.ox.ac.uk>
* [graphics/psdrv/*] [include/psdrv.h]
Added PPD file parsing - at the moment it reads a file called
default.ppd from the directory in which you start Wine. Page sizes
other than A4 should now work (landscape may not). All fonts that are
present on your printer (according to the PPD) should be available,
providing you have the AFM files. Fonts should now be the correct size.
Graphics is still basically lines only. See graphics/psdrv/README .
* [misc/printdrv.c]
Yet more Drv[Get/Set]PrinterData fixes.
Fri Jul 31 21:33:22 1998 Per Lindstrm <pelinstr@algonet.se>
* [relay32/crtdll.spec] [misc/crtdll.c]
Added stub for freopen, _findfirst, _findnext, _fstat and _read.
* [files/directory.c]
Modified warning message.
Wed Jul 29 11:25:28 1998 Luiz Otavio L. Zorzella <zorzella@nr.conexware.com>
* [objects/font.c]
Added stub for GetFontData.
* [multimedia/msvideo.c]
Created this file to hold the msvideo.dll calls (and maybe also
msvfw32.dll).
* [objects/cursoricon.c]
Added search in Global Heap for cursor when trying to destroy it
with DestroyCursor16. This test should be done in many (all?)
other functions that use FreeResource.
* [controls/treeview.c] [include/commctrl.h]
Minor correction in name and addition of many placeholders for TVM
messages in TREEVIEW_WindowProc.
* [msdos/dpmi.c]
Fixed a bug in DPMI_xrealloc where in a copy of a memory region
"A" of size "a" to a region "B" of size "b", "b" bytes were being
copied, instead of "a", as the new version does. This both
increases speed, as well as avoids segfaults.
1998-08-09 14:47:43 +02:00
|
|
|
*
|
|
|
|
* RETURNS
|
|
|
|
*
|
2002-06-01 01:06:46 +02:00
|
|
|
* success: Number of bytes returned
|
Release 980809
Sat Aug 8 19:11:46 1998 Marcus Meissner <marcus@jet.franken.de>
* [*/*]
Added some missing WINAPI and some missing prototypes for
functions.
* [controls/static.c]
Got rid of the MODULE32_LookupHMODULE error showing up for every
message box.
* [windows/winproc.c]
WM_NOTIFY 16->32 mapping (AOL Instant Messenger or however it is called).
* [misc/winsock.c]
hostent/servent/protoent should not use the same static buffers.
(has broken nt3.15 finger.exe which does hp=gethostbyname(), then
getservbyname("finger","tcp") and the references hp->h_addr_list[0]).
Sat Aug 8 13:21:24 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
* [include/server.h] [tools/make_requests] [server/request.c]
[server/trace.c]
Automated part of the client/server request code generation.
Added tracing of client/server communication.
* [scheduler/*.c] [server/process.c]
Added support for server-side handles.
* [scheduler/thread.c]
Added DLL_THREAD_ATTACH/DETACH notifications.
* [configure.in]
Added check for -lsocket.
* [windows/winproc.c]
Return the thunk address in WINPROC_GetProc if the function types
don't match.
Sat Aug 8 02:44:04 1998 Douglas Ridgway <ridgway@winehq.com>
* [windows/winproc.c][windows/win.c][windows/message.c]
Documentation for CallWindowProc, SetWindowLong, DispatchMessage,
WaitMessage, GetMessage, and PeekMessage.
Sat Aug 8 01:00:00 1998 Juergen Schmied <juergen.schmied@metronet.de>
* [controls/commctrl.c][controls/widgets.c][include/builtin32.h]
[include/commctrl.h][relay32/builtin32.c][relay32/comctl32.spec]
[tools/build.c] [relay32/shell32.spec]
Added the functionality of the LibMain function. The common
controls are properly initialized now.
* [controls/treeview.c][memory/atom.c][scheduler/thread.c][windows/class.c]
[windows/msgbox.c][windows/win.c]
Put TRACE in, put SetLastError() in.
* [include/interfaces.h]
Added IClassFactory::LockServer.
* [include/ole2.h]
Added struct for LPOLEMENUGROUPWIDTHS32, HOLEMENU32.
* [include/shell.h][include/shlobj.h][misc/shell.c][ole/folders.c]
Reorganized and many structs and classes (IShellBrowser,IShellView)
added. shell32.dll should work in many cases now.
Started SHGetFileInfoA implementeation, rewrote SHGetPathFromIDList32A.
New Shell32LibMain started ShellIconCache Implementation.
* [misc/shellord.c]
Rewrote ILCombine, ILGetSize
New stubs SHFind_InitMenuPopup, FileMenu_Create, ShellExecuteEx,
SHSetInstanceExplorer, SHGetInstanceExplorer, SHFreeUnusedLibraries.
* [include/winerror.h]
Class and window related error codes added.
* [memory/heap.c]
Changed lstrlen32A to strlen to get rid of milions of TRACE lines.
* [misc/ddeml.c]
First lines for DdeCreateStringHandle32A / DdeFreeStringHandle32.
* [misc/network.c][relay32/mpr.spec]
Fixed some bugs, changed ordinals.
* [windows/class.c]
Workarounds for incorrect hInstance handling. Fixes parts of
MSWord95/Excel95 and Money95.
Thu Aug 6 21:05:35 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
* [windows/nonclient.c][misc/tweak.c][include/tweak.h]
[documentation/win95look]
Removed some tweak variables. They are no longer needed.
* [files/dos_fs.c]
Added check for null pointer in DOSFS_GetDevice().
* [controls/tooltips.c][include/commctrl.h]
Improved tooltips.
* [controls/status.c][include/commctrl.h]
Cleaned up code and added tooltip support.
* [controls/toolbar.c][include/commctrl.h]
Added tooltip support.
* [documentation/common_controls]
Updated.
Thu Aug 6 00:05:22 1998 Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
* [include/ver.h] [misc/ver.c]
Write VIF_BUFFTOOSMALL, not VIF_BUFTOSMALL.
* [debugger/hash.c] [debugger/stabs.c]
Make debug output more friendly for posting.
* [files/file.c]
Partial implementation of OF_SHARE_EXCLUSIVE.
Needed for Quicklogic/QuickChip (InstallShield).
* [files/profile.c]
When a cached-only entry is found, return it.
* [graphics/x11drv/xfont.c]
Accept a space as delimiter for a fontname and inhibit overrun
(Make xplasim.ex from the Phillips Coolrunner CPLD suite proceed).
* [miscemu/main.c]
Delay setting IF1632_CallLargeStack after loading the executables.
Stops fpgaexp.exe from the Viewlogic FPGA suite from crashing when
showing the Blinker error Message Box.
* [misc/network.c]
Make WNetGetConnection16 recognise a CDROM as a local drive.
* [multimedia/mmsystem.c]
Preliminary check for MCI_ALL_DEVICE_ID in MCI_Close by a FIXME.
Tue Aug 4 21:15:23 1998 James Juran <jrj120@psu.edu>
* [ole/ole2nls.c]
Fixed bug in CompareString32A. strcmp() doesn't necessarily
return -1, 0, or 1, which the previous code depended on.
Changed name of is_punctuation to OLE2NLS_isPunctuation.
Made NORM_IGNOREWIDTH not print a FIXME message in
LCMapString32A.
Other debugging messages, documentation, and code cleanups.
* [objects/font.c] [relay32/gdi32.spec] [include/winerror.h]
Added stub for GetFontData32, and added GDI_ERROR constant
to winerror.h.
Tue Aug 4 07:44:43 1998 Ove Kaaven <ovek@arcticnet.no>
* [multimedia/mmio.c]
Implemented mmioSetBuffer, mmioAdvance, mmioAscend, and
mmioCreateChunk to the best of my knowledge. But watch out,
there's bound to be bugs in there...
* [include/mmsystem.h] [multimedia/mmsystem.c]
Hacked in support for 32-bit multimedia function callbacks.
* [AUTHORS] [misc/shell.c]
Selfishly credited my authorship. Hopefully I'm excused.
* [include/dosexe.h] [include/module.h] [loader/dos/*]
[loader/module.c] [loader/task.c] [Makefile.in]
[configure.in] [Makefile.in]
Added DOS EXE (MZ) loader and virtual machine. Task
structure integration thanks to Ulrich Weigand.
* [files/dos_fs.c]
Work around a null pointer dereference if ioctlGetDeviceInfo-ing
a FILE_DupUnixHandle'd file (i.e. GetStdHandle'd).
* [include/miscemu.h] [include/winnt.h] [loader/main.c]
[memory/global.c] [msdos/dpmi.c] [msdos/dosmem.c]
Added support for DOS memory images, and added
DOSMEM_ResizeBlock() and DOSMEM_Available().
* [msdos/int21.c]
Added support for the DOS virtual machine, tweaked handle
assignment to avoid stdio clashes, forced INT21_FindNext to exit
wildcardless searches after finding one entry, added AH=7, 8, 9,
C, 48, 49, 4A, and 7160 CL=1 (Get Short Filename), and made the
long filename calls only respond if running with with -winver
win95.
* [objects/cursoricon.c]
DestroyCursor32 and DestroyIcon32 should now free the objects
(hopefully) correctly.
Sun Aug 2 21:42:09 1998 Huw D M Davies <daviesh@abacus.physics.ox.ac.uk>
* [graphics/psdrv/*] [include/psdrv.h]
Added PPD file parsing - at the moment it reads a file called
default.ppd from the directory in which you start Wine. Page sizes
other than A4 should now work (landscape may not). All fonts that are
present on your printer (according to the PPD) should be available,
providing you have the AFM files. Fonts should now be the correct size.
Graphics is still basically lines only. See graphics/psdrv/README .
* [misc/printdrv.c]
Yet more Drv[Get/Set]PrinterData fixes.
Fri Jul 31 21:33:22 1998 Per Lindstrm <pelinstr@algonet.se>
* [relay32/crtdll.spec] [misc/crtdll.c]
Added stub for freopen, _findfirst, _findnext, _fstat and _read.
* [files/directory.c]
Modified warning message.
Wed Jul 29 11:25:28 1998 Luiz Otavio L. Zorzella <zorzella@nr.conexware.com>
* [objects/font.c]
Added stub for GetFontData.
* [multimedia/msvideo.c]
Created this file to hold the msvideo.dll calls (and maybe also
msvfw32.dll).
* [objects/cursoricon.c]
Added search in Global Heap for cursor when trying to destroy it
with DestroyCursor16. This test should be done in many (all?)
other functions that use FreeResource.
* [controls/treeview.c] [include/commctrl.h]
Minor correction in name and addition of many placeholders for TVM
messages in TREEVIEW_WindowProc.
* [msdos/dpmi.c]
Fixed a bug in DPMI_xrealloc where in a copy of a memory region
"A" of size "a" to a region "B" of size "b", "b" bytes were being
copied, instead of "a", as the new version does. This both
increases speed, as well as avoids segfaults.
1998-08-09 14:47:43 +02:00
|
|
|
* failure: GDI_ERROR
|
|
|
|
*
|
|
|
|
* NOTES
|
|
|
|
*
|
2002-06-01 01:06:46 +02:00
|
|
|
* Calls SetLastError()
|
Release 980809
Sat Aug 8 19:11:46 1998 Marcus Meissner <marcus@jet.franken.de>
* [*/*]
Added some missing WINAPI and some missing prototypes for
functions.
* [controls/static.c]
Got rid of the MODULE32_LookupHMODULE error showing up for every
message box.
* [windows/winproc.c]
WM_NOTIFY 16->32 mapping (AOL Instant Messenger or however it is called).
* [misc/winsock.c]
hostent/servent/protoent should not use the same static buffers.
(has broken nt3.15 finger.exe which does hp=gethostbyname(), then
getservbyname("finger","tcp") and the references hp->h_addr_list[0]).
Sat Aug 8 13:21:24 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
* [include/server.h] [tools/make_requests] [server/request.c]
[server/trace.c]
Automated part of the client/server request code generation.
Added tracing of client/server communication.
* [scheduler/*.c] [server/process.c]
Added support for server-side handles.
* [scheduler/thread.c]
Added DLL_THREAD_ATTACH/DETACH notifications.
* [configure.in]
Added check for -lsocket.
* [windows/winproc.c]
Return the thunk address in WINPROC_GetProc if the function types
don't match.
Sat Aug 8 02:44:04 1998 Douglas Ridgway <ridgway@winehq.com>
* [windows/winproc.c][windows/win.c][windows/message.c]
Documentation for CallWindowProc, SetWindowLong, DispatchMessage,
WaitMessage, GetMessage, and PeekMessage.
Sat Aug 8 01:00:00 1998 Juergen Schmied <juergen.schmied@metronet.de>
* [controls/commctrl.c][controls/widgets.c][include/builtin32.h]
[include/commctrl.h][relay32/builtin32.c][relay32/comctl32.spec]
[tools/build.c] [relay32/shell32.spec]
Added the functionality of the LibMain function. The common
controls are properly initialized now.
* [controls/treeview.c][memory/atom.c][scheduler/thread.c][windows/class.c]
[windows/msgbox.c][windows/win.c]
Put TRACE in, put SetLastError() in.
* [include/interfaces.h]
Added IClassFactory::LockServer.
* [include/ole2.h]
Added struct for LPOLEMENUGROUPWIDTHS32, HOLEMENU32.
* [include/shell.h][include/shlobj.h][misc/shell.c][ole/folders.c]
Reorganized and many structs and classes (IShellBrowser,IShellView)
added. shell32.dll should work in many cases now.
Started SHGetFileInfoA implementeation, rewrote SHGetPathFromIDList32A.
New Shell32LibMain started ShellIconCache Implementation.
* [misc/shellord.c]
Rewrote ILCombine, ILGetSize
New stubs SHFind_InitMenuPopup, FileMenu_Create, ShellExecuteEx,
SHSetInstanceExplorer, SHGetInstanceExplorer, SHFreeUnusedLibraries.
* [include/winerror.h]
Class and window related error codes added.
* [memory/heap.c]
Changed lstrlen32A to strlen to get rid of milions of TRACE lines.
* [misc/ddeml.c]
First lines for DdeCreateStringHandle32A / DdeFreeStringHandle32.
* [misc/network.c][relay32/mpr.spec]
Fixed some bugs, changed ordinals.
* [windows/class.c]
Workarounds for incorrect hInstance handling. Fixes parts of
MSWord95/Excel95 and Money95.
Thu Aug 6 21:05:35 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
* [windows/nonclient.c][misc/tweak.c][include/tweak.h]
[documentation/win95look]
Removed some tweak variables. They are no longer needed.
* [files/dos_fs.c]
Added check for null pointer in DOSFS_GetDevice().
* [controls/tooltips.c][include/commctrl.h]
Improved tooltips.
* [controls/status.c][include/commctrl.h]
Cleaned up code and added tooltip support.
* [controls/toolbar.c][include/commctrl.h]
Added tooltip support.
* [documentation/common_controls]
Updated.
Thu Aug 6 00:05:22 1998 Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
* [include/ver.h] [misc/ver.c]
Write VIF_BUFFTOOSMALL, not VIF_BUFTOSMALL.
* [debugger/hash.c] [debugger/stabs.c]
Make debug output more friendly for posting.
* [files/file.c]
Partial implementation of OF_SHARE_EXCLUSIVE.
Needed for Quicklogic/QuickChip (InstallShield).
* [files/profile.c]
When a cached-only entry is found, return it.
* [graphics/x11drv/xfont.c]
Accept a space as delimiter for a fontname and inhibit overrun
(Make xplasim.ex from the Phillips Coolrunner CPLD suite proceed).
* [miscemu/main.c]
Delay setting IF1632_CallLargeStack after loading the executables.
Stops fpgaexp.exe from the Viewlogic FPGA suite from crashing when
showing the Blinker error Message Box.
* [misc/network.c]
Make WNetGetConnection16 recognise a CDROM as a local drive.
* [multimedia/mmsystem.c]
Preliminary check for MCI_ALL_DEVICE_ID in MCI_Close by a FIXME.
Tue Aug 4 21:15:23 1998 James Juran <jrj120@psu.edu>
* [ole/ole2nls.c]
Fixed bug in CompareString32A. strcmp() doesn't necessarily
return -1, 0, or 1, which the previous code depended on.
Changed name of is_punctuation to OLE2NLS_isPunctuation.
Made NORM_IGNOREWIDTH not print a FIXME message in
LCMapString32A.
Other debugging messages, documentation, and code cleanups.
* [objects/font.c] [relay32/gdi32.spec] [include/winerror.h]
Added stub for GetFontData32, and added GDI_ERROR constant
to winerror.h.
Tue Aug 4 07:44:43 1998 Ove Kaaven <ovek@arcticnet.no>
* [multimedia/mmio.c]
Implemented mmioSetBuffer, mmioAdvance, mmioAscend, and
mmioCreateChunk to the best of my knowledge. But watch out,
there's bound to be bugs in there...
* [include/mmsystem.h] [multimedia/mmsystem.c]
Hacked in support for 32-bit multimedia function callbacks.
* [AUTHORS] [misc/shell.c]
Selfishly credited my authorship. Hopefully I'm excused.
* [include/dosexe.h] [include/module.h] [loader/dos/*]
[loader/module.c] [loader/task.c] [Makefile.in]
[configure.in] [Makefile.in]
Added DOS EXE (MZ) loader and virtual machine. Task
structure integration thanks to Ulrich Weigand.
* [files/dos_fs.c]
Work around a null pointer dereference if ioctlGetDeviceInfo-ing
a FILE_DupUnixHandle'd file (i.e. GetStdHandle'd).
* [include/miscemu.h] [include/winnt.h] [loader/main.c]
[memory/global.c] [msdos/dpmi.c] [msdos/dosmem.c]
Added support for DOS memory images, and added
DOSMEM_ResizeBlock() and DOSMEM_Available().
* [msdos/int21.c]
Added support for the DOS virtual machine, tweaked handle
assignment to avoid stdio clashes, forced INT21_FindNext to exit
wildcardless searches after finding one entry, added AH=7, 8, 9,
C, 48, 49, 4A, and 7160 CL=1 (Get Short Filename), and made the
long filename calls only respond if running with with -winver
win95.
* [objects/cursoricon.c]
DestroyCursor32 and DestroyIcon32 should now free the objects
(hopefully) correctly.
Sun Aug 2 21:42:09 1998 Huw D M Davies <daviesh@abacus.physics.ox.ac.uk>
* [graphics/psdrv/*] [include/psdrv.h]
Added PPD file parsing - at the moment it reads a file called
default.ppd from the directory in which you start Wine. Page sizes
other than A4 should now work (landscape may not). All fonts that are
present on your printer (according to the PPD) should be available,
providing you have the AFM files. Fonts should now be the correct size.
Graphics is still basically lines only. See graphics/psdrv/README .
* [misc/printdrv.c]
Yet more Drv[Get/Set]PrinterData fixes.
Fri Jul 31 21:33:22 1998 Per Lindstrm <pelinstr@algonet.se>
* [relay32/crtdll.spec] [misc/crtdll.c]
Added stub for freopen, _findfirst, _findnext, _fstat and _read.
* [files/directory.c]
Modified warning message.
Wed Jul 29 11:25:28 1998 Luiz Otavio L. Zorzella <zorzella@nr.conexware.com>
* [objects/font.c]
Added stub for GetFontData.
* [multimedia/msvideo.c]
Created this file to hold the msvideo.dll calls (and maybe also
msvfw32.dll).
* [objects/cursoricon.c]
Added search in Global Heap for cursor when trying to destroy it
with DestroyCursor16. This test should be done in many (all?)
other functions that use FreeResource.
* [controls/treeview.c] [include/commctrl.h]
Minor correction in name and addition of many placeholders for TVM
messages in TREEVIEW_WindowProc.
* [msdos/dpmi.c]
Fixed a bug in DPMI_xrealloc where in a copy of a memory region
"A" of size "a" to a region "B" of size "b", "b" bytes were being
copied, instead of "a", as the new version does. This both
increases speed, as well as avoids segfaults.
1998-08-09 14:47:43 +02:00
|
|
|
*
|
|
|
|
*/
|
2002-06-01 01:06:46 +02:00
|
|
|
DWORD WINAPI GetFontData(HDC hdc, DWORD table, DWORD offset,
|
Release 980809
Sat Aug 8 19:11:46 1998 Marcus Meissner <marcus@jet.franken.de>
* [*/*]
Added some missing WINAPI and some missing prototypes for
functions.
* [controls/static.c]
Got rid of the MODULE32_LookupHMODULE error showing up for every
message box.
* [windows/winproc.c]
WM_NOTIFY 16->32 mapping (AOL Instant Messenger or however it is called).
* [misc/winsock.c]
hostent/servent/protoent should not use the same static buffers.
(has broken nt3.15 finger.exe which does hp=gethostbyname(), then
getservbyname("finger","tcp") and the references hp->h_addr_list[0]).
Sat Aug 8 13:21:24 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
* [include/server.h] [tools/make_requests] [server/request.c]
[server/trace.c]
Automated part of the client/server request code generation.
Added tracing of client/server communication.
* [scheduler/*.c] [server/process.c]
Added support for server-side handles.
* [scheduler/thread.c]
Added DLL_THREAD_ATTACH/DETACH notifications.
* [configure.in]
Added check for -lsocket.
* [windows/winproc.c]
Return the thunk address in WINPROC_GetProc if the function types
don't match.
Sat Aug 8 02:44:04 1998 Douglas Ridgway <ridgway@winehq.com>
* [windows/winproc.c][windows/win.c][windows/message.c]
Documentation for CallWindowProc, SetWindowLong, DispatchMessage,
WaitMessage, GetMessage, and PeekMessage.
Sat Aug 8 01:00:00 1998 Juergen Schmied <juergen.schmied@metronet.de>
* [controls/commctrl.c][controls/widgets.c][include/builtin32.h]
[include/commctrl.h][relay32/builtin32.c][relay32/comctl32.spec]
[tools/build.c] [relay32/shell32.spec]
Added the functionality of the LibMain function. The common
controls are properly initialized now.
* [controls/treeview.c][memory/atom.c][scheduler/thread.c][windows/class.c]
[windows/msgbox.c][windows/win.c]
Put TRACE in, put SetLastError() in.
* [include/interfaces.h]
Added IClassFactory::LockServer.
* [include/ole2.h]
Added struct for LPOLEMENUGROUPWIDTHS32, HOLEMENU32.
* [include/shell.h][include/shlobj.h][misc/shell.c][ole/folders.c]
Reorganized and many structs and classes (IShellBrowser,IShellView)
added. shell32.dll should work in many cases now.
Started SHGetFileInfoA implementeation, rewrote SHGetPathFromIDList32A.
New Shell32LibMain started ShellIconCache Implementation.
* [misc/shellord.c]
Rewrote ILCombine, ILGetSize
New stubs SHFind_InitMenuPopup, FileMenu_Create, ShellExecuteEx,
SHSetInstanceExplorer, SHGetInstanceExplorer, SHFreeUnusedLibraries.
* [include/winerror.h]
Class and window related error codes added.
* [memory/heap.c]
Changed lstrlen32A to strlen to get rid of milions of TRACE lines.
* [misc/ddeml.c]
First lines for DdeCreateStringHandle32A / DdeFreeStringHandle32.
* [misc/network.c][relay32/mpr.spec]
Fixed some bugs, changed ordinals.
* [windows/class.c]
Workarounds for incorrect hInstance handling. Fixes parts of
MSWord95/Excel95 and Money95.
Thu Aug 6 21:05:35 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
* [windows/nonclient.c][misc/tweak.c][include/tweak.h]
[documentation/win95look]
Removed some tweak variables. They are no longer needed.
* [files/dos_fs.c]
Added check for null pointer in DOSFS_GetDevice().
* [controls/tooltips.c][include/commctrl.h]
Improved tooltips.
* [controls/status.c][include/commctrl.h]
Cleaned up code and added tooltip support.
* [controls/toolbar.c][include/commctrl.h]
Added tooltip support.
* [documentation/common_controls]
Updated.
Thu Aug 6 00:05:22 1998 Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
* [include/ver.h] [misc/ver.c]
Write VIF_BUFFTOOSMALL, not VIF_BUFTOSMALL.
* [debugger/hash.c] [debugger/stabs.c]
Make debug output more friendly for posting.
* [files/file.c]
Partial implementation of OF_SHARE_EXCLUSIVE.
Needed for Quicklogic/QuickChip (InstallShield).
* [files/profile.c]
When a cached-only entry is found, return it.
* [graphics/x11drv/xfont.c]
Accept a space as delimiter for a fontname and inhibit overrun
(Make xplasim.ex from the Phillips Coolrunner CPLD suite proceed).
* [miscemu/main.c]
Delay setting IF1632_CallLargeStack after loading the executables.
Stops fpgaexp.exe from the Viewlogic FPGA suite from crashing when
showing the Blinker error Message Box.
* [misc/network.c]
Make WNetGetConnection16 recognise a CDROM as a local drive.
* [multimedia/mmsystem.c]
Preliminary check for MCI_ALL_DEVICE_ID in MCI_Close by a FIXME.
Tue Aug 4 21:15:23 1998 James Juran <jrj120@psu.edu>
* [ole/ole2nls.c]
Fixed bug in CompareString32A. strcmp() doesn't necessarily
return -1, 0, or 1, which the previous code depended on.
Changed name of is_punctuation to OLE2NLS_isPunctuation.
Made NORM_IGNOREWIDTH not print a FIXME message in
LCMapString32A.
Other debugging messages, documentation, and code cleanups.
* [objects/font.c] [relay32/gdi32.spec] [include/winerror.h]
Added stub for GetFontData32, and added GDI_ERROR constant
to winerror.h.
Tue Aug 4 07:44:43 1998 Ove Kaaven <ovek@arcticnet.no>
* [multimedia/mmio.c]
Implemented mmioSetBuffer, mmioAdvance, mmioAscend, and
mmioCreateChunk to the best of my knowledge. But watch out,
there's bound to be bugs in there...
* [include/mmsystem.h] [multimedia/mmsystem.c]
Hacked in support for 32-bit multimedia function callbacks.
* [AUTHORS] [misc/shell.c]
Selfishly credited my authorship. Hopefully I'm excused.
* [include/dosexe.h] [include/module.h] [loader/dos/*]
[loader/module.c] [loader/task.c] [Makefile.in]
[configure.in] [Makefile.in]
Added DOS EXE (MZ) loader and virtual machine. Task
structure integration thanks to Ulrich Weigand.
* [files/dos_fs.c]
Work around a null pointer dereference if ioctlGetDeviceInfo-ing
a FILE_DupUnixHandle'd file (i.e. GetStdHandle'd).
* [include/miscemu.h] [include/winnt.h] [loader/main.c]
[memory/global.c] [msdos/dpmi.c] [msdos/dosmem.c]
Added support for DOS memory images, and added
DOSMEM_ResizeBlock() and DOSMEM_Available().
* [msdos/int21.c]
Added support for the DOS virtual machine, tweaked handle
assignment to avoid stdio clashes, forced INT21_FindNext to exit
wildcardless searches after finding one entry, added AH=7, 8, 9,
C, 48, 49, 4A, and 7160 CL=1 (Get Short Filename), and made the
long filename calls only respond if running with with -winver
win95.
* [objects/cursoricon.c]
DestroyCursor32 and DestroyIcon32 should now free the objects
(hopefully) correctly.
Sun Aug 2 21:42:09 1998 Huw D M Davies <daviesh@abacus.physics.ox.ac.uk>
* [graphics/psdrv/*] [include/psdrv.h]
Added PPD file parsing - at the moment it reads a file called
default.ppd from the directory in which you start Wine. Page sizes
other than A4 should now work (landscape may not). All fonts that are
present on your printer (according to the PPD) should be available,
providing you have the AFM files. Fonts should now be the correct size.
Graphics is still basically lines only. See graphics/psdrv/README .
* [misc/printdrv.c]
Yet more Drv[Get/Set]PrinterData fixes.
Fri Jul 31 21:33:22 1998 Per Lindstrm <pelinstr@algonet.se>
* [relay32/crtdll.spec] [misc/crtdll.c]
Added stub for freopen, _findfirst, _findnext, _fstat and _read.
* [files/directory.c]
Modified warning message.
Wed Jul 29 11:25:28 1998 Luiz Otavio L. Zorzella <zorzella@nr.conexware.com>
* [objects/font.c]
Added stub for GetFontData.
* [multimedia/msvideo.c]
Created this file to hold the msvideo.dll calls (and maybe also
msvfw32.dll).
* [objects/cursoricon.c]
Added search in Global Heap for cursor when trying to destroy it
with DestroyCursor16. This test should be done in many (all?)
other functions that use FreeResource.
* [controls/treeview.c] [include/commctrl.h]
Minor correction in name and addition of many placeholders for TVM
messages in TREEVIEW_WindowProc.
* [msdos/dpmi.c]
Fixed a bug in DPMI_xrealloc where in a copy of a memory region
"A" of size "a" to a region "B" of size "b", "b" bytes were being
copied, instead of "a", as the new version does. This both
increases speed, as well as avoids segfaults.
1998-08-09 14:47:43 +02:00
|
|
|
LPVOID buffer, DWORD length)
|
|
|
|
{
|
2008-02-05 21:16:27 +01:00
|
|
|
DC *dc = get_dc_ptr(hdc);
|
2011-10-20 17:58:09 +02:00
|
|
|
PHYSDEV dev;
|
|
|
|
DWORD ret;
|
2001-10-23 22:06:32 +02:00
|
|
|
|
|
|
|
if(!dc) return GDI_ERROR;
|
|
|
|
|
2011-10-20 17:58:09 +02:00
|
|
|
dev = GET_DC_PHYSDEV( dc, pGetFontData );
|
|
|
|
ret = dev->funcs->pGetFontData( dev, table, offset, buffer, length );
|
2008-02-05 21:16:27 +01:00
|
|
|
release_dc_ptr( dc );
|
2001-10-23 22:06:32 +02:00
|
|
|
return ret;
|
Release 980809
Sat Aug 8 19:11:46 1998 Marcus Meissner <marcus@jet.franken.de>
* [*/*]
Added some missing WINAPI and some missing prototypes for
functions.
* [controls/static.c]
Got rid of the MODULE32_LookupHMODULE error showing up for every
message box.
* [windows/winproc.c]
WM_NOTIFY 16->32 mapping (AOL Instant Messenger or however it is called).
* [misc/winsock.c]
hostent/servent/protoent should not use the same static buffers.
(has broken nt3.15 finger.exe which does hp=gethostbyname(), then
getservbyname("finger","tcp") and the references hp->h_addr_list[0]).
Sat Aug 8 13:21:24 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
* [include/server.h] [tools/make_requests] [server/request.c]
[server/trace.c]
Automated part of the client/server request code generation.
Added tracing of client/server communication.
* [scheduler/*.c] [server/process.c]
Added support for server-side handles.
* [scheduler/thread.c]
Added DLL_THREAD_ATTACH/DETACH notifications.
* [configure.in]
Added check for -lsocket.
* [windows/winproc.c]
Return the thunk address in WINPROC_GetProc if the function types
don't match.
Sat Aug 8 02:44:04 1998 Douglas Ridgway <ridgway@winehq.com>
* [windows/winproc.c][windows/win.c][windows/message.c]
Documentation for CallWindowProc, SetWindowLong, DispatchMessage,
WaitMessage, GetMessage, and PeekMessage.
Sat Aug 8 01:00:00 1998 Juergen Schmied <juergen.schmied@metronet.de>
* [controls/commctrl.c][controls/widgets.c][include/builtin32.h]
[include/commctrl.h][relay32/builtin32.c][relay32/comctl32.spec]
[tools/build.c] [relay32/shell32.spec]
Added the functionality of the LibMain function. The common
controls are properly initialized now.
* [controls/treeview.c][memory/atom.c][scheduler/thread.c][windows/class.c]
[windows/msgbox.c][windows/win.c]
Put TRACE in, put SetLastError() in.
* [include/interfaces.h]
Added IClassFactory::LockServer.
* [include/ole2.h]
Added struct for LPOLEMENUGROUPWIDTHS32, HOLEMENU32.
* [include/shell.h][include/shlobj.h][misc/shell.c][ole/folders.c]
Reorganized and many structs and classes (IShellBrowser,IShellView)
added. shell32.dll should work in many cases now.
Started SHGetFileInfoA implementeation, rewrote SHGetPathFromIDList32A.
New Shell32LibMain started ShellIconCache Implementation.
* [misc/shellord.c]
Rewrote ILCombine, ILGetSize
New stubs SHFind_InitMenuPopup, FileMenu_Create, ShellExecuteEx,
SHSetInstanceExplorer, SHGetInstanceExplorer, SHFreeUnusedLibraries.
* [include/winerror.h]
Class and window related error codes added.
* [memory/heap.c]
Changed lstrlen32A to strlen to get rid of milions of TRACE lines.
* [misc/ddeml.c]
First lines for DdeCreateStringHandle32A / DdeFreeStringHandle32.
* [misc/network.c][relay32/mpr.spec]
Fixed some bugs, changed ordinals.
* [windows/class.c]
Workarounds for incorrect hInstance handling. Fixes parts of
MSWord95/Excel95 and Money95.
Thu Aug 6 21:05:35 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
* [windows/nonclient.c][misc/tweak.c][include/tweak.h]
[documentation/win95look]
Removed some tweak variables. They are no longer needed.
* [files/dos_fs.c]
Added check for null pointer in DOSFS_GetDevice().
* [controls/tooltips.c][include/commctrl.h]
Improved tooltips.
* [controls/status.c][include/commctrl.h]
Cleaned up code and added tooltip support.
* [controls/toolbar.c][include/commctrl.h]
Added tooltip support.
* [documentation/common_controls]
Updated.
Thu Aug 6 00:05:22 1998 Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
* [include/ver.h] [misc/ver.c]
Write VIF_BUFFTOOSMALL, not VIF_BUFTOSMALL.
* [debugger/hash.c] [debugger/stabs.c]
Make debug output more friendly for posting.
* [files/file.c]
Partial implementation of OF_SHARE_EXCLUSIVE.
Needed for Quicklogic/QuickChip (InstallShield).
* [files/profile.c]
When a cached-only entry is found, return it.
* [graphics/x11drv/xfont.c]
Accept a space as delimiter for a fontname and inhibit overrun
(Make xplasim.ex from the Phillips Coolrunner CPLD suite proceed).
* [miscemu/main.c]
Delay setting IF1632_CallLargeStack after loading the executables.
Stops fpgaexp.exe from the Viewlogic FPGA suite from crashing when
showing the Blinker error Message Box.
* [misc/network.c]
Make WNetGetConnection16 recognise a CDROM as a local drive.
* [multimedia/mmsystem.c]
Preliminary check for MCI_ALL_DEVICE_ID in MCI_Close by a FIXME.
Tue Aug 4 21:15:23 1998 James Juran <jrj120@psu.edu>
* [ole/ole2nls.c]
Fixed bug in CompareString32A. strcmp() doesn't necessarily
return -1, 0, or 1, which the previous code depended on.
Changed name of is_punctuation to OLE2NLS_isPunctuation.
Made NORM_IGNOREWIDTH not print a FIXME message in
LCMapString32A.
Other debugging messages, documentation, and code cleanups.
* [objects/font.c] [relay32/gdi32.spec] [include/winerror.h]
Added stub for GetFontData32, and added GDI_ERROR constant
to winerror.h.
Tue Aug 4 07:44:43 1998 Ove Kaaven <ovek@arcticnet.no>
* [multimedia/mmio.c]
Implemented mmioSetBuffer, mmioAdvance, mmioAscend, and
mmioCreateChunk to the best of my knowledge. But watch out,
there's bound to be bugs in there...
* [include/mmsystem.h] [multimedia/mmsystem.c]
Hacked in support for 32-bit multimedia function callbacks.
* [AUTHORS] [misc/shell.c]
Selfishly credited my authorship. Hopefully I'm excused.
* [include/dosexe.h] [include/module.h] [loader/dos/*]
[loader/module.c] [loader/task.c] [Makefile.in]
[configure.in] [Makefile.in]
Added DOS EXE (MZ) loader and virtual machine. Task
structure integration thanks to Ulrich Weigand.
* [files/dos_fs.c]
Work around a null pointer dereference if ioctlGetDeviceInfo-ing
a FILE_DupUnixHandle'd file (i.e. GetStdHandle'd).
* [include/miscemu.h] [include/winnt.h] [loader/main.c]
[memory/global.c] [msdos/dpmi.c] [msdos/dosmem.c]
Added support for DOS memory images, and added
DOSMEM_ResizeBlock() and DOSMEM_Available().
* [msdos/int21.c]
Added support for the DOS virtual machine, tweaked handle
assignment to avoid stdio clashes, forced INT21_FindNext to exit
wildcardless searches after finding one entry, added AH=7, 8, 9,
C, 48, 49, 4A, and 7160 CL=1 (Get Short Filename), and made the
long filename calls only respond if running with with -winver
win95.
* [objects/cursoricon.c]
DestroyCursor32 and DestroyIcon32 should now free the objects
(hopefully) correctly.
Sun Aug 2 21:42:09 1998 Huw D M Davies <daviesh@abacus.physics.ox.ac.uk>
* [graphics/psdrv/*] [include/psdrv.h]
Added PPD file parsing - at the moment it reads a file called
default.ppd from the directory in which you start Wine. Page sizes
other than A4 should now work (landscape may not). All fonts that are
present on your printer (according to the PPD) should be available,
providing you have the AFM files. Fonts should now be the correct size.
Graphics is still basically lines only. See graphics/psdrv/README .
* [misc/printdrv.c]
Yet more Drv[Get/Set]PrinterData fixes.
Fri Jul 31 21:33:22 1998 Per Lindstrm <pelinstr@algonet.se>
* [relay32/crtdll.spec] [misc/crtdll.c]
Added stub for freopen, _findfirst, _findnext, _fstat and _read.
* [files/directory.c]
Modified warning message.
Wed Jul 29 11:25:28 1998 Luiz Otavio L. Zorzella <zorzella@nr.conexware.com>
* [objects/font.c]
Added stub for GetFontData.
* [multimedia/msvideo.c]
Created this file to hold the msvideo.dll calls (and maybe also
msvfw32.dll).
* [objects/cursoricon.c]
Added search in Global Heap for cursor when trying to destroy it
with DestroyCursor16. This test should be done in many (all?)
other functions that use FreeResource.
* [controls/treeview.c] [include/commctrl.h]
Minor correction in name and addition of many placeholders for TVM
messages in TREEVIEW_WindowProc.
* [msdos/dpmi.c]
Fixed a bug in DPMI_xrealloc where in a copy of a memory region
"A" of size "a" to a region "B" of size "b", "b" bytes were being
copied, instead of "a", as the new version does. This both
increases speed, as well as avoids segfaults.
1998-08-09 14:47:43 +02:00
|
|
|
}
|
Release 980712
Sun Jul 12 16:23:36 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
* [server/*] [scheduler/client.c] (new files)
[scheduler/sysdeps.c] [scheduler/thread.c] [scheduler/process.c]
Beginnings of client/server communication for inter-process
synchronisation.
Sat Jul 11 19:45:45 1998 Ulrich Weigand <weigand@informatik.uni-erlangen.de>
* [include/bitmap.h] [objects/bitmap.c] [objects/dib.c]
[objects/oembitmap.c]
Speed up DIB section handling by using pre-allocated colormap and
XImage. Moved DIB section data out of general BITMAPOBJ structure.
Bugfix: GetDIBits32 would overwrite one byte beyond bitmap data.
* [if1632/shell.spec] [if1632/kernel.spec] [win32/kernel32.c]
More verbose error message if ThunkConnect fails.
Implemented KERNEL_475.
* [files/profile.c] [ole/ole2nls.c]
Minor bugfixes.
* [if1632/builtin.c] [if1632/kernel.spec] [include/task.h]
[loader/ne/module.c] [loader/task.c]
Implemented KERNEL.THHOOK.
* [if1632/wprocs.spec] [include/process.h] [msdos/dpmi.c] [msdos/vxd.c]
Implemented Win32s VxD services (W32S.386).
Sat Jul 11 17:52:23 1998 Huw D M Davies <daviesh@abacus.physics.ox.ac.uk>
* [graphics/x11drv/xfont.c] [graphics/x11drv/text.c]
[include/x11font.h]
Improve handling of rotated X11 fonts. Metrics/extents should now be
correct. ExtTextOut should behave better (still doesn't handle lpDx).
* [graphics/painting.c]
DrawFocusRect32: Don't do anything if width or height are zero.
Sat Jul 11 15:21:35 1998 Andreas Mohr <100.30936@germany.net>
* [files/profile.c] [include/windows.h]
The length arguments of *Profile*() need to be treated
as UINTxx instead of INTxx.
* [graphics/env.c] [graphics/win16drv/init.c] [include/print.h]
[misc/printdrv.c]
Many printer driver fixes/changes (many thanks go to Huw !).
Most printers should work again ;)
* [memory/atom.c]
Fixed ATOM_AddAtom to store atoms exactly like Windows.
* [*/*]
Fixed misc compiler warnings.
Fri Jul 10 15:58:36 1998 Marcus Meissner <marcus@jet.franken.de>
* [files/drive.c]
Fixed GetDriveType16 to return DRIVE_REMOTE again.
* [loader/pe_image.c][loader/module.c]
Look for modules that have the same modulename or the same
filename (they sometimes differ).
Fixed up fixup_imports, removed one of the loops.
* [windows/winpos.c]
Added some NULL ptr checks. Needs more.
* [graphics/ddraw.c]
Some stubs added.
* [if1632/snoop.c]
Updated, made WINELIB compatible.
Fri Jul 10 04:39:56 1998 Douglas Ridgway <ridgway@winehq.com>
* [objects/enhmetafile.c] [relay32/gdi32.spec]
Small tweaks for documentation system.
Thu Jul 9 22:00:18 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
* [controls/commctrl.c][include/commctrl.h][relay32/comctl32.spec]
Fixed GetEffectiveClientRect, CreateToolbarEx and CreateMappedBitmap.
Added stub for ShowHideMenuCtl. Added some documentation.
* [documentation/common_controls]
Added and updated some information.
* [controls/toolbar.c][include/toolbar.h]
Added string support.
* [misc/shell.c][misc/shellord.c][relay32/shell.spec]
Changed names of undocumented functions to their real names and
fixed the export table.
* [controls/imagelist.c][relay32/comctl32.spec]
Added stub for ImageList_SetFilter.
Fixed some minor bugs and typos.
* [objects/font.c][include/windows.h][relay32/gdi32.spec]
Added stubs for GetCharacterPlacement32[A/W].
* [objects/region.c][relay32/gdi32.spec]
Added stub for UNDOCUMENTED GetRandomRgn.
* [controls/commctrl.c][controls/*.c][include/*.h]
Added dummy listview, pager, rebar, tooltips, trackbar and
treeview control. This keeps some programs from complaining.
Thu Jul 9 11:23:58 1998 Rein Klazes <rklazes@casema.net>
* [graphics/painting.c] [graphics/*/init.c]
[graphics/x11drv/graphics.c] [relay32/gdi32.spec]
[if1632/gdi.spec] [include/gdi.h] [include/x11drv.h]
Implemented drawing bezier curves: PolyBezier16/32 and
PolyBezierTo16/32.
* [graphics/x11drv/graphics.c]
Improved accuracy of several graphic routines, especially the
drawing of pie's.
* [include/windows.h] [misc/spy.c]
Added 25 window messages related to programs based on MFC and/or OLE.
Wed Jul 8 22:00:00 1998 James Juran <jrj120@psu.edu>
* [documentation/wine.man]
Updated manpage.
* [wine.ini]
Added section for Win95Look=true (commented out by default).
Wed Jul 8 06:23:19 1998 Matthew Becker <mbecker@glasscity.net>
* [misc/registry.c]
Fixed a crash in RegEnumValue32A when the dwType parameter is
NULL.
* [programs/regtest/regtest.c]
Improved the printing of errors.
* [misc/ntdll.c]
Added stub for RtlFormatCurrentUserKeyPath.
* [win32/console.c]
Added stub for ScrollConsoleScreenBuffer.
Mon Jul 6 16:41:47 1998 Per Lindstrm <pelinstr@algonet.se>
* [include/windows.h] [relay32/kernel.spec] [win32/newfns.c]
Added stubs for SleepEx and TerminateProcess.
* [rc/README]
Corrected a grammatical error.
Mon Jul 3 12:00:00 1998 Juergen Schmied <juergen.schmied@metronet.de>
* [misc/shellord.c]
Put some TRACE in.
* [memory/string.c]
Deleted unused variable in lstrcmpi32A.
* [include/windows.h][memory/string.c]
Added functions WideCharToLocal32 LocalToWideChar32 for
OLE-strings
* [include/shlobj.h][include/winerror.h][misc/shell.c]
[ole/folders.c]
Added definition of internal class pidlmgr.
Changed definitions of EnumIDList, IShellFolder.
Added some OLE error constants.
Implemented EnumIDList, IShellFolder, IClassFactory,
PidlMgr, SHELL32_DllGetClassObject, SHGetDesktopFolder,
SHGetSpecialFolderLocation (half), SHGetPathFromIDList
(!!This stuff is not finished yet!!)
* [include/windows.h][misc/network][reley32/mpr.spec]
Added stubs for WNetConnectionDialog32[A|W|API].
Added struct LPCONNECTDLGSTRUCT32[A|W] and some constants.
Added some SetLastError(WN_NO_NETWORK) to the stubs.
Fixed bufferhandling in WNetCancelConnection
Added stub for MultinetGetErrorText[A|W]
* [ole/ole2nls.c]
Rewrote GetTimeFormat32A.
Fri Jul 3 10:27:30 1998 Michael Poole <poole+@andrew.cmu.edu>
* [graphics/ddraw.c] [tsx11/X11_calls]
Implement IDirectDrawPalette_GetEntries.
Use CopyColormapAndFree to avoid erasing previously-set
palette entries.
* [graphics/ddraw.c] [include/ddraw.h]
[tools/make_X11wrappers] [tsx11/X11_calls]
Provide a preliminary, not-yet-working framework for doing
DirectDraw via Xlib or XShm as well as DGA.
Tue Jun 30 00:16:09 1998 Marcel Baur <mbaur@g26.ethz.ch>
* [ole/nls/*.nls]
Added remaining 22 locales (including arabic locales).
1998-07-12 21:29:36 +02:00
|
|
|
|
2002-04-03 22:41:14 +02:00
|
|
|
/*************************************************************************
|
|
|
|
* GetGlyphIndicesA [GDI32.@]
|
|
|
|
*/
|
|
|
|
DWORD WINAPI GetGlyphIndicesA(HDC hdc, LPCSTR lpstr, INT count,
|
|
|
|
LPWORD pgi, DWORD flags)
|
|
|
|
{
|
|
|
|
DWORD ret;
|
|
|
|
WCHAR *lpstrW;
|
|
|
|
INT countW;
|
|
|
|
|
2006-10-12 22:56:56 +02:00
|
|
|
TRACE("(%p, %s, %d, %p, 0x%x)\n",
|
2002-11-22 23:16:53 +01:00
|
|
|
hdc, debugstr_an(lpstr, count), count, pgi, flags);
|
2002-04-03 22:41:14 +02:00
|
|
|
|
2007-02-15 08:52:33 +01:00
|
|
|
lpstrW = FONT_mbtowc(hdc, lpstr, count, &countW, NULL);
|
2002-04-03 22:41:14 +02:00
|
|
|
ret = GetGlyphIndicesW(hdc, lpstrW, countW, pgi, flags);
|
|
|
|
HeapFree(GetProcessHeap(), 0, lpstrW);
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
* GetGlyphIndicesW [GDI32.@]
|
|
|
|
*/
|
|
|
|
DWORD WINAPI GetGlyphIndicesW(HDC hdc, LPCWSTR lpstr, INT count,
|
|
|
|
LPWORD pgi, DWORD flags)
|
|
|
|
{
|
2008-02-05 21:16:27 +01:00
|
|
|
DC *dc = get_dc_ptr(hdc);
|
2011-10-20 16:30:32 +02:00
|
|
|
PHYSDEV dev;
|
|
|
|
DWORD ret;
|
2002-04-03 22:41:14 +02:00
|
|
|
|
2006-10-12 22:56:56 +02:00
|
|
|
TRACE("(%p, %s, %d, %p, 0x%x)\n",
|
2002-11-22 23:16:53 +01:00
|
|
|
hdc, debugstr_wn(lpstr, count), count, pgi, flags);
|
2002-04-03 22:41:14 +02:00
|
|
|
|
|
|
|
if(!dc) return GDI_ERROR;
|
|
|
|
|
2011-10-20 16:30:32 +02:00
|
|
|
dev = GET_DC_PHYSDEV( dc, pGetGlyphIndices );
|
|
|
|
ret = dev->funcs->pGetGlyphIndices( dev, lpstr, count, pgi, flags );
|
2008-02-05 21:16:27 +01:00
|
|
|
release_dc_ptr( dc );
|
2002-04-03 22:41:14 +02:00
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
Release 980712
Sun Jul 12 16:23:36 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
* [server/*] [scheduler/client.c] (new files)
[scheduler/sysdeps.c] [scheduler/thread.c] [scheduler/process.c]
Beginnings of client/server communication for inter-process
synchronisation.
Sat Jul 11 19:45:45 1998 Ulrich Weigand <weigand@informatik.uni-erlangen.de>
* [include/bitmap.h] [objects/bitmap.c] [objects/dib.c]
[objects/oembitmap.c]
Speed up DIB section handling by using pre-allocated colormap and
XImage. Moved DIB section data out of general BITMAPOBJ structure.
Bugfix: GetDIBits32 would overwrite one byte beyond bitmap data.
* [if1632/shell.spec] [if1632/kernel.spec] [win32/kernel32.c]
More verbose error message if ThunkConnect fails.
Implemented KERNEL_475.
* [files/profile.c] [ole/ole2nls.c]
Minor bugfixes.
* [if1632/builtin.c] [if1632/kernel.spec] [include/task.h]
[loader/ne/module.c] [loader/task.c]
Implemented KERNEL.THHOOK.
* [if1632/wprocs.spec] [include/process.h] [msdos/dpmi.c] [msdos/vxd.c]
Implemented Win32s VxD services (W32S.386).
Sat Jul 11 17:52:23 1998 Huw D M Davies <daviesh@abacus.physics.ox.ac.uk>
* [graphics/x11drv/xfont.c] [graphics/x11drv/text.c]
[include/x11font.h]
Improve handling of rotated X11 fonts. Metrics/extents should now be
correct. ExtTextOut should behave better (still doesn't handle lpDx).
* [graphics/painting.c]
DrawFocusRect32: Don't do anything if width or height are zero.
Sat Jul 11 15:21:35 1998 Andreas Mohr <100.30936@germany.net>
* [files/profile.c] [include/windows.h]
The length arguments of *Profile*() need to be treated
as UINTxx instead of INTxx.
* [graphics/env.c] [graphics/win16drv/init.c] [include/print.h]
[misc/printdrv.c]
Many printer driver fixes/changes (many thanks go to Huw !).
Most printers should work again ;)
* [memory/atom.c]
Fixed ATOM_AddAtom to store atoms exactly like Windows.
* [*/*]
Fixed misc compiler warnings.
Fri Jul 10 15:58:36 1998 Marcus Meissner <marcus@jet.franken.de>
* [files/drive.c]
Fixed GetDriveType16 to return DRIVE_REMOTE again.
* [loader/pe_image.c][loader/module.c]
Look for modules that have the same modulename or the same
filename (they sometimes differ).
Fixed up fixup_imports, removed one of the loops.
* [windows/winpos.c]
Added some NULL ptr checks. Needs more.
* [graphics/ddraw.c]
Some stubs added.
* [if1632/snoop.c]
Updated, made WINELIB compatible.
Fri Jul 10 04:39:56 1998 Douglas Ridgway <ridgway@winehq.com>
* [objects/enhmetafile.c] [relay32/gdi32.spec]
Small tweaks for documentation system.
Thu Jul 9 22:00:18 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
* [controls/commctrl.c][include/commctrl.h][relay32/comctl32.spec]
Fixed GetEffectiveClientRect, CreateToolbarEx and CreateMappedBitmap.
Added stub for ShowHideMenuCtl. Added some documentation.
* [documentation/common_controls]
Added and updated some information.
* [controls/toolbar.c][include/toolbar.h]
Added string support.
* [misc/shell.c][misc/shellord.c][relay32/shell.spec]
Changed names of undocumented functions to their real names and
fixed the export table.
* [controls/imagelist.c][relay32/comctl32.spec]
Added stub for ImageList_SetFilter.
Fixed some minor bugs and typos.
* [objects/font.c][include/windows.h][relay32/gdi32.spec]
Added stubs for GetCharacterPlacement32[A/W].
* [objects/region.c][relay32/gdi32.spec]
Added stub for UNDOCUMENTED GetRandomRgn.
* [controls/commctrl.c][controls/*.c][include/*.h]
Added dummy listview, pager, rebar, tooltips, trackbar and
treeview control. This keeps some programs from complaining.
Thu Jul 9 11:23:58 1998 Rein Klazes <rklazes@casema.net>
* [graphics/painting.c] [graphics/*/init.c]
[graphics/x11drv/graphics.c] [relay32/gdi32.spec]
[if1632/gdi.spec] [include/gdi.h] [include/x11drv.h]
Implemented drawing bezier curves: PolyBezier16/32 and
PolyBezierTo16/32.
* [graphics/x11drv/graphics.c]
Improved accuracy of several graphic routines, especially the
drawing of pie's.
* [include/windows.h] [misc/spy.c]
Added 25 window messages related to programs based on MFC and/or OLE.
Wed Jul 8 22:00:00 1998 James Juran <jrj120@psu.edu>
* [documentation/wine.man]
Updated manpage.
* [wine.ini]
Added section for Win95Look=true (commented out by default).
Wed Jul 8 06:23:19 1998 Matthew Becker <mbecker@glasscity.net>
* [misc/registry.c]
Fixed a crash in RegEnumValue32A when the dwType parameter is
NULL.
* [programs/regtest/regtest.c]
Improved the printing of errors.
* [misc/ntdll.c]
Added stub for RtlFormatCurrentUserKeyPath.
* [win32/console.c]
Added stub for ScrollConsoleScreenBuffer.
Mon Jul 6 16:41:47 1998 Per Lindstrm <pelinstr@algonet.se>
* [include/windows.h] [relay32/kernel.spec] [win32/newfns.c]
Added stubs for SleepEx and TerminateProcess.
* [rc/README]
Corrected a grammatical error.
Mon Jul 3 12:00:00 1998 Juergen Schmied <juergen.schmied@metronet.de>
* [misc/shellord.c]
Put some TRACE in.
* [memory/string.c]
Deleted unused variable in lstrcmpi32A.
* [include/windows.h][memory/string.c]
Added functions WideCharToLocal32 LocalToWideChar32 for
OLE-strings
* [include/shlobj.h][include/winerror.h][misc/shell.c]
[ole/folders.c]
Added definition of internal class pidlmgr.
Changed definitions of EnumIDList, IShellFolder.
Added some OLE error constants.
Implemented EnumIDList, IShellFolder, IClassFactory,
PidlMgr, SHELL32_DllGetClassObject, SHGetDesktopFolder,
SHGetSpecialFolderLocation (half), SHGetPathFromIDList
(!!This stuff is not finished yet!!)
* [include/windows.h][misc/network][reley32/mpr.spec]
Added stubs for WNetConnectionDialog32[A|W|API].
Added struct LPCONNECTDLGSTRUCT32[A|W] and some constants.
Added some SetLastError(WN_NO_NETWORK) to the stubs.
Fixed bufferhandling in WNetCancelConnection
Added stub for MultinetGetErrorText[A|W]
* [ole/ole2nls.c]
Rewrote GetTimeFormat32A.
Fri Jul 3 10:27:30 1998 Michael Poole <poole+@andrew.cmu.edu>
* [graphics/ddraw.c] [tsx11/X11_calls]
Implement IDirectDrawPalette_GetEntries.
Use CopyColormapAndFree to avoid erasing previously-set
palette entries.
* [graphics/ddraw.c] [include/ddraw.h]
[tools/make_X11wrappers] [tsx11/X11_calls]
Provide a preliminary, not-yet-working framework for doing
DirectDraw via Xlib or XShm as well as DGA.
Tue Jun 30 00:16:09 1998 Marcel Baur <mbaur@g26.ethz.ch>
* [ole/nls/*.nls]
Added remaining 22 locales (including arabic locales).
1998-07-12 21:29:36 +02:00
|
|
|
/*************************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* GetCharacterPlacementA [GDI32.@]
|
1999-08-15 16:22:48 +02:00
|
|
|
*
|
2005-11-05 11:45:02 +01:00
|
|
|
* See GetCharacterPlacementW.
|
|
|
|
*
|
1999-08-15 16:22:48 +02:00
|
|
|
* NOTES:
|
|
|
|
* the web browser control of ie4 calls this with dwFlags=0
|
Release 980712
Sun Jul 12 16:23:36 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
* [server/*] [scheduler/client.c] (new files)
[scheduler/sysdeps.c] [scheduler/thread.c] [scheduler/process.c]
Beginnings of client/server communication for inter-process
synchronisation.
Sat Jul 11 19:45:45 1998 Ulrich Weigand <weigand@informatik.uni-erlangen.de>
* [include/bitmap.h] [objects/bitmap.c] [objects/dib.c]
[objects/oembitmap.c]
Speed up DIB section handling by using pre-allocated colormap and
XImage. Moved DIB section data out of general BITMAPOBJ structure.
Bugfix: GetDIBits32 would overwrite one byte beyond bitmap data.
* [if1632/shell.spec] [if1632/kernel.spec] [win32/kernel32.c]
More verbose error message if ThunkConnect fails.
Implemented KERNEL_475.
* [files/profile.c] [ole/ole2nls.c]
Minor bugfixes.
* [if1632/builtin.c] [if1632/kernel.spec] [include/task.h]
[loader/ne/module.c] [loader/task.c]
Implemented KERNEL.THHOOK.
* [if1632/wprocs.spec] [include/process.h] [msdos/dpmi.c] [msdos/vxd.c]
Implemented Win32s VxD services (W32S.386).
Sat Jul 11 17:52:23 1998 Huw D M Davies <daviesh@abacus.physics.ox.ac.uk>
* [graphics/x11drv/xfont.c] [graphics/x11drv/text.c]
[include/x11font.h]
Improve handling of rotated X11 fonts. Metrics/extents should now be
correct. ExtTextOut should behave better (still doesn't handle lpDx).
* [graphics/painting.c]
DrawFocusRect32: Don't do anything if width or height are zero.
Sat Jul 11 15:21:35 1998 Andreas Mohr <100.30936@germany.net>
* [files/profile.c] [include/windows.h]
The length arguments of *Profile*() need to be treated
as UINTxx instead of INTxx.
* [graphics/env.c] [graphics/win16drv/init.c] [include/print.h]
[misc/printdrv.c]
Many printer driver fixes/changes (many thanks go to Huw !).
Most printers should work again ;)
* [memory/atom.c]
Fixed ATOM_AddAtom to store atoms exactly like Windows.
* [*/*]
Fixed misc compiler warnings.
Fri Jul 10 15:58:36 1998 Marcus Meissner <marcus@jet.franken.de>
* [files/drive.c]
Fixed GetDriveType16 to return DRIVE_REMOTE again.
* [loader/pe_image.c][loader/module.c]
Look for modules that have the same modulename or the same
filename (they sometimes differ).
Fixed up fixup_imports, removed one of the loops.
* [windows/winpos.c]
Added some NULL ptr checks. Needs more.
* [graphics/ddraw.c]
Some stubs added.
* [if1632/snoop.c]
Updated, made WINELIB compatible.
Fri Jul 10 04:39:56 1998 Douglas Ridgway <ridgway@winehq.com>
* [objects/enhmetafile.c] [relay32/gdi32.spec]
Small tweaks for documentation system.
Thu Jul 9 22:00:18 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
* [controls/commctrl.c][include/commctrl.h][relay32/comctl32.spec]
Fixed GetEffectiveClientRect, CreateToolbarEx and CreateMappedBitmap.
Added stub for ShowHideMenuCtl. Added some documentation.
* [documentation/common_controls]
Added and updated some information.
* [controls/toolbar.c][include/toolbar.h]
Added string support.
* [misc/shell.c][misc/shellord.c][relay32/shell.spec]
Changed names of undocumented functions to their real names and
fixed the export table.
* [controls/imagelist.c][relay32/comctl32.spec]
Added stub for ImageList_SetFilter.
Fixed some minor bugs and typos.
* [objects/font.c][include/windows.h][relay32/gdi32.spec]
Added stubs for GetCharacterPlacement32[A/W].
* [objects/region.c][relay32/gdi32.spec]
Added stub for UNDOCUMENTED GetRandomRgn.
* [controls/commctrl.c][controls/*.c][include/*.h]
Added dummy listview, pager, rebar, tooltips, trackbar and
treeview control. This keeps some programs from complaining.
Thu Jul 9 11:23:58 1998 Rein Klazes <rklazes@casema.net>
* [graphics/painting.c] [graphics/*/init.c]
[graphics/x11drv/graphics.c] [relay32/gdi32.spec]
[if1632/gdi.spec] [include/gdi.h] [include/x11drv.h]
Implemented drawing bezier curves: PolyBezier16/32 and
PolyBezierTo16/32.
* [graphics/x11drv/graphics.c]
Improved accuracy of several graphic routines, especially the
drawing of pie's.
* [include/windows.h] [misc/spy.c]
Added 25 window messages related to programs based on MFC and/or OLE.
Wed Jul 8 22:00:00 1998 James Juran <jrj120@psu.edu>
* [documentation/wine.man]
Updated manpage.
* [wine.ini]
Added section for Win95Look=true (commented out by default).
Wed Jul 8 06:23:19 1998 Matthew Becker <mbecker@glasscity.net>
* [misc/registry.c]
Fixed a crash in RegEnumValue32A when the dwType parameter is
NULL.
* [programs/regtest/regtest.c]
Improved the printing of errors.
* [misc/ntdll.c]
Added stub for RtlFormatCurrentUserKeyPath.
* [win32/console.c]
Added stub for ScrollConsoleScreenBuffer.
Mon Jul 6 16:41:47 1998 Per Lindstrm <pelinstr@algonet.se>
* [include/windows.h] [relay32/kernel.spec] [win32/newfns.c]
Added stubs for SleepEx and TerminateProcess.
* [rc/README]
Corrected a grammatical error.
Mon Jul 3 12:00:00 1998 Juergen Schmied <juergen.schmied@metronet.de>
* [misc/shellord.c]
Put some TRACE in.
* [memory/string.c]
Deleted unused variable in lstrcmpi32A.
* [include/windows.h][memory/string.c]
Added functions WideCharToLocal32 LocalToWideChar32 for
OLE-strings
* [include/shlobj.h][include/winerror.h][misc/shell.c]
[ole/folders.c]
Added definition of internal class pidlmgr.
Changed definitions of EnumIDList, IShellFolder.
Added some OLE error constants.
Implemented EnumIDList, IShellFolder, IClassFactory,
PidlMgr, SHELL32_DllGetClassObject, SHGetDesktopFolder,
SHGetSpecialFolderLocation (half), SHGetPathFromIDList
(!!This stuff is not finished yet!!)
* [include/windows.h][misc/network][reley32/mpr.spec]
Added stubs for WNetConnectionDialog32[A|W|API].
Added struct LPCONNECTDLGSTRUCT32[A|W] and some constants.
Added some SetLastError(WN_NO_NETWORK) to the stubs.
Fixed bufferhandling in WNetCancelConnection
Added stub for MultinetGetErrorText[A|W]
* [ole/ole2nls.c]
Rewrote GetTimeFormat32A.
Fri Jul 3 10:27:30 1998 Michael Poole <poole+@andrew.cmu.edu>
* [graphics/ddraw.c] [tsx11/X11_calls]
Implement IDirectDrawPalette_GetEntries.
Use CopyColormapAndFree to avoid erasing previously-set
palette entries.
* [graphics/ddraw.c] [include/ddraw.h]
[tools/make_X11wrappers] [tsx11/X11_calls]
Provide a preliminary, not-yet-working framework for doing
DirectDraw via Xlib or XShm as well as DGA.
Tue Jun 30 00:16:09 1998 Marcel Baur <mbaur@g26.ethz.ch>
* [ole/nls/*.nls]
Added remaining 22 locales (including arabic locales).
1998-07-12 21:29:36 +02:00
|
|
|
*/
|
|
|
|
DWORD WINAPI
|
1999-02-26 12:11:13 +01:00
|
|
|
GetCharacterPlacementA(HDC hdc, LPCSTR lpString, INT uCount,
|
|
|
|
INT nMaxExtent, GCP_RESULTSA *lpResults,
|
Release 980712
Sun Jul 12 16:23:36 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
* [server/*] [scheduler/client.c] (new files)
[scheduler/sysdeps.c] [scheduler/thread.c] [scheduler/process.c]
Beginnings of client/server communication for inter-process
synchronisation.
Sat Jul 11 19:45:45 1998 Ulrich Weigand <weigand@informatik.uni-erlangen.de>
* [include/bitmap.h] [objects/bitmap.c] [objects/dib.c]
[objects/oembitmap.c]
Speed up DIB section handling by using pre-allocated colormap and
XImage. Moved DIB section data out of general BITMAPOBJ structure.
Bugfix: GetDIBits32 would overwrite one byte beyond bitmap data.
* [if1632/shell.spec] [if1632/kernel.spec] [win32/kernel32.c]
More verbose error message if ThunkConnect fails.
Implemented KERNEL_475.
* [files/profile.c] [ole/ole2nls.c]
Minor bugfixes.
* [if1632/builtin.c] [if1632/kernel.spec] [include/task.h]
[loader/ne/module.c] [loader/task.c]
Implemented KERNEL.THHOOK.
* [if1632/wprocs.spec] [include/process.h] [msdos/dpmi.c] [msdos/vxd.c]
Implemented Win32s VxD services (W32S.386).
Sat Jul 11 17:52:23 1998 Huw D M Davies <daviesh@abacus.physics.ox.ac.uk>
* [graphics/x11drv/xfont.c] [graphics/x11drv/text.c]
[include/x11font.h]
Improve handling of rotated X11 fonts. Metrics/extents should now be
correct. ExtTextOut should behave better (still doesn't handle lpDx).
* [graphics/painting.c]
DrawFocusRect32: Don't do anything if width or height are zero.
Sat Jul 11 15:21:35 1998 Andreas Mohr <100.30936@germany.net>
* [files/profile.c] [include/windows.h]
The length arguments of *Profile*() need to be treated
as UINTxx instead of INTxx.
* [graphics/env.c] [graphics/win16drv/init.c] [include/print.h]
[misc/printdrv.c]
Many printer driver fixes/changes (many thanks go to Huw !).
Most printers should work again ;)
* [memory/atom.c]
Fixed ATOM_AddAtom to store atoms exactly like Windows.
* [*/*]
Fixed misc compiler warnings.
Fri Jul 10 15:58:36 1998 Marcus Meissner <marcus@jet.franken.de>
* [files/drive.c]
Fixed GetDriveType16 to return DRIVE_REMOTE again.
* [loader/pe_image.c][loader/module.c]
Look for modules that have the same modulename or the same
filename (they sometimes differ).
Fixed up fixup_imports, removed one of the loops.
* [windows/winpos.c]
Added some NULL ptr checks. Needs more.
* [graphics/ddraw.c]
Some stubs added.
* [if1632/snoop.c]
Updated, made WINELIB compatible.
Fri Jul 10 04:39:56 1998 Douglas Ridgway <ridgway@winehq.com>
* [objects/enhmetafile.c] [relay32/gdi32.spec]
Small tweaks for documentation system.
Thu Jul 9 22:00:18 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
* [controls/commctrl.c][include/commctrl.h][relay32/comctl32.spec]
Fixed GetEffectiveClientRect, CreateToolbarEx and CreateMappedBitmap.
Added stub for ShowHideMenuCtl. Added some documentation.
* [documentation/common_controls]
Added and updated some information.
* [controls/toolbar.c][include/toolbar.h]
Added string support.
* [misc/shell.c][misc/shellord.c][relay32/shell.spec]
Changed names of undocumented functions to their real names and
fixed the export table.
* [controls/imagelist.c][relay32/comctl32.spec]
Added stub for ImageList_SetFilter.
Fixed some minor bugs and typos.
* [objects/font.c][include/windows.h][relay32/gdi32.spec]
Added stubs for GetCharacterPlacement32[A/W].
* [objects/region.c][relay32/gdi32.spec]
Added stub for UNDOCUMENTED GetRandomRgn.
* [controls/commctrl.c][controls/*.c][include/*.h]
Added dummy listview, pager, rebar, tooltips, trackbar and
treeview control. This keeps some programs from complaining.
Thu Jul 9 11:23:58 1998 Rein Klazes <rklazes@casema.net>
* [graphics/painting.c] [graphics/*/init.c]
[graphics/x11drv/graphics.c] [relay32/gdi32.spec]
[if1632/gdi.spec] [include/gdi.h] [include/x11drv.h]
Implemented drawing bezier curves: PolyBezier16/32 and
PolyBezierTo16/32.
* [graphics/x11drv/graphics.c]
Improved accuracy of several graphic routines, especially the
drawing of pie's.
* [include/windows.h] [misc/spy.c]
Added 25 window messages related to programs based on MFC and/or OLE.
Wed Jul 8 22:00:00 1998 James Juran <jrj120@psu.edu>
* [documentation/wine.man]
Updated manpage.
* [wine.ini]
Added section for Win95Look=true (commented out by default).
Wed Jul 8 06:23:19 1998 Matthew Becker <mbecker@glasscity.net>
* [misc/registry.c]
Fixed a crash in RegEnumValue32A when the dwType parameter is
NULL.
* [programs/regtest/regtest.c]
Improved the printing of errors.
* [misc/ntdll.c]
Added stub for RtlFormatCurrentUserKeyPath.
* [win32/console.c]
Added stub for ScrollConsoleScreenBuffer.
Mon Jul 6 16:41:47 1998 Per Lindstrm <pelinstr@algonet.se>
* [include/windows.h] [relay32/kernel.spec] [win32/newfns.c]
Added stubs for SleepEx and TerminateProcess.
* [rc/README]
Corrected a grammatical error.
Mon Jul 3 12:00:00 1998 Juergen Schmied <juergen.schmied@metronet.de>
* [misc/shellord.c]
Put some TRACE in.
* [memory/string.c]
Deleted unused variable in lstrcmpi32A.
* [include/windows.h][memory/string.c]
Added functions WideCharToLocal32 LocalToWideChar32 for
OLE-strings
* [include/shlobj.h][include/winerror.h][misc/shell.c]
[ole/folders.c]
Added definition of internal class pidlmgr.
Changed definitions of EnumIDList, IShellFolder.
Added some OLE error constants.
Implemented EnumIDList, IShellFolder, IClassFactory,
PidlMgr, SHELL32_DllGetClassObject, SHGetDesktopFolder,
SHGetSpecialFolderLocation (half), SHGetPathFromIDList
(!!This stuff is not finished yet!!)
* [include/windows.h][misc/network][reley32/mpr.spec]
Added stubs for WNetConnectionDialog32[A|W|API].
Added struct LPCONNECTDLGSTRUCT32[A|W] and some constants.
Added some SetLastError(WN_NO_NETWORK) to the stubs.
Fixed bufferhandling in WNetCancelConnection
Added stub for MultinetGetErrorText[A|W]
* [ole/ole2nls.c]
Rewrote GetTimeFormat32A.
Fri Jul 3 10:27:30 1998 Michael Poole <poole+@andrew.cmu.edu>
* [graphics/ddraw.c] [tsx11/X11_calls]
Implement IDirectDrawPalette_GetEntries.
Use CopyColormapAndFree to avoid erasing previously-set
palette entries.
* [graphics/ddraw.c] [include/ddraw.h]
[tools/make_X11wrappers] [tsx11/X11_calls]
Provide a preliminary, not-yet-working framework for doing
DirectDraw via Xlib or XShm as well as DGA.
Tue Jun 30 00:16:09 1998 Marcel Baur <mbaur@g26.ethz.ch>
* [ole/nls/*.nls]
Added remaining 22 locales (including arabic locales).
1998-07-12 21:29:36 +02:00
|
|
|
DWORD dwFlags)
|
|
|
|
{
|
2002-04-03 22:41:14 +02:00
|
|
|
WCHAR *lpStringW;
|
2004-01-20 23:39:06 +01:00
|
|
|
INT uCountW;
|
2002-04-03 22:41:14 +02:00
|
|
|
GCP_RESULTSW resultsW;
|
|
|
|
DWORD ret;
|
2007-02-15 08:52:33 +01:00
|
|
|
UINT font_cp;
|
1999-08-15 16:22:48 +02:00
|
|
|
|
2006-10-12 22:56:56 +02:00
|
|
|
TRACE("%s, %d, %d, 0x%08x\n",
|
2002-04-03 22:41:14 +02:00
|
|
|
debugstr_an(lpString, uCount), uCount, nMaxExtent, dwFlags);
|
1999-08-15 16:22:48 +02:00
|
|
|
|
2002-04-03 22:41:14 +02:00
|
|
|
/* both structs are equal in size */
|
|
|
|
memcpy(&resultsW, lpResults, sizeof(resultsW));
|
1999-08-15 16:22:48 +02:00
|
|
|
|
2007-02-15 08:52:33 +01:00
|
|
|
lpStringW = FONT_mbtowc(hdc, lpString, uCount, &uCountW, &font_cp);
|
2002-09-04 20:49:36 +02:00
|
|
|
if(lpResults->lpOutString)
|
|
|
|
resultsW.lpOutString = HeapAlloc(GetProcessHeap(), 0, sizeof(WCHAR)*uCountW);
|
1999-08-15 16:22:48 +02:00
|
|
|
|
2002-04-03 22:41:14 +02:00
|
|
|
ret = GetCharacterPlacementW(hdc, lpStringW, uCountW, nMaxExtent, &resultsW, dwFlags);
|
|
|
|
|
2006-04-11 21:25:44 +02:00
|
|
|
lpResults->nGlyphs = resultsW.nGlyphs;
|
|
|
|
lpResults->nMaxFit = resultsW.nMaxFit;
|
|
|
|
|
2002-06-22 03:19:29 +02:00
|
|
|
if(lpResults->lpOutString) {
|
2007-02-15 08:52:33 +01:00
|
|
|
WideCharToMultiByte(font_cp, 0, resultsW.lpOutString, uCountW,
|
2004-01-20 23:39:06 +01:00
|
|
|
lpResults->lpOutString, uCount, NULL, NULL );
|
2002-06-22 03:19:29 +02:00
|
|
|
}
|
1999-08-15 16:22:48 +02:00
|
|
|
|
2002-04-03 22:41:14 +02:00
|
|
|
HeapFree(GetProcessHeap(), 0, lpStringW);
|
|
|
|
HeapFree(GetProcessHeap(), 0, resultsW.lpOutString);
|
1999-08-15 16:22:48 +02:00
|
|
|
|
|
|
|
return ret;
|
Release 980712
Sun Jul 12 16:23:36 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
* [server/*] [scheduler/client.c] (new files)
[scheduler/sysdeps.c] [scheduler/thread.c] [scheduler/process.c]
Beginnings of client/server communication for inter-process
synchronisation.
Sat Jul 11 19:45:45 1998 Ulrich Weigand <weigand@informatik.uni-erlangen.de>
* [include/bitmap.h] [objects/bitmap.c] [objects/dib.c]
[objects/oembitmap.c]
Speed up DIB section handling by using pre-allocated colormap and
XImage. Moved DIB section data out of general BITMAPOBJ structure.
Bugfix: GetDIBits32 would overwrite one byte beyond bitmap data.
* [if1632/shell.spec] [if1632/kernel.spec] [win32/kernel32.c]
More verbose error message if ThunkConnect fails.
Implemented KERNEL_475.
* [files/profile.c] [ole/ole2nls.c]
Minor bugfixes.
* [if1632/builtin.c] [if1632/kernel.spec] [include/task.h]
[loader/ne/module.c] [loader/task.c]
Implemented KERNEL.THHOOK.
* [if1632/wprocs.spec] [include/process.h] [msdos/dpmi.c] [msdos/vxd.c]
Implemented Win32s VxD services (W32S.386).
Sat Jul 11 17:52:23 1998 Huw D M Davies <daviesh@abacus.physics.ox.ac.uk>
* [graphics/x11drv/xfont.c] [graphics/x11drv/text.c]
[include/x11font.h]
Improve handling of rotated X11 fonts. Metrics/extents should now be
correct. ExtTextOut should behave better (still doesn't handle lpDx).
* [graphics/painting.c]
DrawFocusRect32: Don't do anything if width or height are zero.
Sat Jul 11 15:21:35 1998 Andreas Mohr <100.30936@germany.net>
* [files/profile.c] [include/windows.h]
The length arguments of *Profile*() need to be treated
as UINTxx instead of INTxx.
* [graphics/env.c] [graphics/win16drv/init.c] [include/print.h]
[misc/printdrv.c]
Many printer driver fixes/changes (many thanks go to Huw !).
Most printers should work again ;)
* [memory/atom.c]
Fixed ATOM_AddAtom to store atoms exactly like Windows.
* [*/*]
Fixed misc compiler warnings.
Fri Jul 10 15:58:36 1998 Marcus Meissner <marcus@jet.franken.de>
* [files/drive.c]
Fixed GetDriveType16 to return DRIVE_REMOTE again.
* [loader/pe_image.c][loader/module.c]
Look for modules that have the same modulename or the same
filename (they sometimes differ).
Fixed up fixup_imports, removed one of the loops.
* [windows/winpos.c]
Added some NULL ptr checks. Needs more.
* [graphics/ddraw.c]
Some stubs added.
* [if1632/snoop.c]
Updated, made WINELIB compatible.
Fri Jul 10 04:39:56 1998 Douglas Ridgway <ridgway@winehq.com>
* [objects/enhmetafile.c] [relay32/gdi32.spec]
Small tweaks for documentation system.
Thu Jul 9 22:00:18 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
* [controls/commctrl.c][include/commctrl.h][relay32/comctl32.spec]
Fixed GetEffectiveClientRect, CreateToolbarEx and CreateMappedBitmap.
Added stub for ShowHideMenuCtl. Added some documentation.
* [documentation/common_controls]
Added and updated some information.
* [controls/toolbar.c][include/toolbar.h]
Added string support.
* [misc/shell.c][misc/shellord.c][relay32/shell.spec]
Changed names of undocumented functions to their real names and
fixed the export table.
* [controls/imagelist.c][relay32/comctl32.spec]
Added stub for ImageList_SetFilter.
Fixed some minor bugs and typos.
* [objects/font.c][include/windows.h][relay32/gdi32.spec]
Added stubs for GetCharacterPlacement32[A/W].
* [objects/region.c][relay32/gdi32.spec]
Added stub for UNDOCUMENTED GetRandomRgn.
* [controls/commctrl.c][controls/*.c][include/*.h]
Added dummy listview, pager, rebar, tooltips, trackbar and
treeview control. This keeps some programs from complaining.
Thu Jul 9 11:23:58 1998 Rein Klazes <rklazes@casema.net>
* [graphics/painting.c] [graphics/*/init.c]
[graphics/x11drv/graphics.c] [relay32/gdi32.spec]
[if1632/gdi.spec] [include/gdi.h] [include/x11drv.h]
Implemented drawing bezier curves: PolyBezier16/32 and
PolyBezierTo16/32.
* [graphics/x11drv/graphics.c]
Improved accuracy of several graphic routines, especially the
drawing of pie's.
* [include/windows.h] [misc/spy.c]
Added 25 window messages related to programs based on MFC and/or OLE.
Wed Jul 8 22:00:00 1998 James Juran <jrj120@psu.edu>
* [documentation/wine.man]
Updated manpage.
* [wine.ini]
Added section for Win95Look=true (commented out by default).
Wed Jul 8 06:23:19 1998 Matthew Becker <mbecker@glasscity.net>
* [misc/registry.c]
Fixed a crash in RegEnumValue32A when the dwType parameter is
NULL.
* [programs/regtest/regtest.c]
Improved the printing of errors.
* [misc/ntdll.c]
Added stub for RtlFormatCurrentUserKeyPath.
* [win32/console.c]
Added stub for ScrollConsoleScreenBuffer.
Mon Jul 6 16:41:47 1998 Per Lindstrm <pelinstr@algonet.se>
* [include/windows.h] [relay32/kernel.spec] [win32/newfns.c]
Added stubs for SleepEx and TerminateProcess.
* [rc/README]
Corrected a grammatical error.
Mon Jul 3 12:00:00 1998 Juergen Schmied <juergen.schmied@metronet.de>
* [misc/shellord.c]
Put some TRACE in.
* [memory/string.c]
Deleted unused variable in lstrcmpi32A.
* [include/windows.h][memory/string.c]
Added functions WideCharToLocal32 LocalToWideChar32 for
OLE-strings
* [include/shlobj.h][include/winerror.h][misc/shell.c]
[ole/folders.c]
Added definition of internal class pidlmgr.
Changed definitions of EnumIDList, IShellFolder.
Added some OLE error constants.
Implemented EnumIDList, IShellFolder, IClassFactory,
PidlMgr, SHELL32_DllGetClassObject, SHGetDesktopFolder,
SHGetSpecialFolderLocation (half), SHGetPathFromIDList
(!!This stuff is not finished yet!!)
* [include/windows.h][misc/network][reley32/mpr.spec]
Added stubs for WNetConnectionDialog32[A|W|API].
Added struct LPCONNECTDLGSTRUCT32[A|W] and some constants.
Added some SetLastError(WN_NO_NETWORK) to the stubs.
Fixed bufferhandling in WNetCancelConnection
Added stub for MultinetGetErrorText[A|W]
* [ole/ole2nls.c]
Rewrote GetTimeFormat32A.
Fri Jul 3 10:27:30 1998 Michael Poole <poole+@andrew.cmu.edu>
* [graphics/ddraw.c] [tsx11/X11_calls]
Implement IDirectDrawPalette_GetEntries.
Use CopyColormapAndFree to avoid erasing previously-set
palette entries.
* [graphics/ddraw.c] [include/ddraw.h]
[tools/make_X11wrappers] [tsx11/X11_calls]
Provide a preliminary, not-yet-working framework for doing
DirectDraw via Xlib or XShm as well as DGA.
Tue Jun 30 00:16:09 1998 Marcel Baur <mbaur@g26.ethz.ch>
* [ole/nls/*.nls]
Added remaining 22 locales (including arabic locales).
1998-07-12 21:29:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* GetCharacterPlacementW [GDI32.@]
|
2002-06-15 01:28:55 +02:00
|
|
|
*
|
|
|
|
* Retrieve information about a string. This includes the width, reordering,
|
|
|
|
* Glyphing and so on.
|
|
|
|
*
|
|
|
|
* RETURNS
|
|
|
|
*
|
2003-06-18 05:30:39 +02:00
|
|
|
* The width and height of the string if successful, 0 if failed.
|
2002-06-15 01:28:55 +02:00
|
|
|
*
|
|
|
|
* BUGS
|
|
|
|
*
|
|
|
|
* All flags except GCP_REORDER are not yet implemented.
|
2008-03-25 18:35:45 +01:00
|
|
|
* Reordering is not 100% compliant to the Windows BiDi method.
|
2003-11-18 01:03:27 +01:00
|
|
|
* Caret positioning is not yet implemented for BiDi.
|
2002-06-15 01:28:55 +02:00
|
|
|
* Classes are not yet implemented.
|
|
|
|
*
|
Release 980712
Sun Jul 12 16:23:36 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
* [server/*] [scheduler/client.c] (new files)
[scheduler/sysdeps.c] [scheduler/thread.c] [scheduler/process.c]
Beginnings of client/server communication for inter-process
synchronisation.
Sat Jul 11 19:45:45 1998 Ulrich Weigand <weigand@informatik.uni-erlangen.de>
* [include/bitmap.h] [objects/bitmap.c] [objects/dib.c]
[objects/oembitmap.c]
Speed up DIB section handling by using pre-allocated colormap and
XImage. Moved DIB section data out of general BITMAPOBJ structure.
Bugfix: GetDIBits32 would overwrite one byte beyond bitmap data.
* [if1632/shell.spec] [if1632/kernel.spec] [win32/kernel32.c]
More verbose error message if ThunkConnect fails.
Implemented KERNEL_475.
* [files/profile.c] [ole/ole2nls.c]
Minor bugfixes.
* [if1632/builtin.c] [if1632/kernel.spec] [include/task.h]
[loader/ne/module.c] [loader/task.c]
Implemented KERNEL.THHOOK.
* [if1632/wprocs.spec] [include/process.h] [msdos/dpmi.c] [msdos/vxd.c]
Implemented Win32s VxD services (W32S.386).
Sat Jul 11 17:52:23 1998 Huw D M Davies <daviesh@abacus.physics.ox.ac.uk>
* [graphics/x11drv/xfont.c] [graphics/x11drv/text.c]
[include/x11font.h]
Improve handling of rotated X11 fonts. Metrics/extents should now be
correct. ExtTextOut should behave better (still doesn't handle lpDx).
* [graphics/painting.c]
DrawFocusRect32: Don't do anything if width or height are zero.
Sat Jul 11 15:21:35 1998 Andreas Mohr <100.30936@germany.net>
* [files/profile.c] [include/windows.h]
The length arguments of *Profile*() need to be treated
as UINTxx instead of INTxx.
* [graphics/env.c] [graphics/win16drv/init.c] [include/print.h]
[misc/printdrv.c]
Many printer driver fixes/changes (many thanks go to Huw !).
Most printers should work again ;)
* [memory/atom.c]
Fixed ATOM_AddAtom to store atoms exactly like Windows.
* [*/*]
Fixed misc compiler warnings.
Fri Jul 10 15:58:36 1998 Marcus Meissner <marcus@jet.franken.de>
* [files/drive.c]
Fixed GetDriveType16 to return DRIVE_REMOTE again.
* [loader/pe_image.c][loader/module.c]
Look for modules that have the same modulename or the same
filename (they sometimes differ).
Fixed up fixup_imports, removed one of the loops.
* [windows/winpos.c]
Added some NULL ptr checks. Needs more.
* [graphics/ddraw.c]
Some stubs added.
* [if1632/snoop.c]
Updated, made WINELIB compatible.
Fri Jul 10 04:39:56 1998 Douglas Ridgway <ridgway@winehq.com>
* [objects/enhmetafile.c] [relay32/gdi32.spec]
Small tweaks for documentation system.
Thu Jul 9 22:00:18 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
* [controls/commctrl.c][include/commctrl.h][relay32/comctl32.spec]
Fixed GetEffectiveClientRect, CreateToolbarEx and CreateMappedBitmap.
Added stub for ShowHideMenuCtl. Added some documentation.
* [documentation/common_controls]
Added and updated some information.
* [controls/toolbar.c][include/toolbar.h]
Added string support.
* [misc/shell.c][misc/shellord.c][relay32/shell.spec]
Changed names of undocumented functions to their real names and
fixed the export table.
* [controls/imagelist.c][relay32/comctl32.spec]
Added stub for ImageList_SetFilter.
Fixed some minor bugs and typos.
* [objects/font.c][include/windows.h][relay32/gdi32.spec]
Added stubs for GetCharacterPlacement32[A/W].
* [objects/region.c][relay32/gdi32.spec]
Added stub for UNDOCUMENTED GetRandomRgn.
* [controls/commctrl.c][controls/*.c][include/*.h]
Added dummy listview, pager, rebar, tooltips, trackbar and
treeview control. This keeps some programs from complaining.
Thu Jul 9 11:23:58 1998 Rein Klazes <rklazes@casema.net>
* [graphics/painting.c] [graphics/*/init.c]
[graphics/x11drv/graphics.c] [relay32/gdi32.spec]
[if1632/gdi.spec] [include/gdi.h] [include/x11drv.h]
Implemented drawing bezier curves: PolyBezier16/32 and
PolyBezierTo16/32.
* [graphics/x11drv/graphics.c]
Improved accuracy of several graphic routines, especially the
drawing of pie's.
* [include/windows.h] [misc/spy.c]
Added 25 window messages related to programs based on MFC and/or OLE.
Wed Jul 8 22:00:00 1998 James Juran <jrj120@psu.edu>
* [documentation/wine.man]
Updated manpage.
* [wine.ini]
Added section for Win95Look=true (commented out by default).
Wed Jul 8 06:23:19 1998 Matthew Becker <mbecker@glasscity.net>
* [misc/registry.c]
Fixed a crash in RegEnumValue32A when the dwType parameter is
NULL.
* [programs/regtest/regtest.c]
Improved the printing of errors.
* [misc/ntdll.c]
Added stub for RtlFormatCurrentUserKeyPath.
* [win32/console.c]
Added stub for ScrollConsoleScreenBuffer.
Mon Jul 6 16:41:47 1998 Per Lindstrm <pelinstr@algonet.se>
* [include/windows.h] [relay32/kernel.spec] [win32/newfns.c]
Added stubs for SleepEx and TerminateProcess.
* [rc/README]
Corrected a grammatical error.
Mon Jul 3 12:00:00 1998 Juergen Schmied <juergen.schmied@metronet.de>
* [misc/shellord.c]
Put some TRACE in.
* [memory/string.c]
Deleted unused variable in lstrcmpi32A.
* [include/windows.h][memory/string.c]
Added functions WideCharToLocal32 LocalToWideChar32 for
OLE-strings
* [include/shlobj.h][include/winerror.h][misc/shell.c]
[ole/folders.c]
Added definition of internal class pidlmgr.
Changed definitions of EnumIDList, IShellFolder.
Added some OLE error constants.
Implemented EnumIDList, IShellFolder, IClassFactory,
PidlMgr, SHELL32_DllGetClassObject, SHGetDesktopFolder,
SHGetSpecialFolderLocation (half), SHGetPathFromIDList
(!!This stuff is not finished yet!!)
* [include/windows.h][misc/network][reley32/mpr.spec]
Added stubs for WNetConnectionDialog32[A|W|API].
Added struct LPCONNECTDLGSTRUCT32[A|W] and some constants.
Added some SetLastError(WN_NO_NETWORK) to the stubs.
Fixed bufferhandling in WNetCancelConnection
Added stub for MultinetGetErrorText[A|W]
* [ole/ole2nls.c]
Rewrote GetTimeFormat32A.
Fri Jul 3 10:27:30 1998 Michael Poole <poole+@andrew.cmu.edu>
* [graphics/ddraw.c] [tsx11/X11_calls]
Implement IDirectDrawPalette_GetEntries.
Use CopyColormapAndFree to avoid erasing previously-set
palette entries.
* [graphics/ddraw.c] [include/ddraw.h]
[tools/make_X11wrappers] [tsx11/X11_calls]
Provide a preliminary, not-yet-working framework for doing
DirectDraw via Xlib or XShm as well as DGA.
Tue Jun 30 00:16:09 1998 Marcel Baur <mbaur@g26.ethz.ch>
* [ole/nls/*.nls]
Added remaining 22 locales (including arabic locales).
1998-07-12 21:29:36 +02:00
|
|
|
*/
|
|
|
|
DWORD WINAPI
|
2002-06-15 01:28:55 +02:00
|
|
|
GetCharacterPlacementW(
|
2012-12-15 19:55:12 +01:00
|
|
|
HDC hdc, /* [in] Device context for which the rendering is to be done */
|
|
|
|
LPCWSTR lpString, /* [in] The string for which information is to be returned */
|
|
|
|
INT uCount, /* [in] Number of WORDS in string. */
|
|
|
|
INT nMaxExtent, /* [in] Maximum extent the string is to take (in HDC logical units) */
|
|
|
|
GCP_RESULTSW *lpResults, /* [in/out] A pointer to a GCP_RESULTSW struct */
|
|
|
|
DWORD dwFlags /* [in] Flags specifying how to process the string */
|
|
|
|
)
|
Release 980712
Sun Jul 12 16:23:36 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
* [server/*] [scheduler/client.c] (new files)
[scheduler/sysdeps.c] [scheduler/thread.c] [scheduler/process.c]
Beginnings of client/server communication for inter-process
synchronisation.
Sat Jul 11 19:45:45 1998 Ulrich Weigand <weigand@informatik.uni-erlangen.de>
* [include/bitmap.h] [objects/bitmap.c] [objects/dib.c]
[objects/oembitmap.c]
Speed up DIB section handling by using pre-allocated colormap and
XImage. Moved DIB section data out of general BITMAPOBJ structure.
Bugfix: GetDIBits32 would overwrite one byte beyond bitmap data.
* [if1632/shell.spec] [if1632/kernel.spec] [win32/kernel32.c]
More verbose error message if ThunkConnect fails.
Implemented KERNEL_475.
* [files/profile.c] [ole/ole2nls.c]
Minor bugfixes.
* [if1632/builtin.c] [if1632/kernel.spec] [include/task.h]
[loader/ne/module.c] [loader/task.c]
Implemented KERNEL.THHOOK.
* [if1632/wprocs.spec] [include/process.h] [msdos/dpmi.c] [msdos/vxd.c]
Implemented Win32s VxD services (W32S.386).
Sat Jul 11 17:52:23 1998 Huw D M Davies <daviesh@abacus.physics.ox.ac.uk>
* [graphics/x11drv/xfont.c] [graphics/x11drv/text.c]
[include/x11font.h]
Improve handling of rotated X11 fonts. Metrics/extents should now be
correct. ExtTextOut should behave better (still doesn't handle lpDx).
* [graphics/painting.c]
DrawFocusRect32: Don't do anything if width or height are zero.
Sat Jul 11 15:21:35 1998 Andreas Mohr <100.30936@germany.net>
* [files/profile.c] [include/windows.h]
The length arguments of *Profile*() need to be treated
as UINTxx instead of INTxx.
* [graphics/env.c] [graphics/win16drv/init.c] [include/print.h]
[misc/printdrv.c]
Many printer driver fixes/changes (many thanks go to Huw !).
Most printers should work again ;)
* [memory/atom.c]
Fixed ATOM_AddAtom to store atoms exactly like Windows.
* [*/*]
Fixed misc compiler warnings.
Fri Jul 10 15:58:36 1998 Marcus Meissner <marcus@jet.franken.de>
* [files/drive.c]
Fixed GetDriveType16 to return DRIVE_REMOTE again.
* [loader/pe_image.c][loader/module.c]
Look for modules that have the same modulename or the same
filename (they sometimes differ).
Fixed up fixup_imports, removed one of the loops.
* [windows/winpos.c]
Added some NULL ptr checks. Needs more.
* [graphics/ddraw.c]
Some stubs added.
* [if1632/snoop.c]
Updated, made WINELIB compatible.
Fri Jul 10 04:39:56 1998 Douglas Ridgway <ridgway@winehq.com>
* [objects/enhmetafile.c] [relay32/gdi32.spec]
Small tweaks for documentation system.
Thu Jul 9 22:00:18 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
* [controls/commctrl.c][include/commctrl.h][relay32/comctl32.spec]
Fixed GetEffectiveClientRect, CreateToolbarEx and CreateMappedBitmap.
Added stub for ShowHideMenuCtl. Added some documentation.
* [documentation/common_controls]
Added and updated some information.
* [controls/toolbar.c][include/toolbar.h]
Added string support.
* [misc/shell.c][misc/shellord.c][relay32/shell.spec]
Changed names of undocumented functions to their real names and
fixed the export table.
* [controls/imagelist.c][relay32/comctl32.spec]
Added stub for ImageList_SetFilter.
Fixed some minor bugs and typos.
* [objects/font.c][include/windows.h][relay32/gdi32.spec]
Added stubs for GetCharacterPlacement32[A/W].
* [objects/region.c][relay32/gdi32.spec]
Added stub for UNDOCUMENTED GetRandomRgn.
* [controls/commctrl.c][controls/*.c][include/*.h]
Added dummy listview, pager, rebar, tooltips, trackbar and
treeview control. This keeps some programs from complaining.
Thu Jul 9 11:23:58 1998 Rein Klazes <rklazes@casema.net>
* [graphics/painting.c] [graphics/*/init.c]
[graphics/x11drv/graphics.c] [relay32/gdi32.spec]
[if1632/gdi.spec] [include/gdi.h] [include/x11drv.h]
Implemented drawing bezier curves: PolyBezier16/32 and
PolyBezierTo16/32.
* [graphics/x11drv/graphics.c]
Improved accuracy of several graphic routines, especially the
drawing of pie's.
* [include/windows.h] [misc/spy.c]
Added 25 window messages related to programs based on MFC and/or OLE.
Wed Jul 8 22:00:00 1998 James Juran <jrj120@psu.edu>
* [documentation/wine.man]
Updated manpage.
* [wine.ini]
Added section for Win95Look=true (commented out by default).
Wed Jul 8 06:23:19 1998 Matthew Becker <mbecker@glasscity.net>
* [misc/registry.c]
Fixed a crash in RegEnumValue32A when the dwType parameter is
NULL.
* [programs/regtest/regtest.c]
Improved the printing of errors.
* [misc/ntdll.c]
Added stub for RtlFormatCurrentUserKeyPath.
* [win32/console.c]
Added stub for ScrollConsoleScreenBuffer.
Mon Jul 6 16:41:47 1998 Per Lindstrm <pelinstr@algonet.se>
* [include/windows.h] [relay32/kernel.spec] [win32/newfns.c]
Added stubs for SleepEx and TerminateProcess.
* [rc/README]
Corrected a grammatical error.
Mon Jul 3 12:00:00 1998 Juergen Schmied <juergen.schmied@metronet.de>
* [misc/shellord.c]
Put some TRACE in.
* [memory/string.c]
Deleted unused variable in lstrcmpi32A.
* [include/windows.h][memory/string.c]
Added functions WideCharToLocal32 LocalToWideChar32 for
OLE-strings
* [include/shlobj.h][include/winerror.h][misc/shell.c]
[ole/folders.c]
Added definition of internal class pidlmgr.
Changed definitions of EnumIDList, IShellFolder.
Added some OLE error constants.
Implemented EnumIDList, IShellFolder, IClassFactory,
PidlMgr, SHELL32_DllGetClassObject, SHGetDesktopFolder,
SHGetSpecialFolderLocation (half), SHGetPathFromIDList
(!!This stuff is not finished yet!!)
* [include/windows.h][misc/network][reley32/mpr.spec]
Added stubs for WNetConnectionDialog32[A|W|API].
Added struct LPCONNECTDLGSTRUCT32[A|W] and some constants.
Added some SetLastError(WN_NO_NETWORK) to the stubs.
Fixed bufferhandling in WNetCancelConnection
Added stub for MultinetGetErrorText[A|W]
* [ole/ole2nls.c]
Rewrote GetTimeFormat32A.
Fri Jul 3 10:27:30 1998 Michael Poole <poole+@andrew.cmu.edu>
* [graphics/ddraw.c] [tsx11/X11_calls]
Implement IDirectDrawPalette_GetEntries.
Use CopyColormapAndFree to avoid erasing previously-set
palette entries.
* [graphics/ddraw.c] [include/ddraw.h]
[tools/make_X11wrappers] [tsx11/X11_calls]
Provide a preliminary, not-yet-working framework for doing
DirectDraw via Xlib or XShm as well as DGA.
Tue Jun 30 00:16:09 1998 Marcel Baur <mbaur@g26.ethz.ch>
* [ole/nls/*.nls]
Added remaining 22 locales (including arabic locales).
1998-07-12 21:29:36 +02:00
|
|
|
{
|
2001-10-21 17:02:34 +02:00
|
|
|
DWORD ret=0;
|
|
|
|
SIZE size;
|
2002-04-03 22:41:14 +02:00
|
|
|
UINT i, nSet;
|
2001-10-21 17:02:34 +02:00
|
|
|
|
2006-10-12 22:56:56 +02:00
|
|
|
TRACE("%s, %d, %d, 0x%08x\n",
|
2002-04-03 22:41:14 +02:00
|
|
|
debugstr_wn(lpString, uCount), uCount, nMaxExtent, dwFlags);
|
2001-10-21 17:02:34 +02:00
|
|
|
|
2006-10-12 22:56:56 +02:00
|
|
|
TRACE("lStructSize=%d, lpOutString=%p, lpOrder=%p, lpDx=%p, lpCaretPos=%p\n"
|
|
|
|
"lpClass=%p, lpGlyphs=%p, nGlyphs=%u, nMaxFit=%d\n",
|
2012-12-15 19:55:12 +01:00
|
|
|
lpResults->lStructSize, lpResults->lpOutString, lpResults->lpOrder,
|
|
|
|
lpResults->lpDx, lpResults->lpCaretPos, lpResults->lpClass,
|
|
|
|
lpResults->lpGlyphs, lpResults->nGlyphs, lpResults->nMaxFit);
|
|
|
|
|
|
|
|
if(dwFlags&(~GCP_REORDER))
|
|
|
|
FIXME("flags 0x%08x ignored\n", dwFlags);
|
|
|
|
if(lpResults->lpClass)
|
|
|
|
FIXME("classes not implemented\n");
|
2003-11-18 01:03:27 +01:00
|
|
|
if (lpResults->lpCaretPos && (dwFlags & GCP_REORDER))
|
|
|
|
FIXME("Caret positions for complex scripts not implemented\n");
|
2001-10-21 17:02:34 +02:00
|
|
|
|
2012-12-15 19:55:12 +01:00
|
|
|
nSet = (UINT)uCount;
|
|
|
|
if(nSet > lpResults->nGlyphs)
|
|
|
|
nSet = lpResults->nGlyphs;
|
2002-04-03 22:41:14 +02:00
|
|
|
|
2012-12-15 19:55:12 +01:00
|
|
|
/* return number of initialized fields */
|
|
|
|
lpResults->nGlyphs = nSet;
|
2002-04-03 22:41:14 +02:00
|
|
|
|
2012-12-15 19:55:12 +01:00
|
|
|
if((dwFlags&GCP_REORDER)==0 )
|
|
|
|
{
|
|
|
|
/* Treat the case where no special handling was requested in a fastpath way */
|
|
|
|
/* copy will do if the GCP_REORDER flag is not set */
|
|
|
|
if(lpResults->lpOutString)
|
|
|
|
memcpy( lpResults->lpOutString, lpString, nSet * sizeof(WCHAR));
|
2001-10-21 17:02:34 +02:00
|
|
|
|
2012-12-15 19:55:12 +01:00
|
|
|
if(lpResults->lpOrder)
|
|
|
|
{
|
|
|
|
for(i = 0; i < nSet; i++)
|
|
|
|
lpResults->lpOrder[i] = i;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
BIDI_Reorder(NULL, lpString, uCount, dwFlags, WINE_GCPW_FORCE_LTR, lpResults->lpOutString,
|
|
|
|
nSet, lpResults->lpOrder, NULL, NULL );
|
|
|
|
}
|
|
|
|
|
|
|
|
/* FIXME: Will use the placement chars */
|
|
|
|
if (lpResults->lpDx)
|
|
|
|
{
|
|
|
|
int c;
|
|
|
|
for (i = 0; i < nSet; i++)
|
|
|
|
{
|
|
|
|
if (GetCharWidth32W(hdc, lpString[i], lpString[i], &c))
|
|
|
|
lpResults->lpDx[i]= c;
|
|
|
|
}
|
|
|
|
}
|
2001-10-21 17:02:34 +02:00
|
|
|
|
2003-11-18 01:03:27 +01:00
|
|
|
if (lpResults->lpCaretPos && !(dwFlags & GCP_REORDER))
|
|
|
|
{
|
|
|
|
int pos = 0;
|
2012-12-15 19:55:12 +01:00
|
|
|
|
2003-11-18 01:03:27 +01:00
|
|
|
lpResults->lpCaretPos[0] = 0;
|
|
|
|
for (i = 1; i < nSet; i++)
|
|
|
|
if (GetTextExtentPoint32W(hdc, &(lpString[i - 1]), 1, &size))
|
|
|
|
lpResults->lpCaretPos[i] = (pos += size.cx);
|
|
|
|
}
|
2012-12-15 19:55:12 +01:00
|
|
|
|
2002-04-03 22:41:14 +02:00
|
|
|
if(lpResults->lpGlyphs)
|
2012-12-15 19:55:12 +01:00
|
|
|
GetGlyphIndicesW(hdc, lpString, nSet, lpResults->lpGlyphs, 0);
|
2002-04-03 22:41:14 +02:00
|
|
|
|
2001-10-21 17:02:34 +02:00
|
|
|
if (GetTextExtentPoint32W(hdc, lpString, uCount, &size))
|
2012-12-15 19:55:12 +01:00
|
|
|
ret = MAKELONG(size.cx, size.cy);
|
2001-10-21 17:02:34 +02:00
|
|
|
|
|
|
|
return ret;
|
Release 980712
Sun Jul 12 16:23:36 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
* [server/*] [scheduler/client.c] (new files)
[scheduler/sysdeps.c] [scheduler/thread.c] [scheduler/process.c]
Beginnings of client/server communication for inter-process
synchronisation.
Sat Jul 11 19:45:45 1998 Ulrich Weigand <weigand@informatik.uni-erlangen.de>
* [include/bitmap.h] [objects/bitmap.c] [objects/dib.c]
[objects/oembitmap.c]
Speed up DIB section handling by using pre-allocated colormap and
XImage. Moved DIB section data out of general BITMAPOBJ structure.
Bugfix: GetDIBits32 would overwrite one byte beyond bitmap data.
* [if1632/shell.spec] [if1632/kernel.spec] [win32/kernel32.c]
More verbose error message if ThunkConnect fails.
Implemented KERNEL_475.
* [files/profile.c] [ole/ole2nls.c]
Minor bugfixes.
* [if1632/builtin.c] [if1632/kernel.spec] [include/task.h]
[loader/ne/module.c] [loader/task.c]
Implemented KERNEL.THHOOK.
* [if1632/wprocs.spec] [include/process.h] [msdos/dpmi.c] [msdos/vxd.c]
Implemented Win32s VxD services (W32S.386).
Sat Jul 11 17:52:23 1998 Huw D M Davies <daviesh@abacus.physics.ox.ac.uk>
* [graphics/x11drv/xfont.c] [graphics/x11drv/text.c]
[include/x11font.h]
Improve handling of rotated X11 fonts. Metrics/extents should now be
correct. ExtTextOut should behave better (still doesn't handle lpDx).
* [graphics/painting.c]
DrawFocusRect32: Don't do anything if width or height are zero.
Sat Jul 11 15:21:35 1998 Andreas Mohr <100.30936@germany.net>
* [files/profile.c] [include/windows.h]
The length arguments of *Profile*() need to be treated
as UINTxx instead of INTxx.
* [graphics/env.c] [graphics/win16drv/init.c] [include/print.h]
[misc/printdrv.c]
Many printer driver fixes/changes (many thanks go to Huw !).
Most printers should work again ;)
* [memory/atom.c]
Fixed ATOM_AddAtom to store atoms exactly like Windows.
* [*/*]
Fixed misc compiler warnings.
Fri Jul 10 15:58:36 1998 Marcus Meissner <marcus@jet.franken.de>
* [files/drive.c]
Fixed GetDriveType16 to return DRIVE_REMOTE again.
* [loader/pe_image.c][loader/module.c]
Look for modules that have the same modulename or the same
filename (they sometimes differ).
Fixed up fixup_imports, removed one of the loops.
* [windows/winpos.c]
Added some NULL ptr checks. Needs more.
* [graphics/ddraw.c]
Some stubs added.
* [if1632/snoop.c]
Updated, made WINELIB compatible.
Fri Jul 10 04:39:56 1998 Douglas Ridgway <ridgway@winehq.com>
* [objects/enhmetafile.c] [relay32/gdi32.spec]
Small tweaks for documentation system.
Thu Jul 9 22:00:18 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
* [controls/commctrl.c][include/commctrl.h][relay32/comctl32.spec]
Fixed GetEffectiveClientRect, CreateToolbarEx and CreateMappedBitmap.
Added stub for ShowHideMenuCtl. Added some documentation.
* [documentation/common_controls]
Added and updated some information.
* [controls/toolbar.c][include/toolbar.h]
Added string support.
* [misc/shell.c][misc/shellord.c][relay32/shell.spec]
Changed names of undocumented functions to their real names and
fixed the export table.
* [controls/imagelist.c][relay32/comctl32.spec]
Added stub for ImageList_SetFilter.
Fixed some minor bugs and typos.
* [objects/font.c][include/windows.h][relay32/gdi32.spec]
Added stubs for GetCharacterPlacement32[A/W].
* [objects/region.c][relay32/gdi32.spec]
Added stub for UNDOCUMENTED GetRandomRgn.
* [controls/commctrl.c][controls/*.c][include/*.h]
Added dummy listview, pager, rebar, tooltips, trackbar and
treeview control. This keeps some programs from complaining.
Thu Jul 9 11:23:58 1998 Rein Klazes <rklazes@casema.net>
* [graphics/painting.c] [graphics/*/init.c]
[graphics/x11drv/graphics.c] [relay32/gdi32.spec]
[if1632/gdi.spec] [include/gdi.h] [include/x11drv.h]
Implemented drawing bezier curves: PolyBezier16/32 and
PolyBezierTo16/32.
* [graphics/x11drv/graphics.c]
Improved accuracy of several graphic routines, especially the
drawing of pie's.
* [include/windows.h] [misc/spy.c]
Added 25 window messages related to programs based on MFC and/or OLE.
Wed Jul 8 22:00:00 1998 James Juran <jrj120@psu.edu>
* [documentation/wine.man]
Updated manpage.
* [wine.ini]
Added section for Win95Look=true (commented out by default).
Wed Jul 8 06:23:19 1998 Matthew Becker <mbecker@glasscity.net>
* [misc/registry.c]
Fixed a crash in RegEnumValue32A when the dwType parameter is
NULL.
* [programs/regtest/regtest.c]
Improved the printing of errors.
* [misc/ntdll.c]
Added stub for RtlFormatCurrentUserKeyPath.
* [win32/console.c]
Added stub for ScrollConsoleScreenBuffer.
Mon Jul 6 16:41:47 1998 Per Lindstrm <pelinstr@algonet.se>
* [include/windows.h] [relay32/kernel.spec] [win32/newfns.c]
Added stubs for SleepEx and TerminateProcess.
* [rc/README]
Corrected a grammatical error.
Mon Jul 3 12:00:00 1998 Juergen Schmied <juergen.schmied@metronet.de>
* [misc/shellord.c]
Put some TRACE in.
* [memory/string.c]
Deleted unused variable in lstrcmpi32A.
* [include/windows.h][memory/string.c]
Added functions WideCharToLocal32 LocalToWideChar32 for
OLE-strings
* [include/shlobj.h][include/winerror.h][misc/shell.c]
[ole/folders.c]
Added definition of internal class pidlmgr.
Changed definitions of EnumIDList, IShellFolder.
Added some OLE error constants.
Implemented EnumIDList, IShellFolder, IClassFactory,
PidlMgr, SHELL32_DllGetClassObject, SHGetDesktopFolder,
SHGetSpecialFolderLocation (half), SHGetPathFromIDList
(!!This stuff is not finished yet!!)
* [include/windows.h][misc/network][reley32/mpr.spec]
Added stubs for WNetConnectionDialog32[A|W|API].
Added struct LPCONNECTDLGSTRUCT32[A|W] and some constants.
Added some SetLastError(WN_NO_NETWORK) to the stubs.
Fixed bufferhandling in WNetCancelConnection
Added stub for MultinetGetErrorText[A|W]
* [ole/ole2nls.c]
Rewrote GetTimeFormat32A.
Fri Jul 3 10:27:30 1998 Michael Poole <poole+@andrew.cmu.edu>
* [graphics/ddraw.c] [tsx11/X11_calls]
Implement IDirectDrawPalette_GetEntries.
Use CopyColormapAndFree to avoid erasing previously-set
palette entries.
* [graphics/ddraw.c] [include/ddraw.h]
[tools/make_X11wrappers] [tsx11/X11_calls]
Provide a preliminary, not-yet-working framework for doing
DirectDraw via Xlib or XShm as well as DGA.
Tue Jun 30 00:16:09 1998 Marcel Baur <mbaur@g26.ethz.ch>
* [ole/nls/*.nls]
Added remaining 22 locales (including arabic locales).
1998-07-12 21:29:36 +02:00
|
|
|
}
|
1998-12-15 16:38:36 +01:00
|
|
|
|
|
|
|
/*************************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* GetCharABCWidthsFloatA [GDI32.@]
|
2006-01-16 20:38:17 +01:00
|
|
|
*
|
|
|
|
* See GetCharABCWidthsFloatW.
|
1998-12-15 16:38:36 +01:00
|
|
|
*/
|
2006-01-16 20:38:17 +01:00
|
|
|
BOOL WINAPI GetCharABCWidthsFloatA( HDC hdc, UINT first, UINT last, LPABCFLOAT abcf )
|
1998-12-15 16:38:36 +01:00
|
|
|
{
|
2011-01-16 15:00:29 +01:00
|
|
|
INT i, wlen;
|
2006-01-16 20:38:17 +01:00
|
|
|
LPSTR str;
|
|
|
|
LPWSTR wstr;
|
|
|
|
BOOL ret = TRUE;
|
|
|
|
|
2011-01-26 17:09:03 +01:00
|
|
|
str = FONT_GetCharsByRangeA(hdc, first, last, &i);
|
2011-01-16 15:00:29 +01:00
|
|
|
if (str == NULL)
|
|
|
|
return FALSE;
|
2006-01-16 20:38:17 +01:00
|
|
|
|
2011-01-16 15:00:29 +01:00
|
|
|
wstr = FONT_mbtowc( hdc, str, i, &wlen, NULL );
|
2006-01-16 20:38:17 +01:00
|
|
|
|
|
|
|
for (i = 0; i < wlen; i++)
|
|
|
|
{
|
|
|
|
if (!GetCharABCWidthsFloatW( hdc, wstr[i], wstr[i], abcf ))
|
|
|
|
{
|
|
|
|
ret = FALSE;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
abcf++;
|
|
|
|
}
|
|
|
|
|
|
|
|
HeapFree( GetProcessHeap(), 0, str );
|
|
|
|
HeapFree( GetProcessHeap(), 0, wstr );
|
|
|
|
|
|
|
|
return ret;
|
1998-12-15 16:38:36 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* GetCharABCWidthsFloatW [GDI32.@]
|
2006-01-16 20:38:17 +01:00
|
|
|
*
|
|
|
|
* Retrieves widths of a range of characters.
|
|
|
|
*
|
|
|
|
* PARAMS
|
|
|
|
* hdc [I] Handle to device context.
|
|
|
|
* first [I] First character in range to query.
|
|
|
|
* last [I] Last character in range to query.
|
|
|
|
* abcf [O] Array of LPABCFLOAT structures.
|
|
|
|
*
|
|
|
|
* RETURNS
|
|
|
|
* Success: TRUE
|
|
|
|
* Failure: FALSE
|
1998-12-15 16:38:36 +01:00
|
|
|
*/
|
2006-01-16 20:38:17 +01:00
|
|
|
BOOL WINAPI GetCharABCWidthsFloatW( HDC hdc, UINT first, UINT last, LPABCFLOAT abcf )
|
1998-12-15 16:38:36 +01:00
|
|
|
{
|
2009-12-11 11:38:24 +01:00
|
|
|
UINT i;
|
2011-10-19 22:07:32 +02:00
|
|
|
ABC *abc;
|
|
|
|
PHYSDEV dev;
|
2009-12-11 11:38:24 +01:00
|
|
|
BOOL ret = FALSE;
|
|
|
|
DC *dc = get_dc_ptr( hdc );
|
|
|
|
|
|
|
|
TRACE("%p, %d, %d, %p\n", hdc, first, last, abcf);
|
|
|
|
|
|
|
|
if (!dc) return FALSE;
|
2006-01-16 20:38:17 +01:00
|
|
|
|
2011-10-19 22:07:32 +02:00
|
|
|
if (!abcf) goto done;
|
|
|
|
if (!(abc = HeapAlloc( GetProcessHeap(), 0, (last - first + 1) * sizeof(*abc) ))) goto done;
|
2006-01-16 20:38:17 +01:00
|
|
|
|
2011-10-19 22:07:32 +02:00
|
|
|
dev = GET_DC_PHYSDEV( dc, pGetCharABCWidths );
|
|
|
|
ret = dev->funcs->pGetCharABCWidths( dev, first, last, abc );
|
2006-05-24 12:29:06 +02:00
|
|
|
if (ret)
|
2006-01-16 20:38:17 +01:00
|
|
|
{
|
2009-12-11 11:38:24 +01:00
|
|
|
/* convert device units to logical */
|
2013-09-12 20:01:56 +02:00
|
|
|
FLOAT scale = fabs( dc->xformVport2World.eM11 );
|
2009-12-11 11:38:24 +01:00
|
|
|
for (i = first; i <= last; i++, abcf++)
|
2006-01-16 20:38:17 +01:00
|
|
|
{
|
2013-09-12 20:01:56 +02:00
|
|
|
abcf->abcfA = abc[i - first].abcA * scale;
|
|
|
|
abcf->abcfB = abc[i - first].abcB * scale;
|
|
|
|
abcf->abcfC = abc[i - first].abcC * scale;
|
2006-01-16 20:38:17 +01:00
|
|
|
}
|
|
|
|
}
|
2011-10-19 22:07:32 +02:00
|
|
|
HeapFree( GetProcessHeap(), 0, abc );
|
2009-12-11 11:38:24 +01:00
|
|
|
|
2011-10-19 22:07:32 +02:00
|
|
|
done:
|
2009-12-11 11:38:24 +01:00
|
|
|
release_dc_ptr( dc );
|
2006-01-16 20:38:17 +01:00
|
|
|
return ret;
|
1998-12-15 16:38:36 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* GetCharWidthFloatA [GDI32.@]
|
1998-12-15 16:38:36 +01:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
BOOL WINAPI GetCharWidthFloatA(HDC hdc, UINT iFirstChar,
|
|
|
|
UINT iLastChar, PFLOAT pxBuffer)
|
1998-12-15 16:38:36 +01:00
|
|
|
{
|
2007-01-02 09:25:07 +01:00
|
|
|
FIXME("%p, %u, %u, %p: stub!\n", hdc, iFirstChar, iLastChar, pxBuffer);
|
2014-01-28 00:04:18 +01:00
|
|
|
return FALSE;
|
1998-12-15 16:38:36 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* GetCharWidthFloatW [GDI32.@]
|
1998-12-15 16:38:36 +01:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
BOOL WINAPI GetCharWidthFloatW(HDC hdc, UINT iFirstChar,
|
|
|
|
UINT iLastChar, PFLOAT pxBuffer)
|
1998-12-15 16:38:36 +01:00
|
|
|
{
|
2007-01-02 09:25:07 +01:00
|
|
|
FIXME("%p, %u, %u, %p: stub!\n", hdc, iFirstChar, iLastChar, pxBuffer);
|
2014-01-28 00:04:18 +01:00
|
|
|
return FALSE;
|
1998-12-15 16:38:36 +01:00
|
|
|
}
|
2002-06-01 01:06:46 +02:00
|
|
|
|
2000-03-19 22:20:54 +01:00
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* *
|
|
|
|
* Font Resource API *
|
|
|
|
* *
|
|
|
|
***********************************************************************/
|
|
|
|
|
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* AddFontResourceA (GDI32.@)
|
2000-03-19 22:20:54 +01:00
|
|
|
*/
|
|
|
|
INT WINAPI AddFontResourceA( LPCSTR str )
|
|
|
|
{
|
2002-06-22 03:19:29 +02:00
|
|
|
return AddFontResourceExA( str, 0, NULL);
|
2000-03-19 22:20:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* AddFontResourceW (GDI32.@)
|
2000-03-19 22:20:54 +01:00
|
|
|
*/
|
|
|
|
INT WINAPI AddFontResourceW( LPCWSTR str )
|
|
|
|
{
|
2002-06-22 03:19:29 +02:00
|
|
|
return AddFontResourceExW(str, 0, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* AddFontResourceExA (GDI32.@)
|
|
|
|
*/
|
|
|
|
INT WINAPI AddFontResourceExA( LPCSTR str, DWORD fl, PVOID pdv )
|
|
|
|
{
|
|
|
|
DWORD len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
|
|
|
|
LPWSTR strW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
|
|
|
|
INT ret;
|
|
|
|
|
|
|
|
MultiByteToWideChar(CP_ACP, 0, str, -1, strW, len);
|
|
|
|
ret = AddFontResourceExW(strW, fl, pdv);
|
|
|
|
HeapFree(GetProcessHeap(), 0, strW);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2007-09-07 19:11:09 +02:00
|
|
|
static BOOL CALLBACK load_enumed_resource(HMODULE hModule, LPCWSTR type, LPWSTR name, LONG_PTR lParam)
|
|
|
|
{
|
|
|
|
HRSRC rsrc = FindResourceW(hModule, name, type);
|
|
|
|
HGLOBAL hMem = LoadResource(hModule, rsrc);
|
|
|
|
LPVOID *pMem = LockResource(hMem);
|
|
|
|
int *num_total = (int *)lParam;
|
|
|
|
DWORD num_in_res;
|
|
|
|
|
|
|
|
TRACE("Found resource %s - trying to load\n", wine_dbgstr_w(type));
|
|
|
|
if (!AddFontMemResourceEx(pMem, SizeofResource(hModule, rsrc), NULL, &num_in_res))
|
|
|
|
{
|
|
|
|
ERR("Failed to load PE font resource mod=%p ptr=%p\n", hModule, hMem);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
*num_total += num_in_res;
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2012-03-30 13:38:04 +02:00
|
|
|
static void *map_file( const WCHAR *filename, LARGE_INTEGER *size )
|
|
|
|
{
|
|
|
|
HANDLE file, mapping;
|
|
|
|
void *ptr;
|
|
|
|
|
|
|
|
file = CreateFileW( filename, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
|
|
|
|
if (file == INVALID_HANDLE_VALUE) return NULL;
|
|
|
|
|
2012-04-02 07:40:50 +02:00
|
|
|
if (!GetFileSizeEx( file, size ) || size->u.HighPart)
|
|
|
|
{
|
|
|
|
CloseHandle( file );
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2012-03-30 13:38:04 +02:00
|
|
|
mapping = CreateFileMappingW( file, NULL, PAGE_READONLY, 0, 0, NULL );
|
|
|
|
CloseHandle( file );
|
2012-04-02 07:40:50 +02:00
|
|
|
if (!mapping) return NULL;
|
2012-03-30 13:38:04 +02:00
|
|
|
|
|
|
|
ptr = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, 0 );
|
|
|
|
CloseHandle( mapping );
|
|
|
|
|
|
|
|
return ptr;
|
|
|
|
}
|
|
|
|
|
2013-01-15 12:52:04 +01:00
|
|
|
static void *find_resource( BYTE *ptr, WORD type, DWORD rsrc_off, DWORD size, DWORD *len )
|
|
|
|
{
|
|
|
|
WORD align, type_id, count;
|
|
|
|
DWORD res_off;
|
|
|
|
|
|
|
|
if (size < rsrc_off + 10) return NULL;
|
|
|
|
align = *(WORD *)(ptr + rsrc_off);
|
|
|
|
rsrc_off += 2;
|
|
|
|
type_id = *(WORD *)(ptr + rsrc_off);
|
|
|
|
while (type_id && type_id != type)
|
|
|
|
{
|
|
|
|
count = *(WORD *)(ptr + rsrc_off + 2);
|
|
|
|
rsrc_off += 8 + count * 12;
|
|
|
|
if (size < rsrc_off + 8) return NULL;
|
|
|
|
type_id = *(WORD *)(ptr + rsrc_off);
|
|
|
|
}
|
|
|
|
if (!type_id) return NULL;
|
|
|
|
count = *(WORD *)(ptr + rsrc_off + 2);
|
|
|
|
if (size < rsrc_off + 8 + count * 12) return NULL;
|
|
|
|
res_off = *(WORD *)(ptr + rsrc_off + 8) << align;
|
|
|
|
*len = *(WORD *)(ptr + rsrc_off + 10) << align;
|
|
|
|
if (size < res_off + *len) return NULL;
|
|
|
|
return ptr + res_off;
|
|
|
|
}
|
|
|
|
|
|
|
|
static WCHAR *get_scalable_filename( const WCHAR *res, BOOL *hidden )
|
2012-03-30 13:38:04 +02:00
|
|
|
{
|
|
|
|
LARGE_INTEGER size;
|
|
|
|
BYTE *ptr = map_file( res, &size );
|
|
|
|
const IMAGE_DOS_HEADER *dos;
|
|
|
|
const IMAGE_OS2_HEADER *ne;
|
2013-01-15 12:52:04 +01:00
|
|
|
WORD *fontdir;
|
|
|
|
char *data;
|
2012-03-30 13:38:04 +02:00
|
|
|
WCHAR *name = NULL;
|
2013-01-15 12:52:04 +01:00
|
|
|
DWORD len;
|
2012-03-30 13:38:04 +02:00
|
|
|
|
|
|
|
if (!ptr) return NULL;
|
|
|
|
|
|
|
|
if (size.u.LowPart < sizeof( *dos )) goto fail;
|
|
|
|
dos = (const IMAGE_DOS_HEADER *)ptr;
|
|
|
|
if (dos->e_magic != IMAGE_DOS_SIGNATURE) goto fail;
|
|
|
|
if (size.u.LowPart < dos->e_lfanew + sizeof( *ne )) goto fail;
|
|
|
|
ne = (const IMAGE_OS2_HEADER *)(ptr + dos->e_lfanew);
|
|
|
|
|
2013-01-15 12:52:04 +01:00
|
|
|
fontdir = find_resource( ptr, 0x8007, dos->e_lfanew + ne->ne_rsrctab, size.u.LowPart, &len );
|
|
|
|
if (!fontdir) goto fail;
|
|
|
|
*hidden = (fontdir[35] & 0x80) != 0; /* fontdir->dfType */
|
2012-03-30 13:38:04 +02:00
|
|
|
|
2013-01-15 12:52:04 +01:00
|
|
|
data = find_resource( ptr, 0x80cc, dos->e_lfanew + ne->ne_rsrctab, size.u.LowPart, &len );
|
|
|
|
if (!data) goto fail;
|
|
|
|
if (!memchr( data, 0, len )) goto fail;
|
2012-03-30 13:38:04 +02:00
|
|
|
|
2013-01-15 12:52:04 +01:00
|
|
|
len = MultiByteToWideChar( CP_ACP, 0, data, -1, NULL, 0 );
|
2012-03-30 13:38:04 +02:00
|
|
|
name = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) );
|
2013-01-15 12:52:04 +01:00
|
|
|
if (name) MultiByteToWideChar( CP_ACP, 0, data, -1, name, len );
|
2012-03-30 13:38:04 +02:00
|
|
|
|
|
|
|
fail:
|
|
|
|
UnmapViewOfFile( ptr );
|
|
|
|
return name;
|
|
|
|
}
|
|
|
|
|
2002-06-22 03:19:29 +02:00
|
|
|
/***********************************************************************
|
|
|
|
* AddFontResourceExW (GDI32.@)
|
|
|
|
*/
|
|
|
|
INT WINAPI AddFontResourceExW( LPCWSTR str, DWORD fl, PVOID pdv )
|
|
|
|
{
|
2007-09-07 19:11:09 +02:00
|
|
|
int ret = WineEngAddFontResourceEx(str, fl, pdv);
|
2012-03-30 13:38:04 +02:00
|
|
|
WCHAR *filename;
|
2013-01-15 12:52:04 +01:00
|
|
|
BOOL hidden;
|
2012-03-30 13:38:04 +02:00
|
|
|
|
2007-09-07 19:11:09 +02:00
|
|
|
if (ret == 0)
|
|
|
|
{
|
2007-09-27 18:57:51 +02:00
|
|
|
/* FreeType <2.3.5 has problems reading resources wrapped in PE files. */
|
2007-09-07 19:11:09 +02:00
|
|
|
HMODULE hModule = LoadLibraryExW(str, NULL, LOAD_LIBRARY_AS_DATAFILE);
|
|
|
|
if (hModule != NULL)
|
|
|
|
{
|
|
|
|
int num_resources = 0;
|
|
|
|
LPWSTR rt_font = (LPWSTR)((ULONG_PTR)8); /* we don't want to include winuser.h */
|
|
|
|
|
2012-06-27 22:47:54 +02:00
|
|
|
TRACE("WineEngAddFontResourceEx failed on PE file %s - trying to load resources manually\n",
|
2007-09-07 19:11:09 +02:00
|
|
|
wine_dbgstr_w(str));
|
|
|
|
if (EnumResourceNamesW(hModule, rt_font, load_enumed_resource, (LONG_PTR)&num_resources))
|
|
|
|
ret = num_resources;
|
|
|
|
FreeLibrary(hModule);
|
|
|
|
}
|
2013-01-15 12:52:04 +01:00
|
|
|
else if ((filename = get_scalable_filename( str, &hidden )) != NULL)
|
2012-03-30 13:38:04 +02:00
|
|
|
{
|
2013-01-15 12:52:04 +01:00
|
|
|
if (hidden) fl |= FR_PRIVATE | FR_NOT_ENUM;
|
2012-03-30 13:38:04 +02:00
|
|
|
ret = WineEngAddFontResourceEx( filename, fl, pdv );
|
|
|
|
HeapFree( GetProcessHeap(), 0, filename );
|
|
|
|
}
|
2007-09-07 19:11:09 +02:00
|
|
|
}
|
|
|
|
return ret;
|
2000-03-19 22:20:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* RemoveFontResourceA (GDI32.@)
|
2000-03-19 22:20:54 +01:00
|
|
|
*/
|
|
|
|
BOOL WINAPI RemoveFontResourceA( LPCSTR str )
|
|
|
|
{
|
2002-06-22 03:19:29 +02:00
|
|
|
return RemoveFontResourceExA(str, 0, 0);
|
2000-03-19 22:20:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
2001-02-14 23:56:38 +01:00
|
|
|
* RemoveFontResourceW (GDI32.@)
|
2000-03-19 22:20:54 +01:00
|
|
|
*/
|
|
|
|
BOOL WINAPI RemoveFontResourceW( LPCWSTR str )
|
|
|
|
{
|
2002-06-22 03:19:29 +02:00
|
|
|
return RemoveFontResourceExW(str, 0, 0);
|
|
|
|
}
|
|
|
|
|
2005-12-06 11:32:41 +01:00
|
|
|
/***********************************************************************
|
|
|
|
* AddFontMemResourceEx (GDI32.@)
|
|
|
|
*/
|
|
|
|
HANDLE WINAPI AddFontMemResourceEx( PVOID pbFont, DWORD cbFont, PVOID pdv, DWORD *pcFonts)
|
|
|
|
{
|
2010-08-02 08:35:04 +02:00
|
|
|
HANDLE ret;
|
|
|
|
DWORD num_fonts;
|
|
|
|
|
2010-08-03 14:07:59 +02:00
|
|
|
if (!pbFont || !cbFont || !pcFonts)
|
|
|
|
{
|
|
|
|
SetLastError(ERROR_INVALID_PARAMETER);
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2010-08-02 08:35:04 +02:00
|
|
|
ret = WineEngAddFontMemResourceEx(pbFont, cbFont, pdv, &num_fonts);
|
|
|
|
if (ret)
|
|
|
|
{
|
|
|
|
__TRY
|
|
|
|
{
|
|
|
|
*pcFonts = num_fonts;
|
|
|
|
}
|
|
|
|
__EXCEPT_PAGE_FAULT
|
|
|
|
{
|
|
|
|
WARN("page fault while writing to *pcFonts (%p)\n", pcFonts);
|
|
|
|
RemoveFontMemResourceEx(ret);
|
|
|
|
ret = 0;
|
|
|
|
}
|
|
|
|
__ENDTRY
|
|
|
|
}
|
|
|
|
return ret;
|
2005-12-06 11:32:41 +01:00
|
|
|
}
|
|
|
|
|
2008-01-01 16:23:39 +01:00
|
|
|
/***********************************************************************
|
|
|
|
* RemoveFontMemResourceEx (GDI32.@)
|
|
|
|
*/
|
|
|
|
BOOL WINAPI RemoveFontMemResourceEx( HANDLE fh )
|
|
|
|
{
|
|
|
|
FIXME("(%p) stub\n", fh);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2002-06-22 03:19:29 +02:00
|
|
|
/***********************************************************************
|
|
|
|
* RemoveFontResourceExA (GDI32.@)
|
|
|
|
*/
|
|
|
|
BOOL WINAPI RemoveFontResourceExA( LPCSTR str, DWORD fl, PVOID pdv )
|
|
|
|
{
|
|
|
|
DWORD len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
|
|
|
|
LPWSTR strW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
|
|
|
|
INT ret;
|
|
|
|
|
|
|
|
MultiByteToWideChar(CP_ACP, 0, str, -1, strW, len);
|
|
|
|
ret = RemoveFontResourceExW(strW, fl, pdv);
|
|
|
|
HeapFree(GetProcessHeap(), 0, strW);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* RemoveFontResourceExW (GDI32.@)
|
|
|
|
*/
|
|
|
|
BOOL WINAPI RemoveFontResourceExW( LPCWSTR str, DWORD fl, PVOID pdv )
|
|
|
|
{
|
2013-01-15 12:54:02 +01:00
|
|
|
int ret = WineEngRemoveFontResourceEx( str, fl, pdv );
|
|
|
|
WCHAR *filename;
|
2013-01-15 12:52:04 +01:00
|
|
|
BOOL hidden;
|
2013-01-15 12:54:02 +01:00
|
|
|
|
|
|
|
if (ret == 0)
|
|
|
|
{
|
|
|
|
/* FreeType <2.3.5 has problems reading resources wrapped in PE files. */
|
|
|
|
HMODULE hModule = LoadLibraryExW(str, NULL, LOAD_LIBRARY_AS_DATAFILE);
|
|
|
|
if (hModule != NULL)
|
|
|
|
{
|
|
|
|
WARN("Can't unload resources from PE file %s\n", wine_dbgstr_w(str));
|
|
|
|
FreeLibrary(hModule);
|
|
|
|
}
|
2013-01-15 12:52:04 +01:00
|
|
|
else if ((filename = get_scalable_filename( str, &hidden )) != NULL)
|
2013-01-15 12:54:02 +01:00
|
|
|
{
|
2013-01-15 12:52:04 +01:00
|
|
|
if (hidden) fl |= FR_PRIVATE | FR_NOT_ENUM;
|
2013-01-15 12:54:02 +01:00
|
|
|
ret = WineEngRemoveFontResourceEx( filename, fl, pdv );
|
|
|
|
HeapFree( GetProcessHeap(), 0, filename );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return ret;
|
2000-03-19 22:20:54 +01:00
|
|
|
}
|
2003-06-23 22:51:06 +02:00
|
|
|
|
2013-01-21 22:44:52 +01:00
|
|
|
/***********************************************************************
|
|
|
|
* GetFontResourceInfoW (GDI32.@)
|
|
|
|
*/
|
|
|
|
BOOL WINAPI GetFontResourceInfoW( LPCWSTR str, LPDWORD size, PVOID buffer, DWORD type )
|
|
|
|
{
|
|
|
|
FIXME("%s %p(%d) %p %d\n", debugstr_w(str), size, size ? *size : 0, buffer, type);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2003-06-23 22:51:06 +02:00
|
|
|
/***********************************************************************
|
|
|
|
* GetTextCharset (GDI32.@)
|
|
|
|
*/
|
|
|
|
UINT WINAPI GetTextCharset(HDC hdc)
|
|
|
|
{
|
|
|
|
/* MSDN docs say this is equivalent */
|
|
|
|
return GetTextCharsetInfo(hdc, NULL, 0);
|
|
|
|
}
|
|
|
|
|
2005-07-18 20:05:04 +02:00
|
|
|
/***********************************************************************
|
|
|
|
* GdiGetCharDimensions (GDI32.@)
|
|
|
|
*
|
|
|
|
* Gets the average width of the characters in the English alphabet.
|
|
|
|
*
|
|
|
|
* PARAMS
|
|
|
|
* hdc [I] Handle to the device context to measure on.
|
|
|
|
* lptm [O] Pointer to memory to store the text metrics into.
|
|
|
|
* height [O] On exit, the maximum height of characters in the English alphabet.
|
|
|
|
*
|
|
|
|
* RETURNS
|
|
|
|
* The average width of characters in the English alphabet.
|
|
|
|
*
|
|
|
|
* NOTES
|
|
|
|
* This function is used by the dialog manager to get the size of a dialog
|
|
|
|
* unit. It should also be used by other pieces of code that need to know
|
|
|
|
* the size of a dialog unit in logical units without having access to the
|
|
|
|
* window handle of the dialog.
|
|
|
|
* Windows caches the font metrics from this function, but we don't and
|
|
|
|
* there doesn't appear to be an immediate advantage to do so.
|
|
|
|
*
|
|
|
|
* SEE ALSO
|
|
|
|
* GetTextExtentPointW, GetTextMetricsW, MapDialogRect.
|
|
|
|
*/
|
|
|
|
LONG WINAPI GdiGetCharDimensions(HDC hdc, LPTEXTMETRICW lptm, LONG *height)
|
|
|
|
{
|
|
|
|
SIZE sz;
|
|
|
|
static const WCHAR alphabet[] = {
|
|
|
|
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q',
|
|
|
|
'r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H',
|
|
|
|
'I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',0};
|
|
|
|
|
|
|
|
if(lptm && !GetTextMetricsW(hdc, lptm)) return 0;
|
|
|
|
|
|
|
|
if(!GetTextExtentPointW(hdc, alphabet, 52, &sz)) return 0;
|
|
|
|
|
|
|
|
if (height) *height = sz.cy;
|
|
|
|
return (sz.cx / 26 + 1) / 2;
|
|
|
|
}
|
2005-08-15 11:45:40 +02:00
|
|
|
|
|
|
|
BOOL WINAPI EnableEUDC(BOOL fEnableEUDC)
|
|
|
|
{
|
|
|
|
FIXME("(%d): stub\n", fEnableEUDC);
|
|
|
|
return FALSE;
|
|
|
|
}
|
2006-05-07 01:33:32 +02:00
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetCharWidthI (GDI32.@)
|
2007-01-02 14:18:31 +01:00
|
|
|
*
|
|
|
|
* Retrieve widths of characters.
|
|
|
|
*
|
|
|
|
* PARAMS
|
|
|
|
* hdc [I] Handle to a device context.
|
|
|
|
* first [I] First glyph in range to query.
|
|
|
|
* count [I] Number of glyph indices to query.
|
|
|
|
* glyphs [I] Array of glyphs to query.
|
|
|
|
* buffer [O] Buffer to receive character widths.
|
|
|
|
*
|
|
|
|
* NOTES
|
|
|
|
* Only works with TrueType fonts.
|
|
|
|
*
|
|
|
|
* RETURNS
|
|
|
|
* Success: TRUE
|
|
|
|
* Failure: FALSE
|
2006-05-07 01:33:32 +02:00
|
|
|
*/
|
2007-01-02 14:18:31 +01:00
|
|
|
BOOL WINAPI GetCharWidthI(HDC hdc, UINT first, UINT count, LPWORD glyphs, LPINT buffer)
|
2006-05-07 01:33:32 +02:00
|
|
|
{
|
2007-01-02 14:18:31 +01:00
|
|
|
ABC *abc;
|
|
|
|
unsigned int i;
|
|
|
|
|
|
|
|
TRACE("(%p, %d, %d, %p, %p)\n", hdc, first, count, glyphs, buffer);
|
|
|
|
|
|
|
|
if (!(abc = HeapAlloc(GetProcessHeap(), 0, count * sizeof(ABC))))
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
if (!GetCharABCWidthsI(hdc, first, count, glyphs, abc))
|
|
|
|
{
|
|
|
|
HeapFree(GetProcessHeap(), 0, abc);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
for (i = 0; i < count; i++)
|
2017-04-12 23:47:39 +02:00
|
|
|
buffer[i] = abc[i].abcA + abc[i].abcB + abc[i].abcC;
|
2007-01-02 14:18:31 +01:00
|
|
|
|
|
|
|
HeapFree(GetProcessHeap(), 0, abc);
|
|
|
|
return TRUE;
|
2006-05-07 01:33:32 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetFontUnicodeRanges (GDI32.@)
|
2007-03-01 20:30:12 +01:00
|
|
|
*
|
|
|
|
* Retrieve a list of supported Unicode characters in a font.
|
|
|
|
*
|
|
|
|
* PARAMS
|
|
|
|
* hdc [I] Handle to a device context.
|
|
|
|
* lpgs [O] GLYPHSET structure specifying supported character ranges.
|
|
|
|
*
|
|
|
|
* RETURNS
|
|
|
|
* Success: Number of bytes written to the buffer pointed to by lpgs.
|
|
|
|
* Failure: 0
|
|
|
|
*
|
2006-05-07 01:33:32 +02:00
|
|
|
*/
|
|
|
|
DWORD WINAPI GetFontUnicodeRanges(HDC hdc, LPGLYPHSET lpgs)
|
|
|
|
{
|
2011-10-20 16:26:26 +02:00
|
|
|
DWORD ret;
|
|
|
|
PHYSDEV dev;
|
2008-02-05 21:16:27 +01:00
|
|
|
DC *dc = get_dc_ptr(hdc);
|
2007-09-26 20:17:13 +02:00
|
|
|
|
|
|
|
TRACE("(%p, %p)\n", hdc, lpgs);
|
|
|
|
|
|
|
|
if (!dc) return 0;
|
|
|
|
|
2011-10-20 16:26:26 +02:00
|
|
|
dev = GET_DC_PHYSDEV( dc, pGetFontUnicodeRanges );
|
|
|
|
ret = dev->funcs->pGetFontUnicodeRanges( dev, lpgs );
|
2008-02-05 21:16:27 +01:00
|
|
|
release_dc_ptr(dc);
|
2007-09-26 20:17:13 +02:00
|
|
|
return ret;
|
2006-05-07 01:33:32 +02:00
|
|
|
}
|
2007-09-26 20:21:34 +02:00
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************
|
|
|
|
* FontIsLinked (GDI32.@)
|
|
|
|
*/
|
|
|
|
BOOL WINAPI FontIsLinked(HDC hdc)
|
|
|
|
{
|
2008-02-05 21:16:27 +01:00
|
|
|
DC *dc = get_dc_ptr(hdc);
|
2011-10-21 11:37:48 +02:00
|
|
|
PHYSDEV dev;
|
|
|
|
BOOL ret;
|
2007-09-26 20:21:34 +02:00
|
|
|
|
|
|
|
if (!dc) return FALSE;
|
2011-10-21 11:37:48 +02:00
|
|
|
dev = GET_DC_PHYSDEV( dc, pFontIsLinked );
|
|
|
|
ret = dev->funcs->pFontIsLinked( dev );
|
2008-02-05 21:16:27 +01:00
|
|
|
release_dc_ptr(dc);
|
2007-09-26 20:21:34 +02:00
|
|
|
TRACE("returning %d\n", ret);
|
|
|
|
return ret;
|
|
|
|
}
|
2008-02-27 18:00:06 +01:00
|
|
|
|
2008-07-26 19:20:33 +02:00
|
|
|
/*************************************************************
|
2015-08-29 18:54:17 +02:00
|
|
|
* GetFontRealizationInfo (GDI32.@)
|
2008-07-26 19:20:33 +02:00
|
|
|
*/
|
2015-08-29 18:54:17 +02:00
|
|
|
BOOL WINAPI GetFontRealizationInfo(HDC hdc, struct font_realization_info *info)
|
2008-02-27 18:00:06 +01:00
|
|
|
{
|
2015-08-29 18:54:17 +02:00
|
|
|
BOOL is_v0 = info->size == FIELD_OFFSET(struct font_realization_info, unk);
|
2011-10-21 11:40:35 +02:00
|
|
|
PHYSDEV dev;
|
|
|
|
BOOL ret;
|
2015-08-29 18:54:17 +02:00
|
|
|
DC *dc;
|
|
|
|
|
|
|
|
if (info->size != sizeof(*info) && !is_v0)
|
|
|
|
return FALSE;
|
2008-02-27 18:00:06 +01:00
|
|
|
|
2015-08-29 18:54:17 +02:00
|
|
|
dc = get_dc_ptr(hdc);
|
2008-07-31 17:47:22 +02:00
|
|
|
if (!dc) return FALSE;
|
2015-08-29 18:54:17 +02:00
|
|
|
dev = GET_DC_PHYSDEV( dc, pGetFontRealizationInfo );
|
|
|
|
ret = dev->funcs->pGetFontRealizationInfo( dev, info );
|
2008-07-31 17:47:22 +02:00
|
|
|
release_dc_ptr(dc);
|
|
|
|
return ret;
|
2008-02-27 18:00:06 +01:00
|
|
|
}
|
2015-08-29 18:54:17 +02:00
|
|
|
|
|
|
|
struct realization_info
|
|
|
|
{
|
|
|
|
DWORD flags; /* 1 for bitmap fonts, 3 for scalable fonts */
|
|
|
|
DWORD cache_num; /* keeps incrementing - num of fonts that have been created allowing for caching?? */
|
|
|
|
DWORD instance_id; /* identifies a realized font instance */
|
|
|
|
};
|
|
|
|
|
|
|
|
/*************************************************************
|
|
|
|
* GdiRealizationInfo (GDI32.@)
|
|
|
|
*
|
|
|
|
* Returns a structure that contains some font information.
|
|
|
|
*/
|
|
|
|
BOOL WINAPI GdiRealizationInfo(HDC hdc, struct realization_info *info)
|
|
|
|
{
|
|
|
|
struct font_realization_info ri;
|
|
|
|
BOOL ret;
|
|
|
|
|
|
|
|
ri.size = sizeof(ri);
|
|
|
|
ret = GetFontRealizationInfo( hdc, &ri );
|
|
|
|
if (ret)
|
|
|
|
{
|
|
|
|
info->flags = ri.flags;
|
|
|
|
info->cache_num = ri.cache_num;
|
|
|
|
info->instance_id = ri.instance_id;
|
|
|
|
}
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|