Hi,

I'm getting ready to implement the Quartz Driver. For those of you who
don't know, this is a special graphics driver that only works on Mac OS
X, and uses its native Core Graphics (aka, Quartz) system to draw.

But before I can do this, there are two things that need to be done:

1. Wine currently assumes that the current graphics driver is the X11
driver. It directly GetModuleHandle()'s winex11.drv in order to call
driver functions. This needs to be fixed.
2. The driver interface needs to be standardized.

I can fix the first problem by adding a Wine-specific export to GDI32,
then updating all the winex11 clients to call this function, but the
second problem will make writing a non-X11 driver problematic. The GDI
and USER interfaces are already somewhat standardized, but the reason
many clients call winex11.drv directly is to call the "Thread-Safe X11"
locking routines. Also, Explorer calls winex11 to create the desktop and
notification area ("systray") windows.

Therefore, I propose this interface. It's largely based off of winex11,
but with some small modifications. It's attached to this mail. What do
you think of this?

And don't tell me that we need a DIB engine before I get started on
winequartz. I intend to use Mac OS X native APIs (like Core Image) to
accelerate DIBs, in much the same way winex11 uses Xrender.

Chip
# GDI driver

@ cdecl AlphaBlend(ptr long long long long ptr long long long long long) 
@ cdecl Arc(ptr long long long long long long long long) 
@ cdecl ChoosePixelFormat(ptr ptr) 
@ cdecl Chord(ptr long long long long long long long long) 
@ cdecl CreateBitmap(ptr long ptr) 
@ cdecl CreateDC(long ptr wstr wstr wstr ptr) 
@ cdecl CreateDIBSection(ptr long ptr long) 
@ cdecl DeleteBitmap(long) 
@ cdecl DeleteDC(ptr) 
@ cdecl DescribePixelFormat(ptr long long ptr) 
@ cdecl Ellipse(ptr long long long long) 
@ cdecl EnumDeviceFonts(ptr ptr ptr long) 
@ cdecl ExtEscape(ptr long long ptr long ptr) 
@ cdecl ExtFloodFill(ptr long long long long) 
@ cdecl ExtTextOut(ptr long long long ptr ptr long ptr) 
@ cdecl GetBitmapBits(long ptr long) 
@ cdecl GetCharWidth(ptr long long ptr) 
@ cdecl GetDCOrgEx(ptr ptr) 
@ cdecl GetDIBits(ptr long long long ptr ptr long) 
@ cdecl GetDeviceCaps(ptr long) 
@ cdecl GetDeviceGammaRamp(ptr ptr) 
@ cdecl GetICMProfile(ptr ptr ptr) 
@ cdecl GetNearestColor(ptr long) 
@ cdecl GetPixel(ptr long long) 
@ cdecl GetPixelFormat(ptr) 
@ cdecl GetSystemPaletteEntries(ptr long long ptr) 
@ cdecl GetTextExtentExPoint(ptr ptr long long ptr ptr ptr) 
@ cdecl GetTextMetrics(ptr ptr) 
@ cdecl LineTo(ptr long long) 
@ cdecl PaintRgn(ptr long) 
@ cdecl Pie(ptr long long long long long long long long) 
@ cdecl PolyPolygon(ptr ptr ptr long) 
@ cdecl PolyPolyline(ptr ptr ptr long) 
@ cdecl Polygon(ptr ptr long) 
@ cdecl Polyline(ptr ptr long) 
@ cdecl RealizeDefaultPalette(ptr) 
@ cdecl RealizePalette(ptr long long) 
@ cdecl Rectangle(ptr long long long long) 
@ cdecl RoundRect(ptr long long long long long long) 
@ cdecl SelectBitmap(ptr long) 
@ cdecl SelectBrush(ptr long) 
@ cdecl SelectFont(ptr long long) 
@ cdecl SelectPen(ptr long) 
@ cdecl SetBitmapBits(long ptr long) 
@ cdecl SetBkColor(ptr long) 
@ cdecl SetDCBrushColor(ptr long) 
@ cdecl SetDCPenColor(ptr long) 
@ cdecl SetDIBColorTable(ptr long long ptr) 
@ cdecl SetDIBits(ptr long long long ptr ptr long) 
@ cdecl SetDIBitsToDevice(ptr long long long long long long long long ptr ptr 
long) 
@ cdecl SetDeviceClipping(ptr long long) 
@ cdecl SetDeviceGammaRamp(ptr ptr) 
@ cdecl SetPixel(ptr long long long) 
@ cdecl SetPixelFormat(ptr long ptr) 
@ cdecl SetTextColor(ptr long) 
@ cdecl StretchBlt(ptr long long long long ptr long long long long long) 
@ cdecl SwapBuffers(ptr) 
@ cdecl UnrealizePalette(long) 

# USER driver

