The LG Native Window Integration utility classes.

[Need Paul's review] The two primary design goals are (1) allow pluggable Look and Feel, (2) encapsulate complexity around native window caputure and communication. The classes in this package tries to abstract and hide all the complexity around the native application visual caputure as well as necessary communication with the application side.

NativeWindow3D is the top level class with which SceneManager interact. It extends Frame3D and behaves just like another 3D application. It also implements the methods declared in NativeWindowMonitor, which are used for the native 2D window manager to give notifications about status changes, etc. The implementation, in turn, uses NativeWindowControl interface to communicate back to the native window manager in order to perform actions against the 2D application associated with this object.

NativeWindowLookAndFeel defines native windows look and feel. At this level, typically window decoration is constructed. The current implementation includes GlassyNativeWindowLookAndFeel in the lg3d.scenemanager.utils.decoration package as an example.

NativeWindowObject and TiledNativeWindowImage are introduced to hide all the complexy related to native window caputure support. Texture is used for presenting captured 2D window surface in the 3D space, but it has size limitation which is sometimes smaller than maximum 2D window size. In order to deal with large 2D window caputre, we use composite multiple textures created from multiple ImageComponent2Ds. The details are hidden under this and the TiledNativeWindowImage class.

The following diagram illustrates relationship among the major classes.

     Scene         X11WindowManager            A |  Inheritance 
    Manager     X11Client       |              | V 
       |            |           |              
       |            V           Y              ^ |  Reference   
       Y      NativeWindow  NativeWindow       | Y 
    Frame3D       Control    Monitor          
       A            ^           A             
       |            |           |
       +-----NativeWindow3D-----+
                    ^                   LgBranchGroup
                    |                         A
                    Y                         |
          NativeWindowLookAndFeel --> NativeWindowObject
                    A                         |
                    |                         Y
            GlassyNativeWindow         NativeWindowPane
               LookAndFeel                    |
                                              Y
                                    TiledNativeWindowImage
                                              |
                                              Y
                                      TiledNativeWindow
                                         ImageLoader