This is the mail archive of the
cygwin-xfree@sources.redhat.com
mailing list for the Cygwin project.
RE: Development Status Update 2
- To: "Cygx (E-mail)" <cygwin-xfree at sources dot redhat dot com>
- Subject: RE: Development Status Update 2
- From: Suhaib Siddiqi <ssiddiqi at inspirepharm dot com>
- Date: Wed, 22 Nov 2000 07:19:47 -0500
Ummmm... no Wine headers please. Adding Wine headers to Cygwin/Xfree86
projects
will cause several problems, as I mentioned before.
1) XFree86 Inc. will refuse to accept any changes which would include
another GPL'ed project headers into their sources tree. This could
result into whole Cygwin/Xfree86 sources tree removed from xf86 source base.
Be careful please.
2) End-users will need to collect headers and tools from different sites
which would result in a support nightmare.
Please follow this guideline, because that is what we adapted and was
accepted by XFree86 Inc.
Any changes/addition to Cygwin/XFree86 should be based upon Cygwin and we
should be using headers from Cygwin. We can use MSVC, but the sources which
needs
MSVC should be separated out, for example xf_dx.dll.
Suhaib
-----Original Message-----
From: Harold Hunt [mailto:Harold@compasstechnologies.com]
Sent: Tuesday, November 21, 2000 8:25 PM
To: Cygx (E-mail)
Subject: Development Status Update 2
Today I figured out a workable solution for making the X headers play nice
with the Windows headers; the solution involves using the Wine headers for
Windows (as they allow more precise control over which headers are included)
and the user headers for X (think Xlib.h instead of pixmap.h). I'm satisfied
with this solution, at this point, as it allows us to move on with
programming instead of rewriting or adding #ifdef's to lots of header files.
We might want to revisit the header issue when we get more of a product in
place.
As a simple test I threw some Win32 API calls into the stub for GetSpans
that creates a Windows window and draws a line; the test works and it
compiles with gcc under Cygwin; the successful compilation with gcc under
Cygwin means that we can move away from a seperate dll compiled with Visual
C++.
My immediate steps will be to yank out any references to xf_dx.dll from my
source files, essentially copying the relevent code from xf_dx.dll to the
appropriate files for xwin.exe; next I'll setup includes for all of the stub
files that will allow the Device Dependent X functions to compile with Win32
API calls; at that point I will probably make the skeleton source available
via the web so that other developers can see what I am up to. After that,
we just have to fill in the stubs with useful functions :) Err... that will
only take about three months :)
I'll keep you posted,
Harold
P.S. Following is the sample code that I through together in
xc/programs/Xserver/hw/xwin/wingetsp.c, for your enjoyment; note that this
code compiles under Cygwin with gcc and gets linked into XWin.exe:
#include "Xlib.h"
typedef struct _xPoint *DDXPointPtr;
#include "windef.h"
#include "winbase.h"
#include "gdi.h"
#include "user.h"
#include "winuser.h"
#include <stdio.h>
#define NAME "cygwin/xfree86"
#define TITLE "Cywgin/XFree86"
LRESULT CALLBACK
WindowProc (HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
return DefWindowProc (hWnd, message, wParam, lParam);
}
void
winGetSpans (Drawable *pDrawable,
int wMax,
DDXPointPtr pPoint,
int *pwidth,
int nspans,
char *pchardstStart)
{
static Bool fRunOnce = FALSE;
WNDCLASS wc;
HWND hwnd;
HDC hdc;
fprintf (stderr, "winGetSpans()\n");
if (!fRunOnce)
{
/* only run this code once */
fRunOnce = TRUE;
// Setup our window class
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WindowProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = GetModuleHandle(NULL);
wc.hIcon = 0;
wc.hCursor = 0;
wc.hbrBackground = 0;
wc.lpszMenuName = NULL;
wc.lpszClassName = NAME;
RegisterClass (&wc);
// Create the window
hwnd = CreateWindowEx (0, // Extended styles
NAME, // Class name
TITLE, // Window name
WS_OVERLAPPED
| WS_CAPTION
| WS_SYSMENU
| WS_MINIMIZEBOX, // Almost an
OverlappedWindow
CW_USEDEFAULT, // Horizontal position
CW_USEDEFAULT, // Vertical position
CW_USEDEFAULT, // Right edge
CW_USEDEFAULT, // Bottom edge
(HWND) NULL, // No parent or owner window
(HMENU) NULL, // No menu
GetModuleHandle (NULL), // Instance handle
NULL); // No window creation data
/* Show the window */
ShowWindow (hwnd, SW_SHOW);
UpdateWindow (hwnd);
/* Get the device context */
hdc = GetDC (hwnd);
/* Draw something */
MoveToEx (hdc, 0, 0, NULL);
LineTo (hdc, 100, 100);
ReleaseDC (hwnd, hdc);
}
}