@ cdecl ActivateKeyboardLayout(long long) 
@ cdecl Beep() 
@ cdecl GetAsyncKeyState(long) 
@ cdecl GetKeyNameText(long ptr long) 
@ cdecl GetKeyboardLayout(long) 
@ cdecl GetKeyboardLayoutName(ptr) 
@ cdecl LoadKeyboardLayout(wstr long) 
@ cdecl MapVirtualKeyEx(long long long) 
@ cdecl SendInput(long ptr long) 
@ cdecl ToUnicodeEx(long long ptr ptr long long long) 
@ cdecl UnloadKeyboardLayout(long) 
@ cdecl VkKeyScanEx(long long) 
@ cdecl SetCursor(ptr) 
@ cdecl GetCursorPos(ptr) 
@ cdecl SetCursorPos(long long) 
@ cdecl ClipCursor(ptr) 
@ cdecl GetScreenSaveActive() 
@ cdecl SetScreenSaveActive(long) 
@ cdecl ChangeDisplaySettingsEx(ptr ptr long long long) 
@ cdecl EnumDisplayMonitors(long ptr ptr long) 
@ cdecl EnumDisplaySettingsEx(ptr long ptr long) 
@ cdecl GetMonitorInfo(long ptr) 
@ cdecl AcquireClipboard(long) 
@ cdecl CountClipboardFormats() 
@ cdecl CreateDesktopWindow(long) 
@ cdecl CreateWindow(long) 
@ cdecl DestroyWindow(long) 
@ cdecl EmptyClipboard(long) 
@ cdecl EndClipboardUpdate() 
@ cdecl EnumClipboardFormats(long) 
@ cdecl GetClipboardData(long) 
@ cdecl GetClipboardFormatName(long ptr long) 
@ cdecl GetDC(long long long ptr ptr long) 
@ cdecl IsClipboardFormatAvailable(long) 
@ cdecl MsgWaitForMultipleObjectsEx(long ptr long long long) 
@ cdecl RegisterClipboardFormat(wstr) 
@ cdecl ReleaseDC(long long) 
@ cdecl ScrollDC(long long long ptr ptr long ptr) 
@ cdecl SetClipboardData(long long long) 
@ cdecl SetCapture(long long) 
@ cdecl SetFocus(long) 
@ cdecl SetLayeredWindowAttributes(long long long long) 
@ cdecl SetParent(long long long) 
@ cdecl SetWindowIcon(long long long) 
@ cdecl SetWindowRgn(long long long) 
@ cdecl SetWindowStyle(ptr long ptr) 
@ cdecl SetWindowText(long wstr) 
@ cdecl ShowWindow(long long ptr long) 
@ cdecl SysCommand(long long long) 
@ cdecl WindowMessage(long long long long) 
@ cdecl WindowPosChanging(long long long ptr ptr ptr) 
@ cdecl WindowPosChanged(long long long ptr ptr ptr ptr) 

# WinTab32
@ cdecl AttachEventQueueToTablet(long) 
@ cdecl GetCurrentPacket(ptr) 
@ cdecl LoadTabletInfo(long) 
@ cdecl WTInfoW(long long ptr) 

# Display locks
@ cdecl -norelay wine_display_lock()
@ cdecl -norelay wine_display_unlock()
@ cdecl -norelay wine_opengl_lock()
@ cdecl -norelay wine_opengl_unlock()

# Desktop
@ cdecl wine_create_desktop(long long) 

# System tray
@ cdecl wine_notify_icon(long ptr)

# OpenGL
@ cdecl wglCopyContext(long long long) 
@ cdecl wglCreateContext(ptr) 
@ cdecl wglCreateContextAttribsARB(ptr long ptr) 
@ cdecl wglDeleteContext(long) 
@ cdecl wglGetProcAddress(str) 
@ cdecl wglGetPbufferDCARB(ptr ptr) 
@ cdecl wglMakeContextCurrentARB(ptr ptr long) 
@ cdecl wglMakeCurrent(ptr long) 
@ cdecl wglSetPixelFormatWINE(ptr long ptr) 
@ cdecl wglShareLists(long long) 
@ cdecl wglUseFontBitmapsA(ptr long long long) 
@ cdecl wglUseFontBitmapsW(ptr long long long) 

#IME Interface
@ stdcall ImeInquire(ptr wstr wstr)
@ stdcall ImeConfigure(long long long ptr)
@ stdcall ImeDestroy(long)
@ stdcall ImeEscape(long long ptr)
@ stdcall ImeSelect(long long)
@ stdcall ImeSetActiveContext(long long)
@ stdcall ImeToAsciiEx(long long ptr ptr long long)
@ stdcall NotifyIME(long long long long)
@ stdcall ImeRegisterWord(wstr long wstr)
@ stdcall ImeUnregisterWord(wstr long wstr)
@ stdcall ImeEnumRegisterWord(ptr wstr long wstr ptr)
@ stdcall ImeSetCompositionString(long long ptr long ptr long)
@ stdcall ImeConversionList(long wstr ptr long long)
@ stdcall ImeProcessKey(long long long ptr)
@ stdcall ImeGetRegisterWordStyle(long ptr)
@ stdcall ImeGetImeMenuItems(long long long ptr ptr long)


Reply via email to