remove SkOSWindow_Win.cpp (has been replaced by SkOSWindow_win.cpp [lowercase w])



git-svn-id: http://skia.googlecode.com/svn/trunk@2779 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/utils/win/SkOSWindow_Win.cpp b/src/utils/win/SkOSWindow_Win.cpp
deleted file mode 100644
index ed8d6e0..0000000
--- a/src/utils/win/SkOSWindow_Win.cpp
+++ /dev/null
@@ -1,610 +0,0 @@
-
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#include "SkTypes.h"
-
-#if defined(SK_BUILD_FOR_WIN)
-
-#include <GL/gl.h>
-#include <d3d9.h>
-#include <WindowsX.h>
-#include "SkWindow.h"
-#include "SkCanvas.h"
-#include "SkOSMenu.h"
-#include "SkTime.h"
-#include "SkUtils.h"
-
-#include "SkGraphics.h"
-
-#define INVALIDATE_DELAY_MS 200
-
-static SkOSWindow* gCurrOSWin;
-static HWND gEventTarget;
-
-#define WM_EVENT_CALLBACK (WM_USER+0)
-
-void post_skwinevent()
-{
-    PostMessage(gEventTarget, WM_EVENT_CALLBACK, 0, 0);
-}
-
-SkOSWindow::SkOSWindow(void* hWnd) : fHWND(hWnd), 
-                                     fHGLRC(NULL),
-                                     fGLAttached(false),
-                                     fD3D9Device(NULL),
-                                     fD3D9Attached(FALSE) {
-    gEventTarget = (HWND)hWnd;
-}
-
-SkOSWindow::~SkOSWindow() {
-    if (NULL != fD3D9Device) {
-        ((IDirect3DDevice9*)fD3D9Device)->Release();
-    }
-    if (NULL != fHGLRC) {
-        wglDeleteContext((HGLRC)fHGLRC);
-    }
-}
-
-static SkKey winToskKey(WPARAM vk) {
-    static const struct {
-        WPARAM    fVK;
-        SkKey    fKey;
-    } gPair[] = {
-        { VK_BACK,    kBack_SkKey },
-        { VK_CLEAR,    kBack_SkKey },
-        { VK_RETURN, kOK_SkKey },
-        { VK_UP,     kUp_SkKey },
-        { VK_DOWN,     kDown_SkKey },
-        { VK_LEFT,     kLeft_SkKey },
-        { VK_RIGHT,     kRight_SkKey }
-    };
-    for (size_t i = 0; i < SK_ARRAY_COUNT(gPair); i++) {
-        if (gPair[i].fVK == vk) {
-            return gPair[i].fKey;
-        }
-    }
-    return kNONE_SkKey;
-}
-
-bool SkOSWindow::wndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
-    switch (message) {
-        case WM_KEYDOWN: {
-            SkKey key = winToskKey(wParam);
-            if (kNONE_SkKey != key) {
-                this->handleKey(key);
-                return true;
-            }
-        } break;
-        case WM_KEYUP: {
-            SkKey key = winToskKey(wParam);
-            if (kNONE_SkKey != key) {
-                this->handleKeyUp(key);
-                return true;
-            }
-        } break;
-        case WM_UNICHAR:
-            this->handleChar(wParam);
-            return true; 
-        case WM_CHAR: {
-            this->handleChar(SkUTF8_ToUnichar((char*)&wParam));
-            return true;
-        } break;
-        case WM_SIZE:
-            this->resize(lParam & 0xFFFF, lParam >> 16);
-            break;
-        case WM_PAINT: {
-            PAINTSTRUCT ps;
-            HDC hdc = BeginPaint(hWnd, &ps);
-            this->doPaint(hdc);
-            EndPaint(hWnd, &ps);
-            return true;
-            } break;
-
-        case WM_TIMER: {
-            RECT* rect = (RECT*)wParam;
-            InvalidateRect(hWnd, rect, FALSE);
-            KillTimer(hWnd, (UINT_PTR)rect);
-            delete rect;
-            return true;
-        } break;
-    
-        case WM_LBUTTONDOWN: 
-            this->handleClick(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), Click::kDown_State);
-            return true;
-                    
-        case WM_MOUSEMOVE:
-            this->handleClick(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), Click::kMoved_State);
-            return true;
-
-        case WM_LBUTTONUP:
-            this->handleClick(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), Click::kUp_State);
-            return true;
-
-        case WM_EVENT_CALLBACK:
-            if (SkEvent::ProcessEvent()) {
-                post_skwinevent();
-            }
-            return true;
-    }
-    return false;
-}
-
-void SkOSWindow::doPaint(void* ctx) {
-    this->update(NULL);
-
-    if (!fGLAttached && !fD3D9Attached)
-    {
-        HDC hdc = (HDC)ctx;
-        const SkBitmap& bitmap = this->getBitmap();
-
-        BITMAPINFO bmi;
-        memset(&bmi, 0, sizeof(bmi));
-        bmi.bmiHeader.biSize        = sizeof(BITMAPINFOHEADER);
-        bmi.bmiHeader.biWidth       = bitmap.width();
-        bmi.bmiHeader.biHeight      = -bitmap.height(); // top-down image 
-        bmi.bmiHeader.biPlanes      = 1;
-        bmi.bmiHeader.biBitCount    = 32;
-        bmi.bmiHeader.biCompression = BI_RGB;
-        bmi.bmiHeader.biSizeImage   = 0;
-
-        // 
-        // Do the SetDIBitsToDevice. 
-        // 
-        // TODO(wjmaclean):
-        //       Fix this call to handle SkBitmaps that have rowBytes != width,
-        //       i.e. may have padding at the end of lines. The SkASSERT below
-        //       may be ignored by builds, and the only obviously safe option
-        //       seems to be to copy the bitmap to a temporary (contiguous)
-        //       buffer before passing to SetDIBitsToDevice().
-        SkASSERT(bitmap.width() * bitmap.bytesPerPixel() == bitmap.rowBytes());
-        bitmap.lockPixels();
-        int iRet = SetDIBitsToDevice(hdc,
-            0, 0,
-            bitmap.width(), bitmap.height(),
-            0, 0,
-            0, bitmap.height(),
-            bitmap.getPixels(),
-            &bmi,
-            DIB_RGB_COLORS);
-        bitmap.unlockPixels();
-    }
-}
-
-#if 0
-void SkOSWindow::updateSize()
-{
-    RECT    r;
-    GetWindowRect((HWND)this->getHWND(), &r);
-    this->resize(r.right - r.left, r.bottom - r.top);
-}
-#endif
-
-void SkOSWindow::onHandleInval(const SkIRect& r) {
-    RECT* rect = new RECT;
-    rect->left    = r.fLeft;
-    rect->top     = r.fTop;
-    rect->right   = r.fRight;
-    rect->bottom  = r.fBottom;
-    SetTimer((HWND)fHWND, (UINT_PTR)rect, INVALIDATE_DELAY_MS, NULL);
-}
-
-void SkOSWindow::onAddMenu(const SkOSMenu* sk_menu)
-{
-}
-
-void SkOSWindow::onSetTitle(const char title[]){
-    SetWindowTextA((HWND)fHWND, title);
-}
-
-enum {
-    SK_MacReturnKey     = 36,
-    SK_MacDeleteKey     = 51,
-    SK_MacEndKey        = 119,
-    SK_MacLeftKey       = 123,
-    SK_MacRightKey      = 124,
-    SK_MacDownKey       = 125,
-    SK_MacUpKey         = 126,
-    
-    SK_Mac0Key          = 0x52,
-    SK_Mac1Key          = 0x53,
-    SK_Mac2Key          = 0x54,
-    SK_Mac3Key          = 0x55,
-    SK_Mac4Key          = 0x56,
-    SK_Mac5Key          = 0x57,
-    SK_Mac6Key          = 0x58,
-    SK_Mac7Key          = 0x59,
-    SK_Mac8Key          = 0x5b,
-    SK_Mac9Key          = 0x5c
-};
-    
-static SkKey raw2key(uint32_t raw)
-{
-    static const struct {
-        uint32_t  fRaw;
-        SkKey   fKey;
-    } gKeys[] = {
-        { SK_MacUpKey,      kUp_SkKey       },
-        { SK_MacDownKey,    kDown_SkKey     },
-        { SK_MacLeftKey,    kLeft_SkKey     },
-        { SK_MacRightKey,   kRight_SkKey    },
-        { SK_MacReturnKey,  kOK_SkKey       },
-        { SK_MacDeleteKey,  kBack_SkKey     },
-        { SK_MacEndKey,     kEnd_SkKey      },
-        { SK_Mac0Key,       k0_SkKey        },
-        { SK_Mac1Key,       k1_SkKey        },
-        { SK_Mac2Key,       k2_SkKey        },
-        { SK_Mac3Key,       k3_SkKey        },
-        { SK_Mac4Key,       k4_SkKey        },
-        { SK_Mac5Key,       k5_SkKey        },
-        { SK_Mac6Key,       k6_SkKey        },
-        { SK_Mac7Key,       k7_SkKey        },
-        { SK_Mac8Key,       k8_SkKey        },
-        { SK_Mac9Key,       k9_SkKey        }
-    };
-    
-    for (unsigned i = 0; i < SK_ARRAY_COUNT(gKeys); i++)
-        if (gKeys[i].fRaw == raw)
-            return gKeys[i].fKey;
-    return kNONE_SkKey;
-}
-
-///////////////////////////////////////////////////////////////////////////////////////
-
-void SkEvent::SignalNonEmptyQueue()
-{
-    post_skwinevent();
-    //SkDebugf("signal nonempty\n");
-}
-
-static UINT_PTR gTimer;
-
-VOID CALLBACK sk_timer_proc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
-{
-    SkEvent::ServiceQueueTimer();
-    //SkDebugf("timer task fired\n");
-}
-
-void SkEvent::SignalQueueTimer(SkMSec delay)
-{
-    if (gTimer)
-    {
-        KillTimer(NULL, gTimer);
-        gTimer = NULL;
-    }
-    if (delay)
-    {     
-        gTimer = SetTimer(NULL, 0, delay, sk_timer_proc);
-        //SkDebugf("SetTimer of %d returned %d\n", delay, gTimer);
-    }
-}
-
-#if defined(UNICODE)
-    #define STR_LIT(X) L## #X
-#else
-    #define STR_LIT(X) #X
-#endif
-
-static HWND create_dummy()
-{
-    HMODULE module = GetModuleHandle(NULL);
-    HWND dummy;
-    RECT windowRect;
-    windowRect.left = 0;
-    windowRect.right = 8;
-    windowRect.top = 0;
-    windowRect.bottom = 8;
-
-    WNDCLASS wc;
-
-    wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
-    wc.lpfnWndProc = (WNDPROC) DefWindowProc;
-    wc.cbClsExtra = 0;
-    wc.cbWndExtra = 0;
-    wc.hInstance = module;
-    wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
-    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
-    wc.hbrBackground = NULL;
-    wc.lpszMenuName = NULL;
-    wc.lpszClassName = STR_LIT("DummyClass");
-
-    if(!RegisterClass(&wc))
-    {
-        return 0;
-    }
-
-    DWORD style, exStyle;
-    exStyle = WS_EX_CLIENTEDGE;
-    style = WS_SYSMENU;
-
-    AdjustWindowRectEx(&windowRect, style, false, exStyle);
-    if(!(dummy = CreateWindowEx(exStyle,
-        STR_LIT("DummyClass"),
-        STR_LIT("DummyWindow"),
-        WS_CLIPSIBLINGS | WS_CLIPCHILDREN | style,
-        0, 0,
-        windowRect.right-windowRect.left,
-        windowRect.bottom-windowRect.top,
-        NULL, NULL,
-        module,
-        NULL)))
-    {
-        UnregisterClass(STR_LIT("DummyClass"), module);
-        return NULL;
-    }
-    ShowWindow(dummy, SW_HIDE);
-
-    return dummy;
-}
-
-void kill_dummy(HWND dummy) {
-    DestroyWindow(dummy);
-    HMODULE module = GetModuleHandle(NULL);
-    UnregisterClass(STR_LIT("DummyClass"), module);
-}
-
-// WGL_ARB_pixel_format
-#define WGL_DRAW_TO_WINDOW_ARB      0x2001
-#define WGL_ACCELERATION_ARB        0x2003
-#define WGL_SUPPORT_OPENGL_ARB      0x2010
-#define WGL_DOUBLE_BUFFER_ARB       0x2011
-#define WGL_COLOR_BITS_ARB          0x2014
-#define WGL_ALPHA_BITS_ARB          0x201B
-#define WGL_STENCIL_BITS_ARB        0x2023
-#define WGL_FULL_ACCELERATION_ARB   0x2027
-
-// WGL_ARB_multisample
-#define WGL_SAMPLE_BUFFERS_ARB      0x2041
-#define WGL_SAMPLES_ARB             0x2042
-
-#define USE_MSAA 0
-
-HGLRC create_gl(HWND hwnd) {
-    HDC hdc;    
-    HDC prevHDC;
-    HGLRC prevGLRC, glrc;
-    PIXELFORMATDESCRIPTOR pfd;
-
-    prevGLRC = wglGetCurrentContext();
-    prevHDC  = wglGetCurrentDC();
-
-    int format = 0;
-
-    typedef BOOL (WINAPI *WGLChoosePixelFormatFunc)(HDC hdc,
-                                                    const int *,
-                                                    const FLOAT *,
-                                                    UINT nMaxFormats,
-                                                    int *,
-                                                    UINT *);
-
-    static WGLChoosePixelFormatFunc wglChoosePixelFormatARB;
-
-    // This is horrible but true: wglGetProcAddress cannot be called before a
-    // context is created. SetPixelFormat also needs to be called before the
-    // context is created. But SetPixelFormat is only allowed to succeed once per
-    // window. So we need to create a dummy window in order to call
-    // wglGetProcAddress to get wglChoosePixelFormatARB.
-    if (NULL == wglChoosePixelFormatARB) {
-        ZeroMemory(&pfd, sizeof(pfd));
-        pfd.nSize = sizeof(pfd);
-        pfd.nVersion = 1;
-        pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
-        pfd.iPixelType = PFD_TYPE_RGBA;
-        pfd.cColorBits  = 32;
-        pfd.cDepthBits  = 0;
-        pfd.cStencilBits = 8;
-        pfd.iLayerType = PFD_MAIN_PLANE;
-        HWND dummy = create_dummy();
-        SkASSERT(NULL != dummy);
-        hdc = GetDC(dummy);
-        format = ChoosePixelFormat(hdc, &pfd);
-        SetPixelFormat(hdc, format, &pfd);
-        glrc = wglCreateContext(hdc);
-        SkASSERT(glrc);
-        wglMakeCurrent(hdc, glrc);
-
-        wglChoosePixelFormatARB = (WGLChoosePixelFormatFunc) wglGetProcAddress("wglChoosePixelFormatARB");
-
-        wglMakeCurrent(hdc, NULL);
-        wglDeleteContext(glrc);
-        glrc = 0;
-        kill_dummy(dummy);
-
-        if (NULL == wglChoosePixelFormatARB) {
-            return 0;
-        }
-    }
-
-    hdc = GetDC(hwnd);
-    format = 0;
-
-    GLint iattrs[] = {
-        WGL_DRAW_TO_WINDOW_ARB, TRUE,
-        WGL_DOUBLE_BUFFER_ARB, TRUE,
-        WGL_ACCELERATION_ARB, WGL_FULL_ACCELERATION_ARB,
-        WGL_SUPPORT_OPENGL_ARB, TRUE,
-        WGL_COLOR_BITS_ARB, 24,
-        WGL_ALPHA_BITS_ARB, 8,
-        WGL_STENCIL_BITS_ARB, 8,
-#if USE_MSAA
-        WGL_SAMPLE_BUFFERS_ARB, TRUE,
-        WGL_SAMPLES_ARB, 0,
-#else
-        0, 0, 0, 0,
-#endif
-        0,0
-    };
-    for (int samples = 16; samples > 1; --samples) {
-        iattrs[15] = samples;
-        GLfloat fattrs[] = {0,0};
-        GLuint num;
-        int formats[64];
-        wglChoosePixelFormatARB(hdc, iattrs, fattrs, 64, formats, &num);
-        num = min(num,64);
-        for (GLuint i = 0; i < num; ++i) {            
-            DescribePixelFormat(hdc, formats[i], sizeof(pfd), &pfd);
-            if (SetPixelFormat(hdc, formats[i], &pfd)) {
-                format = formats[i];
-                break;
-            }
-        }
-    }
-    if (0 == format) {
-        iattrs[12] = iattrs[13] = 0;
-        GLfloat fattrs[] = {0,0};
-        GLuint num;
-        wglChoosePixelFormatARB(hdc, iattrs, fattrs, 1, &format, &num);
-        DescribePixelFormat(hdc, format, sizeof(pfd), &pfd);
-        BOOL set = SetPixelFormat(hdc, format, &pfd);
-        SkASSERT(TRUE == set);
-    }
-    
-    glrc = wglCreateContext(hdc);
-    SkASSERT(glrc);    
-
-    wglMakeCurrent(prevHDC, prevGLRC);
-    return glrc;
-}
-
-bool SkOSWindow::attachGL() {
-    if (NULL == fHGLRC) {
-        fHGLRC = create_gl((HWND)fHWND);
-        if (NULL == fHGLRC) {
-            return false;
-        }
-        glClearStencil(0);
-        glClearColor(0, 0, 0, 0);
-        glStencilMask(0xffffffff);
-        glClear(GL_STENCIL_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
-    }
-    if (wglMakeCurrent(GetDC((HWND)fHWND), (HGLRC)fHGLRC)) {
-        glViewport(0, 0, SkScalarRound(this->width()),
-                   SkScalarRound(this->height()));
-        fGLAttached = true;
-        return true;
-    }
-    return false;
-}
-
-void SkOSWindow::detachGL() {
-    wglMakeCurrent(GetDC((HWND)fHWND), 0);
-    fGLAttached = false;
-}
-
-void SkOSWindow::presentGL() {
-    glFlush();
-    SwapBuffers(GetDC((HWND)fHWND));
-}
-
-IDirect3DDevice9* create_d3d9_device(HWND hwnd) {
-    HRESULT hr;
-
-    IDirect3D9* d3d9;
-    d3d9 = Direct3DCreate9(D3D_SDK_VERSION);
-    if (NULL == d3d9) {
-        return NULL;
-    }
-    D3DDEVTYPE devType = D3DDEVTYPE_HAL;
-    //D3DDEVTYPE devType = D3DDEVTYPE_REF;
-    DWORD qLevels;
-    DWORD qLevelsDepth;
-    D3DMULTISAMPLE_TYPE type;
-    for (type = D3DMULTISAMPLE_16_SAMPLES; 
-         type >= D3DMULTISAMPLE_NONMASKABLE; --(*(DWORD*)&type)) {
-        hr = d3d9->CheckDeviceMultiSampleType(D3DADAPTER_DEFAULT, 
-                                              devType, D3DFMT_D24S8, TRUE,
-                                              type, &qLevels);
-        qLevels = (hr == D3D_OK) ? qLevels : 0;
-        hr = d3d9->CheckDeviceMultiSampleType(D3DADAPTER_DEFAULT, 
-                                              devType, D3DFMT_A8R8G8B8, TRUE,
-                                              type, &qLevelsDepth);
-        qLevelsDepth = (hr == D3D_OK) ? qLevelsDepth : 0;
-        qLevels = min(qLevels,qLevelsDepth);
-        if (qLevels > 0) {
-            break;
-        }
-    }
-    qLevels = 0;
-    IDirect3DDevice9* d3d9Device;
-    D3DPRESENT_PARAMETERS pres;
-    memset(&pres, 0, sizeof(pres));
-    pres.EnableAutoDepthStencil = TRUE;
-    pres.AutoDepthStencilFormat = D3DFMT_D24S8;
-    pres.BackBufferCount = 2;
-    pres.BackBufferFormat = D3DFMT_A8R8G8B8;
-    pres.BackBufferHeight = 0;
-    pres.BackBufferWidth = 0;
-    if (qLevels > 0) {
-        pres.MultiSampleType = type;
-        pres.MultiSampleQuality = qLevels-1;
-    } else {
-        pres.MultiSampleType = D3DMULTISAMPLE_NONE;
-        pres.MultiSampleQuality = 0;
-    }
-    pres.SwapEffect = D3DSWAPEFFECT_DISCARD;
-    pres.Windowed = TRUE;
-    pres.hDeviceWindow = hwnd;
-    pres.PresentationInterval = 1;
-    pres.Flags = 0;
-    hr = d3d9->CreateDevice(D3DADAPTER_DEFAULT,
-                            devType,
-                            hwnd, 
-                            D3DCREATE_HARDWARE_VERTEXPROCESSING, 
-                            &pres, 
-                            &d3d9Device);    
-    D3DERR_INVALIDCALL;
-    if (SUCCEEDED(hr)) {
-        d3d9Device->Clear(0, NULL, D3DCLEAR_TARGET, 0xFFFFFFFF, 0, 0);
-        return d3d9Device;
-    }
-    return NULL;
-}
-
-// This needs some improvement. D3D doesn't have the same notion of attach/detach
-// as GL. However, just allowing GDI to write to the window after creating the 
-// D3D device seems to work. 
-// We need to handle resizing. On XP and earlier Reset() will trash all our textures
-// so we would need to inform the SkGpu/caches or just recreate them. On Vista+ we
-// could use an IDirect3DDevice9Ex and call ResetEx() to resize without trashing
-// everything. Currently we do nothing and the D3D9 image gets stretched/compressed
-// when resized.
-
-bool SkOSWindow::attachD3D9() {
-    if (NULL == fD3D9Device) {
-        fD3D9Device = (void*) create_d3d9_device((HWND)fHWND);
-    }
-    if (NULL != fD3D9Device) {
-        ((IDirect3DDevice9*)fD3D9Device)->BeginScene();
-        fD3D9Attached = true;
-    }
-    return fD3D9Attached;
-}
-
-void SkOSWindow::detachD3D9() {
-    if (NULL != fD3D9Device) {
-        ((IDirect3DDevice9*)fD3D9Device)->EndScene();
-    }
-    fD3D9Attached = false;
-}
-
-void SkOSWindow::presentD3D9() {
-    if (NULL != fD3D9Device) {
-        HRESULT hr;
-        hr = ((IDirect3DDevice9*)fD3D9Device)->EndScene();
-        SkASSERT(SUCCEEDED(hr));
-        hr = ((IDirect3DDevice9*)d3d9Device())->Present(NULL, NULL, NULL, NULL);
-        SkASSERT(SUCCEEDED(hr));
-        hr = ((IDirect3DDevice9*)fD3D9Device)->Clear(0,NULL,D3DCLEAR_TARGET | 
-                                                     D3DCLEAR_STENCIL, 0x0, 0, 
-                                                     0);
-        SkASSERT(SUCCEEDED(hr));
-        hr = ((IDirect3DDevice9*)fD3D9Device)->BeginScene();
-        SkASSERT(SUCCEEDED(hr));
-    }
-}
-
-
-#endif