Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
e1147baa
Commit
e1147baa
authored
May 13, 2003
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Use a different magic for memory DCs and get rid of the DC_MEMORY
flag.
parent
ad9121c4
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
57 additions
and
54 deletions
+57
-54
init.c
dlls/gdi/enhmfdrv/init.c
+1
-2
init.c
dlls/gdi/mfdrv/init.c
+1
-2
dc.c
dlls/ttydrv/dc.c
+1
-1
bitblt.c
graphics/x11drv/bitblt.c
+2
-2
dib.c
graphics/x11drv/dib.c
+3
-3
graphics.c
graphics/x11drv/graphics.c
+2
-1
init.c
graphics/x11drv/init.c
+1
-1
palette.c
graphics/x11drv/palette.c
+1
-2
gdi.h
include/gdi.h
+3
-3
bitmap.c
objects/bitmap.c
+1
-1
dc.c
objects/dc.c
+37
-36
gdiobj.c
objects/gdiobj.c
+4
-0
No files found.
dlls/gdi/enhmfdrv/init.c
View file @
e1147baa
...
...
@@ -284,8 +284,7 @@ HDC WINAPI CreateEnhMetaFileW(
TRACE
(
"%s
\n
"
,
debugstr_w
(
filename
)
);
if
(
!
(
dc
=
DC_AllocDC
(
&
EMFDRV_Funcs
)))
return
0
;
dc
->
header
.
wMagic
=
ENHMETAFILE_DC_MAGIC
;
if
(
!
(
dc
=
DC_AllocDC
(
&
EMFDRV_Funcs
,
ENHMETAFILE_DC_MAGIC
)))
return
0
;
physDev
=
(
EMFDRV_PDEVICE
*
)
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
*
physDev
));
if
(
!
physDev
)
{
...
...
dlls/gdi/mfdrv/init.c
View file @
e1147baa
...
...
@@ -154,8 +154,7 @@ static DC *MFDRV_AllocMetaFile(void)
DC
*
dc
;
METAFILEDRV_PDEVICE
*
physDev
;
if
(
!
(
dc
=
DC_AllocDC
(
&
MFDRV_Funcs
)))
return
NULL
;
dc
->
header
.
wMagic
=
METAFILE_DC_MAGIC
;
if
(
!
(
dc
=
DC_AllocDC
(
&
MFDRV_Funcs
,
METAFILE_DC_MAGIC
)))
return
NULL
;
physDev
=
(
METAFILEDRV_PDEVICE
*
)
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
*
physDev
));
if
(
!
physDev
)
...
...
dlls/ttydrv/dc.c
View file @
e1147baa
...
...
@@ -57,7 +57,7 @@ BOOL TTYDRV_DC_CreateDC(DC *dc, TTYDRV_PDEVICE **pdev, LPCSTR driver, LPCSTR dev
physDev
->
hdc
=
dc
->
hSelf
;
physDev
->
org
.
x
=
physDev
->
org
.
y
=
0
;
if
(
dc
->
flags
&
DC_MEMORY
)
{
if
(
GetObjectType
(
dc
->
hSelf
)
==
OBJ_MEMDC
)
{
physDev
->
window
=
NULL
;
physDev
->
cellWidth
=
1
;
physDev
->
cellHeight
=
1
;
...
...
graphics/x11drv/bitblt.c
View file @
e1147baa
...
...
@@ -953,7 +953,7 @@ static int BITBLT_GetSrcArea( X11DRV_PDEVICE *physDevSrc, X11DRV_PDEVICE *physDe
}
else
/* color -> color */
{
if
(
dcSrc
->
flags
&
DC_MEMORY
)
if
(
GetObjectType
(
physDevSrc
->
hdc
)
==
OBJ_MEMDC
)
imageSrc
=
XGetImage
(
gdi_display
,
physDevSrc
->
drawable
,
physDevSrc
->
org
.
x
+
visRectSrc
->
left
,
physDevSrc
->
org
.
y
+
visRectSrc
->
top
,
...
...
@@ -1047,7 +1047,7 @@ static int BITBLT_GetDstArea(X11DRV_PDEVICE *physDev, Pixmap pixmap, GC gc, RECT
register
INT
x
,
y
;
XImage
*
image
;
if
(
physDev
->
dc
->
flags
&
DC_MEMORY
)
if
(
GetObjectType
(
physDev
->
hdc
)
==
OBJ_MEMDC
)
image
=
XGetImage
(
gdi_display
,
physDev
->
drawable
,
physDev
->
org
.
x
+
visRectDst
->
left
,
physDev
->
org
.
y
+
visRectDst
->
top
,
...
...
graphics/x11drv/dib.c
View file @
e1147baa
...
...
@@ -5209,7 +5209,7 @@ void X11DRV_DIB_CopyDIBSection(X11DRV_PDEVICE *physDevSrc, X11DRV_PDEVICE *physD
xSrc
,
ySrc
,
xDest
,
yDest
,
width
,
height
);
/* this function is meant as an optimization for BitBlt,
* not to be called otherwise */
if
(
!
(
dcSrc
->
flags
&
DC_MEMORY
)
)
{
if
(
GetObjectType
(
physDevSrc
->
hdc
)
!=
OBJ_MEMDC
)
{
ERR
(
"called for non-memory source DC!?
\n
"
);
return
;
}
...
...
@@ -5621,7 +5621,7 @@ INT X11DRV_CoerceDIBSection(X11DRV_PDEVICE *physDev, INT req, BOOL lossy)
INT
X11DRV_LockDIBSection
(
X11DRV_PDEVICE
*
physDev
,
INT
req
,
BOOL
lossy
)
{
if
(
!
physDev
)
return
DIB_Status_None
;
if
(
!
(
physDev
->
dc
->
flags
&
DC_MEMORY
)
)
return
DIB_Status_None
;
if
(
GetObjectType
(
physDev
->
hdc
)
!=
OBJ_MEMDC
)
return
DIB_Status_None
;
return
X11DRV_LockDIBSection2
(
physDev
->
dc
->
hBitmap
,
req
,
lossy
);
}
...
...
@@ -5632,7 +5632,7 @@ INT X11DRV_LockDIBSection(X11DRV_PDEVICE *physDev, INT req, BOOL lossy)
void
X11DRV_UnlockDIBSection
(
X11DRV_PDEVICE
*
physDev
,
BOOL
commit
)
{
if
(
!
physDev
)
return
;
if
(
!
(
physDev
->
dc
->
flags
&
DC_MEMORY
)
)
return
;
if
(
GetObjectType
(
physDev
->
hdc
)
!=
OBJ_MEMDC
)
return
;
X11DRV_UnlockDIBSection2
(
physDev
->
dc
->
hBitmap
,
commit
);
}
...
...
graphics/x11drv/graphics.c
View file @
e1147baa
...
...
@@ -898,6 +898,7 @@ X11DRV_GetPixel( X11DRV_PDEVICE *physDev, INT x, INT y )
XImage
*
image
;
int
pixel
;
POINT
pt
;
BOOL
memdc
=
(
GetObjectType
(
physDev
->
hdc
)
==
OBJ_MEMDC
);
DC
*
dc
=
physDev
->
dc
;
pt
.
x
=
x
;
...
...
@@ -908,7 +909,7 @@ X11DRV_GetPixel( X11DRV_PDEVICE *physDev, INT x, INT y )
X11DRV_LockDIBSection
(
physDev
,
DIB_Status_GdiMod
,
FALSE
);
wine_tsx11_lock
();
if
(
dc
->
flags
&
DC_MEMORY
)
if
(
memdc
)
{
image
=
XGetImage
(
gdi_display
,
physDev
->
drawable
,
physDev
->
org
.
x
+
pt
.
x
,
physDev
->
org
.
y
+
pt
.
y
,
...
...
graphics/x11drv/init.c
View file @
e1147baa
...
...
@@ -103,7 +103,7 @@ BOOL X11DRV_CreateDC( DC *dc, X11DRV_PDEVICE **pdev, LPCSTR driver, LPCSTR devic
physDev
->
hdc
=
dc
->
hSelf
;
physDev
->
dc
=
dc
;
/* FIXME */
if
(
dc
->
flags
&
DC_MEMORY
)
if
(
GetObjectType
(
dc
->
hSelf
)
==
OBJ_MEMDC
)
{
physDev
->
drawable
=
BITMAP_stock_pixmap
;
}
...
...
graphics/x11drv/palette.c
View file @
e1147baa
...
...
@@ -1233,10 +1233,9 @@ UINT X11DRV_RealizePalette( X11DRV_PDEVICE *physDev, HPALETTE hpal, BOOL primary
*/
UINT
X11DRV_RealizeDefaultPalette
(
X11DRV_PDEVICE
*
physDev
)
{
DC
*
dc
=
physDev
->
dc
;
UINT
ret
=
0
;
if
(
palette_size
&&
!
(
dc
->
flags
&
DC_MEMORY
)
)
if
(
palette_size
&&
GetObjectType
(
physDev
->
hdc
)
!=
OBJ_MEMDC
)
{
PALETTEOBJ
*
palPtr
=
GDI_GetObjPtr
(
GetStockObject
(
DEFAULT_PALETTE
),
PALETTE_MAGIC
);
if
(
palPtr
)
...
...
include/gdi.h
View file @
e1147baa
...
...
@@ -41,7 +41,8 @@
#define METAFILE_DC_MAGIC 0x4f51
#define ENHMETAFILE_MAGIC 0x4f52
#define ENHMETAFILE_DC_MAGIC 0x4f53
#define LAST_MAGIC 0x4f53
#define MEMORY_DC_MAGIC 0x4f54
#define LAST_MAGIC 0x4f54
#define MAGIC_DONTCARE 0xffff
...
...
@@ -296,7 +297,6 @@ typedef struct tagDC_FUNCS
#define DCHF_VALIDATEVISRGN 0x0002
/* DC flags */
#define DC_MEMORY 0x0001
/* It is a memory DC */
#define DC_SAVED 0x0002
/* It is a saved DC */
#define DC_DIRTY 0x0004
/* hVisRgn has to be updated */
#define DC_THUNKHOOK 0x0008
/* DC hook is in the 16-bit code */
...
...
@@ -455,7 +455,7 @@ extern BOOL DRIVER_GetDriverName( LPCSTR device, LPSTR driver, DWORD size );
extern
POINT
*
GDI_Bezier
(
const
POINT
*
Points
,
INT
count
,
INT
*
nPtsOut
);
extern
DC
*
DC_AllocDC
(
const
DC_FUNCTIONS
*
funcs
);
extern
DC
*
DC_AllocDC
(
const
DC_FUNCTIONS
*
funcs
,
WORD
magic
);
extern
DC
*
DC_GetDCPtr
(
HDC
hdc
);
extern
DC
*
DC_GetDCUpdate
(
HDC
hdc
);
extern
void
DC_InitDC
(
DC
*
dc
);
...
...
objects/bitmap.c
View file @
e1147baa
...
...
@@ -407,7 +407,7 @@ static HGDIOBJ BITMAP_SelectObject( HGDIOBJ handle, void *obj, HDC hdc )
DC
*
dc
=
DC_GetDCPtr
(
hdc
);
if
(
!
dc
)
return
0
;
if
(
!
(
dc
->
flags
&
DC_MEMORY
)
)
if
(
GetObjectType
(
hdc
)
!=
OBJ_MEMDC
)
{
GDI_ReleaseObj
(
hdc
);
return
0
;
...
...
objects/dc.c
View file @
e1147baa
...
...
@@ -48,12 +48,12 @@ static const struct gdi_obj_funcs dc_funcs =
/***********************************************************************
* DC_AllocDC
*/
DC
*
DC_AllocDC
(
const
DC_FUNCTIONS
*
funcs
)
DC
*
DC_AllocDC
(
const
DC_FUNCTIONS
*
funcs
,
WORD
magic
)
{
HDC
hdc
;
DC
*
dc
;
if
(
!
(
dc
=
GDI_AllocObject
(
sizeof
(
*
dc
),
DC_MAGIC
,
(
HGDIOBJ
*
)
&
hdc
,
&
dc_funcs
)))
return
NULL
;
if
(
!
(
dc
=
GDI_AllocObject
(
sizeof
(
*
dc
),
magic
,
(
HGDIOBJ
*
)
&
hdc
,
&
dc_funcs
)))
return
NULL
;
dc
->
hSelf
=
hdc
;
dc
->
funcs
=
funcs
;
...
...
@@ -130,8 +130,9 @@ DC *DC_GetDCPtr( HDC hdc )
GDIOBJHDR
*
ptr
=
GDI_GetObjPtr
(
hdc
,
MAGIC_DONTCARE
);
if
(
!
ptr
)
return
NULL
;
if
((
GDIMAGIC
(
ptr
->
wMagic
)
==
DC_MAGIC
)
||
(
GDIMAGIC
(
ptr
->
wMagic
)
==
METAFILE_DC_MAGIC
)
||
(
GDIMAGIC
(
ptr
->
wMagic
)
==
ENHMETAFILE_DC_MAGIC
))
(
GDIMAGIC
(
ptr
->
wMagic
)
==
MEMORY_DC_MAGIC
)
||
(
GDIMAGIC
(
ptr
->
wMagic
)
==
METAFILE_DC_MAGIC
)
||
(
GDIMAGIC
(
ptr
->
wMagic
)
==
ENHMETAFILE_DC_MAGIC
))
return
(
DC
*
)
ptr
;
GDI_ReleaseObj
(
hdc
);
SetLastError
(
ERROR_INVALID_HANDLE
);
...
...
@@ -151,18 +152,15 @@ DC *DC_GetDCUpdate( HDC hdc )
if
(
!
dc
)
return
NULL
;
while
(
dc
->
flags
&
DC_DIRTY
)
{
DCHOOKPROC
proc
=
dc
->
hookThunk
;
dc
->
flags
&=
~
DC_DIRTY
;
if
(
!
(
dc
->
flags
&
(
DC_SAVED
|
DC_MEMORY
))
)
if
(
proc
)
{
DCHOOKPROC
proc
=
dc
->
hookThunk
;
if
(
proc
)
{
DWORD
data
=
dc
->
dwHookData
;
GDI_ReleaseObj
(
hdc
);
proc
(
HDC_16
(
hdc
),
DCHC_INVALIDVISRGN
,
data
,
0
);
if
(
!
(
dc
=
DC_GetDCPtr
(
hdc
)))
break
;
/* otherwise restart the loop in case it became dirty again in the meantime */
}
DWORD
data
=
dc
->
dwHookData
;
GDI_ReleaseObj
(
hdc
);
proc
(
HDC_16
(
hdc
),
DCHC_INVALIDVISRGN
,
data
,
0
);
if
(
!
(
dc
=
DC_GetDCPtr
(
hdc
)))
break
;
/* otherwise restart the loop in case it became dirty again in the meantime */
}
}
return
dc
;
...
...
@@ -271,7 +269,7 @@ HDC WINAPI GetDCState( HDC hdc )
HGDIOBJ
handle
;
if
(
!
(
dc
=
DC_GetDCPtr
(
hdc
)))
return
0
;
if
(
!
(
newdc
=
GDI_AllocObject
(
sizeof
(
DC
),
DC_MAGIC
,
&
handle
,
&
dc_funcs
)))
if
(
!
(
newdc
=
GDI_AllocObject
(
sizeof
(
DC
),
GDIMAGIC
(
dc
->
header
.
wMagic
)
,
&
handle
,
&
dc_funcs
)))
{
GDI_ReleaseObj
(
hdc
);
return
0
;
...
...
@@ -409,7 +407,7 @@ void WINAPI SetDCState( HDC hdc, HDC hdcs )
dc
->
vportExtX
=
dcs
->
vportExtX
;
dc
->
vportExtY
=
dcs
->
vportExtY
;
if
(
!
(
dc
->
flags
&
DC_MEMORY
)
)
dc
->
bitsPerPixel
=
dcs
->
bitsPerPixel
;
if
(
GDIMAGIC
(
dc
->
header
.
wMagic
)
!=
MEMORY_DC_MAGIC
)
dc
->
bitsPerPixel
=
dcs
->
bitsPerPixel
;
if
(
dcs
->
hClipRgn
)
{
...
...
@@ -586,13 +584,12 @@ HDC WINAPI CreateDCA( LPCSTR driver, LPCSTR device, LPCSTR output,
ERR
(
"no driver found for %s
\n
"
,
buf
);
return
0
;
}
if
(
!
(
dc
=
DC_AllocDC
(
funcs
)))
if
(
!
(
dc
=
DC_AllocDC
(
funcs
,
DC_MAGIC
)))
{
DRIVER_release_driver
(
funcs
);
return
0
;
}
dc
->
flags
=
0
;
dc
->
hBitmap
=
GetStockObject
(
DEFAULT_BITMAP
);
TRACE
(
"(driver=%s, device=%s, output=%s): returning %p
\n
"
,
...
...
@@ -667,20 +664,26 @@ HDC WINAPI CreateCompatibleDC( HDC hdc )
{
DC
*
dc
,
*
origDC
;
const
DC_FUNCTIONS
*
funcs
;
PHYSDEV
physDev
;
GDI_CheckNotLock
();
if
((
origDC
=
GDI_GetObjPtr
(
hdc
,
DC_MAGIC
)))
{
funcs
=
origDC
->
funcs
;
physDev
=
origDC
->
physDev
;
GDI_ReleaseObj
(
hdc
);
/* can't hold the lock while loading the driver */
funcs
=
DRIVER_get_driver
(
funcs
);
}
else
funcs
=
DRIVER_load_driver
(
"DISPLAY"
);
else
{
funcs
=
DRIVER_load_driver
(
"DISPLAY"
);
physDev
=
NULL
;
}
if
(
!
funcs
)
return
0
;
if
(
!
(
dc
=
DC_AllocDC
(
funcs
)))
if
(
!
(
dc
=
DC_AllocDC
(
funcs
,
MEMORY_DC_MAGIC
)))
{
DRIVER_release_driver
(
funcs
);
return
0
;
...
...
@@ -688,21 +691,19 @@ HDC WINAPI CreateCompatibleDC( HDC hdc )
TRACE
(
"(%p): returning %p
\n
"
,
hdc
,
dc
->
hSelf
);
dc
->
flags
=
DC_MEMORY
;
dc
->
bitsPerPixel
=
1
;
dc
->
hBitmap
=
GetStockObject
(
DEFAULT_BITMAP
);
/* Copy the driver-specific physical device info into
* the new DC. The driver may use this read-only info
* while creating the compatible DC below. */
if
((
origDC
=
GDI_GetObjPtr
(
hdc
,
DC_MAGIC
)))
dc
->
physDev
=
origDC
->
physDev
;
dc
->
physDev
=
physDev
;
if
(
dc
->
funcs
->
pCreateDC
&&
!
dc
->
funcs
->
pCreateDC
(
dc
,
&
dc
->
physDev
,
NULL
,
NULL
,
NULL
,
NULL
))
{
WARN
(
"creation aborted by device
\n
"
);
GDI_FreeObject
(
dc
->
hSelf
,
dc
);
if
(
origDC
)
GDI_ReleaseObj
(
hdc
);
DRIVER_release_driver
(
funcs
);
return
0
;
}
...
...
@@ -715,7 +716,6 @@ HDC WINAPI CreateCompatibleDC( HDC hdc )
DC_InitDC
(
dc
);
GDI_ReleaseObj
(
dc
->
hSelf
);
if
(
origDC
)
GDI_ReleaseObj
(
hdc
);
return
dc
->
hSelf
;
}
...
...
@@ -732,19 +732,16 @@ BOOL WINAPI DeleteDC( HDC hdc )
GDI_CheckNotLock
();
if
(
!
(
dc
=
GDI_GetObjPtr
(
hdc
,
DC_MAGIC
)))
return
FALSE
;
if
(
!
(
dc
=
DC_GetDCPtr
(
hdc
)))
return
FALSE
;
/* Call hook procedure to check whether is it OK to delete this DC */
if
(
dc
->
hookThunk
&&
!
(
dc
->
flags
&
(
DC_SAVED
|
DC_MEMORY
))
)
if
(
dc
->
hookThunk
)
{
DCHOOKPROC
proc
=
dc
->
hookThunk
;
if
(
proc
)
{
DWORD
data
=
dc
->
dwHookData
;
GDI_ReleaseObj
(
hdc
);
if
(
!
proc
(
HDC_16
(
hdc
),
DCHC_DELETEDC
,
data
,
0
))
return
FALSE
;
if
(
!
(
dc
=
DC_GetDCPtr
(
hdc
)))
return
TRUE
;
/* deleted by the hook */
}
DWORD
data
=
dc
->
dwHookData
;
GDI_ReleaseObj
(
hdc
);
if
(
!
proc
(
HDC_16
(
hdc
),
DCHC_DELETEDC
,
data
,
0
))
return
FALSE
;
if
(
!
(
dc
=
DC_GetDCPtr
(
hdc
)))
return
TRUE
;
/* deleted by the hook */
}
while
(
dc
->
saveLevel
)
...
...
@@ -1141,11 +1138,15 @@ BOOL WINAPI CombineTransform( LPXFORM xformResult, const XFORM *xform1,
*/
BOOL
WINAPI
SetDCHook
(
HDC
hdc
,
DCHOOKPROC
hookProc
,
DWORD
dwHookData
)
{
DC
*
dc
=
DC_GetDCPtr
(
hdc
);
DC
*
dc
=
GDI_GetObjPtr
(
hdc
,
DC_MAGIC
);
if
(
!
dc
)
return
FALSE
;
dc
->
dwHookData
=
dwHookData
;
dc
->
hookThunk
=
hookProc
;
if
(
!
(
dc
->
flags
&
DC_SAVED
))
{
dc
->
dwHookData
=
dwHookData
;
dc
->
hookThunk
=
hookProc
;
}
GDI_ReleaseObj
(
hdc
);
return
TRUE
;
}
...
...
objects/gdiobj.c
View file @
e1147baa
...
...
@@ -692,6 +692,7 @@ void *GDI_AllocObject( WORD size, WORD magic, HGDIOBJ *handle, const struct gdi_
case
METAFILE_DC_MAGIC
:
case
ENHMETAFILE_MAGIC
:
case
ENHMETAFILE_DC_MAGIC
:
case
MEMORY_DC_MAGIC
:
case
BITMAP_MAGIC
:
case
PALETTE_MAGIC
:
if
(
!
(
obj
=
alloc_large_heap
(
size
,
handle
)))
goto
error
;
...
...
@@ -1023,6 +1024,9 @@ DWORD WINAPI GetObjectType( HANDLE handle )
case
ENHMETAFILE_DC_MAGIC
:
result
=
OBJ_ENHMETADC
;
break
;
case
MEMORY_DC_MAGIC
:
result
=
OBJ_MEMDC
;
break
;
default:
FIXME
(
"Magic %04x not implemented
\n
"
,
GDIMAGIC
(
ptr
->
wMagic
)
);
break
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment