Yen-Ju Chen wrote:
> I am looking a way to use GNUstep AppKit to draw on Xwindow, not NSWindow.
> I guess basically it depends on how NSBezierPath and drawing of
> NSAttributesString is implemented.
> I did some research on backend.
> But I think it would be faster to get some answers
> since many people here have more knowledge about backend. :)
> 
> In [XGServerWindow windowdevice:],
> there is a piece of code:
> 
>  gswindow_device_t *window;
>  NSGraphicsContext *ctxt;
>  ctxt = GSCurrentContext();
>  GSSetDevice(ctxt, window, 0, NSHeight(window->xframe));
>  DPSinitmatrix(ctxt);
>  DPSinitclip(ctxt);
> 
> If I can fake a gswindow_device_t and hook up to NSGraphicsContext as
> above,
> will it redirect all the drawing into the fake gswindow_device_t ?
> There are some codes in NSWindow related to GraphicState.
> Are they critical for this purpose ?
> 
> Thanx a lot.
> 
> Here is the explanation why I need to do that if you are interesting:
> 
> I am trying to find a way to draw the window decorations in Azalea.
> Reparenting NSWindow into XWindow does not seem to work in an easy way.
> It's partially because how Azalea works.
> NSWindow is always mapped as a regular client, not just a normal XWindow.
> This introduces a lot of complication.
> So the other easy way around is to draw directly on Xwindow.
> The shortcoming of this approach is that NSWindow and NSView cannot be
> used,
> Therefore, most GUI in AppKit is useless.
> But if NSBezierPath and string drawing are still working, it is worth to
> try
> because I can take the advantage of whatever backend GNUstep can offer.
> 
> If you are interesting in the code,
> they are in http://svn.gna.org/viewcvs/etoile/branches/AzaleaAppKit/.
> The window decorationi part is in AZFrame.
> 

I have been giving this some thought. Wouldn't it resolve your problem,
if we add to GNUstep an implementation of the method [NSWindow
initWithWindowRef:], where the window ref would be the X window?
This should give about the same results as your code, but in a well
defined way. The code inside of initWithWindowRef: would be a mixture of
the code from _initBackendWindow and
initWithContentRect:styleMask:backing:defer:screen:, where the size,
style, level, screen and backingstore information would be extracted
from the underlying X window by a new backend method, that would also
return a GNUstep window number.
For your special environment we need to ensure that the window
decoration handling is set correctly. Somehow we need to trick the x
backend as well as the gui code into thinking that the window
decoratione should not be handled at their level :-)

I am willing to write this code, if you can provide a test application
for it, that is point me to the part of teh Azalea code that would use this.

Cheers
Fred


_______________________________________________
Discuss-gnustep mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/discuss-gnustep

Reply via email to