1993-09-04 12:09:32 +02:00
|
|
|
/*
|
|
|
|
* GDI bit-blit operations
|
|
|
|
*
|
2011-07-14 12:37:04 +02:00
|
|
|
* Copyright 1993, 1994, 2011 Alexandre Julliard
|
2006-11-04 08:54:59 +01:00
|
|
|
* Copyright 2006 Damjan Jovanovic
|
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
|
1994-12-27 15:11:53 +01:00
|
|
|
*/
|
|
|
|
|
1999-02-04 12:11:01 +01:00
|
|
|
#include "config.h"
|
|
|
|
|
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
|
|
|
#include <assert.h>
|
2003-09-06 01:08:26 +02:00
|
|
|
#include <stdarg.h>
|
1993-09-04 12:09:32 +02:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
2003-11-21 22:50:59 +01:00
|
|
|
|
2003-09-06 01:08:26 +02:00
|
|
|
#include "windef.h"
|
2001-01-15 23:30:50 +01:00
|
|
|
#include "winbase.h"
|
|
|
|
#include "wingdi.h"
|
|
|
|
#include "winuser.h"
|
2011-07-14 12:47:45 +02:00
|
|
|
#include "winternl.h"
|
1996-11-17 19:59:11 +01:00
|
|
|
#include "x11drv.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(bitblt);
|
1999-04-19 16:56:29 +02:00
|
|
|
|
1994-12-27 15:11:53 +01:00
|
|
|
|
1995-01-09 19:21:16 +01:00
|
|
|
#define DST 0 /* Destination drawable */
|
|
|
|
#define SRC 1 /* Source drawable */
|
|
|
|
#define TMP 2 /* Temporary drawable */
|
1994-12-27 15:11:53 +01:00
|
|
|
#define PAT 3 /* Pattern (brush) in destination DC */
|
|
|
|
|
1995-01-09 19:21:16 +01:00
|
|
|
#define OP(src,dst,rop) (OP_ARGS(src,dst) << 4 | (rop))
|
1994-12-27 15:11:53 +01:00
|
|
|
#define OP_ARGS(src,dst) (((src) << 2) | (dst))
|
|
|
|
|
1995-01-09 19:21:16 +01:00
|
|
|
#define OP_SRC(opcode) ((opcode) >> 6)
|
2002-06-01 01:06:46 +02:00
|
|
|
#define OP_DST(opcode) (((opcode) >> 4) & 3)
|
1995-01-09 19:21:16 +01:00
|
|
|
#define OP_SRCDST(opcode) ((opcode) >> 4)
|
|
|
|
#define OP_ROP(opcode) ((opcode) & 0x0f)
|
1994-12-27 15:11:53 +01:00
|
|
|
|
1995-01-09 19:21:16 +01:00
|
|
|
#define MAX_OP_LEN 6 /* Longest opcode + 1 for the terminating 0 */
|
1994-12-27 15:11:53 +01: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
|
|
|
#define SWAP_INT32(i1,i2) \
|
1999-02-26 12:11:13 +01:00
|
|
|
do { INT __t = *(i1); *(i1) = *(i2); *(i2) = __t; } while(0)
|
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
|
|
|
|
1994-12-27 15:11:53 +01:00
|
|
|
static const unsigned char BITBLT_Opcodes[256][MAX_OP_LEN] =
|
|
|
|
{
|
|
|
|
{ OP(PAT,DST,GXclear) }, /* 0x00 0 */
|
|
|
|
{ OP(PAT,SRC,GXor), OP(SRC,DST,GXnor) }, /* 0x01 ~(D|(P|S)) */
|
|
|
|
{ OP(PAT,SRC,GXnor), OP(SRC,DST,GXand) }, /* 0x02 D&~(P|S) */
|
|
|
|
{ OP(PAT,SRC,GXnor) }, /* 0x03 ~(P|S) */
|
|
|
|
{ OP(PAT,DST,GXnor), OP(SRC,DST,GXand) }, /* 0x04 S&~(D|P) */
|
|
|
|
{ OP(PAT,DST,GXnor) }, /* 0x05 ~(D|P) */
|
|
|
|
{ OP(SRC,DST,GXequiv), OP(PAT,DST,GXnor), }, /* 0x06 ~(P|~(D^S)) */
|
|
|
|
{ OP(SRC,DST,GXand), OP(PAT,DST,GXnor) }, /* 0x07 ~(P|(D&S)) */
|
|
|
|
{ OP(PAT,DST,GXandInverted), OP(SRC,DST,GXand) },/* 0x08 S&D&~P */
|
|
|
|
{ OP(SRC,DST,GXxor), OP(PAT,DST,GXnor) }, /* 0x09 ~(P|(D^S)) */
|
|
|
|
{ OP(PAT,DST,GXandInverted) }, /* 0x0a D&~P */
|
|
|
|
{ OP(SRC,DST,GXandReverse), OP(PAT,DST,GXnor) }, /* 0x0b ~(P|(S&~D)) */
|
|
|
|
{ OP(PAT,SRC,GXandInverted) }, /* 0x0c S&~P */
|
|
|
|
{ OP(SRC,DST,GXandInverted), OP(PAT,DST,GXnor) },/* 0x0d ~(P|(D&~S)) */
|
|
|
|
{ OP(SRC,DST,GXnor), OP(PAT,DST,GXnor) }, /* 0x0e ~(P|~(D|S)) */
|
|
|
|
{ OP(PAT,DST,GXcopyInverted) }, /* 0x0f ~P */
|
|
|
|
{ OP(SRC,DST,GXnor), OP(PAT,DST,GXand) }, /* 0x10 P&~(S|D) */
|
|
|
|
{ OP(SRC,DST,GXnor) }, /* 0x11 ~(D|S) */
|
|
|
|
{ OP(PAT,DST,GXequiv), OP(SRC,DST,GXnor) }, /* 0x12 ~(S|~(D^P)) */
|
|
|
|
{ OP(PAT,DST,GXand), OP(SRC,DST,GXnor) }, /* 0x13 ~(S|(D&P)) */
|
|
|
|
{ OP(PAT,SRC,GXequiv), OP(SRC,DST,GXnor) }, /* 0x14 ~(D|~(P^S)) */
|
|
|
|
{ OP(PAT,SRC,GXand), OP(SRC,DST,GXnor) }, /* 0x15 ~(D|(P&S)) */
|
2011-07-18 11:38:20 +02:00
|
|
|
{ OP(SRC,TMP,GXcopy), OP(PAT,SRC,GXnand),
|
|
|
|
OP(SRC,DST,GXand), OP(TMP,DST,GXxor),
|
1994-12-27 15:11:53 +01:00
|
|
|
OP(PAT,DST,GXxor) }, /* 0x16 P^S^(D&~(P&S) */
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(SRC,DST,GXxor),
|
|
|
|
OP(PAT,SRC,GXxor), OP(SRC,DST,GXand),
|
|
|
|
OP(TMP,DST,GXequiv) }, /* 0x17 ~S^((S^P)&(S^D))*/
|
|
|
|
{ OP(PAT,SRC,GXxor), OP(PAT,DST,GXxor),
|
|
|
|
OP(SRC,DST,GXand) }, /* 0x18 (S^P)&(D^P) */
|
2011-07-18 11:38:20 +02:00
|
|
|
{ OP(SRC,TMP,GXcopy), OP(PAT,SRC,GXnand),
|
|
|
|
OP(SRC,DST,GXand), OP(TMP,DST,GXequiv) }, /* 0x19 ~S^(D&~(P&S)) */
|
1994-12-27 15:11:53 +01:00
|
|
|
{ OP(PAT,SRC,GXand), OP(SRC,DST,GXor),
|
|
|
|
OP(PAT,DST,GXxor) }, /* 0x1a P^(D|(S&P)) */
|
2011-07-18 11:38:20 +02:00
|
|
|
{ OP(SRC,TMP,GXcopy), OP(PAT,SRC,GXxor),
|
|
|
|
OP(SRC,DST,GXand), OP(TMP,DST,GXequiv) }, /* 0x1b ~S^(D&(P^S)) */
|
1994-12-27 15:11:53 +01:00
|
|
|
{ OP(PAT,DST,GXand), OP(SRC,DST,GXor),
|
|
|
|
OP(PAT,DST,GXxor) }, /* 0x1c P^(S|(D&P)) */
|
|
|
|
{ OP(DST,TMP,GXcopy), OP(PAT,DST,GXxor),
|
|
|
|
OP(SRC,DST,GXand), OP(TMP,DST,GXequiv) }, /* 0x1d ~D^(S&(D^P)) */
|
|
|
|
{ OP(SRC,DST,GXor), OP(PAT,DST,GXxor) }, /* 0x1e P^(D|S) */
|
|
|
|
{ OP(SRC,DST,GXor), OP(PAT,DST,GXnand) }, /* 0x1f ~(P&(D|S)) */
|
|
|
|
{ OP(PAT,SRC,GXandReverse), OP(SRC,DST,GXand) }, /* 0x20 D&(P&~S) */
|
|
|
|
{ OP(PAT,DST,GXxor), OP(SRC,DST,GXnor) }, /* 0x21 ~(S|(D^P)) */
|
|
|
|
{ OP(SRC,DST,GXandInverted) }, /* 0x22 ~S&D */
|
|
|
|
{ OP(PAT,DST,GXandReverse), OP(SRC,DST,GXnor) }, /* 0x23 ~(S|(P&~D)) */
|
|
|
|
{ OP(SRC,DST,GXxor), OP(PAT,SRC,GXxor),
|
|
|
|
OP(SRC,DST,GXand) }, /* 0x24 (S^P)&(S^D) */
|
|
|
|
{ OP(PAT,SRC,GXnand), OP(SRC,DST,GXand),
|
|
|
|
OP(PAT,DST,GXequiv) }, /* 0x25 ~P^(D&~(S&P)) */
|
2011-07-18 11:38:20 +02:00
|
|
|
{ OP(SRC,TMP,GXcopy), OP(PAT,SRC,GXand),
|
|
|
|
OP(SRC,DST,GXor), OP(TMP,DST,GXxor) }, /* 0x26 S^(D|(S&P)) */
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(PAT,SRC,GXequiv),
|
|
|
|
OP(SRC,DST,GXor), OP(TMP,DST,GXxor) }, /* 0x27 S^(D|~(P^S)) */
|
1994-12-27 15:11:53 +01:00
|
|
|
{ OP(PAT,SRC,GXxor), OP(SRC,DST,GXand) }, /* 0x28 D&(P^S) */
|
2011-07-18 11:38:20 +02:00
|
|
|
{ OP(SRC,TMP,GXcopy), OP(PAT,SRC,GXand),
|
|
|
|
OP(SRC,DST,GXor), OP(TMP,DST,GXxor),
|
1994-12-27 15:11:53 +01:00
|
|
|
OP(PAT,DST,GXequiv) }, /* 0x29 ~P^S^(D|(P&S)) */
|
|
|
|
{ OP(PAT,SRC,GXnand), OP(SRC,DST,GXand) }, /* 0x2a D&~(P&S) */
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(PAT,SRC,GXxor),
|
|
|
|
OP(PAT,DST,GXxor), OP(SRC,DST,GXand),
|
|
|
|
OP(TMP,DST,GXequiv) }, /* 0x2b ~S^((P^S)&(P^D))*/
|
|
|
|
{ OP(SRC,DST,GXor), OP(PAT,DST,GXand),
|
|
|
|
OP(SRC,DST,GXxor) }, /* 0x2c S^(P&(S|D)) */
|
|
|
|
{ OP(SRC,DST,GXorReverse), OP(PAT,DST,GXxor) }, /* 0x2d P^(S|~D) */
|
|
|
|
{ OP(PAT,DST,GXxor), OP(SRC,DST,GXor),
|
|
|
|
OP(PAT,DST,GXxor) }, /* 0x2e P^(S|(D^P)) */
|
|
|
|
{ OP(SRC,DST,GXorReverse), OP(PAT,DST,GXnand) }, /* 0x2f ~(P&(S|~D)) */
|
|
|
|
{ OP(PAT,SRC,GXandReverse) }, /* 0x30 P&~S */
|
|
|
|
{ OP(PAT,DST,GXandInverted), OP(SRC,DST,GXnor) },/* 0x31 ~(S|(D&~P)) */
|
|
|
|
{ OP(SRC,DST,GXor), OP(PAT,DST,GXor),
|
|
|
|
OP(SRC,DST,GXxor) }, /* 0x32 S^(D|P|S) */
|
|
|
|
{ OP(SRC,DST,GXcopyInverted) }, /* 0x33 ~S */
|
|
|
|
{ OP(SRC,DST,GXand), OP(PAT,DST,GXor),
|
|
|
|
OP(SRC,DST,GXxor) }, /* 0x34 S^(P|(D&S)) */
|
|
|
|
{ OP(SRC,DST,GXequiv), OP(PAT,DST,GXor),
|
|
|
|
OP(SRC,DST,GXxor) }, /* 0x35 S^(P|~(D^S)) */
|
|
|
|
{ OP(PAT,DST,GXor), OP(SRC,DST,GXxor) }, /* 0x36 S^(D|P) */
|
|
|
|
{ OP(PAT,DST,GXor), OP(SRC,DST,GXnand) }, /* 0x37 ~(S&(D|P)) */
|
|
|
|
{ OP(PAT,DST,GXor), OP(SRC,DST,GXand),
|
|
|
|
OP(PAT,DST,GXxor) }, /* 0x38 P^(S&(D|P)) */
|
|
|
|
{ OP(PAT,DST,GXorReverse), OP(SRC,DST,GXxor) }, /* 0x39 S^(P|~D) */
|
|
|
|
{ OP(SRC,DST,GXxor), OP(PAT,DST,GXor),
|
|
|
|
OP(SRC,DST,GXxor) }, /* 0x3a S^(P|(D^S)) */
|
|
|
|
{ OP(PAT,DST,GXorReverse), OP(SRC,DST,GXnand) }, /* 0x3b ~(S&(P|~D)) */
|
|
|
|
{ OP(PAT,SRC,GXxor) }, /* 0x3c P^S */
|
|
|
|
{ OP(SRC,DST,GXnor), OP(PAT,DST,GXor),
|
|
|
|
OP(SRC,DST,GXxor) }, /* 0x3d S^(P|~(D|S)) */
|
|
|
|
{ OP(SRC,DST,GXandInverted), OP(PAT,DST,GXor),
|
|
|
|
OP(SRC,DST,GXxor) }, /* 0x3e S^(P|(D&~S)) */
|
|
|
|
{ OP(PAT,SRC,GXnand) }, /* 0x3f ~(P&S) */
|
|
|
|
{ OP(SRC,DST,GXandReverse), OP(PAT,DST,GXand) }, /* 0x40 P&S&~D */
|
|
|
|
{ OP(PAT,SRC,GXxor), OP(SRC,DST,GXnor) }, /* 0x41 ~(D|(P^S)) */
|
|
|
|
{ OP(DST,SRC,GXxor), OP(PAT,DST,GXxor),
|
|
|
|
OP(SRC,DST,GXand) }, /* 0x42 (S^D)&(P^D) */
|
|
|
|
{ OP(SRC,DST,GXnand), OP(PAT,DST,GXand),
|
|
|
|
OP(SRC,DST,GXequiv) }, /* 0x43 ~S^(P&~(D&S)) */
|
|
|
|
{ OP(SRC,DST,GXandReverse) }, /* 0x44 S&~D */
|
|
|
|
{ OP(PAT,SRC,GXandReverse), OP(SRC,DST,GXnor) }, /* 0x45 ~(D|(P&~S)) */
|
|
|
|
{ OP(DST,TMP,GXcopy), OP(PAT,DST,GXand),
|
|
|
|
OP(SRC,DST,GXor), OP(TMP,DST,GXxor) }, /* 0x46 D^(S|(P&D)) */
|
|
|
|
{ OP(PAT,DST,GXxor), OP(SRC,DST,GXand),
|
|
|
|
OP(PAT,DST,GXequiv) }, /* 0x47 ~P^(S&(D^P)) */
|
|
|
|
{ OP(PAT,DST,GXxor), OP(SRC,DST,GXand) }, /* 0x48 S&(P^D) */
|
|
|
|
{ OP(DST,TMP,GXcopy), OP(PAT,DST,GXand),
|
|
|
|
OP(SRC,DST,GXor), OP(TMP,DST,GXxor),
|
|
|
|
OP(PAT,DST,GXequiv) }, /* 0x49 ~P^D^(S|(P&D)) */
|
|
|
|
{ OP(DST,SRC,GXor), OP(PAT,SRC,GXand),
|
|
|
|
OP(SRC,DST,GXxor) }, /* 0x4a D^(P&(S|D)) */
|
|
|
|
{ OP(SRC,DST,GXorInverted), OP(PAT,DST,GXxor) }, /* 0x4b P^(D|~S) */
|
|
|
|
{ OP(PAT,DST,GXnand), OP(SRC,DST,GXand) }, /* 0x4c S&~(D&P) */
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(SRC,DST,GXxor),
|
|
|
|
OP(PAT,SRC,GXxor), OP(SRC,DST,GXor),
|
|
|
|
OP(TMP,DST,GXequiv) }, /* 0x4d ~S^((S^P)|(S^D))*/
|
|
|
|
{ OP(PAT,SRC,GXxor), OP(SRC,DST,GXor),
|
|
|
|
OP(PAT,DST,GXxor) }, /* 0x4e P^(D|(S^P)) */
|
|
|
|
{ OP(SRC,DST,GXorInverted), OP(PAT,DST,GXnand) },/* 0x4f ~(P&(D|~S)) */
|
|
|
|
{ OP(PAT,DST,GXandReverse) }, /* 0x50 P&~D */
|
|
|
|
{ OP(PAT,SRC,GXandInverted), OP(SRC,DST,GXnor) },/* 0x51 ~(D|(S&~P)) */
|
|
|
|
{ OP(DST,SRC,GXand), OP(PAT,SRC,GXor),
|
|
|
|
OP(SRC,DST,GXxor) }, /* 0x52 D^(P|(S&D)) */
|
|
|
|
{ OP(SRC,DST,GXxor), OP(PAT,DST,GXand),
|
|
|
|
OP(SRC,DST,GXequiv) }, /* 0x53 ~S^(P&(D^S)) */
|
|
|
|
{ OP(PAT,SRC,GXnor), OP(SRC,DST,GXnor) }, /* 0x54 ~(D|~(P|S)) */
|
|
|
|
{ OP(PAT,DST,GXinvert) }, /* 0x55 ~D */
|
|
|
|
{ OP(PAT,SRC,GXor), OP(SRC,DST,GXxor) }, /* 0x56 D^(P|S) */
|
|
|
|
{ OP(PAT,SRC,GXor), OP(SRC,DST,GXnand) }, /* 0x57 ~(D&(P|S)) */
|
|
|
|
{ OP(PAT,SRC,GXor), OP(SRC,DST,GXand),
|
|
|
|
OP(PAT,DST,GXxor) }, /* 0x58 P^(D&(P|S)) */
|
|
|
|
{ OP(PAT,SRC,GXorReverse), OP(SRC,DST,GXxor) }, /* 0x59 D^(P|~S) */
|
|
|
|
{ OP(PAT,DST,GXxor) }, /* 0x5a D^P */
|
|
|
|
{ OP(DST,SRC,GXnor), OP(PAT,SRC,GXor),
|
|
|
|
OP(SRC,DST,GXxor) }, /* 0x5b D^(P|~(S|D)) */
|
|
|
|
{ OP(DST,SRC,GXxor), OP(PAT,SRC,GXor),
|
|
|
|
OP(SRC,DST,GXxor) }, /* 0x5c D^(P|(S^D)) */
|
|
|
|
{ OP(PAT,SRC,GXorReverse), OP(SRC,DST,GXnand) }, /* 0x5d ~(D&(P|~S)) */
|
|
|
|
{ OP(DST,SRC,GXandInverted), OP(PAT,SRC,GXor),
|
|
|
|
OP(SRC,DST,GXxor) }, /* 0x5e D^(P|(S&~D)) */
|
|
|
|
{ OP(PAT,DST,GXnand) }, /* 0x5f ~(D&P) */
|
|
|
|
{ OP(SRC,DST,GXxor), OP(PAT,DST,GXand) }, /* 0x60 P&(D^S) */
|
|
|
|
{ OP(DST,TMP,GXcopy), OP(SRC,DST,GXand),
|
|
|
|
OP(PAT,DST,GXor), OP(SRC,DST,GXxor),
|
|
|
|
OP(TMP,DST,GXequiv) }, /* 0x61 ~D^S^(P|(D&S)) */
|
|
|
|
{ OP(DST,TMP,GXcopy), OP(PAT,DST,GXor),
|
|
|
|
OP(SRC,DST,GXand), OP(TMP,DST,GXxor) }, /* 0x62 D^(S&(P|D)) */
|
|
|
|
{ OP(PAT,DST,GXorInverted), OP(SRC,DST,GXxor) }, /* 0x63 S^(D|~P) */
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(PAT,SRC,GXor),
|
|
|
|
OP(SRC,DST,GXand), OP(TMP,DST,GXxor) }, /* 0x64 S^(D&(P|S)) */
|
|
|
|
{ OP(PAT,SRC,GXorInverted), OP(SRC,DST,GXxor) }, /* 0x65 D^(S|~P) */
|
|
|
|
{ OP(SRC,DST,GXxor) }, /* 0x66 S^D */
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(PAT,SRC,GXnor),
|
|
|
|
OP(SRC,DST,GXor), OP(TMP,DST,GXxor) }, /* 0x67 S^(D|~(S|P) */
|
|
|
|
{ OP(DST,TMP,GXcopy), OP(SRC,DST,GXnor),
|
|
|
|
OP(PAT,DST,GXor), OP(SRC,DST,GXxor),
|
|
|
|
OP(TMP,DST,GXequiv) }, /* 0x68 ~D^S^(P|~(D|S))*/
|
|
|
|
{ OP(SRC,DST,GXxor), OP(PAT,DST,GXequiv) }, /* 0x69 ~P^(D^S) */
|
|
|
|
{ OP(PAT,SRC,GXand), OP(SRC,DST,GXxor) }, /* 0x6a D^(P&S) */
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(PAT,SRC,GXor),
|
|
|
|
OP(SRC,DST,GXand), OP(TMP,DST,GXxor),
|
|
|
|
OP(PAT,DST,GXequiv) }, /* 0x6b ~P^S^(D&(P|S)) */
|
|
|
|
{ OP(PAT,DST,GXand), OP(SRC,DST,GXxor) }, /* 0x6c S^(D&P) */
|
|
|
|
{ OP(DST,TMP,GXcopy), OP(PAT,DST,GXor),
|
|
|
|
OP(SRC,DST,GXand), OP(TMP,DST,GXxor),
|
|
|
|
OP(PAT,DST,GXequiv) }, /* 0x6d ~P^D^(S&(P|D)) */
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(PAT,SRC,GXorReverse),
|
|
|
|
OP(SRC,DST,GXand), OP(TMP,DST,GXxor) }, /* 0x6e S^(D&(P|~S)) */
|
|
|
|
{ OP(SRC,DST,GXequiv), OP(PAT,DST,GXnand) }, /* 0x6f ~(P&~(S^D)) */
|
|
|
|
{ OP(SRC,DST,GXnand), OP(PAT,DST,GXand) }, /* 0x70 P&~(D&S) */
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(DST,SRC,GXxor),
|
|
|
|
OP(PAT,DST,GXxor), OP(SRC,DST,GXand),
|
|
|
|
OP(TMP,DST,GXequiv) }, /* 0x71 ~S^((S^D)&(P^D))*/
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(PAT,SRC,GXxor),
|
|
|
|
OP(SRC,DST,GXor), OP(TMP,DST,GXxor) }, /* 0x72 S^(D|(P^S)) */
|
|
|
|
{ OP(PAT,DST,GXorInverted), OP(SRC,DST,GXnand) },/* 0x73 ~(S&(D|~P)) */
|
|
|
|
{ OP(DST,TMP,GXcopy), OP(PAT,DST,GXxor),
|
|
|
|
OP(SRC,DST,GXor), OP(TMP,DST,GXxor) }, /* 0x74 D^(S|(P^D)) */
|
|
|
|
{ OP(PAT,SRC,GXorInverted), OP(SRC,DST,GXnand) },/* 0x75 ~(D&(S|~P)) */
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(PAT,SRC,GXandReverse),
|
|
|
|
OP(SRC,DST,GXor), OP(TMP,DST,GXxor) }, /* 0x76 S^(D|(P&~S)) */
|
|
|
|
{ OP(SRC,DST,GXnand) }, /* 0x77 ~(S&D) */
|
|
|
|
{ OP(SRC,DST,GXand), OP(PAT,DST,GXxor) }, /* 0x78 P^(D&S) */
|
|
|
|
{ OP(DST,TMP,GXcopy), OP(SRC,DST,GXor),
|
|
|
|
OP(PAT,DST,GXand), OP(SRC,DST,GXxor),
|
|
|
|
OP(TMP,DST,GXequiv) }, /* 0x79 ~D^S^(P&(D|S)) */
|
|
|
|
{ OP(DST,SRC,GXorInverted), OP(PAT,SRC,GXand),
|
|
|
|
OP(SRC,DST,GXxor) }, /* 0x7a D^(P&(S|~D)) */
|
|
|
|
{ OP(PAT,DST,GXequiv), OP(SRC,DST,GXnand) }, /* 0x7b ~(S&~(D^P)) */
|
|
|
|
{ OP(SRC,DST,GXorInverted), OP(PAT,DST,GXand),
|
|
|
|
OP(SRC,DST,GXxor) }, /* 0x7c S^(P&(D|~S)) */
|
|
|
|
{ OP(PAT,SRC,GXequiv), OP(SRC,DST,GXnand) }, /* 0x7d ~(D&~(P^S)) */
|
|
|
|
{ OP(SRC,DST,GXxor), OP(PAT,SRC,GXxor),
|
|
|
|
OP(SRC,DST,GXor) }, /* 0x7e (S^P)|(S^D) */
|
|
|
|
{ OP(PAT,SRC,GXand), OP(SRC,DST,GXnand) }, /* 0x7f ~(D&P&S) */
|
|
|
|
{ OP(PAT,SRC,GXand), OP(SRC,DST,GXand) }, /* 0x80 D&P&S */
|
|
|
|
{ OP(SRC,DST,GXxor), OP(PAT,SRC,GXxor),
|
|
|
|
OP(SRC,DST,GXnor) }, /* 0x81 ~((S^P)|(S^D)) */
|
|
|
|
{ OP(PAT,SRC,GXequiv), OP(SRC,DST,GXand) }, /* 0x82 D&~(P^S) */
|
|
|
|
{ OP(SRC,DST,GXorInverted), OP(PAT,DST,GXand),
|
|
|
|
OP(SRC,DST,GXequiv) }, /* 0x83 ~S^(P&(D|~S)) */
|
|
|
|
{ OP(PAT,DST,GXequiv), OP(SRC,DST,GXand) }, /* 0x84 S&~(D^P) */
|
|
|
|
{ OP(PAT,SRC,GXorInverted), OP(SRC,DST,GXand),
|
|
|
|
OP(PAT,DST,GXequiv) }, /* 0x85 ~P^(D&(S|~P)) */
|
|
|
|
{ OP(DST,TMP,GXcopy), OP(SRC,DST,GXor),
|
|
|
|
OP(PAT,DST,GXand), OP(SRC,DST,GXxor),
|
|
|
|
OP(TMP,DST,GXxor) }, /* 0x86 D^S^(P&(D|S)) */
|
|
|
|
{ OP(SRC,DST,GXand), OP(PAT,DST,GXequiv) }, /* 0x87 ~P^(D&S) */
|
|
|
|
{ OP(SRC,DST,GXand) }, /* 0x88 S&D */
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(PAT,SRC,GXandReverse),
|
|
|
|
OP(SRC,DST,GXor), OP(TMP,DST,GXequiv) }, /* 0x89 ~S^(D|(P&~S)) */
|
|
|
|
{ OP(PAT,SRC,GXorInverted), OP(SRC,DST,GXand) }, /* 0x8a D&(S|~P) */
|
|
|
|
{ OP(DST,TMP,GXcopy), OP(PAT,DST,GXxor),
|
|
|
|
OP(SRC,DST,GXor), OP(TMP,DST,GXequiv) }, /* 0x8b ~D^(S|(P^D)) */
|
|
|
|
{ OP(PAT,DST,GXorInverted), OP(SRC,DST,GXand) }, /* 0x8c S&(D|~P) */
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(PAT,SRC,GXxor),
|
|
|
|
OP(SRC,DST,GXor), OP(TMP,DST,GXequiv) }, /* 0x8d ~S^(D|(P^S)) */
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(DST,SRC,GXxor),
|
|
|
|
OP(PAT,DST,GXxor), OP(SRC,DST,GXand),
|
|
|
|
OP(TMP,DST,GXxor) }, /* 0x8e S^((S^D)&(P^D))*/
|
|
|
|
{ OP(SRC,DST,GXnand), OP(PAT,DST,GXnand) }, /* 0x8f ~(P&~(D&S)) */
|
|
|
|
{ OP(SRC,DST,GXequiv), OP(PAT,DST,GXand) }, /* 0x90 P&~(D^S) */
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(PAT,SRC,GXorReverse),
|
|
|
|
OP(SRC,DST,GXand), OP(TMP,DST,GXequiv) }, /* 0x91 ~S^(D&(P|~S)) */
|
|
|
|
{ OP(DST,TMP,GXcopy), OP(PAT,DST,GXor),
|
|
|
|
OP(SRC,DST,GXand), OP(PAT,DST,GXxor),
|
|
|
|
OP(TMP,DST,GXxor) }, /* 0x92 D^P^(S&(D|P)) */
|
|
|
|
{ OP(PAT,DST,GXand), OP(SRC,DST,GXequiv) }, /* 0x93 ~S^(P&D) */
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(PAT,SRC,GXor),
|
|
|
|
OP(SRC,DST,GXand), OP(PAT,DST,GXxor),
|
|
|
|
OP(TMP,DST,GXxor) }, /* 0x94 S^P^(D&(P|S)) */
|
|
|
|
{ OP(PAT,SRC,GXand), OP(SRC,DST,GXequiv) }, /* 0x95 ~D^(P&S) */
|
|
|
|
{ OP(PAT,SRC,GXxor), OP(SRC,DST,GXxor) }, /* 0x96 D^P^S */
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(PAT,SRC,GXnor),
|
|
|
|
OP(SRC,DST,GXor), OP(PAT,DST,GXxor),
|
|
|
|
OP(TMP,DST,GXxor) }, /* 0x97 S^P^(D|~(P|S)) */
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(PAT,SRC,GXnor),
|
|
|
|
OP(SRC,DST,GXor), OP(TMP,DST,GXequiv) }, /* 0x98 ~S^(D|~(P|S)) */
|
|
|
|
{ OP(SRC,DST,GXequiv) }, /* 0x99 ~S^D */
|
|
|
|
{ OP(PAT,SRC,GXandReverse), OP(SRC,DST,GXxor) }, /* 0x9a D^(P&~S) */
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(PAT,SRC,GXor),
|
|
|
|
OP(SRC,DST,GXand), OP(TMP,DST,GXequiv) }, /* 0x9b ~S^(D&(P|S)) */
|
|
|
|
{ OP(PAT,DST,GXandReverse), OP(SRC,DST,GXxor) }, /* 0x9c S^(P&~D) */
|
|
|
|
{ OP(DST,TMP,GXcopy), OP(PAT,DST,GXor),
|
|
|
|
OP(SRC,DST,GXand), OP(TMP,DST,GXequiv) }, /* 0x9d ~D^(S&(P|D)) */
|
|
|
|
{ OP(DST,TMP,GXcopy), OP(SRC,DST,GXand),
|
|
|
|
OP(PAT,DST,GXor), OP(SRC,DST,GXxor),
|
|
|
|
OP(TMP,DST,GXxor) }, /* 0x9e D^S^(P|(D&S)) */
|
|
|
|
{ OP(SRC,DST,GXxor), OP(PAT,DST,GXnand) }, /* 0x9f ~(P&(D^S)) */
|
|
|
|
{ OP(PAT,DST,GXand) }, /* 0xa0 D&P */
|
|
|
|
{ OP(PAT,SRC,GXandInverted), OP(SRC,DST,GXor),
|
|
|
|
OP(PAT,DST,GXequiv) }, /* 0xa1 ~P^(D|(S&~P)) */
|
|
|
|
{ OP(PAT,SRC,GXorReverse), OP(SRC,DST,GXand) }, /* 0xa2 D&(P|~S) */
|
|
|
|
{ OP(DST,SRC,GXxor), OP(PAT,SRC,GXor),
|
|
|
|
OP(SRC,DST,GXequiv) }, /* 0xa3 ~D^(P|(S^D)) */
|
|
|
|
{ OP(PAT,SRC,GXnor), OP(SRC,DST,GXor),
|
|
|
|
OP(PAT,DST,GXequiv) }, /* 0xa4 ~P^(D|~(S|P)) */
|
|
|
|
{ OP(PAT,DST,GXequiv) }, /* 0xa5 ~P^D */
|
|
|
|
{ OP(PAT,SRC,GXandInverted), OP(SRC,DST,GXxor) },/* 0xa6 D^(S&~P) */
|
|
|
|
{ OP(PAT,SRC,GXor), OP(SRC,DST,GXand),
|
|
|
|
OP(PAT,DST,GXequiv) }, /* 0xa7 ~P^(D&(S|P)) */
|
|
|
|
{ OP(PAT,SRC,GXor), OP(SRC,DST,GXand) }, /* 0xa8 D&(P|S) */
|
|
|
|
{ OP(PAT,SRC,GXor), OP(SRC,DST,GXequiv) }, /* 0xa9 ~D^(P|S) */
|
2008-02-21 20:15:41 +01:00
|
|
|
{ OP(PAT,DST,GXnoop) }, /* 0xaa D */
|
1994-12-27 15:11:53 +01:00
|
|
|
{ OP(PAT,SRC,GXnor), OP(SRC,DST,GXor) }, /* 0xab D|~(P|S) */
|
|
|
|
{ OP(SRC,DST,GXxor), OP(PAT,DST,GXand),
|
|
|
|
OP(SRC,DST,GXxor) }, /* 0xac S^(P&(D^S)) */
|
|
|
|
{ OP(DST,SRC,GXand), OP(PAT,SRC,GXor),
|
|
|
|
OP(SRC,DST,GXequiv) }, /* 0xad ~D^(P|(S&D)) */
|
|
|
|
{ OP(PAT,SRC,GXandInverted), OP(SRC,DST,GXor) }, /* 0xae D|(S&~P) */
|
|
|
|
{ OP(PAT,DST,GXorInverted) }, /* 0xaf D|~P */
|
|
|
|
{ OP(SRC,DST,GXorInverted), OP(PAT,DST,GXand) }, /* 0xb0 P&(D|~S) */
|
|
|
|
{ OP(PAT,SRC,GXxor), OP(SRC,DST,GXor),
|
|
|
|
OP(PAT,DST,GXequiv) }, /* 0xb1 ~P^(D|(S^P)) */
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(SRC,DST,GXxor),
|
|
|
|
OP(PAT,SRC,GXxor), OP(SRC,DST,GXor),
|
|
|
|
OP(TMP,DST,GXxor) }, /* 0xb2 S^((S^P)|(S^D))*/
|
|
|
|
{ OP(PAT,DST,GXnand), OP(SRC,DST,GXnand) }, /* 0xb3 ~(S&~(D&P)) */
|
|
|
|
{ OP(SRC,DST,GXandReverse), OP(PAT,DST,GXxor) }, /* 0xb4 P^(S&~D) */
|
|
|
|
{ OP(DST,SRC,GXor), OP(PAT,SRC,GXand),
|
|
|
|
OP(SRC,DST,GXequiv) }, /* 0xb5 ~D^(P&(S|D)) */
|
|
|
|
{ OP(DST,TMP,GXcopy), OP(PAT,DST,GXand),
|
|
|
|
OP(SRC,DST,GXor), OP(PAT,DST,GXxor),
|
|
|
|
OP(TMP,DST,GXxor) }, /* 0xb6 D^P^(S|(D&P)) */
|
|
|
|
{ OP(PAT,DST,GXxor), OP(SRC,DST,GXnand) }, /* 0xb7 ~(S&(D^P)) */
|
|
|
|
{ OP(PAT,DST,GXxor), OP(SRC,DST,GXand),
|
|
|
|
OP(PAT,DST,GXxor) }, /* 0xb8 P^(S&(D^P)) */
|
|
|
|
{ OP(DST,TMP,GXcopy), OP(PAT,DST,GXand),
|
|
|
|
OP(SRC,DST,GXor), OP(TMP,DST,GXequiv) }, /* 0xb9 ~D^(S|(P&D)) */
|
|
|
|
{ OP(PAT,SRC,GXandReverse), OP(SRC,DST,GXor) }, /* 0xba D|(P&~S) */
|
|
|
|
{ OP(SRC,DST,GXorInverted) }, /* 0xbb ~S|D */
|
|
|
|
{ OP(SRC,DST,GXnand), OP(PAT,DST,GXand),
|
|
|
|
OP(SRC,DST,GXxor) }, /* 0xbc S^(P&~(D&S)) */
|
|
|
|
{ OP(DST,SRC,GXxor), OP(PAT,DST,GXxor),
|
|
|
|
OP(SRC,DST,GXnand) }, /* 0xbd ~((S^D)&(P^D)) */
|
|
|
|
{ OP(PAT,SRC,GXxor), OP(SRC,DST,GXor) }, /* 0xbe D|(P^S) */
|
|
|
|
{ OP(PAT,SRC,GXnand), OP(SRC,DST,GXor) }, /* 0xbf D|~(P&S) */
|
|
|
|
{ OP(PAT,SRC,GXand) }, /* 0xc0 P&S */
|
|
|
|
{ OP(SRC,DST,GXandInverted), OP(PAT,DST,GXor),
|
|
|
|
OP(SRC,DST,GXequiv) }, /* 0xc1 ~S^(P|(D&~S)) */
|
|
|
|
{ OP(SRC,DST,GXnor), OP(PAT,DST,GXor),
|
|
|
|
OP(SRC,DST,GXequiv) }, /* 0xc2 ~S^(P|~(D|S)) */
|
|
|
|
{ OP(PAT,SRC,GXequiv) }, /* 0xc3 ~P^S */
|
|
|
|
{ OP(PAT,DST,GXorReverse), OP(SRC,DST,GXand) }, /* 0xc4 S&(P|~D) */
|
|
|
|
{ OP(SRC,DST,GXxor), OP(PAT,DST,GXor),
|
|
|
|
OP(SRC,DST,GXequiv) }, /* 0xc5 ~S^(P|(D^S)) */
|
|
|
|
{ OP(PAT,DST,GXandInverted), OP(SRC,DST,GXxor) },/* 0xc6 S^(D&~P) */
|
|
|
|
{ OP(PAT,DST,GXor), OP(SRC,DST,GXand),
|
|
|
|
OP(PAT,DST,GXequiv) }, /* 0xc7 ~P^(S&(D|P)) */
|
|
|
|
{ OP(PAT,DST,GXor), OP(SRC,DST,GXand) }, /* 0xc8 S&(D|P) */
|
|
|
|
{ OP(PAT,DST,GXor), OP(SRC,DST,GXequiv) }, /* 0xc9 ~S^(P|D) */
|
|
|
|
{ OP(DST,SRC,GXxor), OP(PAT,SRC,GXand),
|
|
|
|
OP(SRC,DST,GXxor) }, /* 0xca D^(P&(S^D)) */
|
|
|
|
{ OP(SRC,DST,GXand), OP(PAT,DST,GXor),
|
|
|
|
OP(SRC,DST,GXequiv) }, /* 0xcb ~S^(P|(D&S)) */
|
|
|
|
{ OP(SRC,DST,GXcopy) }, /* 0xcc S */
|
|
|
|
{ OP(PAT,DST,GXnor), OP(SRC,DST,GXor) }, /* 0xcd S|~(D|P) */
|
|
|
|
{ OP(PAT,DST,GXandInverted), OP(SRC,DST,GXor) }, /* 0xce S|(D&~P) */
|
|
|
|
{ OP(PAT,SRC,GXorInverted) }, /* 0xcf S|~P */
|
|
|
|
{ OP(SRC,DST,GXorReverse), OP(PAT,DST,GXand) }, /* 0xd0 P&(S|~D) */
|
|
|
|
{ OP(PAT,DST,GXxor), OP(SRC,DST,GXor),
|
|
|
|
OP(PAT,DST,GXequiv) }, /* 0xd1 ~P^(S|(D^P)) */
|
|
|
|
{ OP(SRC,DST,GXandInverted), OP(PAT,DST,GXxor) },/* 0xd2 P^(D&~S) */
|
|
|
|
{ OP(SRC,DST,GXor), OP(PAT,DST,GXand),
|
|
|
|
OP(SRC,DST,GXequiv) }, /* 0xd3 ~S^(P&(D|S)) */
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(PAT,SRC,GXxor),
|
|
|
|
OP(PAT,DST,GXxor), OP(SRC,DST,GXand),
|
|
|
|
OP(TMP,DST,GXxor) }, /* 0xd4 S^((S^P)&(D^P))*/
|
|
|
|
{ OP(PAT,SRC,GXnand), OP(SRC,DST,GXnand) }, /* 0xd5 ~(D&~(P&S)) */
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(PAT,SRC,GXand),
|
|
|
|
OP(SRC,DST,GXor), OP(PAT,DST,GXxor),
|
|
|
|
OP(TMP,DST,GXxor) }, /* 0xd6 S^P^(D|(P&S)) */
|
|
|
|
{ OP(PAT,SRC,GXxor), OP(SRC,DST,GXnand) }, /* 0xd7 ~(D&(P^S)) */
|
|
|
|
{ OP(PAT,SRC,GXxor), OP(SRC,DST,GXand),
|
|
|
|
OP(PAT,DST,GXxor) }, /* 0xd8 P^(D&(S^P)) */
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(PAT,SRC,GXand),
|
|
|
|
OP(SRC,DST,GXor), OP(TMP,DST,GXequiv) }, /* 0xd9 ~S^(D|(P&S)) */
|
|
|
|
{ OP(DST,SRC,GXnand), OP(PAT,SRC,GXand),
|
|
|
|
OP(SRC,DST,GXxor) }, /* 0xda D^(P&~(S&D)) */
|
|
|
|
{ OP(SRC,DST,GXxor), OP(PAT,SRC,GXxor),
|
|
|
|
OP(SRC,DST,GXnand) }, /* 0xdb ~((S^P)&(S^D)) */
|
|
|
|
{ OP(PAT,DST,GXandReverse), OP(SRC,DST,GXor) }, /* 0xdc S|(P&~D) */
|
|
|
|
{ OP(SRC,DST,GXorReverse) }, /* 0xdd S|~D */
|
|
|
|
{ OP(PAT,DST,GXxor), OP(SRC,DST,GXor) }, /* 0xde S|(D^P) */
|
|
|
|
{ OP(PAT,DST,GXnand), OP(SRC,DST,GXor) }, /* 0xdf S|~(D&P) */
|
|
|
|
{ OP(SRC,DST,GXor), OP(PAT,DST,GXand) }, /* 0xe0 P&(D|S) */
|
|
|
|
{ OP(SRC,DST,GXor), OP(PAT,DST,GXequiv) }, /* 0xe1 ~P^(D|S) */
|
|
|
|
{ OP(DST,TMP,GXcopy), OP(PAT,DST,GXxor),
|
|
|
|
OP(SRC,DST,GXand), OP(TMP,DST,GXxor) }, /* 0xe2 D^(S&(P^D)) */
|
|
|
|
{ OP(PAT,DST,GXand), OP(SRC,DST,GXor),
|
|
|
|
OP(PAT,DST,GXequiv) }, /* 0xe3 ~P^(S|(D&P)) */
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(PAT,SRC,GXxor),
|
|
|
|
OP(SRC,DST,GXand), OP(TMP,DST,GXxor) }, /* 0xe4 S^(D&(P^S)) */
|
|
|
|
{ OP(PAT,SRC,GXand), OP(SRC,DST,GXor),
|
|
|
|
OP(PAT,DST,GXequiv) }, /* 0xe5 ~P^(D|(S&P)) */
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(PAT,SRC,GXnand),
|
|
|
|
OP(SRC,DST,GXand), OP(TMP,DST,GXxor) }, /* 0xe6 S^(D&~(P&S)) */
|
|
|
|
{ OP(PAT,SRC,GXxor), OP(PAT,DST,GXxor),
|
|
|
|
OP(SRC,DST,GXnand) }, /* 0xe7 ~((S^P)&(D^P)) */
|
|
|
|
{ OP(SRC,TMP,GXcopy), OP(SRC,DST,GXxor),
|
|
|
|
OP(PAT,SRC,GXxor), OP(SRC,DST,GXand),
|
|
|
|
OP(TMP,DST,GXxor) }, /* 0xe8 S^((S^P)&(S^D))*/
|
|
|
|
{ OP(DST,TMP,GXcopy), OP(SRC,DST,GXnand),
|
|
|
|
OP(PAT,DST,GXand), OP(SRC,DST,GXxor),
|
|
|
|
OP(TMP,DST,GXequiv) }, /* 0xe9 ~D^S^(P&~(S&D))*/
|
|
|
|
{ OP(PAT,SRC,GXand), OP(SRC,DST,GXor) }, /* 0xea D|(P&S) */
|
|
|
|
{ OP(PAT,SRC,GXequiv), OP(SRC,DST,GXor) }, /* 0xeb D|~(P^S) */
|
|
|
|
{ OP(PAT,DST,GXand), OP(SRC,DST,GXor) }, /* 0xec S|(D&P) */
|
|
|
|
{ OP(PAT,DST,GXequiv), OP(SRC,DST,GXor) }, /* 0xed S|~(D^P) */
|
|
|
|
{ OP(SRC,DST,GXor) }, /* 0xee S|D */
|
|
|
|
{ OP(PAT,DST,GXorInverted), OP(SRC,DST,GXor) }, /* 0xef S|D|~P */
|
|
|
|
{ OP(PAT,DST,GXcopy) }, /* 0xf0 P */
|
|
|
|
{ OP(SRC,DST,GXnor), OP(PAT,DST,GXor) }, /* 0xf1 P|~(D|S) */
|
|
|
|
{ OP(SRC,DST,GXandInverted), OP(PAT,DST,GXor) }, /* 0xf2 P|(D&~S) */
|
|
|
|
{ OP(PAT,SRC,GXorReverse) }, /* 0xf3 P|~S */
|
|
|
|
{ OP(SRC,DST,GXandReverse), OP(PAT,DST,GXor) }, /* 0xf4 P|(S&~D) */
|
|
|
|
{ OP(PAT,DST,GXorReverse) }, /* 0xf5 P|~D */
|
|
|
|
{ OP(SRC,DST,GXxor), OP(PAT,DST,GXor) }, /* 0xf6 P|(D^S) */
|
|
|
|
{ OP(SRC,DST,GXnand), OP(PAT,DST,GXor) }, /* 0xf7 P|~(S&D) */
|
|
|
|
{ OP(SRC,DST,GXand), OP(PAT,DST,GXor) }, /* 0xf8 P|(D&S) */
|
|
|
|
{ OP(SRC,DST,GXequiv), OP(PAT,DST,GXor) }, /* 0xf9 P|~(D^S) */
|
|
|
|
{ OP(PAT,DST,GXor) }, /* 0xfa D|P */
|
|
|
|
{ OP(PAT,SRC,GXorReverse), OP(SRC,DST,GXor) }, /* 0xfb D|P|~S */
|
|
|
|
{ OP(PAT,SRC,GXor) }, /* 0xfc P|S */
|
|
|
|
{ OP(SRC,DST,GXorReverse), OP(PAT,DST,GXor) }, /* 0xfd P|S|~D */
|
|
|
|
{ OP(SRC,DST,GXor), OP(PAT,DST,GXor) }, /* 0xfe P|D|S */
|
|
|
|
{ OP(PAT,DST,GXset) } /* 0xff 1 */
|
|
|
|
};
|
|
|
|
|
2011-07-14 12:47:45 +02:00
|
|
|
static const unsigned char bit_swap[256] =
|
|
|
|
{
|
|
|
|
0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
|
|
|
|
0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
|
|
|
|
0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
|
|
|
|
0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
|
|
|
|
0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
|
|
|
|
0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
|
|
|
|
0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
|
|
|
|
0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
|
|
|
|
0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
|
|
|
|
0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
|
|
|
|
0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
|
|
|
|
0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
|
|
|
|
0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
|
|
|
|
0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
|
|
|
|
0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
|
|
|
|
0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
|
|
|
|
0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
|
|
|
|
0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
|
|
|
|
0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
|
|
|
|
0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
|
|
|
|
0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
|
|
|
|
0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
|
|
|
|
0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
|
|
|
|
0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
|
|
|
|
0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
|
|
|
|
0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
|
|
|
|
0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
|
|
|
|
0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
|
|
|
|
0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
|
|
|
|
0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
|
|
|
|
0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
|
|
|
|
0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
|
|
|
|
};
|
1994-12-27 15:11:53 +01:00
|
|
|
|
2011-07-15 13:49:36 +02:00
|
|
|
#ifdef WORDS_BIGENDIAN
|
|
|
|
static const unsigned int zeropad_masks[32] =
|
|
|
|
{
|
|
|
|
0xffffffff, 0x80000000, 0xc0000000, 0xe0000000, 0xf0000000, 0xf8000000, 0xfc000000, 0xfe000000,
|
|
|
|
0xff000000, 0xff800000, 0xffc00000, 0xffe00000, 0xfff00000, 0xfff80000, 0xfffc0000, 0xfffe0000,
|
|
|
|
0xffff0000, 0xffff8000, 0xffffc000, 0xffffe000, 0xfffff000, 0xfffff800, 0xfffffc00, 0xfffffe00,
|
|
|
|
0xffffff00, 0xffffff80, 0xffffffc0, 0xffffffe0, 0xfffffff0, 0xfffffff8, 0xfffffffc, 0xfffffffe
|
|
|
|
};
|
|
|
|
#else
|
|
|
|
static const unsigned int zeropad_masks[32] =
|
|
|
|
{
|
|
|
|
0xffffffff, 0x00000080, 0x000000c0, 0x000000e0, 0x000000f0, 0x000000f8, 0x000000fc, 0x000000fe,
|
|
|
|
0x000000ff, 0x000080ff, 0x0000c0ff, 0x0000e0ff, 0x0000f0ff, 0x0000f8ff, 0x0000fcff, 0x0000feff,
|
|
|
|
0x0000ffff, 0x0080ffff, 0x00c0ffff, 0x00e0ffff, 0x00f0ffff, 0x00f8ffff, 0x00fcffff, 0x00feffff,
|
|
|
|
0x00ffffff, 0x80ffffff, 0xc0ffffff, 0xe0ffffff, 0xf0ffffff, 0xf8ffffff, 0xfcffffff, 0xfeffffff
|
|
|
|
};
|
|
|
|
#endif
|
|
|
|
|
1994-12-27 15:11:53 +01:00
|
|
|
#ifdef BITBLT_TEST /* Opcodes test */
|
|
|
|
|
|
|
|
static int do_bitop( int s, int d, int rop )
|
|
|
|
{
|
|
|
|
int res;
|
|
|
|
switch(rop)
|
|
|
|
{
|
|
|
|
case GXclear: res = 0; break;
|
|
|
|
case GXand: res = s & d; break;
|
|
|
|
case GXandReverse: res = s & ~d; break;
|
|
|
|
case GXcopy: res = s; break;
|
|
|
|
case GXandInverted: res = ~s & d; break;
|
|
|
|
case GXnoop: res = d; break;
|
|
|
|
case GXxor: res = s ^ d; break;
|
|
|
|
case GXor: res = s | d; break;
|
|
|
|
case GXnor: res = ~(s | d); break;
|
|
|
|
case GXequiv: res = ~s ^ d; break;
|
|
|
|
case GXinvert: res = ~d; break;
|
|
|
|
case GXorReverse: res = s | ~d; break;
|
|
|
|
case GXcopyInverted: res = ~s; break;
|
|
|
|
case GXorInverted: res = ~s | d; break;
|
|
|
|
case GXnand: res = ~(s & d); break;
|
|
|
|
case GXset: res = 1; break;
|
|
|
|
}
|
|
|
|
return res & 1;
|
|
|
|
}
|
|
|
|
|
2001-09-11 02:32:32 +02:00
|
|
|
int main()
|
1994-12-27 15:11:53 +01:00
|
|
|
{
|
|
|
|
int rop, i, res, src, dst, pat, tmp, dstUsed;
|
2011-07-18 11:38:20 +02:00
|
|
|
const unsigned char *opcode;
|
1994-12-27 15:11:53 +01:00
|
|
|
|
|
|
|
for (rop = 0; rop < 256; rop++)
|
|
|
|
{
|
|
|
|
res = dstUsed = 0;
|
|
|
|
for (i = 0; i < 8; i++)
|
|
|
|
{
|
|
|
|
pat = (i >> 2) & 1;
|
|
|
|
src = (i >> 1) & 1;
|
|
|
|
dst = i & 1;
|
|
|
|
for (opcode = BITBLT_Opcodes[rop]; *opcode; opcode++)
|
|
|
|
{
|
|
|
|
switch(*opcode >> 4)
|
|
|
|
{
|
|
|
|
case OP_ARGS(DST,TMP):
|
|
|
|
tmp = do_bitop( dst, tmp, *opcode & 0xf );
|
|
|
|
break;
|
|
|
|
case OP_ARGS(DST,SRC):
|
|
|
|
src = do_bitop( dst, src, *opcode & 0xf );
|
|
|
|
break;
|
|
|
|
case OP_ARGS(SRC,TMP):
|
|
|
|
tmp = do_bitop( src, tmp, *opcode & 0xf );
|
|
|
|
break;
|
|
|
|
case OP_ARGS(SRC,DST):
|
|
|
|
dst = do_bitop( src, dst, *opcode & 0xf );
|
|
|
|
dstUsed = 1;
|
|
|
|
break;
|
|
|
|
case OP_ARGS(PAT,DST):
|
|
|
|
dst = do_bitop( pat, dst, *opcode & 0xf );
|
|
|
|
dstUsed = 1;
|
|
|
|
break;
|
|
|
|
case OP_ARGS(PAT,SRC):
|
|
|
|
src = do_bitop( pat, src, *opcode & 0xf );
|
|
|
|
break;
|
|
|
|
case OP_ARGS(TMP,DST):
|
|
|
|
dst = do_bitop( tmp, dst, *opcode & 0xf );
|
|
|
|
dstUsed = 1;
|
|
|
|
break;
|
|
|
|
case OP_ARGS(TMP,SRC):
|
|
|
|
src = do_bitop( tmp, src, *opcode & 0xf );
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
printf( "Invalid opcode %x\n", *opcode );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!dstUsed) dst = src;
|
|
|
|
if (dst) res |= 1 << i;
|
|
|
|
}
|
|
|
|
if (res != rop) printf( "%02x: ERROR, res=%02x\n", rop, res );
|
|
|
|
}
|
2001-09-11 02:32:32 +02:00
|
|
|
|
|
|
|
return 0;
|
1994-12-27 15:11:53 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif /* BITBLT_TEST */
|
|
|
|
|
1993-09-04 12:09:32 +02:00
|
|
|
|
2004-09-16 22:29:25 +02:00
|
|
|
static void get_colors(X11DRV_PDEVICE *physDevDst, X11DRV_PDEVICE *physDevSrc,
|
|
|
|
int *fg, int *bg)
|
|
|
|
{
|
|
|
|
RGBQUAD rgb[2];
|
|
|
|
|
|
|
|
*fg = physDevDst->textPixel;
|
|
|
|
*bg = physDevDst->backgroundPixel;
|
|
|
|
if(physDevSrc->depth == 1) {
|
2011-07-08 16:03:59 +02:00
|
|
|
if(GetDIBColorTable(physDevSrc->dev.hdc, 0, 2, rgb) == 2) {
|
2004-09-16 22:29:25 +02:00
|
|
|
DWORD logcolor;
|
|
|
|
logcolor = RGB(rgb[0].rgbRed, rgb[0].rgbGreen, rgb[0].rgbBlue);
|
|
|
|
*fg = X11DRV_PALETTE_ToPhysical( physDevDst, logcolor );
|
|
|
|
logcolor = RGB(rgb[1].rgbRed, rgb[1].rgbGreen,rgb[1].rgbBlue);
|
|
|
|
*bg = X11DRV_PALETTE_ToPhysical( physDevDst, logcolor );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2010-04-15 22:53:27 +02:00
|
|
|
/* return a mask for meaningful bits when doing an XGetPixel on an image */
|
|
|
|
static unsigned long image_pixel_mask( X11DRV_PDEVICE *physDev )
|
|
|
|
{
|
|
|
|
unsigned long ret;
|
|
|
|
ColorShifts *shifts = physDev->color_shifts;
|
|
|
|
|
|
|
|
if (!shifts) shifts = &X11DRV_PALETTE_default_shifts;
|
|
|
|
ret = (shifts->physicalRed.max << shifts->physicalRed.shift) |
|
|
|
|
(shifts->physicalGreen.max << shifts->physicalGreen.shift) |
|
|
|
|
(shifts->physicalBlue.max << shifts->physicalBlue.shift);
|
|
|
|
if (!ret) ret = (1 << physDev->depth) - 1;
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
Release 941122
Sun Nov 20 18:30:06 1994 Alexandre Julliard (julliard@lamisun.epfl.ch)
* [controls/scroll.c] [include/scroll.h]
Rewritten most of scroll-bar code for better Windows look & feel.
Implemented EnableScrollBar().
Preliminary keyboard support.
* [objects/bitblt.c]
Fixed BadMatch error for BitBlt() and StretchBlt() when reading
bits from outside the visible region.
* [objects/oembitmap.c] [include/bitmaps/obm_*]
Use XPM symbolic colors to load bitmaps. This allows the colors
of the bitmaps to depend on the system colors.
* [tools/make_debug]
Made the make_debug script more robust.
* [windows/dialog.c]
Fixed CheckRadioButton().
* [windows/nonclient.c]
A few changes to scroll-bar drawing and tracking.
* [windows/winpos.c]
Renamed NextWindowFromPoint() to WINPOS_NextWindowFromPoint() to
avoid confusion, and optimized it somewhat.
Nov 19, 94 Martin Ayotte (wine@trgcorp.mksinfo.qc.ca)
* [misc/audio.c]
* [misc/mcianim.c]
more coding but nothing spectacular.
* [misc/mmaux.c]
some coding to access '/dev/mixer'.
* [misc/midi.c]
some coding to read .MID files, but it's not playing yet.
Sun Nov 13 19:31:03 1994 James Youngman (mbcstjy@afs.man.ac.uk)
* [objects/dib.c]
Reimplemented DIB_SetImageBits_RLE8() so that it would cope with
bitmaps which don't end 0x00, 0x02 (previously it blew up). This
includes some bitmaps output by Paint Shop Pro. Implementation is
possibly now too lax. Please see the notes on the function about
why.
* [controls/desktop.c]
The desktop pattern should be painted if the wallpaper doesn't
cover the whole screen width OR the whole screen height.
Sun Nov 13 00:07:11 MET 1994 Erik Bos <erik@xs4all.nl>
* [objects/dib.c]
Small bug in DIB_SetImageBits() fixed, bitmaps in 16,24 bpp
now work.
* [loader/ne_resource.c] [include/resource.h]
Some cleanup.
Thu Nov 10 20:44:58 1994 Martin von Loewis (martin@cs.csufresno.edu)
* [Configure]
[rc/sysres.rc]
Primitive compile-time support for multiple languages
* [rc/sysres_De.rc]
New file
* [loader/resource.c]
LoadBitmap: Recognize end of sysresbm properly
* [rc/Imakefile]
Rules to compile resources simplified, dependencies changed
* [rc/sysresbm.rc]
Don't use sysresbm if using XPM
* [windows/dialog.c]
CreateDialogIndirectParam: Reverse Z-order of controls
* [windows/message.c]
MSG_TranslateMouseMsg: Fix HTTRANSPARENT handling
* [windows/winpos.c]
NextWindowFromPoint: New function
* [controls/button.c]
WM_NCHITTEST: Group Box is HTTRANSPARENT
BUTTON_CheckAutoRadioButton: New function
BM_SETCHECK: Added call to BUTTON_CheckAutoRadioButton
Mon Nov 7 11:20:26 1994 Paul Falstad (pf@zoof.cts.com)
* [objects/text.c]
Fix hang when using DrawText(..., DT_WORDBREAK) with a word that
is too long to break.
* [objects/font.c]
Don't assume helvetica if there is no font family; let the other
font attributes decide what font to use.
* [controls/widgets.c]
Listboxes and combo boxes need to be notified of double-clicks.
* [controls/listbox.c]
[include/listbox.h]
scrolling to bottom of list box should display last item at the
bottom, not at the top.
list boxes need to allocate a separate heap for their item data,
rather than using the user heap. Otherwise, it's very easy to run
out of memory for list box items.
removed redundant code in ListBoxAddString(). Implemented simple
version of LBS_SORT.
Don't put [.] in the list box when using DDL_DIRECTORY.
* [controls/combo.c]
Combos should pass CBS_SORT onto their list box.
* [windows/win.c]
If window creation is aborted, remove the window from the
linked lists.
* [controls/static.c]
static controls with SS_ICON were always returning 0 from
WM_NCCREATE.
Make sure static controls have text to draw before drawing it.
1994-11-22 17:31:29 +01:00
|
|
|
/***********************************************************************
|
1995-01-09 19:21:16 +01:00
|
|
|
* BITBLT_StretchRow
|
|
|
|
*
|
|
|
|
* Stretch a row of pixels. Helper function for BITBLT_StretchImage.
|
Release 941122
Sun Nov 20 18:30:06 1994 Alexandre Julliard (julliard@lamisun.epfl.ch)
* [controls/scroll.c] [include/scroll.h]
Rewritten most of scroll-bar code for better Windows look & feel.
Implemented EnableScrollBar().
Preliminary keyboard support.
* [objects/bitblt.c]
Fixed BadMatch error for BitBlt() and StretchBlt() when reading
bits from outside the visible region.
* [objects/oembitmap.c] [include/bitmaps/obm_*]
Use XPM symbolic colors to load bitmaps. This allows the colors
of the bitmaps to depend on the system colors.
* [tools/make_debug]
Made the make_debug script more robust.
* [windows/dialog.c]
Fixed CheckRadioButton().
* [windows/nonclient.c]
A few changes to scroll-bar drawing and tracking.
* [windows/winpos.c]
Renamed NextWindowFromPoint() to WINPOS_NextWindowFromPoint() to
avoid confusion, and optimized it somewhat.
Nov 19, 94 Martin Ayotte (wine@trgcorp.mksinfo.qc.ca)
* [misc/audio.c]
* [misc/mcianim.c]
more coding but nothing spectacular.
* [misc/mmaux.c]
some coding to access '/dev/mixer'.
* [misc/midi.c]
some coding to read .MID files, but it's not playing yet.
Sun Nov 13 19:31:03 1994 James Youngman (mbcstjy@afs.man.ac.uk)
* [objects/dib.c]
Reimplemented DIB_SetImageBits_RLE8() so that it would cope with
bitmaps which don't end 0x00, 0x02 (previously it blew up). This
includes some bitmaps output by Paint Shop Pro. Implementation is
possibly now too lax. Please see the notes on the function about
why.
* [controls/desktop.c]
The desktop pattern should be painted if the wallpaper doesn't
cover the whole screen width OR the whole screen height.
Sun Nov 13 00:07:11 MET 1994 Erik Bos <erik@xs4all.nl>
* [objects/dib.c]
Small bug in DIB_SetImageBits() fixed, bitmaps in 16,24 bpp
now work.
* [loader/ne_resource.c] [include/resource.h]
Some cleanup.
Thu Nov 10 20:44:58 1994 Martin von Loewis (martin@cs.csufresno.edu)
* [Configure]
[rc/sysres.rc]
Primitive compile-time support for multiple languages
* [rc/sysres_De.rc]
New file
* [loader/resource.c]
LoadBitmap: Recognize end of sysresbm properly
* [rc/Imakefile]
Rules to compile resources simplified, dependencies changed
* [rc/sysresbm.rc]
Don't use sysresbm if using XPM
* [windows/dialog.c]
CreateDialogIndirectParam: Reverse Z-order of controls
* [windows/message.c]
MSG_TranslateMouseMsg: Fix HTTRANSPARENT handling
* [windows/winpos.c]
NextWindowFromPoint: New function
* [controls/button.c]
WM_NCHITTEST: Group Box is HTTRANSPARENT
BUTTON_CheckAutoRadioButton: New function
BM_SETCHECK: Added call to BUTTON_CheckAutoRadioButton
Mon Nov 7 11:20:26 1994 Paul Falstad (pf@zoof.cts.com)
* [objects/text.c]
Fix hang when using DrawText(..., DT_WORDBREAK) with a word that
is too long to break.
* [objects/font.c]
Don't assume helvetica if there is no font family; let the other
font attributes decide what font to use.
* [controls/widgets.c]
Listboxes and combo boxes need to be notified of double-clicks.
* [controls/listbox.c]
[include/listbox.h]
scrolling to bottom of list box should display last item at the
bottom, not at the top.
list boxes need to allocate a separate heap for their item data,
rather than using the user heap. Otherwise, it's very easy to run
out of memory for list box items.
removed redundant code in ListBoxAddString(). Implemented simple
version of LBS_SORT.
Don't put [.] in the list box when using DDL_DIRECTORY.
* [controls/combo.c]
Combos should pass CBS_SORT onto their list box.
* [windows/win.c]
If window creation is aborted, remove the window from the
linked lists.
* [controls/static.c]
static controls with SS_ICON were always returning 0 from
WM_NCCREATE.
Make sure static controls have text to draw before drawing it.
1994-11-22 17:31:29 +01:00
|
|
|
*/
|
1995-01-09 19:21:16 +01:00
|
|
|
static void BITBLT_StretchRow( int *rowSrc, int *rowDst,
|
1999-02-26 12:11:13 +01:00
|
|
|
INT startDst, INT widthDst,
|
|
|
|
INT xinc, INT xoff, WORD mode )
|
Release 941122
Sun Nov 20 18:30:06 1994 Alexandre Julliard (julliard@lamisun.epfl.ch)
* [controls/scroll.c] [include/scroll.h]
Rewritten most of scroll-bar code for better Windows look & feel.
Implemented EnableScrollBar().
Preliminary keyboard support.
* [objects/bitblt.c]
Fixed BadMatch error for BitBlt() and StretchBlt() when reading
bits from outside the visible region.
* [objects/oembitmap.c] [include/bitmaps/obm_*]
Use XPM symbolic colors to load bitmaps. This allows the colors
of the bitmaps to depend on the system colors.
* [tools/make_debug]
Made the make_debug script more robust.
* [windows/dialog.c]
Fixed CheckRadioButton().
* [windows/nonclient.c]
A few changes to scroll-bar drawing and tracking.
* [windows/winpos.c]
Renamed NextWindowFromPoint() to WINPOS_NextWindowFromPoint() to
avoid confusion, and optimized it somewhat.
Nov 19, 94 Martin Ayotte (wine@trgcorp.mksinfo.qc.ca)
* [misc/audio.c]
* [misc/mcianim.c]
more coding but nothing spectacular.
* [misc/mmaux.c]
some coding to access '/dev/mixer'.
* [misc/midi.c]
some coding to read .MID files, but it's not playing yet.
Sun Nov 13 19:31:03 1994 James Youngman (mbcstjy@afs.man.ac.uk)
* [objects/dib.c]
Reimplemented DIB_SetImageBits_RLE8() so that it would cope with
bitmaps which don't end 0x00, 0x02 (previously it blew up). This
includes some bitmaps output by Paint Shop Pro. Implementation is
possibly now too lax. Please see the notes on the function about
why.
* [controls/desktop.c]
The desktop pattern should be painted if the wallpaper doesn't
cover the whole screen width OR the whole screen height.
Sun Nov 13 00:07:11 MET 1994 Erik Bos <erik@xs4all.nl>
* [objects/dib.c]
Small bug in DIB_SetImageBits() fixed, bitmaps in 16,24 bpp
now work.
* [loader/ne_resource.c] [include/resource.h]
Some cleanup.
Thu Nov 10 20:44:58 1994 Martin von Loewis (martin@cs.csufresno.edu)
* [Configure]
[rc/sysres.rc]
Primitive compile-time support for multiple languages
* [rc/sysres_De.rc]
New file
* [loader/resource.c]
LoadBitmap: Recognize end of sysresbm properly
* [rc/Imakefile]
Rules to compile resources simplified, dependencies changed
* [rc/sysresbm.rc]
Don't use sysresbm if using XPM
* [windows/dialog.c]
CreateDialogIndirectParam: Reverse Z-order of controls
* [windows/message.c]
MSG_TranslateMouseMsg: Fix HTTRANSPARENT handling
* [windows/winpos.c]
NextWindowFromPoint: New function
* [controls/button.c]
WM_NCHITTEST: Group Box is HTTRANSPARENT
BUTTON_CheckAutoRadioButton: New function
BM_SETCHECK: Added call to BUTTON_CheckAutoRadioButton
Mon Nov 7 11:20:26 1994 Paul Falstad (pf@zoof.cts.com)
* [objects/text.c]
Fix hang when using DrawText(..., DT_WORDBREAK) with a word that
is too long to break.
* [objects/font.c]
Don't assume helvetica if there is no font family; let the other
font attributes decide what font to use.
* [controls/widgets.c]
Listboxes and combo boxes need to be notified of double-clicks.
* [controls/listbox.c]
[include/listbox.h]
scrolling to bottom of list box should display last item at the
bottom, not at the top.
list boxes need to allocate a separate heap for their item data,
rather than using the user heap. Otherwise, it's very easy to run
out of memory for list box items.
removed redundant code in ListBoxAddString(). Implemented simple
version of LBS_SORT.
Don't put [.] in the list box when using DDL_DIRECTORY.
* [controls/combo.c]
Combos should pass CBS_SORT onto their list box.
* [windows/win.c]
If window creation is aborted, remove the window from the
linked lists.
* [controls/static.c]
static controls with SS_ICON were always returning 0 from
WM_NCCREATE.
Make sure static controls have text to draw before drawing it.
1994-11-22 17:31:29 +01:00
|
|
|
{
|
1999-02-26 12:11:13 +01:00
|
|
|
register INT xsrc = xinc * startDst + xoff;
|
1995-01-09 19:21:16 +01:00
|
|
|
rowDst += startDst;
|
|
|
|
switch(mode)
|
Release 941122
Sun Nov 20 18:30:06 1994 Alexandre Julliard (julliard@lamisun.epfl.ch)
* [controls/scroll.c] [include/scroll.h]
Rewritten most of scroll-bar code for better Windows look & feel.
Implemented EnableScrollBar().
Preliminary keyboard support.
* [objects/bitblt.c]
Fixed BadMatch error for BitBlt() and StretchBlt() when reading
bits from outside the visible region.
* [objects/oembitmap.c] [include/bitmaps/obm_*]
Use XPM symbolic colors to load bitmaps. This allows the colors
of the bitmaps to depend on the system colors.
* [tools/make_debug]
Made the make_debug script more robust.
* [windows/dialog.c]
Fixed CheckRadioButton().
* [windows/nonclient.c]
A few changes to scroll-bar drawing and tracking.
* [windows/winpos.c]
Renamed NextWindowFromPoint() to WINPOS_NextWindowFromPoint() to
avoid confusion, and optimized it somewhat.
Nov 19, 94 Martin Ayotte (wine@trgcorp.mksinfo.qc.ca)
* [misc/audio.c]
* [misc/mcianim.c]
more coding but nothing spectacular.
* [misc/mmaux.c]
some coding to access '/dev/mixer'.
* [misc/midi.c]
some coding to read .MID files, but it's not playing yet.
Sun Nov 13 19:31:03 1994 James Youngman (mbcstjy@afs.man.ac.uk)
* [objects/dib.c]
Reimplemented DIB_SetImageBits_RLE8() so that it would cope with
bitmaps which don't end 0x00, 0x02 (previously it blew up). This
includes some bitmaps output by Paint Shop Pro. Implementation is
possibly now too lax. Please see the notes on the function about
why.
* [controls/desktop.c]
The desktop pattern should be painted if the wallpaper doesn't
cover the whole screen width OR the whole screen height.
Sun Nov 13 00:07:11 MET 1994 Erik Bos <erik@xs4all.nl>
* [objects/dib.c]
Small bug in DIB_SetImageBits() fixed, bitmaps in 16,24 bpp
now work.
* [loader/ne_resource.c] [include/resource.h]
Some cleanup.
Thu Nov 10 20:44:58 1994 Martin von Loewis (martin@cs.csufresno.edu)
* [Configure]
[rc/sysres.rc]
Primitive compile-time support for multiple languages
* [rc/sysres_De.rc]
New file
* [loader/resource.c]
LoadBitmap: Recognize end of sysresbm properly
* [rc/Imakefile]
Rules to compile resources simplified, dependencies changed
* [rc/sysresbm.rc]
Don't use sysresbm if using XPM
* [windows/dialog.c]
CreateDialogIndirectParam: Reverse Z-order of controls
* [windows/message.c]
MSG_TranslateMouseMsg: Fix HTTRANSPARENT handling
* [windows/winpos.c]
NextWindowFromPoint: New function
* [controls/button.c]
WM_NCHITTEST: Group Box is HTTRANSPARENT
BUTTON_CheckAutoRadioButton: New function
BM_SETCHECK: Added call to BUTTON_CheckAutoRadioButton
Mon Nov 7 11:20:26 1994 Paul Falstad (pf@zoof.cts.com)
* [objects/text.c]
Fix hang when using DrawText(..., DT_WORDBREAK) with a word that
is too long to break.
* [objects/font.c]
Don't assume helvetica if there is no font family; let the other
font attributes decide what font to use.
* [controls/widgets.c]
Listboxes and combo boxes need to be notified of double-clicks.
* [controls/listbox.c]
[include/listbox.h]
scrolling to bottom of list box should display last item at the
bottom, not at the top.
list boxes need to allocate a separate heap for their item data,
rather than using the user heap. Otherwise, it's very easy to run
out of memory for list box items.
removed redundant code in ListBoxAddString(). Implemented simple
version of LBS_SORT.
Don't put [.] in the list box when using DDL_DIRECTORY.
* [controls/combo.c]
Combos should pass CBS_SORT onto their list box.
* [windows/win.c]
If window creation is aborted, remove the window from the
linked lists.
* [controls/static.c]
static controls with SS_ICON were always returning 0 from
WM_NCCREATE.
Make sure static controls have text to draw before drawing it.
1994-11-22 17:31:29 +01:00
|
|
|
{
|
1995-01-09 19:21:16 +01:00
|
|
|
case STRETCH_ANDSCANS:
|
|
|
|
for(; widthDst > 0; widthDst--, xsrc += xinc)
|
|
|
|
*rowDst++ &= rowSrc[xsrc >> 16];
|
|
|
|
break;
|
|
|
|
case STRETCH_ORSCANS:
|
|
|
|
for(; widthDst > 0; widthDst--, xsrc += xinc)
|
|
|
|
*rowDst++ |= rowSrc[xsrc >> 16];
|
|
|
|
break;
|
|
|
|
case STRETCH_DELETESCANS:
|
|
|
|
for(; widthDst > 0; widthDst--, xsrc += xinc)
|
|
|
|
*rowDst++ = rowSrc[xsrc >> 16];
|
|
|
|
break;
|
Release 941122
Sun Nov 20 18:30:06 1994 Alexandre Julliard (julliard@lamisun.epfl.ch)
* [controls/scroll.c] [include/scroll.h]
Rewritten most of scroll-bar code for better Windows look & feel.
Implemented EnableScrollBar().
Preliminary keyboard support.
* [objects/bitblt.c]
Fixed BadMatch error for BitBlt() and StretchBlt() when reading
bits from outside the visible region.
* [objects/oembitmap.c] [include/bitmaps/obm_*]
Use XPM symbolic colors to load bitmaps. This allows the colors
of the bitmaps to depend on the system colors.
* [tools/make_debug]
Made the make_debug script more robust.
* [windows/dialog.c]
Fixed CheckRadioButton().
* [windows/nonclient.c]
A few changes to scroll-bar drawing and tracking.
* [windows/winpos.c]
Renamed NextWindowFromPoint() to WINPOS_NextWindowFromPoint() to
avoid confusion, and optimized it somewhat.
Nov 19, 94 Martin Ayotte (wine@trgcorp.mksinfo.qc.ca)
* [misc/audio.c]
* [misc/mcianim.c]
more coding but nothing spectacular.
* [misc/mmaux.c]
some coding to access '/dev/mixer'.
* [misc/midi.c]
some coding to read .MID files, but it's not playing yet.
Sun Nov 13 19:31:03 1994 James Youngman (mbcstjy@afs.man.ac.uk)
* [objects/dib.c]
Reimplemented DIB_SetImageBits_RLE8() so that it would cope with
bitmaps which don't end 0x00, 0x02 (previously it blew up). This
includes some bitmaps output by Paint Shop Pro. Implementation is
possibly now too lax. Please see the notes on the function about
why.
* [controls/desktop.c]
The desktop pattern should be painted if the wallpaper doesn't
cover the whole screen width OR the whole screen height.
Sun Nov 13 00:07:11 MET 1994 Erik Bos <erik@xs4all.nl>
* [objects/dib.c]
Small bug in DIB_SetImageBits() fixed, bitmaps in 16,24 bpp
now work.
* [loader/ne_resource.c] [include/resource.h]
Some cleanup.
Thu Nov 10 20:44:58 1994 Martin von Loewis (martin@cs.csufresno.edu)
* [Configure]
[rc/sysres.rc]
Primitive compile-time support for multiple languages
* [rc/sysres_De.rc]
New file
* [loader/resource.c]
LoadBitmap: Recognize end of sysresbm properly
* [rc/Imakefile]
Rules to compile resources simplified, dependencies changed
* [rc/sysresbm.rc]
Don't use sysresbm if using XPM
* [windows/dialog.c]
CreateDialogIndirectParam: Reverse Z-order of controls
* [windows/message.c]
MSG_TranslateMouseMsg: Fix HTTRANSPARENT handling
* [windows/winpos.c]
NextWindowFromPoint: New function
* [controls/button.c]
WM_NCHITTEST: Group Box is HTTRANSPARENT
BUTTON_CheckAutoRadioButton: New function
BM_SETCHECK: Added call to BUTTON_CheckAutoRadioButton
Mon Nov 7 11:20:26 1994 Paul Falstad (pf@zoof.cts.com)
* [objects/text.c]
Fix hang when using DrawText(..., DT_WORDBREAK) with a word that
is too long to break.
* [objects/font.c]
Don't assume helvetica if there is no font family; let the other
font attributes decide what font to use.
* [controls/widgets.c]
Listboxes and combo boxes need to be notified of double-clicks.
* [controls/listbox.c]
[include/listbox.h]
scrolling to bottom of list box should display last item at the
bottom, not at the top.
list boxes need to allocate a separate heap for their item data,
rather than using the user heap. Otherwise, it's very easy to run
out of memory for list box items.
removed redundant code in ListBoxAddString(). Implemented simple
version of LBS_SORT.
Don't put [.] in the list box when using DDL_DIRECTORY.
* [controls/combo.c]
Combos should pass CBS_SORT onto their list box.
* [windows/win.c]
If window creation is aborted, remove the window from the
linked lists.
* [controls/static.c]
static controls with SS_ICON were always returning 0 from
WM_NCCREATE.
Make sure static controls have text to draw before drawing it.
1994-11-22 17:31:29 +01:00
|
|
|
}
|
1995-01-09 19:21:16 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* BITBLT_ShrinkRow
|
|
|
|
*
|
|
|
|
* Shrink a row of pixels. Helper function for BITBLT_StretchImage.
|
|
|
|
*/
|
|
|
|
static void BITBLT_ShrinkRow( int *rowSrc, int *rowDst,
|
1999-02-26 12:11:13 +01:00
|
|
|
INT startSrc, INT widthSrc,
|
|
|
|
INT xinc, INT xoff, WORD mode )
|
1995-01-09 19:21:16 +01:00
|
|
|
{
|
1999-02-26 12:11:13 +01:00
|
|
|
register INT xdst = xinc * startSrc + xoff;
|
1995-01-09 19:21:16 +01:00
|
|
|
rowSrc += startSrc;
|
|
|
|
switch(mode)
|
Release 941122
Sun Nov 20 18:30:06 1994 Alexandre Julliard (julliard@lamisun.epfl.ch)
* [controls/scroll.c] [include/scroll.h]
Rewritten most of scroll-bar code for better Windows look & feel.
Implemented EnableScrollBar().
Preliminary keyboard support.
* [objects/bitblt.c]
Fixed BadMatch error for BitBlt() and StretchBlt() when reading
bits from outside the visible region.
* [objects/oembitmap.c] [include/bitmaps/obm_*]
Use XPM symbolic colors to load bitmaps. This allows the colors
of the bitmaps to depend on the system colors.
* [tools/make_debug]
Made the make_debug script more robust.
* [windows/dialog.c]
Fixed CheckRadioButton().
* [windows/nonclient.c]
A few changes to scroll-bar drawing and tracking.
* [windows/winpos.c]
Renamed NextWindowFromPoint() to WINPOS_NextWindowFromPoint() to
avoid confusion, and optimized it somewhat.
Nov 19, 94 Martin Ayotte (wine@trgcorp.mksinfo.qc.ca)
* [misc/audio.c]
* [misc/mcianim.c]
more coding but nothing spectacular.
* [misc/mmaux.c]
some coding to access '/dev/mixer'.
* [misc/midi.c]
some coding to read .MID files, but it's not playing yet.
Sun Nov 13 19:31:03 1994 James Youngman (mbcstjy@afs.man.ac.uk)
* [objects/dib.c]
Reimplemented DIB_SetImageBits_RLE8() so that it would cope with
bitmaps which don't end 0x00, 0x02 (previously it blew up). This
includes some bitmaps output by Paint Shop Pro. Implementation is
possibly now too lax. Please see the notes on the function about
why.
* [controls/desktop.c]
The desktop pattern should be painted if the wallpaper doesn't
cover the whole screen width OR the whole screen height.
Sun Nov 13 00:07:11 MET 1994 Erik Bos <erik@xs4all.nl>
* [objects/dib.c]
Small bug in DIB_SetImageBits() fixed, bitmaps in 16,24 bpp
now work.
* [loader/ne_resource.c] [include/resource.h]
Some cleanup.
Thu Nov 10 20:44:58 1994 Martin von Loewis (martin@cs.csufresno.edu)
* [Configure]
[rc/sysres.rc]
Primitive compile-time support for multiple languages
* [rc/sysres_De.rc]
New file
* [loader/resource.c]
LoadBitmap: Recognize end of sysresbm properly
* [rc/Imakefile]
Rules to compile resources simplified, dependencies changed
* [rc/sysresbm.rc]
Don't use sysresbm if using XPM
* [windows/dialog.c]
CreateDialogIndirectParam: Reverse Z-order of controls
* [windows/message.c]
MSG_TranslateMouseMsg: Fix HTTRANSPARENT handling
* [windows/winpos.c]
NextWindowFromPoint: New function
* [controls/button.c]
WM_NCHITTEST: Group Box is HTTRANSPARENT
BUTTON_CheckAutoRadioButton: New function
BM_SETCHECK: Added call to BUTTON_CheckAutoRadioButton
Mon Nov 7 11:20:26 1994 Paul Falstad (pf@zoof.cts.com)
* [objects/text.c]
Fix hang when using DrawText(..., DT_WORDBREAK) with a word that
is too long to break.
* [objects/font.c]
Don't assume helvetica if there is no font family; let the other
font attributes decide what font to use.
* [controls/widgets.c]
Listboxes and combo boxes need to be notified of double-clicks.
* [controls/listbox.c]
[include/listbox.h]
scrolling to bottom of list box should display last item at the
bottom, not at the top.
list boxes need to allocate a separate heap for their item data,
rather than using the user heap. Otherwise, it's very easy to run
out of memory for list box items.
removed redundant code in ListBoxAddString(). Implemented simple
version of LBS_SORT.
Don't put [.] in the list box when using DDL_DIRECTORY.
* [controls/combo.c]
Combos should pass CBS_SORT onto their list box.
* [windows/win.c]
If window creation is aborted, remove the window from the
linked lists.
* [controls/static.c]
static controls with SS_ICON were always returning 0 from
WM_NCCREATE.
Make sure static controls have text to draw before drawing it.
1994-11-22 17:31:29 +01:00
|
|
|
{
|
1995-01-09 19:21:16 +01:00
|
|
|
case STRETCH_ORSCANS:
|
|
|
|
for(; widthSrc > 0; widthSrc--, xdst += xinc)
|
|
|
|
rowDst[xdst >> 16] |= *rowSrc++;
|
|
|
|
break;
|
|
|
|
case STRETCH_ANDSCANS:
|
|
|
|
for(; widthSrc > 0; widthSrc--, xdst += xinc)
|
|
|
|
rowDst[xdst >> 16] &= *rowSrc++;
|
|
|
|
break;
|
|
|
|
case STRETCH_DELETESCANS:
|
|
|
|
for(; widthSrc > 0; widthSrc--, xdst += xinc)
|
|
|
|
rowDst[xdst >> 16] = *rowSrc++;
|
|
|
|
break;
|
Release 941122
Sun Nov 20 18:30:06 1994 Alexandre Julliard (julliard@lamisun.epfl.ch)
* [controls/scroll.c] [include/scroll.h]
Rewritten most of scroll-bar code for better Windows look & feel.
Implemented EnableScrollBar().
Preliminary keyboard support.
* [objects/bitblt.c]
Fixed BadMatch error for BitBlt() and StretchBlt() when reading
bits from outside the visible region.
* [objects/oembitmap.c] [include/bitmaps/obm_*]
Use XPM symbolic colors to load bitmaps. This allows the colors
of the bitmaps to depend on the system colors.
* [tools/make_debug]
Made the make_debug script more robust.
* [windows/dialog.c]
Fixed CheckRadioButton().
* [windows/nonclient.c]
A few changes to scroll-bar drawing and tracking.
* [windows/winpos.c]
Renamed NextWindowFromPoint() to WINPOS_NextWindowFromPoint() to
avoid confusion, and optimized it somewhat.
Nov 19, 94 Martin Ayotte (wine@trgcorp.mksinfo.qc.ca)
* [misc/audio.c]
* [misc/mcianim.c]
more coding but nothing spectacular.
* [misc/mmaux.c]
some coding to access '/dev/mixer'.
* [misc/midi.c]
some coding to read .MID files, but it's not playing yet.
Sun Nov 13 19:31:03 1994 James Youngman (mbcstjy@afs.man.ac.uk)
* [objects/dib.c]
Reimplemented DIB_SetImageBits_RLE8() so that it would cope with
bitmaps which don't end 0x00, 0x02 (previously it blew up). This
includes some bitmaps output by Paint Shop Pro. Implementation is
possibly now too lax. Please see the notes on the function about
why.
* [controls/desktop.c]
The desktop pattern should be painted if the wallpaper doesn't
cover the whole screen width OR the whole screen height.
Sun Nov 13 00:07:11 MET 1994 Erik Bos <erik@xs4all.nl>
* [objects/dib.c]
Small bug in DIB_SetImageBits() fixed, bitmaps in 16,24 bpp
now work.
* [loader/ne_resource.c] [include/resource.h]
Some cleanup.
Thu Nov 10 20:44:58 1994 Martin von Loewis (martin@cs.csufresno.edu)
* [Configure]
[rc/sysres.rc]
Primitive compile-time support for multiple languages
* [rc/sysres_De.rc]
New file
* [loader/resource.c]
LoadBitmap: Recognize end of sysresbm properly
* [rc/Imakefile]
Rules to compile resources simplified, dependencies changed
* [rc/sysresbm.rc]
Don't use sysresbm if using XPM
* [windows/dialog.c]
CreateDialogIndirectParam: Reverse Z-order of controls
* [windows/message.c]
MSG_TranslateMouseMsg: Fix HTTRANSPARENT handling
* [windows/winpos.c]
NextWindowFromPoint: New function
* [controls/button.c]
WM_NCHITTEST: Group Box is HTTRANSPARENT
BUTTON_CheckAutoRadioButton: New function
BM_SETCHECK: Added call to BUTTON_CheckAutoRadioButton
Mon Nov 7 11:20:26 1994 Paul Falstad (pf@zoof.cts.com)
* [objects/text.c]
Fix hang when using DrawText(..., DT_WORDBREAK) with a word that
is too long to break.
* [objects/font.c]
Don't assume helvetica if there is no font family; let the other
font attributes decide what font to use.
* [controls/widgets.c]
Listboxes and combo boxes need to be notified of double-clicks.
* [controls/listbox.c]
[include/listbox.h]
scrolling to bottom of list box should display last item at the
bottom, not at the top.
list boxes need to allocate a separate heap for their item data,
rather than using the user heap. Otherwise, it's very easy to run
out of memory for list box items.
removed redundant code in ListBoxAddString(). Implemented simple
version of LBS_SORT.
Don't put [.] in the list box when using DDL_DIRECTORY.
* [controls/combo.c]
Combos should pass CBS_SORT onto their list box.
* [windows/win.c]
If window creation is aborted, remove the window from the
linked lists.
* [controls/static.c]
static controls with SS_ICON were always returning 0 from
WM_NCCREATE.
Make sure static controls have text to draw before drawing it.
1994-11-22 17:31:29 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
1994-12-27 15:11:53 +01:00
|
|
|
/***********************************************************************
|
1995-01-09 19:21:16 +01:00
|
|
|
* BITBLT_GetRow
|
1994-12-27 15:11:53 +01:00
|
|
|
*
|
1995-01-09 19:21:16 +01:00
|
|
|
* Retrieve a row from an image. Helper function for BITBLT_StretchImage.
|
1994-12-27 15:11:53 +01:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
static void BITBLT_GetRow( XImage *image, int *pdata, INT row,
|
|
|
|
INT start, INT width, INT depthDst,
|
2010-04-15 22:53:27 +02:00
|
|
|
int fg, int bg, unsigned long pixel_mask, BOOL swap)
|
1994-12-27 15:11:53 +01:00
|
|
|
{
|
1999-02-26 12:11:13 +01:00
|
|
|
register INT i;
|
1994-12-27 15:11:53 +01: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
|
|
|
assert( (row >= 0) && (row < image->height) );
|
|
|
|
assert( (start >= 0) && (width <= image->width) );
|
|
|
|
|
1995-01-09 19:21:16 +01:00
|
|
|
pdata += swap ? start+width-1 : start;
|
Release 950606
Tue Jun 6 12:11:41 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [controls/menu.c]
Fixed bug with drawing multi-column menus with vertical separator.
* [debugger/debug.l]
Fixed NULL-pointer reference after readline().
* [if1632/winprocs.spec] [miscemu/int21.c] [miscemu/interrupts.c]
Added interrupt vector emulation. Allows to retrieve an interrupt
vector and jump to it without crashing.
* [loader/ldt.c]
Moved ldt.c to memory directory.
* [loader/task.c]
Implemented LockCurrentTask() and GetInstanceData().
* [objects/bitblt.c]
Fixed a bug that caused StretchBlt() to use wrong colors when
stretching a monochrome bitmap to a color display.
* [objects/bitmap.c]
Fixed a segmented pointer bug in CreateBitmapIndirect().
* [tools/build.c]
Added possibility to have arguments for register functions; used
by interrupt vectors to remove the flags from the stack.
Generate a new function CallTo32_LargeStack(), that allows calling
a 32-bit function using the original 32-bit stack, for functions
that need more that 64k of stack.
Tue May 30 10:29:56 1995 Martin von Loewis <martin@informatik.hu-berlin.de>
* [if1632/shell.spec] [misc/shell.c]
DoEnvironmentSubst: fixed prototype
* [if1632/gdi.spec] [objects/palette.c]
SetSystemPaletteUse: new function
* [if1632/kernel.spec] [loader/resource.c]
DirectResAlloc: new function
* [if1632/user.spec] [windows/keyboard.c]
SetKeyboardState: new function
Mon May 29 12:58:28 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [tools/build.c]
Prevent interrupts from destroying the args for a 32 bit function
by loading the correct value into %esp directly after %ss.
* [loader/ne_image.c] [loader/module.c]
The new instance must be created earlier in LoadModule(), so that
fixups referencing it will be handled correctly.
Initialize the local heap for a DGROUP in NE_LoadSegment().
* [objects/dib.c]
Like RLE8 bitmaps, RLE4 bitmaps don't always end with a proper code.
This used to crash Wine. Fixed.
* [objects/text.c]
Fix possible null pointer dereference in debugging output.
* [misc/commdlg.c]
Handle user input in the edit control better. Some bugs fixed.
* [memory/local.c]
Started implementing moveable blocks. This is unfinished (!), but
at least it does not seem to break things.
Wed May 24 13:26:36 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [loader/module.c]
LoadModule(): DLLs occasionally have a data segment, and they work
much better if it is loaded :-)
LoadLibrary(): pass HMODULE instead of HINSTANCE to NE_InitializeDLLs.
FindModule(): also strip off the last backslash of the pathnames
(Winhelp tried to load C:\WINDOWS\SYSTEM\COMMDLG.DLL).
GetModuleHandle(): just call MODULE_FindModule, it does the same job,
only better.
* [loader/ne_image.c]
LocalInit() the heap of a DLL in NE_InitDLL. (This is probably
not really correct, it seems that all programs and DLLs try to do
this themselves. But they pass weird parameters.)
NE_InitializeDLLs should also call NE_InitDLL for the passed hModule.
* [loader/task.c] [misc/user.c]
Finish global initializations in InitTask instead of InitApp, or
all the DLLs will be initialized in InitTask without any available
window classes!
1995-06-06 18:40:35 +02:00
|
|
|
if (image->depth == depthDst) /* color -> color */
|
1994-12-27 15:11:53 +01:00
|
|
|
{
|
1999-04-01 10:16:08 +02:00
|
|
|
if (X11DRV_PALETTE_XPixelToPalette && (depthDst != 1))
|
1995-01-09 19:21:16 +01:00
|
|
|
if (swap) for (i = 0; i < width; i++)
|
1999-04-01 10:16:08 +02:00
|
|
|
*pdata-- = X11DRV_PALETTE_XPixelToPalette[XGetPixel( image, i, row )];
|
1995-01-09 19:21:16 +01:00
|
|
|
else for (i = 0; i < width; i++)
|
1999-04-01 10:16:08 +02:00
|
|
|
*pdata++ = X11DRV_PALETTE_XPixelToPalette[XGetPixel( image, i, row )];
|
1995-01-09 19:21:16 +01:00
|
|
|
else
|
|
|
|
if (swap) for (i = 0; i < width; i++)
|
1998-02-15 20:40:49 +01:00
|
|
|
*pdata-- = XGetPixel( image, i, row );
|
1995-01-09 19:21:16 +01:00
|
|
|
else for (i = 0; i < width; i++)
|
1998-02-15 20:40:49 +01:00
|
|
|
*pdata++ = XGetPixel( image, i, row );
|
1994-12-27 15:11:53 +01:00
|
|
|
}
|
1995-01-09 19:21:16 +01:00
|
|
|
else
|
1994-12-27 15:11:53 +01:00
|
|
|
{
|
Release 950606
Tue Jun 6 12:11:41 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [controls/menu.c]
Fixed bug with drawing multi-column menus with vertical separator.
* [debugger/debug.l]
Fixed NULL-pointer reference after readline().
* [if1632/winprocs.spec] [miscemu/int21.c] [miscemu/interrupts.c]
Added interrupt vector emulation. Allows to retrieve an interrupt
vector and jump to it without crashing.
* [loader/ldt.c]
Moved ldt.c to memory directory.
* [loader/task.c]
Implemented LockCurrentTask() and GetInstanceData().
* [objects/bitblt.c]
Fixed a bug that caused StretchBlt() to use wrong colors when
stretching a monochrome bitmap to a color display.
* [objects/bitmap.c]
Fixed a segmented pointer bug in CreateBitmapIndirect().
* [tools/build.c]
Added possibility to have arguments for register functions; used
by interrupt vectors to remove the flags from the stack.
Generate a new function CallTo32_LargeStack(), that allows calling
a 32-bit function using the original 32-bit stack, for functions
that need more that 64k of stack.
Tue May 30 10:29:56 1995 Martin von Loewis <martin@informatik.hu-berlin.de>
* [if1632/shell.spec] [misc/shell.c]
DoEnvironmentSubst: fixed prototype
* [if1632/gdi.spec] [objects/palette.c]
SetSystemPaletteUse: new function
* [if1632/kernel.spec] [loader/resource.c]
DirectResAlloc: new function
* [if1632/user.spec] [windows/keyboard.c]
SetKeyboardState: new function
Mon May 29 12:58:28 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [tools/build.c]
Prevent interrupts from destroying the args for a 32 bit function
by loading the correct value into %esp directly after %ss.
* [loader/ne_image.c] [loader/module.c]
The new instance must be created earlier in LoadModule(), so that
fixups referencing it will be handled correctly.
Initialize the local heap for a DGROUP in NE_LoadSegment().
* [objects/dib.c]
Like RLE8 bitmaps, RLE4 bitmaps don't always end with a proper code.
This used to crash Wine. Fixed.
* [objects/text.c]
Fix possible null pointer dereference in debugging output.
* [misc/commdlg.c]
Handle user input in the edit control better. Some bugs fixed.
* [memory/local.c]
Started implementing moveable blocks. This is unfinished (!), but
at least it does not seem to break things.
Wed May 24 13:26:36 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [loader/module.c]
LoadModule(): DLLs occasionally have a data segment, and they work
much better if it is loaded :-)
LoadLibrary(): pass HMODULE instead of HINSTANCE to NE_InitializeDLLs.
FindModule(): also strip off the last backslash of the pathnames
(Winhelp tried to load C:\WINDOWS\SYSTEM\COMMDLG.DLL).
GetModuleHandle(): just call MODULE_FindModule, it does the same job,
only better.
* [loader/ne_image.c]
LocalInit() the heap of a DLL in NE_InitDLL. (This is probably
not really correct, it seems that all programs and DLLs try to do
this themselves. But they pass weird parameters.)
NE_InitializeDLLs should also call NE_InitDLL for the passed hModule.
* [loader/task.c] [misc/user.c]
Finish global initializations in InitTask instead of InitApp, or
all the DLLs will be initialized in InitTask without any available
window classes!
1995-06-06 18:40:35 +02:00
|
|
|
if (image->depth == 1) /* monochrome -> color */
|
|
|
|
{
|
1999-04-01 10:16:08 +02:00
|
|
|
if (X11DRV_PALETTE_XPixelToPalette)
|
Release 950606
Tue Jun 6 12:11:41 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [controls/menu.c]
Fixed bug with drawing multi-column menus with vertical separator.
* [debugger/debug.l]
Fixed NULL-pointer reference after readline().
* [if1632/winprocs.spec] [miscemu/int21.c] [miscemu/interrupts.c]
Added interrupt vector emulation. Allows to retrieve an interrupt
vector and jump to it without crashing.
* [loader/ldt.c]
Moved ldt.c to memory directory.
* [loader/task.c]
Implemented LockCurrentTask() and GetInstanceData().
* [objects/bitblt.c]
Fixed a bug that caused StretchBlt() to use wrong colors when
stretching a monochrome bitmap to a color display.
* [objects/bitmap.c]
Fixed a segmented pointer bug in CreateBitmapIndirect().
* [tools/build.c]
Added possibility to have arguments for register functions; used
by interrupt vectors to remove the flags from the stack.
Generate a new function CallTo32_LargeStack(), that allows calling
a 32-bit function using the original 32-bit stack, for functions
that need more that 64k of stack.
Tue May 30 10:29:56 1995 Martin von Loewis <martin@informatik.hu-berlin.de>
* [if1632/shell.spec] [misc/shell.c]
DoEnvironmentSubst: fixed prototype
* [if1632/gdi.spec] [objects/palette.c]
SetSystemPaletteUse: new function
* [if1632/kernel.spec] [loader/resource.c]
DirectResAlloc: new function
* [if1632/user.spec] [windows/keyboard.c]
SetKeyboardState: new function
Mon May 29 12:58:28 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [tools/build.c]
Prevent interrupts from destroying the args for a 32 bit function
by loading the correct value into %esp directly after %ss.
* [loader/ne_image.c] [loader/module.c]
The new instance must be created earlier in LoadModule(), so that
fixups referencing it will be handled correctly.
Initialize the local heap for a DGROUP in NE_LoadSegment().
* [objects/dib.c]
Like RLE8 bitmaps, RLE4 bitmaps don't always end with a proper code.
This used to crash Wine. Fixed.
* [objects/text.c]
Fix possible null pointer dereference in debugging output.
* [misc/commdlg.c]
Handle user input in the edit control better. Some bugs fixed.
* [memory/local.c]
Started implementing moveable blocks. This is unfinished (!), but
at least it does not seem to break things.
Wed May 24 13:26:36 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [loader/module.c]
LoadModule(): DLLs occasionally have a data segment, and they work
much better if it is loaded :-)
LoadLibrary(): pass HMODULE instead of HINSTANCE to NE_InitializeDLLs.
FindModule(): also strip off the last backslash of the pathnames
(Winhelp tried to load C:\WINDOWS\SYSTEM\COMMDLG.DLL).
GetModuleHandle(): just call MODULE_FindModule, it does the same job,
only better.
* [loader/ne_image.c]
LocalInit() the heap of a DLL in NE_InitDLL. (This is probably
not really correct, it seems that all programs and DLLs try to do
this themselves. But they pass weird parameters.)
NE_InitializeDLLs should also call NE_InitDLL for the passed hModule.
* [loader/task.c] [misc/user.c]
Finish global initializations in InitTask instead of InitApp, or
all the DLLs will be initialized in InitTask without any available
window classes!
1995-06-06 18:40:35 +02:00
|
|
|
{
|
1999-04-01 10:16:08 +02:00
|
|
|
fg = X11DRV_PALETTE_XPixelToPalette[fg];
|
|
|
|
bg = X11DRV_PALETTE_XPixelToPalette[bg];
|
Release 950606
Tue Jun 6 12:11:41 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [controls/menu.c]
Fixed bug with drawing multi-column menus with vertical separator.
* [debugger/debug.l]
Fixed NULL-pointer reference after readline().
* [if1632/winprocs.spec] [miscemu/int21.c] [miscemu/interrupts.c]
Added interrupt vector emulation. Allows to retrieve an interrupt
vector and jump to it without crashing.
* [loader/ldt.c]
Moved ldt.c to memory directory.
* [loader/task.c]
Implemented LockCurrentTask() and GetInstanceData().
* [objects/bitblt.c]
Fixed a bug that caused StretchBlt() to use wrong colors when
stretching a monochrome bitmap to a color display.
* [objects/bitmap.c]
Fixed a segmented pointer bug in CreateBitmapIndirect().
* [tools/build.c]
Added possibility to have arguments for register functions; used
by interrupt vectors to remove the flags from the stack.
Generate a new function CallTo32_LargeStack(), that allows calling
a 32-bit function using the original 32-bit stack, for functions
that need more that 64k of stack.
Tue May 30 10:29:56 1995 Martin von Loewis <martin@informatik.hu-berlin.de>
* [if1632/shell.spec] [misc/shell.c]
DoEnvironmentSubst: fixed prototype
* [if1632/gdi.spec] [objects/palette.c]
SetSystemPaletteUse: new function
* [if1632/kernel.spec] [loader/resource.c]
DirectResAlloc: new function
* [if1632/user.spec] [windows/keyboard.c]
SetKeyboardState: new function
Mon May 29 12:58:28 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [tools/build.c]
Prevent interrupts from destroying the args for a 32 bit function
by loading the correct value into %esp directly after %ss.
* [loader/ne_image.c] [loader/module.c]
The new instance must be created earlier in LoadModule(), so that
fixups referencing it will be handled correctly.
Initialize the local heap for a DGROUP in NE_LoadSegment().
* [objects/dib.c]
Like RLE8 bitmaps, RLE4 bitmaps don't always end with a proper code.
This used to crash Wine. Fixed.
* [objects/text.c]
Fix possible null pointer dereference in debugging output.
* [misc/commdlg.c]
Handle user input in the edit control better. Some bugs fixed.
* [memory/local.c]
Started implementing moveable blocks. This is unfinished (!), but
at least it does not seem to break things.
Wed May 24 13:26:36 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [loader/module.c]
LoadModule(): DLLs occasionally have a data segment, and they work
much better if it is loaded :-)
LoadLibrary(): pass HMODULE instead of HINSTANCE to NE_InitializeDLLs.
FindModule(): also strip off the last backslash of the pathnames
(Winhelp tried to load C:\WINDOWS\SYSTEM\COMMDLG.DLL).
GetModuleHandle(): just call MODULE_FindModule, it does the same job,
only better.
* [loader/ne_image.c]
LocalInit() the heap of a DLL in NE_InitDLL. (This is probably
not really correct, it seems that all programs and DLLs try to do
this themselves. But they pass weird parameters.)
NE_InitializeDLLs should also call NE_InitDLL for the passed hModule.
* [loader/task.c] [misc/user.c]
Finish global initializations in InitTask instead of InitApp, or
all the DLLs will be initialized in InitTask without any available
window classes!
1995-06-06 18:40:35 +02:00
|
|
|
}
|
1995-01-09 19:21:16 +01:00
|
|
|
if (swap) for (i = 0; i < width; i++)
|
1998-02-15 20:40:49 +01:00
|
|
|
*pdata-- = XGetPixel( image, i, row ) ? bg : fg;
|
1995-01-09 19:21:16 +01:00
|
|
|
else for (i = 0; i < width; i++)
|
1998-02-15 20:40:49 +01:00
|
|
|
*pdata++ = XGetPixel( image, i, row ) ? bg : fg;
|
Release 950606
Tue Jun 6 12:11:41 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [controls/menu.c]
Fixed bug with drawing multi-column menus with vertical separator.
* [debugger/debug.l]
Fixed NULL-pointer reference after readline().
* [if1632/winprocs.spec] [miscemu/int21.c] [miscemu/interrupts.c]
Added interrupt vector emulation. Allows to retrieve an interrupt
vector and jump to it without crashing.
* [loader/ldt.c]
Moved ldt.c to memory directory.
* [loader/task.c]
Implemented LockCurrentTask() and GetInstanceData().
* [objects/bitblt.c]
Fixed a bug that caused StretchBlt() to use wrong colors when
stretching a monochrome bitmap to a color display.
* [objects/bitmap.c]
Fixed a segmented pointer bug in CreateBitmapIndirect().
* [tools/build.c]
Added possibility to have arguments for register functions; used
by interrupt vectors to remove the flags from the stack.
Generate a new function CallTo32_LargeStack(), that allows calling
a 32-bit function using the original 32-bit stack, for functions
that need more that 64k of stack.
Tue May 30 10:29:56 1995 Martin von Loewis <martin@informatik.hu-berlin.de>
* [if1632/shell.spec] [misc/shell.c]
DoEnvironmentSubst: fixed prototype
* [if1632/gdi.spec] [objects/palette.c]
SetSystemPaletteUse: new function
* [if1632/kernel.spec] [loader/resource.c]
DirectResAlloc: new function
* [if1632/user.spec] [windows/keyboard.c]
SetKeyboardState: new function
Mon May 29 12:58:28 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [tools/build.c]
Prevent interrupts from destroying the args for a 32 bit function
by loading the correct value into %esp directly after %ss.
* [loader/ne_image.c] [loader/module.c]
The new instance must be created earlier in LoadModule(), so that
fixups referencing it will be handled correctly.
Initialize the local heap for a DGROUP in NE_LoadSegment().
* [objects/dib.c]
Like RLE8 bitmaps, RLE4 bitmaps don't always end with a proper code.
This used to crash Wine. Fixed.
* [objects/text.c]
Fix possible null pointer dereference in debugging output.
* [misc/commdlg.c]
Handle user input in the edit control better. Some bugs fixed.
* [memory/local.c]
Started implementing moveable blocks. This is unfinished (!), but
at least it does not seem to break things.
Wed May 24 13:26:36 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [loader/module.c]
LoadModule(): DLLs occasionally have a data segment, and they work
much better if it is loaded :-)
LoadLibrary(): pass HMODULE instead of HINSTANCE to NE_InitializeDLLs.
FindModule(): also strip off the last backslash of the pathnames
(Winhelp tried to load C:\WINDOWS\SYSTEM\COMMDLG.DLL).
GetModuleHandle(): just call MODULE_FindModule, it does the same job,
only better.
* [loader/ne_image.c]
LocalInit() the heap of a DLL in NE_InitDLL. (This is probably
not really correct, it seems that all programs and DLLs try to do
this themselves. But they pass weird parameters.)
NE_InitializeDLLs should also call NE_InitDLL for the passed hModule.
* [loader/task.c] [misc/user.c]
Finish global initializations in InitTask instead of InitApp, or
all the DLLs will be initialized in InitTask without any available
window classes!
1995-06-06 18:40:35 +02:00
|
|
|
}
|
|
|
|
else /* color -> monochrome */
|
|
|
|
{
|
1995-01-09 19:21:16 +01:00
|
|
|
if (swap) for (i = 0; i < width; i++)
|
2010-04-15 22:53:27 +02:00
|
|
|
*pdata-- = ((XGetPixel( image, i, row ) & pixel_mask) == bg) ? 1 : 0;
|
1995-01-09 19:21:16 +01:00
|
|
|
else for (i = 0; i < width; i++)
|
2010-04-15 22:53:27 +02:00
|
|
|
*pdata++ = ((XGetPixel( image, i, row ) & pixel_mask) == bg) ? 1 : 0;
|
Release 950606
Tue Jun 6 12:11:41 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [controls/menu.c]
Fixed bug with drawing multi-column menus with vertical separator.
* [debugger/debug.l]
Fixed NULL-pointer reference after readline().
* [if1632/winprocs.spec] [miscemu/int21.c] [miscemu/interrupts.c]
Added interrupt vector emulation. Allows to retrieve an interrupt
vector and jump to it without crashing.
* [loader/ldt.c]
Moved ldt.c to memory directory.
* [loader/task.c]
Implemented LockCurrentTask() and GetInstanceData().
* [objects/bitblt.c]
Fixed a bug that caused StretchBlt() to use wrong colors when
stretching a monochrome bitmap to a color display.
* [objects/bitmap.c]
Fixed a segmented pointer bug in CreateBitmapIndirect().
* [tools/build.c]
Added possibility to have arguments for register functions; used
by interrupt vectors to remove the flags from the stack.
Generate a new function CallTo32_LargeStack(), that allows calling
a 32-bit function using the original 32-bit stack, for functions
that need more that 64k of stack.
Tue May 30 10:29:56 1995 Martin von Loewis <martin@informatik.hu-berlin.de>
* [if1632/shell.spec] [misc/shell.c]
DoEnvironmentSubst: fixed prototype
* [if1632/gdi.spec] [objects/palette.c]
SetSystemPaletteUse: new function
* [if1632/kernel.spec] [loader/resource.c]
DirectResAlloc: new function
* [if1632/user.spec] [windows/keyboard.c]
SetKeyboardState: new function
Mon May 29 12:58:28 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [tools/build.c]
Prevent interrupts from destroying the args for a 32 bit function
by loading the correct value into %esp directly after %ss.
* [loader/ne_image.c] [loader/module.c]
The new instance must be created earlier in LoadModule(), so that
fixups referencing it will be handled correctly.
Initialize the local heap for a DGROUP in NE_LoadSegment().
* [objects/dib.c]
Like RLE8 bitmaps, RLE4 bitmaps don't always end with a proper code.
This used to crash Wine. Fixed.
* [objects/text.c]
Fix possible null pointer dereference in debugging output.
* [misc/commdlg.c]
Handle user input in the edit control better. Some bugs fixed.
* [memory/local.c]
Started implementing moveable blocks. This is unfinished (!), but
at least it does not seem to break things.
Wed May 24 13:26:36 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [loader/module.c]
LoadModule(): DLLs occasionally have a data segment, and they work
much better if it is loaded :-)
LoadLibrary(): pass HMODULE instead of HINSTANCE to NE_InitializeDLLs.
FindModule(): also strip off the last backslash of the pathnames
(Winhelp tried to load C:\WINDOWS\SYSTEM\COMMDLG.DLL).
GetModuleHandle(): just call MODULE_FindModule, it does the same job,
only better.
* [loader/ne_image.c]
LocalInit() the heap of a DLL in NE_InitDLL. (This is probably
not really correct, it seems that all programs and DLLs try to do
this themselves. But they pass weird parameters.)
NE_InitializeDLLs should also call NE_InitDLL for the passed hModule.
* [loader/task.c] [misc/user.c]
Finish global initializations in InitTask instead of InitApp, or
all the DLLs will be initialized in InitTask without any available
window classes!
1995-06-06 18:40:35 +02:00
|
|
|
}
|
1994-12-27 15:11:53 +01:00
|
|
|
}
|
1995-01-09 19:21:16 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* BITBLT_StretchImage
|
|
|
|
*
|
|
|
|
* Stretch an X image.
|
1996-11-17 19:59:11 +01:00
|
|
|
* FIXME: does not work for full 32-bit coordinates.
|
1995-01-09 19:21:16 +01:00
|
|
|
*/
|
|
|
|
static void BITBLT_StretchImage( XImage *srcImage, XImage *dstImage,
|
1999-02-26 12:11:13 +01:00
|
|
|
INT widthSrc, INT heightSrc,
|
|
|
|
INT widthDst, INT heightDst,
|
|
|
|
RECT *visRectSrc, RECT *visRectDst,
|
2010-04-15 22:53:27 +02:00
|
|
|
int foreground, int background,
|
|
|
|
unsigned long pixel_mask, WORD mode )
|
1995-01-09 19:21:16 +01:00
|
|
|
{
|
|
|
|
int *rowSrc, *rowDst, *pixel;
|
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
|
|
|
char *pdata;
|
1999-02-26 12:11:13 +01:00
|
|
|
INT xinc, xoff, yinc, ysrc, ydst;
|
|
|
|
register INT x, y;
|
|
|
|
BOOL hstretch, vstretch, hswap, vswap;
|
1995-01-09 19:21:16 +01:00
|
|
|
|
2008-02-02 18:27:19 +01:00
|
|
|
hswap = widthSrc * widthDst < 0;
|
|
|
|
vswap = heightSrc * heightDst < 0;
|
1995-01-09 19:21:16 +01:00
|
|
|
widthSrc = abs(widthSrc);
|
|
|
|
heightSrc = abs(heightSrc);
|
|
|
|
widthDst = abs(widthDst);
|
|
|
|
heightDst = abs(heightDst);
|
|
|
|
|
2005-03-24 22:01:35 +01:00
|
|
|
if (!(rowSrc = HeapAlloc( GetProcessHeap(), 0,
|
|
|
|
(widthSrc+widthDst)*sizeof(int) ))) return;
|
1995-01-09 19:21:16 +01:00
|
|
|
rowDst = rowSrc + widthSrc;
|
1994-12-27 15:11:53 +01:00
|
|
|
|
1995-01-09 19:21:16 +01:00
|
|
|
/* When stretching, all modes are the same, and DELETESCANS is faster */
|
|
|
|
if ((widthSrc < widthDst) && (heightSrc < heightDst))
|
|
|
|
mode = STRETCH_DELETESCANS;
|
|
|
|
|
2002-04-09 03:34:06 +02:00
|
|
|
if (mode == STRETCH_HALFTONE) /* FIXME */
|
|
|
|
mode = STRETCH_DELETESCANS;
|
|
|
|
|
1995-01-24 17:21:01 +01:00
|
|
|
if (mode != STRETCH_DELETESCANS)
|
|
|
|
memset( rowDst, (mode == STRETCH_ANDSCANS) ? 0xff : 0x00,
|
|
|
|
widthDst*sizeof(int) );
|
|
|
|
|
1996-08-11 17:49:51 +02:00
|
|
|
hstretch = (widthSrc < widthDst);
|
|
|
|
vstretch = (heightSrc < heightDst);
|
|
|
|
|
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
|
|
|
if (hstretch)
|
|
|
|
{
|
2008-02-02 18:27:19 +01:00
|
|
|
xinc = (widthSrc << 16) / widthDst;
|
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
|
|
|
xoff = ((widthSrc << 16) - (xinc * widthDst)) / 2;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
xinc = ((int)widthDst << 16) / widthSrc;
|
|
|
|
xoff = ((widthDst << 16) - (xinc * widthSrc)) / 2;
|
|
|
|
}
|
1995-01-09 19:21:16 +01:00
|
|
|
|
2007-09-27 18:02:26 +02:00
|
|
|
wine_tsx11_lock();
|
1995-01-09 19:21:16 +01:00
|
|
|
if (vstretch)
|
1994-12-27 15:11:53 +01:00
|
|
|
{
|
2008-02-02 18:27:19 +01:00
|
|
|
yinc = (heightSrc << 16) / heightDst;
|
1995-01-09 19:21:16 +01:00
|
|
|
ydst = visRectDst->top;
|
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
|
|
|
if (vswap)
|
|
|
|
{
|
|
|
|
ysrc = yinc * (heightDst - ydst - 1);
|
|
|
|
yinc = -yinc;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
ysrc = yinc * ydst;
|
|
|
|
|
|
|
|
for ( ; (ydst < visRectDst->bottom); ysrc += yinc, ydst++)
|
|
|
|
{
|
|
|
|
if (((ysrc >> 16) < visRectSrc->top) ||
|
|
|
|
((ysrc >> 16) >= visRectSrc->bottom)) continue;
|
|
|
|
|
|
|
|
/* Retrieve a source row */
|
|
|
|
BITBLT_GetRow( srcImage, rowSrc, (ysrc >> 16) - visRectSrc->top,
|
2011-07-18 16:22:57 +02:00
|
|
|
visRectSrc->left, visRectSrc->right - visRectSrc->left,
|
2010-04-15 22:53:27 +02:00
|
|
|
dstImage->depth, foreground, background, pixel_mask, hswap );
|
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
|
|
|
|
|
|
|
/* Stretch or shrink it */
|
|
|
|
if (hstretch)
|
|
|
|
BITBLT_StretchRow( rowSrc, rowDst, visRectDst->left,
|
|
|
|
visRectDst->right - visRectDst->left,
|
|
|
|
xinc, xoff, mode );
|
2011-07-18 16:22:57 +02:00
|
|
|
else BITBLT_ShrinkRow( rowSrc, rowDst, visRectSrc->left,
|
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
|
|
|
visRectSrc->right - visRectSrc->left,
|
|
|
|
xinc, xoff, mode );
|
|
|
|
|
|
|
|
/* Store the destination row */
|
|
|
|
pixel = rowDst + visRectDst->right - 1;
|
|
|
|
y = ydst - visRectDst->top;
|
|
|
|
for (x = visRectDst->right-visRectDst->left-1; x >= 0; x--)
|
1998-02-15 20:40:49 +01:00
|
|
|
XPutPixel( dstImage, x, y, *pixel-- );
|
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
|
|
|
if (mode != STRETCH_DELETESCANS)
|
|
|
|
memset( rowDst, (mode == STRETCH_ANDSCANS) ? 0xff : 0x00,
|
|
|
|
widthDst*sizeof(int) );
|
|
|
|
|
|
|
|
/* Make copies of the destination row */
|
|
|
|
|
|
|
|
pdata = dstImage->data + dstImage->bytes_per_line * y;
|
|
|
|
while (((ysrc + yinc) >> 16 == ysrc >> 16) &&
|
|
|
|
(ydst < visRectDst->bottom-1))
|
|
|
|
{
|
|
|
|
memcpy( pdata + dstImage->bytes_per_line, pdata,
|
|
|
|
dstImage->bytes_per_line );
|
|
|
|
pdata += dstImage->bytes_per_line;
|
|
|
|
ysrc += yinc;
|
|
|
|
ydst++;
|
|
|
|
}
|
2002-06-01 01:06:46 +02:00
|
|
|
}
|
1994-12-27 15:11:53 +01: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
|
|
|
else /* Shrinking */
|
1994-12-27 15:11:53 +01:00
|
|
|
{
|
2008-02-02 18:27:19 +01:00
|
|
|
yinc = (heightDst << 16) / heightSrc;
|
1995-01-09 19:21:16 +01:00
|
|
|
ysrc = visRectSrc->top;
|
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
|
|
|
ydst = ((heightDst << 16) - (yinc * heightSrc)) / 2;
|
|
|
|
if (vswap)
|
|
|
|
{
|
|
|
|
ydst += yinc * (heightSrc - ysrc - 1);
|
|
|
|
yinc = -yinc;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
ydst += yinc * ysrc;
|
1995-01-09 19:21:16 +01: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
|
|
|
for( ; (ysrc < visRectSrc->bottom); ydst += yinc, ysrc++)
|
1995-01-09 19:21:16 +01: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
|
|
|
if (((ydst >> 16) < visRectDst->top) ||
|
|
|
|
((ydst >> 16) >= visRectDst->bottom)) continue;
|
|
|
|
|
|
|
|
/* Retrieve a source row */
|
|
|
|
BITBLT_GetRow( srcImage, rowSrc, ysrc - visRectSrc->top,
|
2011-07-18 16:22:57 +02:00
|
|
|
visRectSrc->left, visRectSrc->right - visRectSrc->left,
|
2010-04-15 22:53:27 +02:00
|
|
|
dstImage->depth, foreground, background, pixel_mask, hswap );
|
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
|
|
|
|
|
|
|
/* Stretch or shrink it */
|
|
|
|
if (hstretch)
|
|
|
|
BITBLT_StretchRow( rowSrc, rowDst, visRectDst->left,
|
|
|
|
visRectDst->right - visRectDst->left,
|
|
|
|
xinc, xoff, mode );
|
2011-07-18 16:22:57 +02:00
|
|
|
else BITBLT_ShrinkRow( rowSrc, rowDst, visRectSrc->left,
|
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
|
|
|
visRectSrc->right - visRectSrc->left,
|
|
|
|
xinc, xoff, mode );
|
|
|
|
|
|
|
|
/* Merge several source rows into the destination */
|
1995-01-09 19:21:16 +01:00
|
|
|
if (mode == STRETCH_DELETESCANS)
|
1994-12-27 15:11:53 +01: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
|
|
|
/* Simply skip the overlapping rows */
|
1995-01-09 19:21:16 +01:00
|
|
|
while (((ydst + yinc) >> 16 == ydst >> 16) &&
|
|
|
|
(ysrc < visRectSrc->bottom-1))
|
|
|
|
{
|
|
|
|
ydst += yinc;
|
|
|
|
ysrc++;
|
|
|
|
}
|
1994-12-27 15:11:53 +01:00
|
|
|
}
|
1995-01-09 19:21:16 +01:00
|
|
|
else if (((ydst + yinc) >> 16 == ydst >> 16) &&
|
|
|
|
(ysrc < visRectSrc->bottom-1))
|
|
|
|
continue; /* Restart loop for next overlapping row */
|
2002-06-01 01:06:46 +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
|
|
|
/* Store the destination row */
|
|
|
|
pixel = rowDst + visRectDst->right - 1;
|
|
|
|
y = (ydst >> 16) - visRectDst->top;
|
|
|
|
for (x = visRectDst->right-visRectDst->left-1; x >= 0; x--)
|
1998-02-15 20:40:49 +01:00
|
|
|
XPutPixel( dstImage, x, y, *pixel-- );
|
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
|
|
|
if (mode != STRETCH_DELETESCANS)
|
|
|
|
memset( rowDst, (mode == STRETCH_ANDSCANS) ? 0xff : 0x00,
|
|
|
|
widthDst*sizeof(int) );
|
1995-01-09 19:21:16 +01:00
|
|
|
}
|
2002-06-01 01:06:46 +02:00
|
|
|
}
|
2007-09-27 18:02:26 +02:00
|
|
|
wine_tsx11_unlock();
|
Release 971101
Thu Oct 30 21:52:23 1997 Martin Boehme <boehme@informatik.mu-luebeck.de>
* [windows/nonclient.c]
Changed NC_TrackSysMenu to give the same behaviour as MS-Windows,
i.e. system menu already appears when mouse button is depressed.
Changed NC_HandleNCLButtonDblClk so that double clicks on scroll
bar arrows are handled the same way as single clicks.
* [windows/winpos.c]
Fixed SetWindowPos32 to clear WIN_NO_REDRAW when SWP_SHOWWINDOW is
set; this is the way MS-Windows behaves.
Thu Oct 30 21:08:57 1997 Morten Welinder <terra@diku.dk>
* [controls/status.c]
In SW_SetText, fix condition, I hope.
* [controls/menu.c]
(GetMenuState32): Don't mask return value. Print more debug info.
(MENU_MenuBarCalcSize): Be more careful when printing debug
information.
(MENU_SetItemData): Empty strings are separators.
* [graphics/x11drv/text.c]
Don't prototype CLIPPING_IntersectClipRect.
* [include/dc.h]
Prototype CLIPPING_IntersectClipRect.
* [objects/font.c]
Remove non-portable (and faulty) smartness in FONT_TextMetric*to*.
In CreateFont32W and CreateFont16, handle null font name.
* [objects/text.c]
(TEXT_NextLine): Fix end-of-line bug.
* [if1632/shell32.spec]
Activate existing implementation of ExtractIconA.
* [misc/shell.c]
For Control_RunDLL, add types for parameters.
Thu Oct 30 14:54:11 1997 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [controls/static.c] [include/windows.h] [misc/spy.c]
Added some win32 defines to static controls, basic SS_BITMAP style
handling implemented. [please add more, I am lacking knowledge and
time]
* [controls/status.c]
part_num 255 seems to indicate whole statusline (win95 cdplayer.exe)
* [if1632/thunk.c] [tools/build.c]
Support lret and 0x66 lret calls for CallTo16_regs
(needed for KERNEL32_45)
Fixed KERNEL32_45, QT_Thunk (should work now).
* [if1632/relay.c][if1632/builtin.c][tools/build.c][if1632/*32.spec]
Added string dumping to relay debugging for win32 apifuncs.
* [misc/ver.c]
Fixed and cleaned up VerQueryValue*.
* [multimedia/*.c][include/mmsystem.h][if1632/mmsystem.spec]
[if1632/winmm.spec]
Win32 support for lowlevel multimedia functions.
Added some mixer* lowlevel functions.
Some small fixes in the audio lowlevel queue handling, code
reformatting/cleanups.
* [debugger/hash.c]
Don't show difference between 16bit symbols if they are in
different segments.
* [objects/cursoricon.c]
Added GetIconInfo (partial) and CreateIconIndirect.
* [windows/mdi.c]
Fixed some "bad class" problems and crashes in MDICreateChild,
which happen in Win32 (jwp32.exe).
Wed Oct 29 00:57:27 1997 Bruce Milner <Bruce.Milner@genetics.utah.edu>
* [if1632/winaspi.spec] [misc/aspi.c] [include/aspi.c]
[documentation/aspi] [include/callback.h]
Added support for 16 bit ASPI calls to linux generic SCSI.
The support is not complete, but appears to run my Mustek
scanner from within ipplus.exe.
Mon Oct 27 00:59:41 1997 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [windows/dce.c]
DC reuse framework.
Sun Oct 26 18:41:21 1997 Huw D M Davies <h.davies1@physics.oxford.ac.uk>
* [graphics/x11drv/xfont.c]
Substituted fonts are removed from the alias table. References to
the old name are also updated.
* [controls/combo.c]
LB_SELECTSTRING32 not CB_SELECTSTRING32 should be sent to
ComboLBox.
Sun Oct 26 14:25:00 1997 Nikita V. Youshchenko <yoush@cs.msu.su>
* [include/drive.h] [files/drive.c] [msdos/int21.c]
Partially implemented DOS drive mapping (int21 AX=440F).
Sat Oct 25 13:03:29 1997 Alexandre Julliard <julliard@lrc.epfl.ch>
* [debugger/debug.l]
Support '.' in identifiers. Use "x . y" to access structure
fields.
* [debugger/hash.c] [loader/pe_image.c]
Load entry points of Win32 modules only when entering the
debugger.
* [debugger/break.c]
New function DEBUG_AddModuleBreakpoint() to set a breakpoint at
the start of every module.
* [files/file.c]
FILE_mmap() can now fake mmap() for unaligned offsets or broken
filesystems.
* [include/callback.h] [misc/callback.c] [if1632/thunk.c]
Use a table of callbacks instead of macros to differentiate
between emulator and Winelib.
* [loader/task.c]
Initialize current directory from cwd, not from module path.
* [tools/build.c]
Read CallTo16 prototypes directly from thunk.c source file.
* [windows/winproc.c] [windows/mdi.c]
Added translation for WM_MDIACTIVATE and WM_MDIGETACTIVE.
Fri Oct 24 21:41:25 1997 Uwe Bonnes <bon@elektron.ikp.tu-darmstadt.de>
* [files/drive.c]
Allow arguments like "a" for the drive related apis.
* [memory/global.c]
Keep the calculation for dwMemoryLoad in range.
* [misc/crtdll.c]
Make CRTDLL_getcwd use GetCurrentDirectory32A and alloc
its memory if requested.
Implemented CRTDLL_rename and CRTDLL_stat needed for
lcc-win32:wedit.exe.
Implemented CRTDLL__fullpath.
* [misc/comm.c]
High speed modes for the 16-bit mode Comm functions.
* [misc/cpu.c]
As applications may treat lpMaximumApplicationAddress as long,
use a valid long number.
* [misc/main.c]
In SystemParametersInfo16 ignore SPI_GETHIGHCONTRAST too.
* [misc/ole2nls.c]
Implement LCMAP_UPPERCASE for LCMapString32.
* [misc/wsprintf]
Made WPRINTF_ParseFormatA understand %ws.
* [win32/file.c]
Ignore FILE_ATTRIBUTE_NORMAL.
Stub for ReadFileEx.
Fri Oct 24 15:36:02 1997 Doug Ridgway <ridgway@routh.ucsd.edu>
* [memory/local.c]
Local heap exhaustion message now prints which builtin heap filled.
Fri Oct 24 00:46:34 1997 Huw D M Davies <h.davies1@physics.oxford.ac.uk>
* [windows/dialog.c]
Reversed CreateFont16/32W typo.
Thu Oct 23 23:44:20 1997 Kristian Nielsen <kristian.nielsen@risoe.dk>
* [if1632/user.spec]
Fixed argument list for ChangeClipboardChain.
* [windows/mdi.c]
Pass correct hInstance to CreateWindow16() in MDICreateChild().
Mon Oct 20 11:51:24 1997 Carsten Fallesen <cf@it.dtu.dk>
* [objects/metafile.c]
Added support for META_SETTEXTCHAREXTRA.
* [objects/region.c]
Fixed crash in XPolygonRegion if there is only one point in
in the region.
* [if1632/gdi32.spec][include/gdi.h][include/windows.h]
[objects/gdiobj.c]
Completed OBJ_XXX defines in gdi.h, removed OBJ_XXX in gdiobj.c
and included gdi.h instead. Implemented GetObjectType32().
Thu Oct 16 17:21:32 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
* [documentation/wine.texinfo]
Fixed WIN32 and Makefiles entries of Reference manual node, that
made makeinfo dump core.
Mon Oct 13 17:15:57 1997 Robert Wilhelm <robert@physiol.med.tu-muenchen.de>
* [if1632/crtdll.spec]
Added missing math functions y0(), y1(), y2(), floor(), frexp(),
ldexp(), modf().
1997-11-01 20:08:16 +01:00
|
|
|
HeapFree( GetProcessHeap(), 0, rowSrc );
|
1994-12-27 15:11:53 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/***********************************************************************
|
1995-01-09 19:21:16 +01:00
|
|
|
* BITBLT_GetSrcAreaStretch
|
1994-12-27 15:11:53 +01:00
|
|
|
*
|
1995-01-09 19:21:16 +01:00
|
|
|
* Retrieve an area from the source DC, stretching and mapping all the
|
|
|
|
* pixels to Windows colors.
|
1994-12-27 15:11:53 +01:00
|
|
|
*/
|
2002-03-28 23:22:05 +01:00
|
|
|
static int BITBLT_GetSrcAreaStretch( X11DRV_PDEVICE *physDevSrc, X11DRV_PDEVICE *physDevDst,
|
2010-04-14 20:27:17 +02:00
|
|
|
Pixmap pixmap, GC gc,
|
|
|
|
const struct bitblt_coords *src, const struct bitblt_coords *dst )
|
1994-12-27 15:11:53 +01:00
|
|
|
{
|
1995-01-09 19:21:16 +01:00
|
|
|
XImage *imageSrc, *imageDst;
|
2010-04-14 20:27:17 +02:00
|
|
|
RECT rectSrc = src->visrect;
|
|
|
|
RECT rectDst = dst->visrect;
|
2004-09-16 22:29:25 +02:00
|
|
|
int fg, bg;
|
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
|
|
|
|
2010-04-14 20:27:17 +02:00
|
|
|
rectSrc.left -= src->x;
|
|
|
|
rectSrc.right -= src->x;
|
|
|
|
rectSrc.top -= src->y;
|
|
|
|
rectSrc.bottom -= src->y;
|
|
|
|
rectDst.left -= dst->x;
|
|
|
|
rectDst.right -= dst->x;
|
|
|
|
rectDst.top -= dst->y;
|
|
|
|
rectDst.bottom -= dst->y;
|
|
|
|
if (src->width < 0)
|
|
|
|
{
|
|
|
|
rectSrc.left -= src->width;
|
|
|
|
rectSrc.right -= src->width;
|
|
|
|
}
|
|
|
|
if (dst->width < 0)
|
|
|
|
{
|
|
|
|
rectDst.left -= dst->width;
|
|
|
|
rectDst.right -= dst->width;
|
|
|
|
}
|
|
|
|
if (src->height < 0)
|
|
|
|
{
|
|
|
|
rectSrc.top -= src->height;
|
|
|
|
rectSrc.bottom -= src->height;
|
|
|
|
}
|
|
|
|
if (dst->height < 0)
|
|
|
|
{
|
|
|
|
rectDst.top -= dst->height;
|
|
|
|
rectDst.bottom -= dst->height;
|
|
|
|
}
|
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
|
|
|
|
2004-09-16 22:29:25 +02:00
|
|
|
get_colors(physDevDst, physDevSrc, &fg, &bg);
|
2007-09-27 18:02:26 +02:00
|
|
|
wine_tsx11_lock();
|
1996-08-18 18:21:52 +02:00
|
|
|
/* FIXME: avoid BadMatch errors */
|
2001-05-11 02:17:47 +02:00
|
|
|
imageSrc = XGetImage( gdi_display, physDevSrc->drawable,
|
2010-04-14 20:27:17 +02:00
|
|
|
physDevSrc->dc_rect.left + src->visrect.left,
|
|
|
|
physDevSrc->dc_rect.top + src->visrect.top,
|
|
|
|
src->visrect.right - src->visrect.left,
|
|
|
|
src->visrect.bottom - src->visrect.top,
|
1995-01-09 19:21:16 +01:00
|
|
|
AllPlanes, ZPixmap );
|
2007-09-27 18:02:26 +02:00
|
|
|
wine_tsx11_unlock();
|
|
|
|
|
2001-05-11 02:17:47 +02:00
|
|
|
imageDst = X11DRV_DIB_CreateXImage( rectDst.right - rectDst.left,
|
2004-01-18 23:20:17 +01:00
|
|
|
rectDst.bottom - rectDst.top, physDevDst->depth );
|
2010-04-14 20:27:17 +02:00
|
|
|
BITBLT_StretchImage( imageSrc, imageDst, src->width, src->height,
|
|
|
|
dst->width, dst->height, &rectSrc, &rectDst,
|
2010-04-15 22:53:27 +02:00
|
|
|
fg, physDevDst->depth != 1 ? bg : physDevSrc->backgroundPixel,
|
2011-07-08 16:03:59 +02:00
|
|
|
image_pixel_mask( physDevSrc ), GetStretchBltMode(physDevDst->dev.hdc) );
|
2007-09-27 18:02:26 +02:00
|
|
|
wine_tsx11_lock();
|
2001-05-11 02:17:47 +02:00
|
|
|
XPutImage( gdi_display, pixmap, gc, imageDst, 0, 0, 0, 0,
|
1995-01-09 19:21:16 +01:00
|
|
|
rectDst.right - rectDst.left, rectDst.bottom - rectDst.top );
|
1998-02-15 20:40:49 +01:00
|
|
|
XDestroyImage( imageSrc );
|
2008-08-29 13:34:11 +02:00
|
|
|
X11DRV_DIB_DestroyXImage( imageDst );
|
2007-09-27 18:02:26 +02:00
|
|
|
wine_tsx11_unlock();
|
2001-06-11 22:24:57 +02:00
|
|
|
return 0; /* no exposure events generated */
|
1995-01-09 19:21:16 +01:00
|
|
|
}
|
1994-12-27 15:11:53 +01:00
|
|
|
|
1995-01-09 19:21:16 +01:00
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* BITBLT_GetSrcArea
|
|
|
|
*
|
|
|
|
* Retrieve an area from the source DC, mapping all the
|
|
|
|
* pixels to Windows colors.
|
|
|
|
*/
|
2002-03-28 23:22:05 +01:00
|
|
|
static int BITBLT_GetSrcArea( X11DRV_PDEVICE *physDevSrc, X11DRV_PDEVICE *physDevDst,
|
2008-06-21 20:13:00 +02:00
|
|
|
Pixmap pixmap, GC gc, RECT *visRectSrc )
|
1995-01-09 19:21:16 +01:00
|
|
|
{
|
|
|
|
XImage *imageSrc, *imageDst;
|
1999-02-26 12:11:13 +01:00
|
|
|
register INT x, y;
|
2001-06-11 22:24:57 +02:00
|
|
|
int exposures = 0;
|
1999-02-26 12:11:13 +01:00
|
|
|
INT width = visRectSrc->right - visRectSrc->left;
|
|
|
|
INT height = visRectSrc->bottom - visRectSrc->top;
|
2004-09-16 22:29:25 +02:00
|
|
|
int fg, bg;
|
2011-07-08 16:03:59 +02:00
|
|
|
BOOL memdc = (GetObjectType(physDevSrc->dev.hdc) == OBJ_MEMDC);
|
1995-01-09 19:21:16 +01:00
|
|
|
|
2004-01-18 23:20:17 +01:00
|
|
|
if (physDevSrc->depth == physDevDst->depth)
|
1994-12-27 15:11:53 +01:00
|
|
|
{
|
2007-09-27 18:02:26 +02:00
|
|
|
wine_tsx11_lock();
|
1999-04-01 10:16:08 +02:00
|
|
|
if (!X11DRV_PALETTE_XPixelToPalette ||
|
2004-01-18 23:20:17 +01:00
|
|
|
(physDevDst->depth == 1)) /* monochrome -> monochrome */
|
1995-01-09 19:21:16 +01:00
|
|
|
{
|
2004-01-18 23:20:17 +01:00
|
|
|
if (physDevDst->depth == 1)
|
2000-06-08 21:23:12 +02:00
|
|
|
{
|
|
|
|
/* MSDN says if StretchBlt must convert a bitmap from monochrome
|
2008-01-04 20:37:14 +01:00
|
|
|
to color or vice versa, the foreground and background color of
|
2000-06-08 21:23:12 +02:00
|
|
|
the device context are used. In fact, it also applies to the
|
2002-06-01 01:06:46 +02:00
|
|
|
case when it is converted from mono to mono. */
|
2001-05-11 02:17:47 +02:00
|
|
|
XSetBackground( gdi_display, gc, physDevDst->textPixel );
|
|
|
|
XSetForeground( gdi_display, gc, physDevDst->backgroundPixel );
|
|
|
|
XCopyPlane( gdi_display, physDevSrc->drawable, pixmap, gc,
|
2006-12-07 16:43:59 +01:00
|
|
|
physDevSrc->dc_rect.left + visRectSrc->left,
|
|
|
|
physDevSrc->dc_rect.top + visRectSrc->top,
|
2000-06-08 21:23:12 +02:00
|
|
|
width, height, 0, 0, 1);
|
|
|
|
}
|
|
|
|
else
|
2001-05-11 02:17:47 +02:00
|
|
|
XCopyArea( gdi_display, physDevSrc->drawable, pixmap, gc,
|
2006-12-07 16:43:59 +01:00
|
|
|
physDevSrc->dc_rect.left + visRectSrc->left,
|
|
|
|
physDevSrc->dc_rect.top + visRectSrc->top,
|
2002-06-11 00:52:47 +02:00
|
|
|
width, height, 0, 0);
|
2001-06-11 22:24:57 +02:00
|
|
|
exposures++;
|
1995-01-09 19:21:16 +01:00
|
|
|
}
|
|
|
|
else /* color -> color */
|
|
|
|
{
|
2007-09-27 18:02:26 +02:00
|
|
|
if (memdc)
|
2001-05-11 02:17:47 +02:00
|
|
|
imageSrc = XGetImage( gdi_display, physDevSrc->drawable,
|
2006-12-07 16:43:59 +01:00
|
|
|
physDevSrc->dc_rect.left + visRectSrc->left,
|
|
|
|
physDevSrc->dc_rect.top + visRectSrc->top,
|
1996-08-18 18:21:52 +02:00
|
|
|
width, height, AllPlanes, ZPixmap );
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* Make sure we don't get a BadMatch error */
|
2001-05-11 02:17:47 +02:00
|
|
|
XCopyArea( gdi_display, physDevSrc->drawable, pixmap, gc,
|
2006-12-07 16:43:59 +01:00
|
|
|
physDevSrc->dc_rect.left + visRectSrc->left,
|
|
|
|
physDevSrc->dc_rect.top + visRectSrc->top,
|
1996-08-18 18:21:52 +02:00
|
|
|
width, height, 0, 0);
|
2001-06-11 22:24:57 +02:00
|
|
|
exposures++;
|
2001-05-11 02:17:47 +02:00
|
|
|
imageSrc = XGetImage( gdi_display, pixmap, 0, 0, width, height,
|
1996-08-18 18:21:52 +02:00
|
|
|
AllPlanes, ZPixmap );
|
|
|
|
}
|
1995-01-09 19:21:16 +01:00
|
|
|
for (y = 0; y < height; y++)
|
|
|
|
for (x = 0; x < width; x++)
|
1998-02-15 20:40:49 +01:00
|
|
|
XPutPixel(imageSrc, x, y,
|
1999-04-01 10:16:08 +02:00
|
|
|
X11DRV_PALETTE_XPixelToPalette[XGetPixel(imageSrc, x, y)]);
|
2001-05-11 02:17:47 +02:00
|
|
|
XPutImage( gdi_display, pixmap, gc, imageSrc,
|
1995-01-09 19:21:16 +01:00
|
|
|
0, 0, 0, 0, width, height );
|
1998-02-15 20:40:49 +01:00
|
|
|
XDestroyImage( imageSrc );
|
1995-01-09 19:21:16 +01:00
|
|
|
}
|
2007-09-27 18:02:26 +02:00
|
|
|
wine_tsx11_unlock();
|
1994-12-27 15:11:53 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2004-01-18 23:20:17 +01:00
|
|
|
if (physDevSrc->depth == 1) /* monochrome -> color */
|
1995-01-09 19:21:16 +01:00
|
|
|
{
|
2004-09-16 22:29:25 +02:00
|
|
|
get_colors(physDevDst, physDevSrc, &fg, &bg);
|
|
|
|
|
2007-09-27 18:02:26 +02:00
|
|
|
wine_tsx11_lock();
|
1999-04-01 10:16:08 +02:00
|
|
|
if (X11DRV_PALETTE_XPixelToPalette)
|
1994-12-27 15:11:53 +01:00
|
|
|
{
|
2001-05-11 02:17:47 +02:00
|
|
|
XSetBackground( gdi_display, gc,
|
2004-09-16 22:29:25 +02:00
|
|
|
X11DRV_PALETTE_XPixelToPalette[fg] );
|
2001-05-11 02:17:47 +02:00
|
|
|
XSetForeground( gdi_display, gc,
|
2004-09-16 22:29:25 +02:00
|
|
|
X11DRV_PALETTE_XPixelToPalette[bg]);
|
1994-12-27 15:11:53 +01:00
|
|
|
}
|
1995-01-09 19:21:16 +01:00
|
|
|
else
|
|
|
|
{
|
2004-09-16 22:29:25 +02:00
|
|
|
XSetBackground( gdi_display, gc, fg );
|
|
|
|
XSetForeground( gdi_display, gc, bg );
|
1995-01-09 19:21:16 +01:00
|
|
|
}
|
2001-05-11 02:17:47 +02:00
|
|
|
XCopyPlane( gdi_display, physDevSrc->drawable, pixmap, gc,
|
2006-12-07 16:43:59 +01:00
|
|
|
physDevSrc->dc_rect.left + visRectSrc->left,
|
|
|
|
physDevSrc->dc_rect.top + visRectSrc->top,
|
1995-01-09 19:21:16 +01:00
|
|
|
width, height, 0, 0, 1 );
|
2001-06-11 22:24:57 +02:00
|
|
|
exposures++;
|
2007-09-27 18:02:26 +02:00
|
|
|
wine_tsx11_unlock();
|
1995-01-09 19:21:16 +01:00
|
|
|
}
|
|
|
|
else /* color -> monochrome */
|
|
|
|
{
|
2010-04-15 22:53:27 +02:00
|
|
|
unsigned long pixel_mask;
|
2007-09-27 18:02:26 +02:00
|
|
|
wine_tsx11_lock();
|
1996-08-18 18:21:52 +02:00
|
|
|
/* FIXME: avoid BadMatch error */
|
2001-05-11 02:17:47 +02:00
|
|
|
imageSrc = XGetImage( gdi_display, physDevSrc->drawable,
|
2006-12-07 16:43:59 +01:00
|
|
|
physDevSrc->dc_rect.left + visRectSrc->left,
|
|
|
|
physDevSrc->dc_rect.top + visRectSrc->top,
|
1995-01-09 19:21:16 +01:00
|
|
|
width, height, AllPlanes, ZPixmap );
|
2003-10-08 04:54:15 +02:00
|
|
|
if (!imageSrc)
|
|
|
|
{
|
2007-09-27 18:02:26 +02:00
|
|
|
wine_tsx11_unlock();
|
2003-10-08 04:54:15 +02:00
|
|
|
return exposures;
|
|
|
|
}
|
2004-01-18 23:20:17 +01:00
|
|
|
imageDst = X11DRV_DIB_CreateXImage( width, height, physDevDst->depth );
|
2007-09-27 18:02:26 +02:00
|
|
|
if (!imageDst)
|
2003-10-08 04:54:15 +02:00
|
|
|
{
|
|
|
|
XDestroyImage(imageSrc);
|
2007-09-27 18:02:26 +02:00
|
|
|
wine_tsx11_unlock();
|
2003-10-08 04:54:15 +02:00
|
|
|
return exposures;
|
|
|
|
}
|
2010-04-15 22:53:27 +02:00
|
|
|
pixel_mask = image_pixel_mask( physDevSrc );
|
1995-01-09 19:21:16 +01:00
|
|
|
for (y = 0; y < height; y++)
|
|
|
|
for (x = 0; x < width; x++)
|
2010-04-15 22:53:27 +02:00
|
|
|
XPutPixel(imageDst, x, y,
|
|
|
|
!((XGetPixel(imageSrc,x,y) ^ physDevSrc->backgroundPixel) & pixel_mask));
|
2001-05-11 02:17:47 +02:00
|
|
|
XPutImage( gdi_display, pixmap, gc, imageDst,
|
1995-01-09 19:21:16 +01:00
|
|
|
0, 0, 0, 0, width, height );
|
1998-02-15 20:40:49 +01:00
|
|
|
XDestroyImage( imageSrc );
|
2008-08-29 13:34:11 +02:00
|
|
|
X11DRV_DIB_DestroyXImage( imageDst );
|
2007-09-27 18:02:26 +02:00
|
|
|
wine_tsx11_unlock();
|
1995-01-09 19:21:16 +01:00
|
|
|
}
|
1994-12-27 15:11:53 +01:00
|
|
|
}
|
2001-06-11 22:24:57 +02:00
|
|
|
return exposures;
|
1994-12-27 15:11:53 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/***********************************************************************
|
1995-01-09 19:21:16 +01:00
|
|
|
* BITBLT_GetDstArea
|
1994-12-27 15:11:53 +01:00
|
|
|
*
|
1995-01-09 19:21:16 +01:00
|
|
|
* Retrieve an area from the destination DC, mapping all the
|
|
|
|
* pixels to Windows colors.
|
1994-12-27 15:11:53 +01:00
|
|
|
*/
|
2011-07-14 13:08:56 +02:00
|
|
|
static int BITBLT_GetDstArea(X11DRV_PDEVICE *physDev, Pixmap pixmap, GC gc, const RECT *visRectDst)
|
1994-12-27 15:11:53 +01:00
|
|
|
{
|
2001-06-11 22:24:57 +02:00
|
|
|
int exposures = 0;
|
1999-02-26 12:11:13 +01:00
|
|
|
INT width = visRectDst->right - visRectDst->left;
|
|
|
|
INT height = visRectDst->bottom - visRectDst->top;
|
2011-07-08 16:03:59 +02:00
|
|
|
BOOL memdc = (GetObjectType( physDev->dev.hdc ) == OBJ_MEMDC);
|
2007-09-27 18:02:26 +02:00
|
|
|
|
|
|
|
wine_tsx11_lock();
|
1995-01-09 19:21:16 +01:00
|
|
|
|
2004-01-18 23:20:17 +01:00
|
|
|
if (!X11DRV_PALETTE_XPixelToPalette || (physDev->depth == 1) ||
|
1999-04-01 10:16:08 +02:00
|
|
|
(X11DRV_PALETTE_PaletteFlags & X11DRV_PALETTE_VIRTUAL) )
|
1994-12-27 15:11:53 +01:00
|
|
|
{
|
2001-05-11 02:17:47 +02:00
|
|
|
XCopyArea( gdi_display, physDev->drawable, pixmap, gc,
|
2006-12-07 16:43:59 +01:00
|
|
|
physDev->dc_rect.left + visRectDst->left, physDev->dc_rect.top + visRectDst->top,
|
2002-06-11 00:52:47 +02:00
|
|
|
width, height, 0, 0 );
|
2001-06-11 22:24:57 +02:00
|
|
|
exposures++;
|
1994-12-27 15:11:53 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
1999-02-26 12:11:13 +01:00
|
|
|
register INT x, y;
|
1996-08-18 18:21:52 +02:00
|
|
|
XImage *image;
|
|
|
|
|
2007-09-27 18:02:26 +02:00
|
|
|
if (memdc)
|
2001-05-11 02:17:47 +02:00
|
|
|
image = XGetImage( gdi_display, physDev->drawable,
|
2006-12-07 16:43:59 +01:00
|
|
|
physDev->dc_rect.left + visRectDst->left,
|
|
|
|
physDev->dc_rect.top + visRectDst->top,
|
1996-08-18 18:21:52 +02:00
|
|
|
width, height, AllPlanes, ZPixmap );
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* Make sure we don't get a BadMatch error */
|
2001-05-11 02:17:47 +02:00
|
|
|
XCopyArea( gdi_display, physDev->drawable, pixmap, gc,
|
2006-12-07 16:43:59 +01:00
|
|
|
physDev->dc_rect.left + visRectDst->left,
|
|
|
|
physDev->dc_rect.top + visRectDst->top,
|
2002-06-11 00:52:47 +02:00
|
|
|
width, height, 0, 0);
|
2001-06-11 22:24:57 +02:00
|
|
|
exposures++;
|
2001-05-11 02:17:47 +02:00
|
|
|
image = XGetImage( gdi_display, pixmap, 0, 0, width, height,
|
1996-08-18 18:21:52 +02:00
|
|
|
AllPlanes, ZPixmap );
|
|
|
|
}
|
2007-09-27 18:02:26 +02:00
|
|
|
if (image)
|
|
|
|
{
|
|
|
|
for (y = 0; y < height; y++)
|
|
|
|
for (x = 0; x < width; x++)
|
|
|
|
XPutPixel( image, x, y,
|
|
|
|
X11DRV_PALETTE_XPixelToPalette[XGetPixel( image, x, y )]);
|
|
|
|
XPutImage( gdi_display, pixmap, gc, image, 0, 0, 0, 0, width, height );
|
|
|
|
XDestroyImage( image );
|
|
|
|
}
|
1994-12-27 15:11:53 +01:00
|
|
|
}
|
2007-09-27 18:02:26 +02:00
|
|
|
|
|
|
|
wine_tsx11_unlock();
|
2001-06-11 22:24:57 +02:00
|
|
|
return exposures;
|
1995-01-09 19:21:16 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* BITBLT_PutDstArea
|
|
|
|
*
|
|
|
|
* Put an area back into the destination DC, mapping the pixel
|
|
|
|
* colors to X pixels.
|
|
|
|
*/
|
2011-07-14 13:08:56 +02:00
|
|
|
static int BITBLT_PutDstArea(X11DRV_PDEVICE *physDev, Pixmap pixmap, const RECT *visRectDst)
|
1995-01-09 19:21:16 +01:00
|
|
|
{
|
2001-06-11 22:24:57 +02:00
|
|
|
int exposures = 0;
|
1999-02-26 12:11:13 +01:00
|
|
|
INT width = visRectDst->right - visRectDst->left;
|
|
|
|
INT height = visRectDst->bottom - visRectDst->top;
|
1995-01-09 19:21:16 +01:00
|
|
|
|
1999-04-01 10:16:08 +02:00
|
|
|
/* !X11DRV_PALETTE_PaletteToXPixel is _NOT_ enough */
|
Release 960728
Sun Jul 28 17:57:19 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [loader/task.c] [include/task.h]
Implemented SwitchStackTo()/SwitchStackBack().
* [include/wintypes.h] [loader/main.c]
Added __winelib variable to distinguish between emulator and
library at run-time. Later on, this should avoid some
recompilations when building Winelib.
* [windows/property.c]
Implemented Win32 functions for window properties.
Fri Jul 26 18:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [controls/listbox.c]
Implemented LBS_SORT style, WM_COMPAREITEM, and WM_DELETEITEM
messages.
* [controls/menu.c]
Call TranslateMessage() to enable shortcuts (on WM_CHAR).
* [include/cursoricon.h]
Moved #pragma pack(1) back to where it belongs.
* [objects/palette.c]
RealizeDefaultPalette() maps to system colors only.
Do not broadcast palette notifications when in TrueColor.
* [objects/color.c] [include/palette.h]
Miscellaneous optimizations. Had to fix several
"improvements" made to my patch for previous release.
* [objects/dib.c]
Reverse dib bits order for 24-bit SetDIBits().
* [objects/dc.c]
GetDeviceCaps() does not return RC_PALETTE when in TrueColor.
* [windows/scroll.c]
Scroll update region too.
* [windows/message.c]
Include QS_MOUSE into the event mask for nonclient mouse
message filter. Fixes problems with Word 6 freezing when
mouse hits nonclient area.
* [windows/win.c]
Allow top-level windows to be linked as HWND_TOP in CreateWindow().
* [windows/winpos.c] [windows/mdi.c]
Attempt to fix control menu duplication.
Fri Jul 26 09:49:35 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/drive.c]
GetDriveType32A(): return value for CDROM fixed.
* [files/file.c]
SearchPath* added.
* [if1632/gdi32.spec] [objects/brush.c]
SetBrushOrgEx() added.
* [loader/pe_resource.c]
If even loading the default entry fails, we just use the first
entry from the resource directory.
[loader/task.c]
SetSigHandler() stub added, Paradox 4.5 now starts up.
* [misc/comm.c] [include/windows.h] [if1632/kernel32.spec]
COMM functions updated to win32, not complete.
* [misc/lstr.c]
FormatMessageA partially implemented.
* [include/miscemu.h] [memory/selector.c]
[memory/global.c] [miscemu/dosmem.c]
DOS memory handling changed: 1MB preallocated block, real-mode
segment handling possible, SetSelectorBase into lower physical 1MB
possible.
* [miscemu/dpmi.c]
Real-mode segments changed, real-mode int 21,ax=6506 added.
AX=0x0303 added.
* [multimedia/time.c]
Fixed bug in killTimer.
* [objects/bitmap.c]
LoadImageA partially implemented.
Wed Jul 24 18:20:24 1996 Albrecht Kleine <kleine@ak.sax.de>
* [include/dde_mem.h][include/dde_proc.h]
[ipc/dde_atom.c][ipc/dde_proc.c][windows/message.c]
[ipc/generic_hash.h][library/miscstubs.c]
Changes for error free compilation using "--with-ipc":
replaced some names with *16-equivalent (e.g. MSG to MSG16),
modified prototype of function DDE_GlobalFree() .
* [objects/palette.c]
Added check for metafile-DC in GDISelectPalette(),
GDIRealizePalette(),RealizeDefaultPalette() and
IsDCCurrentPalette().
Tue Jul 23 22:46:53 1996 Andrew Lewycky <plewycky@oise.utoronto.ca>
* [controls/edit.c]
EDIT_WM_Create: Don't EDIT_EM_ReplaceSel if created with lParam = "",
fixes Winhelp.
* [windows/dialog.c]
DIALOG_CreateIndirect: Initialise dlgProc before creating children.
1996-07-28 20:50:11 +02:00
|
|
|
|
2004-01-18 23:20:17 +01:00
|
|
|
if (!X11DRV_PALETTE_PaletteToXPixel || (physDev->depth == 1) ||
|
1999-04-01 10:16:08 +02:00
|
|
|
(X11DRV_PALETTE_PaletteFlags & X11DRV_PALETTE_VIRTUAL) )
|
1994-12-27 15:11:53 +01:00
|
|
|
{
|
2002-06-11 00:52:47 +02:00
|
|
|
XCopyArea( gdi_display, pixmap, physDev->drawable, physDev->gc, 0, 0, width, height,
|
2006-12-07 16:43:59 +01:00
|
|
|
physDev->dc_rect.left + visRectDst->left,
|
|
|
|
physDev->dc_rect.top + visRectDst->top );
|
2001-06-11 22:24:57 +02:00
|
|
|
exposures++;
|
1994-12-27 15:11:53 +01:00
|
|
|
}
|
1995-01-09 19:21:16 +01:00
|
|
|
else
|
1994-12-27 15:11:53 +01:00
|
|
|
{
|
1999-02-26 12:11:13 +01:00
|
|
|
register INT x, y;
|
2001-05-11 02:17:47 +02:00
|
|
|
XImage *image = XGetImage( gdi_display, pixmap, 0, 0, width, height,
|
1995-01-09 19:21:16 +01:00
|
|
|
AllPlanes, ZPixmap );
|
|
|
|
for (y = 0; y < height; y++)
|
|
|
|
for (x = 0; x < width; x++)
|
|
|
|
{
|
1998-02-15 20:40:49 +01:00
|
|
|
XPutPixel( image, x, y,
|
1999-04-01 10:16:08 +02:00
|
|
|
X11DRV_PALETTE_PaletteToXPixel[XGetPixel( image, x, y )]);
|
1995-01-09 19:21:16 +01:00
|
|
|
}
|
2002-03-28 23:22:05 +01:00
|
|
|
XPutImage( gdi_display, physDev->drawable, physDev->gc, image, 0, 0,
|
2006-12-07 16:43:59 +01:00
|
|
|
physDev->dc_rect.left + visRectDst->left,
|
|
|
|
physDev->dc_rect.top + visRectDst->top, width, height );
|
1998-02-15 20:40:49 +01:00
|
|
|
XDestroyImage( image );
|
1994-12-27 15:11:53 +01:00
|
|
|
}
|
2001-06-11 22:24:57 +02:00
|
|
|
return exposures;
|
1994-12-27 15:11:53 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2009-09-30 20:35:28 +02:00
|
|
|
/***********************************************************************
|
|
|
|
* client_side_dib_copy
|
|
|
|
*/
|
|
|
|
static BOOL client_side_dib_copy( X11DRV_PDEVICE *physDevSrc, INT xSrc, INT ySrc,
|
|
|
|
X11DRV_PDEVICE *physDevDst, INT xDst, INT yDst,
|
|
|
|
INT width, INT height )
|
|
|
|
{
|
|
|
|
DIBSECTION srcDib, dstDib;
|
|
|
|
BYTE *srcPtr, *dstPtr;
|
|
|
|
INT srcRowOffset, dstRowOffset;
|
|
|
|
INT bytesPerPixel;
|
|
|
|
INT bytesToCopy;
|
|
|
|
INT y;
|
|
|
|
static RECT unusedRect;
|
|
|
|
|
|
|
|
if (GetObjectW(physDevSrc->bitmap->hbitmap, sizeof(srcDib), &srcDib) != sizeof(srcDib))
|
|
|
|
return FALSE;
|
|
|
|
if (GetObjectW(physDevDst->bitmap->hbitmap, sizeof(dstDib), &dstDib) != sizeof(dstDib))
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
/* check for oversized values, just like X11DRV_DIB_CopyDIBSection() */
|
|
|
|
if (xSrc > srcDib.dsBm.bmWidth || ySrc > srcDib.dsBm.bmHeight)
|
|
|
|
return FALSE;
|
|
|
|
if (xSrc + width > srcDib.dsBm.bmWidth)
|
|
|
|
width = srcDib.dsBm.bmWidth - xSrc;
|
|
|
|
if (ySrc + height > srcDib.dsBm.bmHeight)
|
|
|
|
height = srcDib.dsBm.bmHeight - ySrc;
|
|
|
|
|
|
|
|
if (GetRgnBox(physDevDst->region, &unusedRect) == COMPLEXREGION)
|
|
|
|
{
|
|
|
|
/* for simple regions, the clipping was already done by BITBLT_GetVisRectangles */
|
|
|
|
FIXME("potential optimization: client-side complex region clipping\n");
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
if (dstDib.dsBm.bmBitsPixel <= 8)
|
|
|
|
{
|
2011-02-25 22:26:07 +01:00
|
|
|
static BOOL fixme_once;
|
|
|
|
if(!fixme_once++) FIXME("potential optimization: client-side color-index mode DIB copy\n");
|
2009-09-30 20:35:28 +02:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
if (!(srcDib.dsBmih.biCompression == BI_BITFIELDS &&
|
|
|
|
dstDib.dsBmih.biCompression == BI_BITFIELDS &&
|
|
|
|
!memcmp(srcDib.dsBitfields, dstDib.dsBitfields, 3*sizeof(DWORD)))
|
|
|
|
&& !(srcDib.dsBmih.biCompression == BI_RGB &&
|
|
|
|
dstDib.dsBmih.biCompression == BI_RGB))
|
|
|
|
{
|
|
|
|
FIXME("potential optimization: client-side compressed DIB copy\n");
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
if (srcDib.dsBm.bmBitsPixel != dstDib.dsBm.bmBitsPixel)
|
|
|
|
{
|
|
|
|
FIXME("potential optimization: pixel format conversion\n");
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
if (srcDib.dsBmih.biWidth < 0 || dstDib.dsBmih.biWidth < 0)
|
|
|
|
{
|
|
|
|
FIXME("negative widths not yet implemented\n");
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (dstDib.dsBm.bmBitsPixel)
|
|
|
|
{
|
|
|
|
case 15:
|
|
|
|
case 16:
|
|
|
|
bytesPerPixel = 2;
|
|
|
|
break;
|
|
|
|
case 24:
|
|
|
|
bytesPerPixel = 3;
|
|
|
|
break;
|
|
|
|
case 32:
|
|
|
|
bytesPerPixel = 4;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
FIXME("don't know how to work with a depth of %d\n", physDevSrc->depth);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bytesToCopy = width * bytesPerPixel;
|
|
|
|
|
2010-03-01 12:39:51 +01:00
|
|
|
if (physDevSrc->bitmap->topdown)
|
2009-09-30 20:35:28 +02:00
|
|
|
{
|
|
|
|
srcPtr = &physDevSrc->bitmap->base[ySrc*srcDib.dsBm.bmWidthBytes + xSrc*bytesPerPixel];
|
|
|
|
srcRowOffset = srcDib.dsBm.bmWidthBytes;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
srcPtr = &physDevSrc->bitmap->base[(srcDib.dsBm.bmHeight-ySrc-1)*srcDib.dsBm.bmWidthBytes
|
|
|
|
+ xSrc*bytesPerPixel];
|
|
|
|
srcRowOffset = -srcDib.dsBm.bmWidthBytes;
|
|
|
|
}
|
2010-03-01 12:39:51 +01:00
|
|
|
if (physDevDst->bitmap->topdown)
|
2009-09-30 20:35:28 +02:00
|
|
|
{
|
|
|
|
dstPtr = &physDevDst->bitmap->base[yDst*dstDib.dsBm.bmWidthBytes + xDst*bytesPerPixel];
|
|
|
|
dstRowOffset = dstDib.dsBm.bmWidthBytes;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
dstPtr = &physDevDst->bitmap->base[(dstDib.dsBm.bmHeight-yDst-1)*dstDib.dsBm.bmWidthBytes
|
|
|
|
+ xDst*bytesPerPixel];
|
|
|
|
dstRowOffset = -dstDib.dsBm.bmWidthBytes;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Handle overlapping regions on the same DIB */
|
|
|
|
if (physDevSrc == physDevDst && ySrc < yDst)
|
|
|
|
{
|
|
|
|
srcPtr += srcRowOffset * (height - 1);
|
|
|
|
srcRowOffset = -srcRowOffset;
|
|
|
|
dstPtr += dstRowOffset * (height - 1);
|
|
|
|
dstRowOffset = -dstRowOffset;
|
|
|
|
}
|
|
|
|
|
|
|
|
for (y = yDst; y < yDst + height; ++y)
|
|
|
|
{
|
|
|
|
memmove(dstPtr, srcPtr, bytesToCopy);
|
|
|
|
srcPtr += srcRowOffset;
|
|
|
|
dstPtr += dstRowOffset;
|
|
|
|
}
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2009-11-11 18:00:09 +01:00
|
|
|
static BOOL same_format(X11DRV_PDEVICE *physDevSrc, X11DRV_PDEVICE *physDevDst)
|
|
|
|
{
|
|
|
|
if (physDevSrc->depth != physDevDst->depth) return FALSE;
|
|
|
|
if (!physDevSrc->color_shifts && !physDevDst->color_shifts) return TRUE;
|
|
|
|
if (physDevSrc->color_shifts && physDevDst->color_shifts)
|
|
|
|
return !memcmp(physDevSrc->color_shifts, physDevDst->color_shifts, sizeof(ColorShifts));
|
|
|
|
return FALSE;
|
|
|
|
}
|
2009-09-30 20:35:28 +02:00
|
|
|
|
2011-07-14 13:08:56 +02:00
|
|
|
static void execute_rop( X11DRV_PDEVICE *physdev, Pixmap src_pixmap, GC gc,
|
|
|
|
const RECT *visrect, DWORD rop )
|
|
|
|
{
|
|
|
|
Pixmap pixmaps[3];
|
|
|
|
Pixmap result = src_pixmap;
|
|
|
|
BOOL null_brush;
|
|
|
|
const BYTE *opcode = BITBLT_Opcodes[(rop >> 16) & 0xff];
|
|
|
|
BOOL use_pat = (((rop >> 4) & 0x0f0000) != (rop & 0x0f0000));
|
|
|
|
BOOL use_dst = (((rop >> 1) & 0x550000) != (rop & 0x550000));
|
|
|
|
int width = visrect->right - visrect->left;
|
|
|
|
int height = visrect->bottom - visrect->top;
|
|
|
|
|
|
|
|
pixmaps[SRC] = src_pixmap;
|
|
|
|
pixmaps[TMP] = 0;
|
|
|
|
wine_tsx11_lock();
|
|
|
|
pixmaps[DST] = XCreatePixmap( gdi_display, root_window, width, height, physdev->depth );
|
|
|
|
wine_tsx11_unlock();
|
|
|
|
|
|
|
|
if (use_dst) BITBLT_GetDstArea( physdev, pixmaps[DST], gc, visrect );
|
|
|
|
null_brush = use_pat && !X11DRV_SetupGCForPatBlt( physdev, gc, TRUE );
|
|
|
|
|
|
|
|
wine_tsx11_lock();
|
|
|
|
for ( ; *opcode; opcode++)
|
|
|
|
{
|
|
|
|
if (OP_DST(*opcode) == DST) result = pixmaps[DST];
|
|
|
|
XSetFunction( gdi_display, gc, OP_ROP(*opcode) );
|
|
|
|
switch(OP_SRCDST(*opcode))
|
|
|
|
{
|
|
|
|
case OP_ARGS(DST,TMP):
|
|
|
|
case OP_ARGS(SRC,TMP):
|
|
|
|
if (!pixmaps[TMP])
|
|
|
|
pixmaps[TMP] = XCreatePixmap( gdi_display, root_window, width, height, physdev->depth );
|
|
|
|
/* fall through */
|
|
|
|
case OP_ARGS(DST,SRC):
|
|
|
|
case OP_ARGS(SRC,DST):
|
|
|
|
case OP_ARGS(TMP,SRC):
|
|
|
|
case OP_ARGS(TMP,DST):
|
|
|
|
XCopyArea( gdi_display, pixmaps[OP_SRC(*opcode)], pixmaps[OP_DST(*opcode)], gc,
|
|
|
|
0, 0, width, height, 0, 0 );
|
|
|
|
break;
|
|
|
|
case OP_ARGS(PAT,DST):
|
|
|
|
case OP_ARGS(PAT,SRC):
|
|
|
|
if (!null_brush)
|
|
|
|
XFillRectangle( gdi_display, pixmaps[OP_DST(*opcode)], gc, 0, 0, width, height );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
XSetFunction( gdi_display, physdev->gc, GXcopy );
|
|
|
|
physdev->exposures += BITBLT_PutDstArea( physdev, result, visrect );
|
|
|
|
XFreePixmap( gdi_display, pixmaps[DST] );
|
|
|
|
if (pixmaps[TMP]) XFreePixmap( gdi_display, pixmaps[TMP] );
|
|
|
|
wine_tsx11_unlock();
|
|
|
|
}
|
|
|
|
|
2011-03-17 14:49:16 +01:00
|
|
|
/***********************************************************************
|
|
|
|
* X11DRV_PatBlt
|
|
|
|
*/
|
2011-07-13 14:56:12 +02:00
|
|
|
BOOL X11DRV_PatBlt( PHYSDEV dev, struct bitblt_coords *dst, DWORD rop )
|
2011-03-17 14:49:16 +01:00
|
|
|
{
|
2011-07-08 15:55:11 +02:00
|
|
|
X11DRV_PDEVICE *physDev = get_x11drv_dev( dev );
|
2011-03-17 14:49:16 +01:00
|
|
|
BOOL usePat = (((rop >> 4) & 0x0f0000) != (rop & 0x0f0000));
|
|
|
|
const BYTE *opcode = BITBLT_Opcodes[(rop >> 16) & 0xff];
|
|
|
|
|
|
|
|
if (usePat && !X11DRV_SetupGCForBrush( physDev )) return TRUE;
|
|
|
|
|
|
|
|
X11DRV_LockDIBSection( physDev, DIB_Status_GdiMod );
|
|
|
|
|
|
|
|
wine_tsx11_lock();
|
|
|
|
XSetFunction( gdi_display, physDev->gc, OP_ROP(*opcode) );
|
|
|
|
|
|
|
|
switch(rop) /* a few special cases */
|
|
|
|
{
|
|
|
|
case BLACKNESS: /* 0x00 */
|
|
|
|
case WHITENESS: /* 0xff */
|
|
|
|
if ((physDev->depth != 1) && X11DRV_PALETTE_PaletteToXPixel)
|
|
|
|
{
|
|
|
|
XSetFunction( gdi_display, physDev->gc, GXcopy );
|
|
|
|
if (rop == BLACKNESS)
|
|
|
|
XSetForeground( gdi_display, physDev->gc, X11DRV_PALETTE_PaletteToXPixel[0] );
|
|
|
|
else
|
|
|
|
XSetForeground( gdi_display, physDev->gc,
|
|
|
|
WhitePixel( gdi_display, DefaultScreen(gdi_display) ));
|
|
|
|
XSetFillStyle( gdi_display, physDev->gc, FillSolid );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case DSTINVERT: /* 0x55 */
|
|
|
|
if (!(X11DRV_PALETTE_PaletteFlags & (X11DRV_PALETTE_PRIVATE | X11DRV_PALETTE_VIRTUAL)))
|
|
|
|
{
|
|
|
|
/* Xor is much better when we do not have full colormap. */
|
|
|
|
/* Using white^black ensures that we invert at least black */
|
|
|
|
/* and white. */
|
|
|
|
unsigned long xor_pix = (WhitePixel( gdi_display, DefaultScreen(gdi_display) ) ^
|
|
|
|
BlackPixel( gdi_display, DefaultScreen(gdi_display) ));
|
|
|
|
XSetFunction( gdi_display, physDev->gc, GXxor );
|
|
|
|
XSetForeground( gdi_display, physDev->gc, xor_pix);
|
|
|
|
XSetFillStyle( gdi_display, physDev->gc, FillSolid );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
XFillRectangle( gdi_display, physDev->drawable, physDev->gc,
|
2011-07-11 13:59:05 +02:00
|
|
|
physDev->dc_rect.left + dst->visrect.left,
|
|
|
|
physDev->dc_rect.top + dst->visrect.top,
|
|
|
|
dst->visrect.right - dst->visrect.left,
|
|
|
|
dst->visrect.bottom - dst->visrect.top );
|
2011-03-17 14:49:16 +01:00
|
|
|
wine_tsx11_unlock();
|
|
|
|
|
|
|
|
X11DRV_UnlockDIBSection( physDev, TRUE );
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
1993-09-04 12:09:32 +02:00
|
|
|
/***********************************************************************
|
2009-09-30 20:56:56 +02:00
|
|
|
* X11DRV_StretchBlt
|
1993-09-04 12:09:32 +02:00
|
|
|
*/
|
2011-07-13 14:56:12 +02:00
|
|
|
BOOL X11DRV_StretchBlt( PHYSDEV dst_dev, struct bitblt_coords *dst,
|
|
|
|
PHYSDEV src_dev, struct bitblt_coords *src, DWORD rop )
|
1993-09-04 12:09:32 +02:00
|
|
|
{
|
2011-07-08 15:55:11 +02:00
|
|
|
X11DRV_PDEVICE *physDevDst = get_x11drv_dev( dst_dev );
|
|
|
|
X11DRV_PDEVICE *physDevSrc = get_x11drv_dev( src_dev ); /* FIXME: check that it's really an x11 dev */
|
2011-07-14 13:08:56 +02:00
|
|
|
BOOL fStretch;
|
1999-02-26 12:11:13 +01:00
|
|
|
INT width, height;
|
2009-09-30 20:39:51 +02:00
|
|
|
INT sDst, sSrc = DIB_Status_None;
|
1994-12-27 15:11:53 +01:00
|
|
|
const BYTE *opcode;
|
2011-07-14 13:08:56 +02:00
|
|
|
Pixmap src_pixmap;
|
|
|
|
GC tmpGC;
|
1993-09-04 12:09:32 +02:00
|
|
|
|
2011-07-11 13:59:05 +02:00
|
|
|
fStretch = (src->width != dst->width) || (src->height != dst->height);
|
2010-04-14 20:41:18 +02:00
|
|
|
|
2011-03-17 14:49:16 +01:00
|
|
|
if (physDevDst != physDevSrc)
|
|
|
|
sSrc = X11DRV_LockDIBSection( physDevSrc, DIB_Status_None );
|
1994-12-27 15:11:53 +01:00
|
|
|
|
2011-07-11 13:59:05 +02:00
|
|
|
width = dst->visrect.right - dst->visrect.left;
|
|
|
|
height = dst->visrect.bottom - dst->visrect.top;
|
1994-12-27 15:11:53 +01:00
|
|
|
|
2009-09-30 20:39:51 +02:00
|
|
|
sDst = X11DRV_LockDIBSection( physDevDst, DIB_Status_None );
|
|
|
|
if (physDevDst == physDevSrc) sSrc = sDst;
|
|
|
|
|
|
|
|
/* try client-side DIB copy */
|
|
|
|
if (!fStretch && rop == SRCCOPY &&
|
|
|
|
sSrc == DIB_Status_AppMod && sDst == DIB_Status_AppMod &&
|
2009-11-11 18:00:09 +01:00
|
|
|
same_format(physDevSrc, physDevDst))
|
2009-09-30 20:39:51 +02:00
|
|
|
{
|
2011-07-11 13:59:05 +02:00
|
|
|
if (client_side_dib_copy( physDevSrc, src->visrect.left, src->visrect.top,
|
|
|
|
physDevDst, dst->visrect.left, dst->visrect.top, width, height ))
|
2009-09-30 20:39:51 +02:00
|
|
|
goto done;
|
|
|
|
}
|
|
|
|
|
|
|
|
X11DRV_CoerceDIBSection( physDevDst, DIB_Status_GdiMod );
|
|
|
|
|
2008-02-21 20:15:41 +01:00
|
|
|
opcode = BITBLT_Opcodes[(rop >> 16) & 0xff];
|
2004-09-16 22:29:25 +02:00
|
|
|
|
2008-04-22 08:18:14 +02:00
|
|
|
/* a few optimizations for single-op ROPs */
|
2011-03-17 14:49:16 +01:00
|
|
|
if (!fStretch && !opcode[1] && OP_SRCDST(opcode[0]) == OP_ARGS(SRC,DST))
|
2008-02-21 20:15:41 +01:00
|
|
|
{
|
2011-03-17 14:49:16 +01:00
|
|
|
if (same_format(physDevSrc, physDevDst))
|
1994-12-27 15:11:53 +01:00
|
|
|
{
|
2011-03-17 14:49:16 +01:00
|
|
|
wine_tsx11_lock();
|
|
|
|
XSetFunction( gdi_display, physDevDst->gc, OP_ROP(*opcode) );
|
|
|
|
wine_tsx11_unlock();
|
|
|
|
|
|
|
|
if (physDevSrc != physDevDst)
|
2008-02-21 20:15:41 +01:00
|
|
|
{
|
2011-03-17 14:49:16 +01:00
|
|
|
if (sSrc == DIB_Status_AppMod)
|
2008-02-21 20:15:41 +01:00
|
|
|
{
|
2011-07-11 13:59:05 +02:00
|
|
|
X11DRV_DIB_CopyDIBSection( physDevSrc, physDevDst, src->visrect.left, src->visrect.top,
|
|
|
|
dst->visrect.left, dst->visrect.top, width, height );
|
2009-09-30 20:39:51 +02:00
|
|
|
goto done;
|
2008-02-21 20:15:41 +01:00
|
|
|
}
|
2011-03-17 14:49:16 +01:00
|
|
|
X11DRV_CoerceDIBSection( physDevSrc, DIB_Status_GdiMod );
|
2008-02-21 20:15:41 +01:00
|
|
|
}
|
2011-03-17 14:49:16 +01:00
|
|
|
wine_tsx11_lock();
|
|
|
|
XCopyArea( gdi_display, physDevSrc->drawable,
|
|
|
|
physDevDst->drawable, physDevDst->gc,
|
2011-07-11 13:59:05 +02:00
|
|
|
physDevSrc->dc_rect.left + src->visrect.left,
|
|
|
|
physDevSrc->dc_rect.top + src->visrect.top,
|
2011-03-17 14:49:16 +01:00
|
|
|
width, height,
|
2011-07-11 13:59:05 +02:00
|
|
|
physDevDst->dc_rect.left + dst->visrect.left,
|
|
|
|
physDevDst->dc_rect.top + dst->visrect.top );
|
2011-03-17 14:49:16 +01:00
|
|
|
physDevDst->exposures++;
|
|
|
|
wine_tsx11_unlock();
|
2009-09-30 20:39:51 +02:00
|
|
|
goto done;
|
1994-12-27 15:11:53 +01:00
|
|
|
}
|
2011-03-17 14:49:16 +01:00
|
|
|
if (physDevSrc->depth == 1)
|
1995-01-09 19:21:16 +01:00
|
|
|
{
|
2011-03-17 14:49:16 +01:00
|
|
|
int fg, bg;
|
2009-09-30 20:39:51 +02:00
|
|
|
|
2011-03-17 14:49:16 +01:00
|
|
|
X11DRV_CoerceDIBSection( physDevSrc, DIB_Status_GdiMod );
|
|
|
|
get_colors(physDevDst, physDevSrc, &fg, &bg);
|
|
|
|
wine_tsx11_lock();
|
|
|
|
XSetBackground( gdi_display, physDevDst->gc, fg );
|
|
|
|
XSetForeground( gdi_display, physDevDst->gc, bg );
|
|
|
|
XSetFunction( gdi_display, physDevDst->gc, OP_ROP(*opcode) );
|
|
|
|
XCopyPlane( gdi_display, physDevSrc->drawable,
|
|
|
|
physDevDst->drawable, physDevDst->gc,
|
2011-07-11 13:59:05 +02:00
|
|
|
physDevSrc->dc_rect.left + src->visrect.left,
|
|
|
|
physDevSrc->dc_rect.top + src->visrect.top,
|
2011-03-17 14:49:16 +01:00
|
|
|
width, height,
|
2011-07-11 13:59:05 +02:00
|
|
|
physDevDst->dc_rect.left + dst->visrect.left,
|
|
|
|
physDevDst->dc_rect.top + dst->visrect.top, 1 );
|
2011-03-17 14:49:16 +01:00
|
|
|
physDevDst->exposures++;
|
|
|
|
wine_tsx11_unlock();
|
|
|
|
goto done;
|
1995-01-09 19:21:16 +01:00
|
|
|
}
|
Release 940620
Mon Jun 20 14:26:41 1994 Bob Amstadt (bob@pooh)
* [objects/bitmap.c]
Allow negative bitmap sizes.
Sun Jun 19 12:00:04 1994 David Metcalfe <david@prism.demon.co.uk>
* [controls/edit.c]
Improved selection display. Added processing for WM_SETFONT,
EM_REPLACESEL, EM_LINELENGTH, EM_UNDO, EM_EMPTYUNDOBUFFER,
EM_GETHANDLE, EM_SETHANDLE messages. Text buffer now stored on
application's local heap.
* [windows/graphics.c]
Corrected bug in Rectangle(). XFillRectangle has the same
width as Rectangle, but XDrawRectangle is one pixel wider
for the same co-ordinates.
* [memory/heap.c] [include/heap.h]
Added HEAP_LocalSize function.
* [windows/event.c] [windows/keyboard.c]
Improvements to KeyStateTable and addition of AsyncKeyStateTable.
Added supporting code to GetKeyState and GetAsyncKeyState and
merged mouse button states into GetKeyboardState.
* [loader/resource.c] [include/accel.h]
Added recognition of SHIFT, CONTROL and ALT keys to
TranslateAccelerator.
* [objects/metafile.c] [objects/font.c] [objects/bitblt.c]
A bit more metafile support.
Sun Jun 19 17:29:00 MET DST 1994 Erik Bos (erik@hacktic.nl)
* [loader/resource.c]
SizeofResource() and AllocResource() added, AccessResource() updated.
* [if1632/kernel.spec]
FreeLibrary() used for FreeModule().
* [windows/graphics.c]
Rectangle(): swap left & right corners when right < left,
swap top & bottom when botton < top.
Jun 19, 94 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)
* [controls/combo.c]
Fix bug in window style of the associated listbox.
* [controls/menu.c]
Skip separators in keyboard navigation by using new internal
functions SelectPrevItem() & SelectNextItem(),
* [misc/profile.c]
Bug fix in GetPrivateProfileInt(), was limited to 4 digit,
IntBuf must be alloc to (5+1)=6. char instead of 5.
* [misc/main.c]
Put code in functions SetEnvironment() & GetEnvironment().
* [misc/shell.c]
Start putting some code in ExtractIcon() function.
* [misc/mmsystem.c]
Some code for MMTimer functions & timers list.
* [miscemu/int31.c]
Few stubs for DPMI interrupt calls. Nothing work yet.
Mon Jun 20 07:37:43 EDT 1994 John Richardson (jrichard@cs.uml.edu)
* include/win.h (tagWND):
Added icon fields icon, hIcon and rectClientSave to
the tagWND struct.
* windows/Imakefile
Added icon.c to the list of files to compile
* windows/dce.c (GetDCEx):
Added some checks for iconic mode and pass icon window as drawable,
not the real window.
* windows/defwnd.c (DefWindowProc)
Added PAINTICON default windows procedure.
* windows/event.c (EVENT_Expose)
Added check for iconic window expose. If iconic window is exposed
send a WM_PAINTICON message
* windows/icon.c
New file. ICON_Iconify, ICON_findIconFromPoint, ICON_Deiconify.
* windows/mdi.c (DefMDIChildProc)
Test for IsIconic during a SC_RESTORE, this doesn't work yet.
* windows/message.c (hardware_event)
Looks for icon as well as window now.
* windows/nonclient.c (NC_HandleSysCommand, NC_DoNCPaintIcon)
Added iconify/deiconify in NC_HandleSysCommand, new function
NC_DoNCPaintIcon which paints an icon.
* windows/painting.c (BeginPaint)
Made a BeginPaint select the STOCK_BLACK_PEN, STOCK_WHITE_BRUSH,
and STOCK_SYSTEM_FONT objects since this is (hopefully) default
windows behavior.
* windows/win.h (CreateWindowEx)
Set the default background color of a window to be white.
Create icon window, turn off MINIMIZE if it is on, since
I don't know what to do with it as of yet... register
the icon with the hwnd of its window so we can identify where
icon messages are coming from.
Mon Jun 20 10:15:59 1994 Miguel de Icaza (miguel@sphinx)
* windows/event.c: Added a hack to define XPointer when using
X11R4.
* toolkit/hello.c: Test application for WineLib. To compile you'll
need: gcc -Iinclude -DWINELIB -g hello.c -c, and to link you'll
need: gcc hello.o libwine.a -lX11 -L/usr/openwin/lib -lm
* toolkit/heap.c: Extended the size of the block size per chunk.
* misc/stress.c (GetFreeFileHandles): Fixed typo.
* misc/main.c (main): Changes to allow compilation under SunOS.
* loader/library.c: Changed some ifdefs to compile WineLib.
1994-06-21 18:15:21 +02:00
|
|
|
}
|
1993-09-04 12:09:32 +02:00
|
|
|
|
2001-07-12 04:49:31 +02:00
|
|
|
wine_tsx11_lock();
|
2001-05-11 02:17:47 +02:00
|
|
|
tmpGC = XCreateGC( gdi_display, physDevDst->drawable, 0, NULL );
|
2001-06-04 23:55:17 +02:00
|
|
|
XSetSubwindowMode( gdi_display, tmpGC, IncludeInferiors );
|
2001-05-11 02:17:47 +02:00
|
|
|
XSetGraphicsExposures( gdi_display, tmpGC, False );
|
2011-07-14 13:08:56 +02:00
|
|
|
src_pixmap = XCreatePixmap( gdi_display, root_window, width, height, physDevDst->depth );
|
2007-09-27 18:02:26 +02:00
|
|
|
wine_tsx11_unlock();
|
|
|
|
|
2011-03-17 14:49:16 +01:00
|
|
|
if (physDevDst != physDevSrc) X11DRV_CoerceDIBSection( physDevSrc, DIB_Status_GdiMod );
|
2009-07-09 21:20:12 +02:00
|
|
|
|
2011-07-14 13:08:56 +02:00
|
|
|
if(!X11DRV_XRender_GetSrcAreaStretch( physDevSrc, physDevDst, src_pixmap, tmpGC, src, dst ))
|
2011-03-17 14:49:16 +01:00
|
|
|
{
|
|
|
|
if (fStretch)
|
2011-07-14 13:08:56 +02:00
|
|
|
BITBLT_GetSrcAreaStretch( physDevSrc, physDevDst, src_pixmap, tmpGC, src, dst );
|
2011-03-17 14:49:16 +01:00
|
|
|
else
|
2011-07-14 13:08:56 +02:00
|
|
|
BITBLT_GetSrcArea( physDevSrc, physDevDst, src_pixmap, tmpGC, &src->visrect );
|
1995-01-09 19:21:16 +01:00
|
|
|
}
|
2001-07-12 04:49:31 +02:00
|
|
|
|
2011-07-14 13:08:56 +02:00
|
|
|
execute_rop( physDevDst, src_pixmap, tmpGC, &dst->visrect, rop );
|
1994-12-27 15:11:53 +01:00
|
|
|
|
2007-09-27 18:02:26 +02:00
|
|
|
wine_tsx11_lock();
|
2011-07-14 13:08:56 +02:00
|
|
|
XFreePixmap( gdi_display, src_pixmap );
|
2001-05-11 02:17:47 +02:00
|
|
|
XFreeGC( gdi_display, tmpGC );
|
2001-07-12 04:49:31 +02:00
|
|
|
wine_tsx11_unlock();
|
2009-09-30 20:39:51 +02:00
|
|
|
|
|
|
|
done:
|
2011-03-17 14:49:16 +01:00
|
|
|
if (physDevDst != physDevSrc) X11DRV_UnlockDIBSection( physDevSrc, FALSE );
|
2009-09-30 20:39:51 +02:00
|
|
|
X11DRV_UnlockDIBSection( physDevDst, TRUE );
|
1994-12-27 15:11:53 +01:00
|
|
|
return TRUE;
|
1993-09-04 12:09:32 +02:00
|
|
|
}
|
2010-04-14 20:41:18 +02:00
|
|
|
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* X11DRV_AlphaBlend
|
|
|
|
*/
|
2011-07-13 14:56:12 +02:00
|
|
|
BOOL X11DRV_AlphaBlend( PHYSDEV dst_dev, struct bitblt_coords *dst,
|
|
|
|
PHYSDEV src_dev, struct bitblt_coords *src, BLENDFUNCTION blendfn )
|
2010-04-14 20:41:18 +02:00
|
|
|
{
|
2011-07-08 15:55:11 +02:00
|
|
|
X11DRV_PDEVICE *physDevDst = get_x11drv_dev( dst_dev );
|
|
|
|
X11DRV_PDEVICE *physDevSrc = get_x11drv_dev( src_dev ); /* FIXME: check that it's really an x11 dev */
|
2011-07-11 14:17:04 +02:00
|
|
|
|
|
|
|
if (src->x < 0 || src->y < 0 || src->width < 0 || src->height < 0 ||
|
|
|
|
src->width > physDevSrc->drawable_rect.right - physDevSrc->drawable_rect.left - src->x ||
|
|
|
|
src->height > physDevSrc->drawable_rect.bottom - physDevSrc->drawable_rect.top - src->y)
|
2010-04-14 20:41:18 +02:00
|
|
|
{
|
2011-07-11 14:17:04 +02:00
|
|
|
WARN( "Invalid src coords: (%d,%d), size %dx%d\n", src->x, src->y, src->width, src->height );
|
2010-04-14 20:41:18 +02:00
|
|
|
SetLastError( ERROR_INVALID_PARAMETER );
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2011-07-11 14:17:04 +02:00
|
|
|
return XRender_AlphaBlend( physDevDst, dst, physDevSrc, src, blendfn );
|
2010-04-14 20:41:18 +02:00
|
|
|
}
|
2011-07-14 12:37:04 +02:00
|
|
|
|
|
|
|
|
|
|
|
static void free_heap_bits( struct gdi_image_bits *bits )
|
|
|
|
{
|
|
|
|
HeapFree( GetProcessHeap(), 0, bits->ptr );
|
|
|
|
}
|
|
|
|
|
|
|
|
static void free_ximage_bits( struct gdi_image_bits *bits )
|
|
|
|
{
|
|
|
|
wine_tsx11_lock();
|
|
|
|
XFree( bits->ptr );
|
|
|
|
wine_tsx11_unlock();
|
|
|
|
}
|
|
|
|
|
|
|
|
/* store the palette or color mask data in the bitmap info structure */
|
2011-07-11 22:45:05 +02:00
|
|
|
static void set_color_info( PHYSDEV dev, const ColorShifts *color_shifts, BITMAPINFO *info )
|
2011-07-14 12:37:04 +02:00
|
|
|
{
|
|
|
|
DWORD *colors = (DWORD *)((char *)info + info->bmiHeader.biSize);
|
|
|
|
|
2011-07-11 22:45:05 +02:00
|
|
|
info->bmiHeader.biCompression = BI_RGB;
|
|
|
|
info->bmiHeader.biClrUsed = 0;
|
|
|
|
|
2011-07-14 12:37:04 +02:00
|
|
|
switch (info->bmiHeader.biBitCount)
|
|
|
|
{
|
|
|
|
case 4:
|
|
|
|
case 8:
|
2011-07-11 22:45:05 +02:00
|
|
|
{
|
|
|
|
RGBQUAD *rgb = (RGBQUAD *)colors;
|
|
|
|
PALETTEENTRY palette[256];
|
|
|
|
UINT i, count;
|
|
|
|
|
|
|
|
info->bmiHeader.biClrUsed = 1 << info->bmiHeader.biBitCount;
|
|
|
|
count = X11DRV_GetSystemPaletteEntries( dev, 0, info->bmiHeader.biClrUsed, palette );
|
|
|
|
for (i = 0; i < count; i++)
|
|
|
|
{
|
|
|
|
rgb[i].rgbRed = palette[i].peRed;
|
|
|
|
rgb[i].rgbGreen = palette[i].peGreen;
|
|
|
|
rgb[i].rgbBlue = palette[i].peBlue;
|
|
|
|
rgb[i].rgbReserved = 0;
|
|
|
|
}
|
|
|
|
memset( &rgb[count], 0, (info->bmiHeader.biClrUsed - count) * sizeof(*rgb) );
|
2011-07-14 12:37:04 +02:00
|
|
|
break;
|
2011-07-11 22:45:05 +02:00
|
|
|
}
|
2011-07-14 12:37:04 +02:00
|
|
|
case 16:
|
|
|
|
colors[0] = color_shifts->logicalRed.max << color_shifts->logicalRed.shift;
|
|
|
|
colors[1] = color_shifts->logicalGreen.max << color_shifts->logicalGreen.shift;
|
|
|
|
colors[2] = color_shifts->logicalBlue.max << color_shifts->logicalBlue.shift;
|
2011-07-11 22:45:05 +02:00
|
|
|
if (colors[0] != 0x7c00 || colors[1] != 0x03e0 || colors[2] != 0x001f)
|
|
|
|
info->bmiHeader.biCompression = BI_BITFIELDS;
|
2011-07-14 12:37:04 +02:00
|
|
|
break;
|
2011-07-11 22:45:05 +02:00
|
|
|
case 32:
|
|
|
|
colors[0] = color_shifts->logicalRed.max << color_shifts->logicalRed.shift;
|
|
|
|
colors[1] = color_shifts->logicalGreen.max << color_shifts->logicalGreen.shift;
|
|
|
|
colors[2] = color_shifts->logicalBlue.max << color_shifts->logicalBlue.shift;
|
|
|
|
if (colors[0] != 0xff0000 || colors[1] != 0x00ff00 || colors[2] != 0x0000ff)
|
|
|
|
info->bmiHeader.biCompression = BI_BITFIELDS;
|
2011-07-14 12:37:04 +02:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-07-20 11:42:17 +02:00
|
|
|
/* check if the specified color info is suitable for PutImage */
|
|
|
|
static BOOL matching_color_info( PHYSDEV dev, const ColorShifts *color_shifts, const BITMAPINFO *info )
|
|
|
|
{
|
|
|
|
DWORD *colors = (DWORD *)((char *)info + info->bmiHeader.biSize);
|
|
|
|
|
|
|
|
switch (info->bmiHeader.biBitCount)
|
|
|
|
{
|
|
|
|
case 1:
|
|
|
|
if (info->bmiHeader.biCompression != BI_RGB) return FALSE;
|
|
|
|
return !info->bmiHeader.biClrUsed; /* color map not allowed */
|
|
|
|
case 4:
|
|
|
|
case 8:
|
|
|
|
{
|
|
|
|
RGBQUAD *rgb = (RGBQUAD *)colors;
|
|
|
|
PALETTEENTRY palette[256];
|
|
|
|
UINT i, count;
|
|
|
|
|
|
|
|
if (info->bmiHeader.biCompression != BI_RGB) return FALSE;
|
|
|
|
count = X11DRV_GetSystemPaletteEntries( dev, 0, 1 << info->bmiHeader.biBitCount, palette );
|
|
|
|
if (count != info->bmiHeader.biClrUsed) return FALSE;
|
|
|
|
for (i = 0; i < count; i++)
|
|
|
|
{
|
|
|
|
if (rgb[i].rgbRed != palette[i].peRed ||
|
|
|
|
rgb[i].rgbGreen != palette[i].peGreen ||
|
|
|
|
rgb[i].rgbBlue != palette[i].peBlue) return FALSE;
|
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
case 16:
|
|
|
|
if (info->bmiHeader.biCompression == BI_BITFIELDS)
|
|
|
|
return (color_shifts->logicalRed.max << color_shifts->logicalRed.shift == colors[0] &&
|
|
|
|
color_shifts->logicalGreen.max << color_shifts->logicalGreen.shift == colors[1] &&
|
|
|
|
color_shifts->logicalBlue.max << color_shifts->logicalBlue.shift == colors[2]);
|
|
|
|
if (info->bmiHeader.biCompression == BI_RGB)
|
|
|
|
return (color_shifts->logicalRed.max << color_shifts->logicalRed.shift == 0x7c00 &&
|
|
|
|
color_shifts->logicalGreen.max << color_shifts->logicalGreen.shift == 0x03e0 &&
|
|
|
|
color_shifts->logicalBlue.max << color_shifts->logicalBlue.shift == 0x001f);
|
|
|
|
break;
|
|
|
|
case 32:
|
|
|
|
if (info->bmiHeader.biCompression == BI_BITFIELDS)
|
|
|
|
return (color_shifts->logicalRed.max << color_shifts->logicalRed.shift == colors[0] &&
|
|
|
|
color_shifts->logicalGreen.max << color_shifts->logicalGreen.shift == colors[1] &&
|
|
|
|
color_shifts->logicalBlue.max << color_shifts->logicalBlue.shift == colors[2]);
|
|
|
|
/* fall through */
|
|
|
|
case 24:
|
|
|
|
if (info->bmiHeader.biCompression == BI_RGB)
|
|
|
|
return (color_shifts->logicalRed.max << color_shifts->logicalRed.shift == 0xff0000 &&
|
|
|
|
color_shifts->logicalGreen.max << color_shifts->logicalGreen.shift == 0x00ff00 &&
|
|
|
|
color_shifts->logicalBlue.max << color_shifts->logicalBlue.shift == 0x0000ff);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2011-07-14 12:47:45 +02:00
|
|
|
/* copy the image bits, fixing up alignment and byte swapping as necessary */
|
2011-07-17 10:18:00 +02:00
|
|
|
static DWORD copy_image_bits( BITMAPINFO *info, const ColorShifts *color_shifts, XImage *image,
|
2011-07-15 13:49:36 +02:00
|
|
|
const struct gdi_image_bits *src_bits, struct gdi_image_bits *dst_bits,
|
2011-07-21 11:17:13 +02:00
|
|
|
struct bitblt_coords *coords, const int *mapping, unsigned int zeropad_mask )
|
2011-07-14 12:47:45 +02:00
|
|
|
{
|
2011-07-15 13:49:36 +02:00
|
|
|
#ifdef WORDS_BIGENDIAN
|
|
|
|
static const int client_byte_order = MSBFirst;
|
|
|
|
#else
|
|
|
|
static const int client_byte_order = LSBFirst;
|
|
|
|
#endif
|
2011-07-14 12:47:45 +02:00
|
|
|
BOOL need_byteswap;
|
2011-07-21 11:17:13 +02:00
|
|
|
int x, y, height = coords->visrect.bottom - coords->visrect.top;
|
2011-07-14 13:09:38 +02:00
|
|
|
int width_bytes = image->bytes_per_line;
|
2011-07-15 13:49:36 +02:00
|
|
|
int padding_pos;
|
2011-07-14 12:47:45 +02:00
|
|
|
unsigned char *src, *dst;
|
|
|
|
|
|
|
|
switch (info->bmiHeader.biBitCount)
|
|
|
|
{
|
|
|
|
case 1:
|
|
|
|
need_byteswap = (image->bitmap_bit_order != MSBFirst);
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
need_byteswap = (image->byte_order != MSBFirst);
|
|
|
|
break;
|
|
|
|
case 16:
|
|
|
|
case 32:
|
2011-07-15 13:49:36 +02:00
|
|
|
need_byteswap = (image->byte_order != client_byte_order);
|
2011-07-14 12:47:45 +02:00
|
|
|
break;
|
|
|
|
case 24:
|
|
|
|
need_byteswap = ((image->byte_order == LSBFirst && color_shifts->logicalBlue.shift == 16) ||
|
|
|
|
(image->byte_order == MSBFirst && color_shifts->logicalBlue.shift == 0));
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
need_byteswap = FALSE;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2011-07-21 11:17:13 +02:00
|
|
|
src = src_bits->ptr;
|
|
|
|
if (info->bmiHeader.biHeight > 0)
|
|
|
|
src += (info->bmiHeader.biHeight - coords->visrect.bottom) * width_bytes;
|
|
|
|
else
|
|
|
|
src += coords->visrect.top * width_bytes;
|
|
|
|
|
2011-07-15 13:49:36 +02:00
|
|
|
if ((need_byteswap && !src_bits->is_copy) || /* need to swap bytes */
|
|
|
|
(zeropad_mask != ~0u && !src_bits->is_copy) || /* need to clear padding bytes */
|
2011-07-18 14:48:01 +02:00
|
|
|
(mapping && !src_bits->is_copy) || /* need to remap pixels */
|
2011-07-15 13:49:36 +02:00
|
|
|
(width_bytes & 3) || /* need to fixup line alignment */
|
|
|
|
(info->bmiHeader.biHeight > 0)) /* need to flip vertically */
|
2011-07-14 12:47:45 +02:00
|
|
|
{
|
|
|
|
width_bytes = (width_bytes + 3) & ~3;
|
|
|
|
info->bmiHeader.biSizeImage = height * width_bytes;
|
|
|
|
if (!(dst_bits->ptr = HeapAlloc( GetProcessHeap(), 0, info->bmiHeader.biSizeImage )))
|
|
|
|
return ERROR_OUTOFMEMORY;
|
|
|
|
dst_bits->is_copy = TRUE;
|
|
|
|
dst_bits->free = free_heap_bits;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* swap bits in place */
|
2011-07-21 11:17:13 +02:00
|
|
|
dst_bits->ptr = src;
|
2011-07-14 12:47:45 +02:00
|
|
|
dst_bits->is_copy = src_bits->is_copy;
|
|
|
|
dst_bits->free = NULL;
|
2011-07-18 14:48:01 +02:00
|
|
|
if (!need_byteswap && zeropad_mask == ~0u && !mapping) return ERROR_SUCCESS; /* nothing to do */
|
2011-07-14 12:47:45 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
dst = dst_bits->ptr;
|
2011-07-15 13:49:36 +02:00
|
|
|
padding_pos = width_bytes/sizeof(unsigned int) - 1;
|
2011-07-14 12:47:45 +02:00
|
|
|
|
2011-07-14 13:09:38 +02:00
|
|
|
if (info->bmiHeader.biHeight > 0)
|
|
|
|
{
|
|
|
|
dst += (height - 1) * width_bytes;
|
|
|
|
width_bytes = -width_bytes;
|
|
|
|
}
|
|
|
|
|
2011-07-18 14:48:01 +02:00
|
|
|
if (need_byteswap || mapping)
|
2011-07-14 12:47:45 +02:00
|
|
|
{
|
|
|
|
switch (info->bmiHeader.biBitCount)
|
|
|
|
{
|
|
|
|
case 1:
|
|
|
|
for (y = 0; y < height; y++, src += image->bytes_per_line, dst += width_bytes)
|
2011-07-15 13:49:36 +02:00
|
|
|
{
|
2011-07-14 12:47:45 +02:00
|
|
|
for (x = 0; x < image->bytes_per_line; x++)
|
|
|
|
dst[x] = bit_swap[src[x]];
|
2011-07-15 13:49:36 +02:00
|
|
|
((unsigned int *)dst)[padding_pos] &= zeropad_mask;
|
|
|
|
}
|
2011-07-14 12:47:45 +02:00
|
|
|
break;
|
|
|
|
case 4:
|
2011-07-18 14:48:01 +02:00
|
|
|
for (y = 0; y < height; y++, src += image->bytes_per_line, dst += width_bytes)
|
|
|
|
{
|
|
|
|
if (mapping)
|
|
|
|
for (x = 0; x < image->bytes_per_line; x++)
|
|
|
|
dst[x] = (mapping[src[x] & 0x0f] << 4) | mapping[src[x] >> 4];
|
|
|
|
else
|
|
|
|
for (x = 0; x < image->bytes_per_line; x++)
|
|
|
|
dst[x] = (src[x] << 4) | (src[x] >> 4);
|
|
|
|
((unsigned int *)dst)[padding_pos] &= zeropad_mask;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 8:
|
2011-07-14 12:47:45 +02:00
|
|
|
for (y = 0; y < height; y++, src += image->bytes_per_line, dst += width_bytes)
|
2011-07-15 13:49:36 +02:00
|
|
|
{
|
2011-07-14 12:47:45 +02:00
|
|
|
for (x = 0; x < image->bytes_per_line; x++)
|
2011-07-18 14:48:01 +02:00
|
|
|
dst[x] = mapping[src[x]];
|
2011-07-15 13:49:36 +02:00
|
|
|
((unsigned int *)dst)[padding_pos] &= zeropad_mask;
|
|
|
|
}
|
2011-07-14 12:47:45 +02:00
|
|
|
break;
|
|
|
|
case 16:
|
|
|
|
for (y = 0; y < height; y++, src += image->bytes_per_line, dst += width_bytes)
|
2011-07-15 13:49:36 +02:00
|
|
|
{
|
2011-07-14 12:47:45 +02:00
|
|
|
for (x = 0; x < info->bmiHeader.biWidth; x++)
|
|
|
|
((USHORT *)dst)[x] = RtlUshortByteSwap( ((const USHORT *)src)[x] );
|
2011-07-15 13:49:36 +02:00
|
|
|
((unsigned int *)dst)[padding_pos] &= zeropad_mask;
|
|
|
|
}
|
2011-07-14 12:47:45 +02:00
|
|
|
break;
|
|
|
|
case 24:
|
|
|
|
for (y = 0; y < height; y++, src += image->bytes_per_line, dst += width_bytes)
|
2011-07-15 13:49:36 +02:00
|
|
|
{
|
2011-07-14 12:47:45 +02:00
|
|
|
for (x = 0; x < info->bmiHeader.biWidth; x++)
|
|
|
|
{
|
|
|
|
unsigned char tmp = src[3 * x];
|
|
|
|
dst[3 * x] = src[3 * x + 2];
|
|
|
|
dst[3 * x + 1] = src[3 * x + 1];
|
|
|
|
dst[3 * x + 2] = tmp;
|
|
|
|
}
|
2011-07-15 13:49:36 +02:00
|
|
|
((unsigned int *)dst)[padding_pos] &= zeropad_mask;
|
|
|
|
}
|
2011-07-14 12:47:45 +02:00
|
|
|
break;
|
|
|
|
case 32:
|
|
|
|
for (y = 0; y < height; y++, src += image->bytes_per_line, dst += width_bytes)
|
|
|
|
for (x = 0; x < info->bmiHeader.biWidth; x++)
|
|
|
|
((ULONG *)dst)[x] = RtlUlongByteSwap( ((const ULONG *)src)[x] );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2011-07-15 13:49:36 +02:00
|
|
|
else if (src != dst)
|
2011-07-14 12:47:45 +02:00
|
|
|
{
|
|
|
|
for (y = 0; y < height; y++, src += image->bytes_per_line, dst += width_bytes)
|
2011-07-15 13:49:36 +02:00
|
|
|
{
|
2011-07-14 12:47:45 +02:00
|
|
|
memcpy( dst, src, image->bytes_per_line );
|
2011-07-15 13:49:36 +02:00
|
|
|
((unsigned int *)dst)[padding_pos] &= zeropad_mask;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else /* only need to clear the padding */
|
|
|
|
{
|
|
|
|
for (y = 0; y < height; y++, dst += width_bytes)
|
|
|
|
((unsigned int *)dst)[padding_pos] &= zeropad_mask;
|
2011-07-14 12:47:45 +02:00
|
|
|
}
|
|
|
|
return ERROR_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2011-07-14 12:59:48 +02:00
|
|
|
/***********************************************************************
|
|
|
|
* X11DRV_PutImage
|
|
|
|
*/
|
2011-07-21 18:49:47 +02:00
|
|
|
DWORD X11DRV_PutImage( PHYSDEV dev, HBITMAP hbitmap, HRGN clip, BITMAPINFO *info,
|
|
|
|
const struct gdi_image_bits *bits, struct bitblt_coords *src,
|
|
|
|
struct bitblt_coords *dst, DWORD rop )
|
2011-07-14 12:59:48 +02:00
|
|
|
{
|
|
|
|
X11DRV_PDEVICE *physdev;
|
|
|
|
X_PHYSBITMAP *bitmap;
|
2011-07-20 11:42:17 +02:00
|
|
|
DWORD ret;
|
2011-07-14 12:59:48 +02:00
|
|
|
XImage *image;
|
|
|
|
int depth;
|
|
|
|
struct gdi_image_bits dst_bits;
|
|
|
|
const XPixmapFormatValues *format;
|
|
|
|
const ColorShifts *color_shifts;
|
2011-07-18 14:48:01 +02:00
|
|
|
const BYTE *opcode = BITBLT_Opcodes[(rop >> 16) & 0xff];
|
|
|
|
const int *mapping = NULL;
|
2011-07-14 12:59:48 +02:00
|
|
|
|
|
|
|
if (hbitmap)
|
|
|
|
{
|
|
|
|
if (!(bitmap = X11DRV_get_phys_bitmap( hbitmap ))) return ERROR_INVALID_HANDLE;
|
|
|
|
physdev = NULL;
|
|
|
|
depth = bitmap->pixmap_depth;
|
|
|
|
color_shifts = &bitmap->pixmap_color_shifts;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
physdev = get_x11drv_dev( dev );
|
|
|
|
bitmap = NULL;
|
|
|
|
depth = physdev->depth;
|
|
|
|
color_shifts = physdev->color_shifts;
|
|
|
|
}
|
|
|
|
format = pixmap_formats[depth];
|
|
|
|
|
|
|
|
if (info->bmiHeader.biPlanes != 1) goto update_format;
|
|
|
|
if (info->bmiHeader.biBitCount != format->bits_per_pixel) goto update_format;
|
2011-07-14 13:09:04 +02:00
|
|
|
/* FIXME: could try to handle 1-bpp using XCopyPlane */
|
2011-07-20 11:42:17 +02:00
|
|
|
if (!matching_color_info( dev, color_shifts, info )) goto update_format;
|
|
|
|
if (!bits) return ERROR_SUCCESS; /* just querying the format */
|
2011-07-20 17:28:19 +02:00
|
|
|
if ((src->width != dst->width) || (src->height != dst->height)) return ERROR_TRANSFORM_NOT_SUPPORTED;
|
2011-07-14 12:59:48 +02:00
|
|
|
|
|
|
|
wine_tsx11_lock();
|
|
|
|
image = XCreateImage( gdi_display, visual, depth, ZPixmap, 0, NULL,
|
2011-07-21 11:17:13 +02:00
|
|
|
info->bmiHeader.biWidth, src->visrect.bottom - src->visrect.top, 32, 0 );
|
2011-07-14 12:59:48 +02:00
|
|
|
wine_tsx11_unlock();
|
|
|
|
if (!image) return ERROR_OUTOFMEMORY;
|
|
|
|
|
2011-07-18 14:48:01 +02:00
|
|
|
if (image->bits_per_pixel == 4 || image->bits_per_pixel == 8)
|
|
|
|
{
|
|
|
|
if (bitmap || (!opcode[1] && OP_SRCDST(opcode[0]) == OP_ARGS(SRC,DST)))
|
|
|
|
mapping = X11DRV_PALETTE_PaletteToXPixel;
|
|
|
|
}
|
|
|
|
|
2011-07-21 11:17:13 +02:00
|
|
|
ret = copy_image_bits( info, color_shifts, image, bits, &dst_bits, src, mapping, ~0u );
|
2011-07-14 12:59:48 +02:00
|
|
|
|
|
|
|
if (!ret)
|
|
|
|
{
|
2011-07-21 11:17:13 +02:00
|
|
|
int width = dst->visrect.right - dst->visrect.left;
|
|
|
|
int height = dst->visrect.bottom - dst->visrect.top;
|
2011-07-15 19:57:31 +02:00
|
|
|
|
2011-07-14 12:59:48 +02:00
|
|
|
image->data = dst_bits.ptr;
|
|
|
|
if (bitmap)
|
|
|
|
{
|
2011-07-21 19:12:55 +02:00
|
|
|
RGNDATA *clip_data = NULL;
|
|
|
|
GC gc;
|
|
|
|
|
|
|
|
if (clip) clip_data = X11DRV_GetRegionData( clip, 0 );
|
2011-07-20 17:45:21 +02:00
|
|
|
X11DRV_DIB_Lock( bitmap, DIB_Status_GdiMod );
|
2011-07-21 19:12:55 +02:00
|
|
|
|
2011-07-14 12:59:48 +02:00
|
|
|
wine_tsx11_lock();
|
2011-07-21 19:12:55 +02:00
|
|
|
gc = XCreateGC( gdi_display, bitmap->pixmap, 0, NULL );
|
|
|
|
XSetGraphicsExposures( gdi_display, gc, False );
|
|
|
|
if (clip_data) XSetClipRectangles( gdi_display, gc, 0, 0, (XRectangle *)clip_data->Buffer,
|
|
|
|
clip_data->rdh.nCount, YXBanded );
|
|
|
|
XPutImage( gdi_display, bitmap->pixmap, gc, image, src->visrect.left, 0,
|
2011-07-21 11:17:13 +02:00
|
|
|
dst->visrect.left, dst->visrect.top, width, height );
|
2011-07-21 19:12:55 +02:00
|
|
|
XFreeGC( gdi_display, gc );
|
2011-07-14 12:59:48 +02:00
|
|
|
wine_tsx11_unlock();
|
2011-07-21 19:12:55 +02:00
|
|
|
|
2011-07-20 17:45:21 +02:00
|
|
|
X11DRV_DIB_Unlock( bitmap, TRUE );
|
2011-07-21 19:12:55 +02:00
|
|
|
HeapFree( GetProcessHeap(), 0, clip_data );
|
2011-07-14 12:59:48 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2011-07-21 19:12:55 +02:00
|
|
|
HRGN saved_region = 0;
|
|
|
|
|
|
|
|
if (clip) saved_region = add_extra_clipping_region( physdev, clip );
|
2011-07-14 12:59:48 +02:00
|
|
|
X11DRV_LockDIBSection( physdev, DIB_Status_GdiMod );
|
2011-07-14 13:09:04 +02:00
|
|
|
|
|
|
|
/* optimization for single-op ROPs */
|
|
|
|
if (!opcode[1] && OP_SRCDST(opcode[0]) == OP_ARGS(SRC,DST))
|
|
|
|
{
|
|
|
|
wine_tsx11_lock();
|
|
|
|
XSetFunction( gdi_display, physdev->gc, OP_ROP(*opcode) );
|
2011-07-21 11:17:13 +02:00
|
|
|
XPutImage( gdi_display, physdev->drawable, physdev->gc, image, src->visrect.left, 0,
|
|
|
|
physdev->dc_rect.left + dst->visrect.left,
|
|
|
|
physdev->dc_rect.top + dst->visrect.top, width, height );
|
2011-07-14 13:09:04 +02:00
|
|
|
wine_tsx11_unlock();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
Pixmap src_pixmap;
|
|
|
|
GC gc;
|
|
|
|
|
|
|
|
wine_tsx11_lock();
|
|
|
|
gc = XCreateGC( gdi_display, physdev->drawable, 0, NULL );
|
|
|
|
XSetSubwindowMode( gdi_display, gc, IncludeInferiors );
|
|
|
|
XSetGraphicsExposures( gdi_display, gc, False );
|
|
|
|
src_pixmap = XCreatePixmap( gdi_display, root_window, width, height, depth );
|
2011-07-21 11:17:13 +02:00
|
|
|
XPutImage( gdi_display, src_pixmap, gc, image, src->visrect.left, 0, 0, 0, width, height );
|
2011-07-14 13:09:04 +02:00
|
|
|
wine_tsx11_unlock();
|
|
|
|
|
2011-07-21 11:17:13 +02:00
|
|
|
execute_rop( physdev, src_pixmap, gc, &dst->visrect, rop );
|
2011-07-14 13:09:04 +02:00
|
|
|
|
|
|
|
wine_tsx11_lock();
|
|
|
|
XFreePixmap( gdi_display, src_pixmap );
|
|
|
|
XFreeGC( gdi_display, gc );
|
|
|
|
wine_tsx11_unlock();
|
|
|
|
}
|
|
|
|
|
2011-07-14 12:59:48 +02:00
|
|
|
X11DRV_UnlockDIBSection( physdev, !ret );
|
2011-07-21 19:12:55 +02:00
|
|
|
if (saved_region) restore_clipping_region( physdev, saved_region );
|
2011-07-14 12:59:48 +02:00
|
|
|
}
|
|
|
|
image->data = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
wine_tsx11_lock();
|
|
|
|
XDestroyImage( image );
|
|
|
|
wine_tsx11_unlock();
|
|
|
|
if (dst_bits.free) dst_bits.free( &dst_bits );
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
update_format:
|
|
|
|
info->bmiHeader.biPlanes = 1;
|
|
|
|
info->bmiHeader.biBitCount = format->bits_per_pixel;
|
|
|
|
if (info->bmiHeader.biHeight > 0) info->bmiHeader.biHeight = -info->bmiHeader.biHeight;
|
2011-07-20 17:45:22 +02:00
|
|
|
set_color_info( dev, color_shifts, info );
|
2011-07-14 12:59:48 +02:00
|
|
|
return ERROR_BAD_FORMAT;
|
|
|
|
}
|
|
|
|
|
2011-07-14 12:37:04 +02:00
|
|
|
/***********************************************************************
|
|
|
|
* X11DRV_GetImage
|
|
|
|
*/
|
|
|
|
DWORD X11DRV_GetImage( PHYSDEV dev, HBITMAP hbitmap, BITMAPINFO *info,
|
2011-07-21 11:17:13 +02:00
|
|
|
struct gdi_image_bits *bits, struct bitblt_coords *src )
|
2011-07-14 12:37:04 +02:00
|
|
|
{
|
|
|
|
X11DRV_PDEVICE *physdev;
|
|
|
|
X_PHYSBITMAP *bitmap;
|
|
|
|
DWORD ret = ERROR_SUCCESS;
|
|
|
|
XImage *image;
|
2011-07-14 12:47:45 +02:00
|
|
|
UINT align, x, y, width, height;
|
2011-07-14 12:37:04 +02:00
|
|
|
int depth;
|
2011-07-14 12:47:45 +02:00
|
|
|
struct gdi_image_bits src_bits;
|
2011-07-14 12:37:04 +02:00
|
|
|
const XPixmapFormatValues *format;
|
|
|
|
const ColorShifts *color_shifts;
|
2011-07-18 14:48:01 +02:00
|
|
|
const int *mapping = NULL;
|
2011-07-14 12:37:04 +02:00
|
|
|
|
|
|
|
if (hbitmap)
|
|
|
|
{
|
|
|
|
if (!(bitmap = X11DRV_get_phys_bitmap( hbitmap ))) return ERROR_INVALID_HANDLE;
|
|
|
|
physdev = NULL;
|
|
|
|
depth = bitmap->pixmap_depth;
|
|
|
|
color_shifts = &bitmap->pixmap_color_shifts;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
physdev = get_x11drv_dev( dev );
|
|
|
|
bitmap = NULL;
|
|
|
|
depth = physdev->depth;
|
|
|
|
color_shifts = physdev->color_shifts;
|
|
|
|
}
|
|
|
|
format = pixmap_formats[depth];
|
|
|
|
|
|
|
|
/* align start and width to 32-bit boundary */
|
|
|
|
switch (format->bits_per_pixel)
|
|
|
|
{
|
|
|
|
case 1: align = 32; break;
|
2011-07-18 14:48:01 +02:00
|
|
|
case 4: align = 8; mapping = X11DRV_PALETTE_XPixelToPalette; break;
|
|
|
|
case 8: align = 4; mapping = X11DRV_PALETTE_XPixelToPalette; break;
|
2011-07-14 12:37:04 +02:00
|
|
|
case 16: align = 2; break;
|
|
|
|
case 24: align = 4; break;
|
|
|
|
case 32: align = 1; break;
|
|
|
|
default:
|
|
|
|
FIXME( "depth %u bpp %u not supported yet\n", depth, format->bits_per_pixel );
|
|
|
|
return ERROR_BAD_FORMAT;
|
|
|
|
}
|
2011-07-21 12:03:30 +02:00
|
|
|
x = src->visrect.left & ~(align - 1);
|
2011-07-21 11:17:13 +02:00
|
|
|
y = src->visrect.top;
|
|
|
|
width = src->visrect.right - x;
|
|
|
|
height = src->visrect.bottom - src->visrect.top;
|
2011-07-14 12:37:04 +02:00
|
|
|
if (format->scanline_pad != 32) width = (width + (align - 1)) & ~(align - 1);
|
2011-07-21 11:17:13 +02:00
|
|
|
/* make the source rectangle relative to the returned bits */
|
|
|
|
src->x -= x;
|
|
|
|
src->y -= y;
|
|
|
|
OffsetRect( &src->visrect, -x, -y );
|
2011-07-14 12:37:04 +02:00
|
|
|
|
|
|
|
if (bitmap)
|
|
|
|
{
|
|
|
|
BITMAP bm;
|
|
|
|
GetObjectW( hbitmap, sizeof(bm), &bm );
|
|
|
|
width = min( width, bm.bmWidth - x );
|
|
|
|
height = min( height, bm.bmHeight - y );
|
2011-07-15 14:05:25 +02:00
|
|
|
X11DRV_DIB_Lock( bitmap, DIB_Status_GdiMod );
|
2011-07-14 12:37:04 +02:00
|
|
|
wine_tsx11_lock();
|
|
|
|
image = XGetImage( gdi_display, bitmap->pixmap, x, y, width, height, AllPlanes, ZPixmap );
|
|
|
|
wine_tsx11_unlock();
|
2011-07-15 14:05:25 +02:00
|
|
|
X11DRV_DIB_Unlock( bitmap, TRUE );
|
2011-07-14 12:37:04 +02:00
|
|
|
}
|
|
|
|
else if (GetObjectType( dev->hdc ) == OBJ_MEMDC)
|
|
|
|
{
|
|
|
|
X11DRV_LockDIBSection( physdev, DIB_Status_GdiMod );
|
|
|
|
width = min( width, physdev->dc_rect.right - physdev->dc_rect.left - x );
|
|
|
|
height = min( height, physdev->dc_rect.bottom - physdev->dc_rect.top - y );
|
|
|
|
wine_tsx11_lock();
|
|
|
|
image = XGetImage( gdi_display, physdev->drawable,
|
|
|
|
physdev->dc_rect.left + x, physdev->dc_rect.top + y,
|
|
|
|
width, height, AllPlanes, ZPixmap );
|
|
|
|
wine_tsx11_unlock();
|
|
|
|
X11DRV_UnlockDIBSection( physdev, FALSE );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
Pixmap pixmap;
|
|
|
|
|
|
|
|
wine_tsx11_lock();
|
|
|
|
/* use a temporary pixmap to avoid BadMatch errors */
|
|
|
|
pixmap = XCreatePixmap( gdi_display, root_window, width, height, depth );
|
|
|
|
XCopyArea( gdi_display, physdev->drawable, pixmap, get_bitmap_gc(depth),
|
|
|
|
physdev->dc_rect.left + x, physdev->dc_rect.top + y, width, height, 0, 0 );
|
|
|
|
image = XGetImage( gdi_display, pixmap, 0, 0, width, height, AllPlanes, ZPixmap );
|
|
|
|
XFreePixmap( gdi_display, pixmap );
|
|
|
|
wine_tsx11_unlock();
|
|
|
|
}
|
|
|
|
if (!image) return ERROR_OUTOFMEMORY;
|
|
|
|
|
|
|
|
info->bmiHeader.biSize = sizeof(info->bmiHeader);
|
|
|
|
info->bmiHeader.biWidth = width;
|
|
|
|
info->bmiHeader.biHeight = -height;
|
|
|
|
info->bmiHeader.biPlanes = 1;
|
|
|
|
info->bmiHeader.biBitCount = image->bits_per_pixel;
|
|
|
|
info->bmiHeader.biSizeImage = height * image->bytes_per_line;
|
|
|
|
info->bmiHeader.biXPelsPerMeter = 0;
|
|
|
|
info->bmiHeader.biYPelsPerMeter = 0;
|
|
|
|
info->bmiHeader.biClrImportant = 0;
|
2011-07-11 22:45:05 +02:00
|
|
|
set_color_info( dev, color_shifts, info );
|
2011-07-14 12:37:04 +02:00
|
|
|
|
2011-07-14 12:47:45 +02:00
|
|
|
src_bits.ptr = image->data;
|
|
|
|
src_bits.is_copy = TRUE;
|
2011-07-21 11:17:13 +02:00
|
|
|
ret = copy_image_bits( info, color_shifts, image, &src_bits, bits, src, mapping,
|
2011-07-15 13:49:36 +02:00
|
|
|
zeropad_masks[(width * image->bits_per_pixel) & 31] );
|
2011-07-14 12:47:45 +02:00
|
|
|
|
|
|
|
if (!ret && bits->ptr == image->data)
|
2011-07-14 12:37:04 +02:00
|
|
|
{
|
|
|
|
bits->free = free_ximage_bits;
|
|
|
|
image->data = NULL;
|
|
|
|
}
|
|
|
|
wine_tsx11_lock();
|
|
|
|
XDestroyImage( image );
|
|
|
|
wine_tsx11_unlock();
|
|
|
|
return ret;
|
|
|
|
}
|