/*
* Copyright (C) 2011 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "NativeSubWindow.h"
#include <stdio.h>

LRESULT CALLBACK myWndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
    return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

EGLNativeWindowType createSubWindow(FBNativeWindowType p_window,
                                    EGLNativeDisplayType* display_out,
                                    int x, int y,int width, int height){
    WNDCLASS wc;
    wc.style =  CS_OWNDC |CS_HREDRAW |CS_VREDRAW;  // redraw if size changes
    wc.lpfnWndProc = myWndProc;                 // points to window procedure
    wc.cbClsExtra = 0;                             // no extra class memory
    wc.cbWndExtra = sizeof(void*);                 // save extra window memory, to store VasWindow instance
    wc.hInstance = NULL;                           // handle to instance
    wc.hIcon = NULL;                               // predefined app. icon
    wc.hCursor = NULL;
    wc.hbrBackground = NULL;                       // no background brush
    wc.lpszMenuName =  NULL;                       // name of menu resource
    wc.lpszClassName = "subWin";                 // name of window class

    RegisterClass(&wc);
    printf("creating window %d %d %d %d\n",x,y,width,height);
    EGLNativeWindowType ret = CreateWindow("subWin",
                        "sub",
                        WS_CHILD,
                        x,y,width,height,
                        p_window,
                        NULL,
                        NULL,
                        NULL);
    ShowWindow(ret,SW_SHOW);
    return ret;
}

void destroySubWindow(EGLNativeDisplayType dis,EGLNativeWindowType win){
    DestroyWindow(win);
}
