//
// Do the SetDIBitsToDevice.
//
+ SkASSERT(bitmap.width() * bitmap.bytesPerPixel() == bitmap.rowBytes());
bitmap.lockPixels();
int iRet = SetDIBitsToDevice(hdc,
0, 0,
}
-#endif
\ No newline at end of file
+#endif
+||||||| merged common ancestors
+#include "SkTypes.h"\r
+\r
+#if defined(SK_BUILD_FOR_WIN)\r
+\r
+#include "SkWindow.h"\r
+#include "SkCanvas.h"\r
+#include "SkOSMenu.h"\r
+#include "SkTime.h"\r
+\r
+#include "SkGraphics.h"\r
+\r
+static SkOSWindow* gCurrOSWin;\r
+\r
+SkOSWindow::SkOSWindow(void* hWnd) : fHWND(hWnd) {\r
+}\r
+\r
+static SkKey winToskKey(WPARAM vk) {\r
+ static const struct {\r
+ WPARAM fVK;\r
+ SkKey fKey;\r
+ } gPair[] = {\r
+ { VK_BACK, kBack_SkKey },\r
+ { VK_CLEAR, kBack_SkKey },\r
+ { VK_RETURN, kOK_SkKey },\r
+ { VK_UP, kUp_SkKey },\r
+ { VK_DOWN, kDown_SkKey },\r
+ { VK_LEFT, kLeft_SkKey },\r
+ { VK_RIGHT, kRight_SkKey }\r
+ };\r
+ for (size_t i = 0; i < SK_ARRAY_COUNT(gPair); i++) {\r
+ if (gPair[i].fVK == vk) {\r
+ return gPair[i].fKey;\r
+ }\r
+ }\r
+ return kNONE_SkKey;\r
+}\r
+\r
+bool SkOSWindow::wndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {\r
+ switch (message) {\r
+ case WM_KEYDOWN: {\r
+ SkKey key = winToskKey(wParam);\r
+ if (kNONE_SkKey != key) {\r
+ this->handleKey(key);\r
+ return true;\r
+ }\r
+ } break;\r
+ case WM_KEYUP: {\r
+ SkKey key = winToskKey(wParam);\r
+ if (kNONE_SkKey != key) {\r
+ this->handleKeyUp(key);\r
+ return true;\r
+ }\r
+ } break;\r
+ case WM_UNICHAR:\r
+ this->handleChar(lParam);\r
+ return true;\r
+ case WM_SIZE:\r
+ this->resize(lParam & 0xFFFF, lParam >> 16);\r
+ break;\r
+ case WM_PAINT: {\r
+ PAINTSTRUCT ps;\r
+ HDC hdc = BeginPaint(hWnd, &ps);\r
+ this->doPaint(hdc);\r
+ EndPaint(hWnd, &ps);\r
+ return true;\r
+ } break;\r
+ }\r
+ return false;\r
+}\r
+\r
+void SkOSWindow::doPaint(void* ctx) {\r
+ this->update(NULL);\r
+\r
+ HDC hdc = (HDC)ctx;\r
+ const SkBitmap& bitmap = this->getBitmap();\r
+\r
+ BITMAPINFO bmi;\r
+ memset(&bmi, 0, sizeof(bmi));\r
+ bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\r
+ bmi.bmiHeader.biWidth = bitmap.width();\r
+ bmi.bmiHeader.biHeight = -bitmap.height(); // top-down image \r
+ bmi.bmiHeader.biPlanes = 1;\r
+ bmi.bmiHeader.biBitCount = 32;\r
+ bmi.bmiHeader.biCompression = BI_RGB;\r
+ bmi.bmiHeader.biSizeImage = 0;\r
+\r
+ // \r
+ // Do the SetDIBitsToDevice. \r
+ // \r
+ bitmap.lockPixels();\r
+ int iRet = SetDIBitsToDevice(hdc,\r
+ 0, 0,\r
+ bitmap.width(), bitmap.height(),\r
+ 0, 0,\r
+ 0, bitmap.height(),\r
+ bitmap.getPixels(),\r
+ &bmi,\r
+ DIB_RGB_COLORS);\r
+ bitmap.unlockPixels();\r
+}\r
+\r
+#if 0\r
+void SkOSWindow::updateSize()\r
+{\r
+ RECT r;\r
+ GetWindowRect((HWND)this->getHWND(), &r);\r
+ this->resize(r.right - r.left, r.bottom - r.top);\r
+}\r
+#endif\r
+\r
+void SkOSWindow::onHandleInval(const SkIRect& r) {\r
+ RECT rect;\r
+ rect.left = r.fLeft;\r
+ rect.top = r.fTop;\r
+ rect.right = r.fRight;\r
+ rect.bottom = r.fBottom;\r
+ InvalidateRect((HWND)this->getHWND(), &rect, false);\r
+}\r
+\r
+void SkOSWindow::onAddMenu(const SkOSMenu* sk_menu)\r
+{\r
+}\r
+\r
+\r
+enum {\r
+ SK_MacReturnKey = 36,\r
+ SK_MacDeleteKey = 51,\r
+ SK_MacEndKey = 119,\r
+ SK_MacLeftKey = 123,\r
+ SK_MacRightKey = 124,\r
+ SK_MacDownKey = 125,\r
+ SK_MacUpKey = 126,\r
+ \r
+ SK_Mac0Key = 0x52,\r
+ SK_Mac1Key = 0x53,\r
+ SK_Mac2Key = 0x54,\r
+ SK_Mac3Key = 0x55,\r
+ SK_Mac4Key = 0x56,\r
+ SK_Mac5Key = 0x57,\r
+ SK_Mac6Key = 0x58,\r
+ SK_Mac7Key = 0x59,\r
+ SK_Mac8Key = 0x5b,\r
+ SK_Mac9Key = 0x5c\r
+};\r
+ \r
+static SkKey raw2key(uint32_t raw)\r
+{\r
+ static const struct {\r
+ uint32_t fRaw;\r
+ SkKey fKey;\r
+ } gKeys[] = {\r
+ { SK_MacUpKey, kUp_SkKey },\r
+ { SK_MacDownKey, kDown_SkKey },\r
+ { SK_MacLeftKey, kLeft_SkKey },\r
+ { SK_MacRightKey, kRight_SkKey },\r
+ { SK_MacReturnKey, kOK_SkKey },\r
+ { SK_MacDeleteKey, kBack_SkKey },\r
+ { SK_MacEndKey, kEnd_SkKey },\r
+ { SK_Mac0Key, k0_SkKey },\r
+ { SK_Mac1Key, k1_SkKey },\r
+ { SK_Mac2Key, k2_SkKey },\r
+ { SK_Mac3Key, k3_SkKey },\r
+ { SK_Mac4Key, k4_SkKey },\r
+ { SK_Mac5Key, k5_SkKey },\r
+ { SK_Mac6Key, k6_SkKey },\r
+ { SK_Mac7Key, k7_SkKey },\r
+ { SK_Mac8Key, k8_SkKey },\r
+ { SK_Mac9Key, k9_SkKey }\r
+ };\r
+ \r
+ for (unsigned i = 0; i < SK_ARRAY_COUNT(gKeys); i++)\r
+ if (gKeys[i].fRaw == raw)\r
+ return gKeys[i].fKey;\r
+ return kNONE_SkKey;\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////////////\r
+\r
+void SkEvent::SignalNonEmptyQueue()\r
+{\r
+// post_skmacevent();\r
+// SkDebugf("signal nonempty\n");\r
+}\r
+\r
+//static void sk_timer_proc(TMTask* rec)\r
+//{\r
+// SkEvent::ServiceQueueTimer();\r
+// SkDebugf("timer task fired\n");\r
+//}\r
+\r
+void SkEvent::SignalQueueTimer(SkMSec delay)\r
+{\r
+#if 0\r
+ if (gTMTaskPtr)\r
+ {\r
+ RemoveTimeTask((QElem*)gTMTaskPtr);\r
+ DisposeTimerUPP(gTMTaskPtr->tmAddr);\r
+ gTMTaskPtr = nil;\r
+ }\r
+ if (delay)\r
+ {\r
+ gTMTaskPtr = &gTMTaskRec;\r
+ memset(gTMTaskPtr, 0, sizeof(gTMTaskRec));\r
+ gTMTaskPtr->tmAddr = NewTimerUPP(sk_timer_proc);\r
+ OSErr err = InstallTimeTask((QElem*)gTMTaskPtr);\r
+// SkDebugf("installtimetask of %d returned %d\n", delay, err);\r
+ PrimeTimeTask((QElem*)gTMTaskPtr, delay);\r
+ }\r
+#endif\r
+}\r
+\r
+#endif\r
+\r
+=======
+#include "SkTypes.h"\r
+\r
+#if defined(SK_BUILD_FOR_WIN)\r
+\r
+#include "SkWindow.h"\r
+#include "SkCanvas.h"\r
+#include "SkOSMenu.h"\r
+#include "SkTime.h"\r
+\r
+#include "SkGraphics.h"\r
+\r
+static SkOSWindow* gCurrOSWin;\r
+\r
+SkOSWindow::SkOSWindow(void* hWnd) : fHWND(hWnd) {\r
+}\r
+\r
+static SkKey winToskKey(WPARAM vk) {\r
+ static const struct {\r
+ WPARAM fVK;\r
+ SkKey fKey;\r
+ } gPair[] = {\r
+ { VK_BACK, kBack_SkKey },\r
+ { VK_CLEAR, kBack_SkKey },\r
+ { VK_RETURN, kOK_SkKey },\r
+ { VK_UP, kUp_SkKey },\r
+ { VK_DOWN, kDown_SkKey },\r
+ { VK_LEFT, kLeft_SkKey },\r
+ { VK_RIGHT, kRight_SkKey }\r
+ };\r
+ for (size_t i = 0; i < SK_ARRAY_COUNT(gPair); i++) {\r
+ if (gPair[i].fVK == vk) {\r
+ return gPair[i].fKey;\r
+ }\r
+ }\r
+ return kNONE_SkKey;\r
+}\r
+\r
+bool SkOSWindow::wndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {\r
+ switch (message) {\r
+ case WM_KEYDOWN: {\r
+ SkKey key = winToskKey(wParam);\r
+ if (kNONE_SkKey != key) {\r
+ this->handleKey(key);\r
+ return true;\r
+ }\r
+ } break;\r
+ case WM_KEYUP: {\r
+ SkKey key = winToskKey(wParam);\r
+ if (kNONE_SkKey != key) {\r
+ this->handleKeyUp(key);\r
+ return true;\r
+ }\r
+ } break;\r
+ case WM_UNICHAR:\r
+ this->handleChar(lParam);\r
+ return true;\r
+ case WM_SIZE:\r
+ this->resize(lParam & 0xFFFF, lParam >> 16);\r
+ break;\r
+ case WM_PAINT: {\r
+ PAINTSTRUCT ps;\r
+ HDC hdc = BeginPaint(hWnd, &ps);\r
+ this->doPaint(hdc);\r
+ EndPaint(hWnd, &ps);\r
+ return true;\r
+ } break;\r
+ }\r
+ return false;\r
+}\r
+\r
+void SkOSWindow::doPaint(void* ctx) {\r
+ this->update(NULL);\r
+\r
+ HDC hdc = (HDC)ctx;\r
+ const SkBitmap& bitmap = this->getBitmap();\r
+\r
+ BITMAPINFO bmi;\r
+ memset(&bmi, 0, sizeof(bmi));\r
+ bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\r
+ bmi.bmiHeader.biWidth = bitmap.width();\r
+ bmi.bmiHeader.biHeight = -bitmap.height(); // top-down image \r
+ bmi.bmiHeader.biPlanes = 1;\r
+ bmi.bmiHeader.biBitCount = 32;\r
+ bmi.bmiHeader.biCompression = BI_RGB;\r
+ bmi.bmiHeader.biSizeImage = 0;\r
+\r
+ // \r
+ // Do the SetDIBitsToDevice. \r
+ // \r
+ SkASSERT(bitmap.width() * bitmap.bytesPerPixel() == bitmap.rowBytes());\r
+ bitmap.lockPixels();\r
+ int iRet = SetDIBitsToDevice(hdc,\r
+ 0, 0,\r
+ bitmap.width(), bitmap.height(),\r
+ 0, 0,\r
+ 0, bitmap.height(),\r
+ bitmap.getPixels(),\r
+ &bmi,\r
+ DIB_RGB_COLORS);\r
+ bitmap.unlockPixels();\r
+}\r
+\r
+#if 0\r
+void SkOSWindow::updateSize()\r
+{\r
+ RECT r;\r
+ GetWindowRect((HWND)this->getHWND(), &r);\r
+ this->resize(r.right - r.left, r.bottom - r.top);\r
+}\r
+#endif\r
+\r
+void SkOSWindow::onHandleInval(const SkIRect& r) {\r
+ RECT rect;\r
+ rect.left = r.fLeft;\r
+ rect.top = r.fTop;\r
+ rect.right = r.fRight;\r
+ rect.bottom = r.fBottom;\r
+ InvalidateRect((HWND)this->getHWND(), &rect, false);\r
+}\r
+\r
+void SkOSWindow::onAddMenu(const SkOSMenu* sk_menu)\r
+{\r
+}\r
+\r
+\r
+enum {\r
+ SK_MacReturnKey = 36,\r
+ SK_MacDeleteKey = 51,\r
+ SK_MacEndKey = 119,\r
+ SK_MacLeftKey = 123,\r
+ SK_MacRightKey = 124,\r
+ SK_MacDownKey = 125,\r
+ SK_MacUpKey = 126,\r
+ \r
+ SK_Mac0Key = 0x52,\r
+ SK_Mac1Key = 0x53,\r
+ SK_Mac2Key = 0x54,\r
+ SK_Mac3Key = 0x55,\r
+ SK_Mac4Key = 0x56,\r
+ SK_Mac5Key = 0x57,\r
+ SK_Mac6Key = 0x58,\r
+ SK_Mac7Key = 0x59,\r
+ SK_Mac8Key = 0x5b,\r
+ SK_Mac9Key = 0x5c\r
+};\r
+ \r
+static SkKey raw2key(uint32_t raw)\r
+{\r
+ static const struct {\r
+ uint32_t fRaw;\r
+ SkKey fKey;\r
+ } gKeys[] = {\r
+ { SK_MacUpKey, kUp_SkKey },\r
+ { SK_MacDownKey, kDown_SkKey },\r
+ { SK_MacLeftKey, kLeft_SkKey },\r
+ { SK_MacRightKey, kRight_SkKey },\r
+ { SK_MacReturnKey, kOK_SkKey },\r
+ { SK_MacDeleteKey, kBack_SkKey },\r
+ { SK_MacEndKey, kEnd_SkKey },\r
+ { SK_Mac0Key, k0_SkKey },\r
+ { SK_Mac1Key, k1_SkKey },\r
+ { SK_Mac2Key, k2_SkKey },\r
+ { SK_Mac3Key, k3_SkKey },\r
+ { SK_Mac4Key, k4_SkKey },\r
+ { SK_Mac5Key, k5_SkKey },\r
+ { SK_Mac6Key, k6_SkKey },\r
+ { SK_Mac7Key, k7_SkKey },\r
+ { SK_Mac8Key, k8_SkKey },\r
+ { SK_Mac9Key, k9_SkKey }\r
+ };\r
+ \r
+ for (unsigned i = 0; i < SK_ARRAY_COUNT(gKeys); i++)\r
+ if (gKeys[i].fRaw == raw)\r
+ return gKeys[i].fKey;\r
+ return kNONE_SkKey;\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////////////\r
+\r
+void SkEvent::SignalNonEmptyQueue()\r
+{\r
+// post_skmacevent();\r
+// SkDebugf("signal nonempty\n");\r
+}\r
+\r
+//static void sk_timer_proc(TMTask* rec)\r
+//{\r
+// SkEvent::ServiceQueueTimer();\r
+// SkDebugf("timer task fired\n");\r
+//}\r
+\r
+void SkEvent::SignalQueueTimer(SkMSec delay)\r
+{\r
+#if 0\r
+ if (gTMTaskPtr)\r
+ {\r
+ RemoveTimeTask((QElem*)gTMTaskPtr);\r
+ DisposeTimerUPP(gTMTaskPtr->tmAddr);\r
+ gTMTaskPtr = nil;\r
+ }\r
+ if (delay)\r
+ {\r
+ gTMTaskPtr = &gTMTaskRec;\r
+ memset(gTMTaskPtr, 0, sizeof(gTMTaskRec));\r
+ gTMTaskPtr->tmAddr = NewTimerUPP(sk_timer_proc);\r
+ OSErr err = InstallTimeTask((QElem*)gTMTaskPtr);\r
+// SkDebugf("installtimetask of %d returned %d\n", delay, err);\r
+ PrimeTimeTask((QElem*)gTMTaskPtr, delay);\r
+ }\r
+#endif\r
+}\r
+\r
+#endif\r
+\r