Mercurial > projects > dwt-win
comparison dwt/graphics/GC.d @ 117:25f88bf5a6df
Only one file was damaged
Backed out changeset 640928daee8c
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Mon, 11 Feb 2008 04:18:24 +0100 |
parents | 640928daee8c |
children | 3afcd4ddcf90 |
comparison
equal
deleted
inserted
replaced
115:640928daee8c | 117:25f88bf5a6df |
---|---|
551 /* | 551 /* |
552 * Feature in WinCE. ScrollWindowEx does not accept combined | 552 * Feature in WinCE. ScrollWindowEx does not accept combined |
553 * vertical and horizontal scrolling. The fix is to do a | 553 * vertical and horizontal scrolling. The fix is to do a |
554 * BitBlt and invalidate the appropriate source area. | 554 * BitBlt and invalidate the appropriate source area. |
555 */ | 555 */ |
556 if (res is 0 && OS.IsWinCE) { | 556 static if (OS.IsWinCE) { |
557 OS.BitBlt(handle, destX, destY, width, height, handle, srcX, srcY, OS.SRCCOPY); | 557 if (res is 0) { |
558 if (paint) { | 558 OS.BitBlt(handle, destX, destY, width, height, handle, srcX, srcY, OS.SRCCOPY); |
559 int deltaX = destX - srcX, deltaY = destY - srcY; | 559 if (paint) { |
560 bool disjoint = (destX + width < srcX) || (srcX + width < destX) || (destY + height < srcY) || (srcY + height < destY); | 560 int deltaX = destX - srcX, deltaY = destY - srcY; |
561 if (disjoint) { | 561 bool disjoint = (destX + width < srcX) || (srcX + width < destX) || (destY + height < srcY) || (srcY + height < destY); |
562 OS.InvalidateRect(hwnd, &lprcScroll, true); | 562 if (disjoint) { |
563 } else { | |
564 if (deltaX !is 0) { | |
565 int newX = destX - deltaX; | |
566 if (deltaX < 0) newX = destX + width; | |
567 OS.SetRect(&lprcScroll, newX, srcY, newX + Math.abs(deltaX), srcY + height); | |
568 OS.InvalidateRect(hwnd, &lprcScroll, true); | 563 OS.InvalidateRect(hwnd, &lprcScroll, true); |
569 } | 564 } else { |
570 if (deltaY !is 0) { | 565 if (deltaX !is 0) { |
571 int newY = destY - deltaY; | 566 int newX = destX - deltaX; |
572 if (deltaY < 0) newY = destY + height; | 567 if (deltaX < 0) newX = destX + width; |
573 OS.SetRect(&lprcScroll, srcX, newY, srcX + width, newY + Math.abs(deltaY)); | 568 OS.SetRect(&lprcScroll, newX, srcY, newX + Math.abs(deltaX), srcY + height); |
574 OS.InvalidateRect(hwnd, &lprcScroll, true); | 569 OS.InvalidateRect(hwnd, &lprcScroll, true); |
570 } | |
571 if (deltaY !is 0) { | |
572 int newY = destY - deltaY; | |
573 if (deltaY < 0) newY = destY + height; | |
574 OS.SetRect(&lprcScroll, srcX, newY, srcX + width, newY + Math.abs(deltaY)); | |
575 OS.InvalidateRect(hwnd, &lprcScroll, true); | |
576 } | |
575 } | 577 } |
576 } | 578 } |
577 } | 579 } |
578 } | 580 } |
579 } | 581 } |
766 /* | 768 /* |
767 * Feature in WinCE. The function Arc is not present in the | 769 * Feature in WinCE. The function Arc is not present in the |
768 * WinCE SDK. The fix is to emulate arc drawing by using | 770 * WinCE SDK. The fix is to emulate arc drawing by using |
769 * Polyline. | 771 * Polyline. |
770 */ | 772 */ |
771 if (OS.IsWinCE) { | 773 static if (OS.IsWinCE) { |
772 /* compute arc with a simple linear interpolation */ | 774 /* compute arc with a simple linear interpolation */ |
773 if (arcAngle < 0) { | 775 if (arcAngle < 0) { |
774 startAngle += arcAngle; | 776 startAngle += arcAngle; |
775 arcAngle = -arcAngle; | 777 arcAngle = -arcAngle; |
776 } | 778 } |
1055 return; | 1057 return; |
1056 } | 1058 } |
1057 | 1059 |
1058 /* Get the icon info */ | 1060 /* Get the icon info */ |
1059 ICONINFO srcIconInfo; | 1061 ICONINFO srcIconInfo; |
1060 if (OS.IsWinCE) { | 1062 static if (OS.IsWinCE) { |
1061 Image.GetIconInfo(srcImage, &srcIconInfo); | 1063 Image.GetIconInfo(srcImage, &srcIconInfo); |
1062 } else { | 1064 } else { |
1063 OS.GetIconInfo(srcImage.handle, &srcIconInfo); | 1065 OS.GetIconInfo(srcImage.handle, &srcIconInfo); |
1064 } | 1066 } |
1065 | 1067 |
1107 newIconInfo.hbmColor = OS.CreateCompatibleBitmap(srcHdc, destWidth, destHeight); | 1109 newIconInfo.hbmColor = OS.CreateCompatibleBitmap(srcHdc, destWidth, destHeight); |
1108 if (newIconInfo.hbmColor is null) DWT.error(DWT.ERROR_NO_HANDLES); | 1110 if (newIconInfo.hbmColor is null) DWT.error(DWT.ERROR_NO_HANDLES); |
1109 auto oldDestBitmap = OS.SelectObject(dstHdc, newIconInfo.hbmColor); | 1111 auto oldDestBitmap = OS.SelectObject(dstHdc, newIconInfo.hbmColor); |
1110 bool stretch = !simple && (srcWidth !is destWidth || srcHeight !is destHeight); | 1112 bool stretch = !simple && (srcWidth !is destWidth || srcHeight !is destHeight); |
1111 if (stretch) { | 1113 if (stretch) { |
1112 if (!OS.IsWinCE) OS.SetStretchBltMode(dstHdc, OS.COLORONCOLOR); | 1114 static if (!OS.IsWinCE) OS.SetStretchBltMode(dstHdc, OS.COLORONCOLOR); |
1113 OS.StretchBlt(dstHdc, 0, 0, destWidth, destHeight, srcHdc, srcX, srcColorY, srcWidth, srcHeight, OS.SRCCOPY); | 1115 OS.StretchBlt(dstHdc, 0, 0, destWidth, destHeight, srcHdc, srcX, srcColorY, srcWidth, srcHeight, OS.SRCCOPY); |
1114 } else { | 1116 } else { |
1115 OS.BitBlt(dstHdc, 0, 0, destWidth, destHeight, srcHdc, srcX, srcColorY, OS.SRCCOPY); | 1117 OS.BitBlt(dstHdc, 0, 0, destWidth, destHeight, srcHdc, srcX, srcColorY, OS.SRCCOPY); |
1116 } | 1118 } |
1117 | 1119 |
1334 auto tempHdc = OS.CreateCompatibleDC(handle); | 1336 auto tempHdc = OS.CreateCompatibleDC(handle); |
1335 auto tempDib = Image.createDIB(destWidth, destHeight, 32); | 1337 auto tempDib = Image.createDIB(destWidth, destHeight, 32); |
1336 if (tempDib is null) DWT.error(DWT.ERROR_NO_HANDLES); | 1338 if (tempDib is null) DWT.error(DWT.ERROR_NO_HANDLES); |
1337 auto oldTempBitmap = OS.SelectObject(tempHdc, tempDib); | 1339 auto oldTempBitmap = OS.SelectObject(tempHdc, tempDib); |
1338 if (!simple && (srcWidth !is destWidth || srcHeight !is destHeight)) { | 1340 if (!simple && (srcWidth !is destWidth || srcHeight !is destHeight)) { |
1339 if (!OS.IsWinCE) OS.SetStretchBltMode(memHdc, OS.COLORONCOLOR); | 1341 static if (!OS.IsWinCE) OS.SetStretchBltMode(memHdc, OS.COLORONCOLOR); |
1340 OS.StretchBlt(tempHdc, 0, 0, destWidth, destHeight, memHdc, 0, 0, srcWidth, srcHeight, OS.SRCCOPY); | 1342 OS.StretchBlt(tempHdc, 0, 0, destWidth, destHeight, memHdc, 0, 0, srcWidth, srcHeight, OS.SRCCOPY); |
1341 } else { | 1343 } else { |
1342 OS.BitBlt(tempHdc, 0, 0, destWidth, destHeight, memHdc, 0, 0, OS.SRCCOPY); | 1344 OS.BitBlt(tempHdc, 0, 0, destWidth, destHeight, memHdc, 0, 0, OS.SRCCOPY); |
1343 } | 1345 } |
1344 OS.BitBlt(memHdc, 0, 0, destWidth, destHeight, tempHdc, 0, 0, OS.SRCCOPY); | 1346 OS.BitBlt(memHdc, 0, 0, destWidth, destHeight, tempHdc, 0, 0, OS.SRCCOPY); |
1345 OS.SelectObject(tempHdc, oldTempBitmap); | 1347 OS.SelectObject(tempHdc, oldTempBitmap); |
1346 OS.DeleteObject(tempDib); | 1348 OS.DeleteObject(tempDib); |
1347 OS.DeleteDC(tempHdc); | 1349 OS.DeleteDC(tempHdc); |
1348 } else { | 1350 } else { |
1349 if (!simple && (srcWidth !is destWidth || srcHeight !is destHeight)) { | 1351 if (!simple && (srcWidth !is destWidth || srcHeight !is destHeight)) { |
1350 if (!OS.IsWinCE) OS.SetStretchBltMode(memHdc, OS.COLORONCOLOR); | 1352 static if (!OS.IsWinCE) OS.SetStretchBltMode(memHdc, OS.COLORONCOLOR); |
1351 OS.StretchBlt(memHdc, 0, 0, destWidth, destHeight, memHdc, 0, 0, srcWidth, srcHeight, OS.SRCCOPY); | 1353 OS.StretchBlt(memHdc, 0, 0, destWidth, destHeight, memHdc, 0, 0, srcWidth, srcHeight, OS.SRCCOPY); |
1352 } else { | 1354 } else { |
1353 OS.BitBlt(memHdc, 0, 0, destWidth, destHeight, memHdc, 0, 0, OS.SRCCOPY); | 1355 OS.BitBlt(memHdc, 0, 0, destWidth, destHeight, memHdc, 0, 0, OS.SRCCOPY); |
1354 } | 1356 } |
1355 } | 1357 } |
1410 auto clip = OS.CreateRectRgn(0, 0, 0, 0); | 1412 auto clip = OS.CreateRectRgn(0, 0, 0, 0); |
1411 int result = OS.GetClipRgn(handle, clip); | 1413 int result = OS.GetClipRgn(handle, clip); |
1412 if (result is 1) OS.CombineRgn(rgn, rgn, clip, OS.RGN_AND); | 1414 if (result is 1) OS.CombineRgn(rgn, rgn, clip, OS.RGN_AND); |
1413 OS.SelectClipRgn(handle, rgn); | 1415 OS.SelectClipRgn(handle, rgn); |
1414 int rop2 = 0; | 1416 int rop2 = 0; |
1415 if (!OS.IsWinCE) { | 1417 static if (!OS.IsWinCE) { |
1416 rop2 = OS.GetROP2(handle); | 1418 rop2 = OS.GetROP2(handle); |
1417 } else { | 1419 } else { |
1418 rop2 = OS.SetROP2 (handle, OS.R2_COPYPEN); | 1420 rop2 = OS.SetROP2 (handle, OS.R2_COPYPEN); |
1419 OS.SetROP2 (handle, rop2); | 1421 OS.SetROP2 (handle, rop2); |
1420 } | 1422 } |
1421 int dwRop = rop2 is OS.R2_XORPEN ? OS.SRCINVERT : OS.SRCCOPY; | 1423 int dwRop = rop2 is OS.R2_XORPEN ? OS.SRCINVERT : OS.SRCCOPY; |
1422 if (!simple && (srcWidth !is destWidth || srcHeight !is destHeight)) { | 1424 if (!simple && (srcWidth !is destWidth || srcHeight !is destHeight)) { |
1423 int mode = 0; | 1425 int mode = 0; |
1424 if (!OS.IsWinCE) mode = OS.SetStretchBltMode(handle, OS.COLORONCOLOR); | 1426 static if (!OS.IsWinCE) mode = OS.SetStretchBltMode(handle, OS.COLORONCOLOR); |
1425 OS.StretchBlt(handle, destX, destY, destWidth, destHeight, srcHdc, srcX, srcY, srcWidth, srcHeight, dwRop); | 1427 OS.StretchBlt(handle, destX, destY, destWidth, destHeight, srcHdc, srcX, srcY, srcWidth, srcHeight, dwRop); |
1426 if (!OS.IsWinCE) OS.SetStretchBltMode(handle, mode); | 1428 static if (!OS.IsWinCE) OS.SetStretchBltMode(handle, mode); |
1427 } else { | 1429 } else { |
1428 OS.BitBlt(handle, destX, destY, destWidth, destHeight, srcHdc, srcX, srcY, dwRop); | 1430 OS.BitBlt(handle, destX, destY, destWidth, destHeight, srcHdc, srcX, srcY, dwRop); |
1429 } | 1431 } |
1430 OS.SelectClipRgn(handle, result is 1 ? clip : null); | 1432 OS.SelectClipRgn(handle, result is 1 ? clip : null); |
1431 OS.DeleteObject(clip); | 1433 OS.DeleteObject(clip); |
1456 oldBkColor = OS.SetBkColor(handle, 0xFFFFFF); | 1458 oldBkColor = OS.SetBkColor(handle, 0xFFFFFF); |
1457 oldTextColor = OS.SetTextColor(handle, 0); | 1459 oldTextColor = OS.SetTextColor(handle, 0); |
1458 } | 1460 } |
1459 if (!simple && (srcWidth !is destWidth || srcHeight !is destHeight)) { | 1461 if (!simple && (srcWidth !is destWidth || srcHeight !is destHeight)) { |
1460 int mode = 0; | 1462 int mode = 0; |
1461 if (!OS.IsWinCE) mode = OS.SetStretchBltMode(handle, OS.COLORONCOLOR); | 1463 static if (!OS.IsWinCE) mode = OS.SetStretchBltMode(handle, OS.COLORONCOLOR); |
1462 OS.StretchBlt(destHdc, x, y, destWidth, destHeight, srcHdc, srcX, srcColorY, srcWidth, srcHeight, OS.SRCINVERT); | 1464 OS.StretchBlt(destHdc, x, y, destWidth, destHeight, srcHdc, srcX, srcColorY, srcWidth, srcHeight, OS.SRCINVERT); |
1463 OS.SelectObject(srcHdc, srcMask); | 1465 OS.SelectObject(srcHdc, srcMask); |
1464 OS.StretchBlt(destHdc, x, y, destWidth, destHeight, srcHdc, srcX, srcY, srcWidth, srcHeight, OS.SRCAND); | 1466 OS.StretchBlt(destHdc, x, y, destWidth, destHeight, srcHdc, srcX, srcY, srcWidth, srcHeight, OS.SRCAND); |
1465 OS.SelectObject(srcHdc, srcColor); | 1467 OS.SelectObject(srcHdc, srcColor); |
1466 OS.StretchBlt(destHdc, x, y, destWidth, destHeight, srcHdc, srcX, srcColorY, srcWidth, srcHeight, OS.SRCINVERT); | 1468 OS.StretchBlt(destHdc, x, y, destWidth, destHeight, srcHdc, srcX, srcColorY, srcWidth, srcHeight, OS.SRCINVERT); |
1467 if (!OS.IsWinCE) OS.SetStretchBltMode(handle, mode); | 1469 static if (!OS.IsWinCE) OS.SetStretchBltMode(handle, mode); |
1468 } else { | 1470 } else { |
1469 OS.BitBlt(destHdc, x, y, destWidth, destHeight, srcHdc, srcX, srcColorY, OS.SRCINVERT); | 1471 OS.BitBlt(destHdc, x, y, destWidth, destHeight, srcHdc, srcX, srcColorY, OS.SRCINVERT); |
1470 OS.SetTextColor(destHdc, 0); | 1472 OS.SetTextColor(destHdc, 0); |
1471 OS.SelectObject(srcHdc, srcMask); | 1473 OS.SelectObject(srcHdc, srcMask); |
1472 OS.BitBlt(destHdc, x, y, destWidth, destHeight, srcHdc, srcX, srcY, OS.SRCAND); | 1474 OS.BitBlt(destHdc, x, y, destWidth, destHeight, srcHdc, srcX, srcY, OS.SRCAND); |
1496 auto oldSrcBitmap = OS.SelectObject(srcHdc, hBitmap); | 1498 auto oldSrcBitmap = OS.SelectObject(srcHdc, hBitmap); |
1497 byte[] originalColors = null; | 1499 byte[] originalColors = null; |
1498 if (bm.bmBitsPixel <= 8) { | 1500 if (bm.bmBitsPixel <= 8) { |
1499 if (isDib) { | 1501 if (isDib) { |
1500 /* Palette-based DIBSECTION */ | 1502 /* Palette-based DIBSECTION */ |
1501 if (OS.IsWinCE) { | 1503 static if (OS.IsWinCE) { |
1502 byte* pBits = cast(byte*)bm.bmBits; | 1504 byte* pBits = cast(byte*)bm.bmBits; |
1503 //OS.MoveMemory(pBits, bm.bmBits, 1); | 1505 //OS.MoveMemory(pBits, bm.bmBits, 1); |
1504 byte oldValue = pBits[0]; | 1506 byte oldValue = pBits[0]; |
1505 int mask = (0xFF << (8 - bm.bmBitsPixel)) & 0x00FF; | 1507 int mask = (0xFF << (8 - bm.bmBitsPixel)) & 0x00FF; |
1506 pBits[0] = cast(byte)((srcImage.transparentPixel << (8 - bm.bmBitsPixel)) | (pBits[0] & ~mask)); | 1508 pBits[0] = cast(byte)((srcImage.transparentPixel << (8 - bm.bmBitsPixel)) | (pBits[0] & ~mask)); |
1547 bmiHeader.biSize = BITMAPINFOHEADER.sizeof; | 1549 bmiHeader.biSize = BITMAPINFOHEADER.sizeof; |
1548 bmiHeader.biPlanes = bm.bmPlanes; | 1550 bmiHeader.biPlanes = bm.bmPlanes; |
1549 bmiHeader.biBitCount = bm.bmBitsPixel; | 1551 bmiHeader.biBitCount = bm.bmBitsPixel; |
1550 byte[] bmi = new byte[BITMAPINFOHEADER.sizeof + numColors * 4]; | 1552 byte[] bmi = new byte[BITMAPINFOHEADER.sizeof + numColors * 4]; |
1551 bmi[] = (cast(byte*)&bmiHeader)[ 0 .. BITMAPINFOHEADER.sizeof ]; | 1553 bmi[] = (cast(byte*)&bmiHeader)[ 0 .. BITMAPINFOHEADER.sizeof ]; |
1552 if (OS.IsWinCE) DWT.error(DWT.ERROR_NOT_IMPLEMENTED); | 1554 static if (OS.IsWinCE) DWT.error(DWT.ERROR_NOT_IMPLEMENTED); |
1553 OS.GetDIBits(srcHdc, srcImage.handle, 0, 0, null, cast(BITMAPINFO*)bmi.ptr, OS.DIB_RGB_COLORS); | 1555 OS.GetDIBits(srcHdc, srcImage.handle, 0, 0, null, cast(BITMAPINFO*)bmi.ptr, OS.DIB_RGB_COLORS); |
1554 int offset = BITMAPINFOHEADER.sizeof + 4 * srcImage.transparentPixel; | 1556 int offset = BITMAPINFOHEADER.sizeof + 4 * srcImage.transparentPixel; |
1555 transRed = bmi[offset + 2] & 0xFF; | 1557 transRed = bmi[offset + 2] & 0xFF; |
1556 transGreen = bmi[offset + 1] & 0xFF; | 1558 transGreen = bmi[offset + 1] & 0xFF; |
1557 transBlue = bmi[offset] & 0xFF; | 1559 transBlue = bmi[offset] & 0xFF; |
1608 auto tempHdc = OS.CreateCompatibleDC(handle); | 1610 auto tempHdc = OS.CreateCompatibleDC(handle); |
1609 auto tempBitmap = OS.CreateCompatibleBitmap(handle, destWidth, destHeight); | 1611 auto tempBitmap = OS.CreateCompatibleBitmap(handle, destWidth, destHeight); |
1610 auto oldTempBitmap = OS.SelectObject(tempHdc, tempBitmap); | 1612 auto oldTempBitmap = OS.SelectObject(tempHdc, tempBitmap); |
1611 OS.BitBlt(tempHdc, 0, 0, destWidth, destHeight, handle, destX, destY, OS.SRCCOPY); | 1613 OS.BitBlt(tempHdc, 0, 0, destWidth, destHeight, handle, destX, destY, OS.SRCCOPY); |
1612 if (!simple && (srcWidth !is destWidth || srcHeight !is destHeight)) { | 1614 if (!simple && (srcWidth !is destWidth || srcHeight !is destHeight)) { |
1613 if (!OS.IsWinCE) OS.SetStretchBltMode(tempHdc, OS.COLORONCOLOR); | 1615 static if (!OS.IsWinCE) OS.SetStretchBltMode(tempHdc, OS.COLORONCOLOR); |
1614 OS.StretchBlt(tempHdc, 0, 0, destWidth, destHeight, srcHdc, srcX, srcY, srcWidth, srcHeight, OS.SRCINVERT); | 1616 OS.StretchBlt(tempHdc, 0, 0, destWidth, destHeight, srcHdc, srcX, srcY, srcWidth, srcHeight, OS.SRCINVERT); |
1615 OS.StretchBlt(tempHdc, 0, 0, destWidth, destHeight, maskHdc, srcX, srcY, srcWidth, srcHeight, OS.SRCAND); | 1617 OS.StretchBlt(tempHdc, 0, 0, destWidth, destHeight, maskHdc, srcX, srcY, srcWidth, srcHeight, OS.SRCAND); |
1616 OS.StretchBlt(tempHdc, 0, 0, destWidth, destHeight, srcHdc, srcX, srcY, srcWidth, srcHeight, OS.SRCINVERT); | 1618 OS.StretchBlt(tempHdc, 0, 0, destWidth, destHeight, srcHdc, srcX, srcY, srcWidth, srcHeight, OS.SRCINVERT); |
1617 } else { | 1619 } else { |
1618 OS.BitBlt(tempHdc, 0, 0, destWidth, destHeight, srcHdc, srcX, srcY, OS.SRCINVERT); | 1620 OS.BitBlt(tempHdc, 0, 0, destWidth, destHeight, srcHdc, srcX, srcY, OS.SRCINVERT); |
1635 | 1637 |
1636 void drawBitmap(Image srcImage, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, bool simple, BITMAP bm, int imgWidth, int imgHeight) { | 1638 void drawBitmap(Image srcImage, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, bool simple, BITMAP bm, int imgWidth, int imgHeight) { |
1637 auto srcHdc = OS.CreateCompatibleDC(handle); | 1639 auto srcHdc = OS.CreateCompatibleDC(handle); |
1638 auto oldSrcBitmap = OS.SelectObject(srcHdc, srcImage.handle); | 1640 auto oldSrcBitmap = OS.SelectObject(srcHdc, srcImage.handle); |
1639 int rop2 = 0; | 1641 int rop2 = 0; |
1640 if (!OS.IsWinCE) { | 1642 static if (!OS.IsWinCE) { |
1641 rop2 = OS.GetROP2(handle); | 1643 rop2 = OS.GetROP2(handle); |
1642 } else { | 1644 } else { |
1643 rop2 = OS.SetROP2 (handle, OS.R2_COPYPEN); | 1645 rop2 = OS.SetROP2 (handle, OS.R2_COPYPEN); |
1644 OS.SetROP2 (handle, rop2); | 1646 OS.SetROP2 (handle, rop2); |
1645 } | 1647 } |
1646 int dwRop = rop2 is OS.R2_XORPEN ? OS.SRCINVERT : OS.SRCCOPY; | 1648 int dwRop = rop2 is OS.R2_XORPEN ? OS.SRCINVERT : OS.SRCCOPY; |
1647 if (!simple && (srcWidth !is destWidth || srcHeight !is destHeight)) { | 1649 if (!simple && (srcWidth !is destWidth || srcHeight !is destHeight)) { |
1648 int mode = 0; | 1650 int mode = 0; |
1649 if (!OS.IsWinCE) mode = OS.SetStretchBltMode(handle, OS.COLORONCOLOR); | 1651 static if (!OS.IsWinCE) mode = OS.SetStretchBltMode(handle, OS.COLORONCOLOR); |
1650 OS.StretchBlt(handle, destX, destY, destWidth, destHeight, srcHdc, srcX, srcY, srcWidth, srcHeight, dwRop); | 1652 OS.StretchBlt(handle, destX, destY, destWidth, destHeight, srcHdc, srcX, srcY, srcWidth, srcHeight, dwRop); |
1651 if (!OS.IsWinCE) OS.SetStretchBltMode(handle, mode); | 1653 static if (!OS.IsWinCE) OS.SetStretchBltMode(handle, mode); |
1652 } else { | 1654 } else { |
1653 OS.BitBlt(handle, destX, destY, destWidth, destHeight, srcHdc, srcX, srcY, dwRop); | 1655 OS.BitBlt(handle, destX, destY, destWidth, destHeight, srcHdc, srcX, srcY, dwRop); |
1654 } | 1656 } |
1655 OS.SelectObject(srcHdc, oldSrcBitmap); | 1657 OS.SelectObject(srcHdc, oldSrcBitmap); |
1656 OS.DeleteDC(srcHdc); | 1658 OS.DeleteDC(srcHdc); |
1683 if (data.lineWidth !is 0 && data.lineWidth % 2 is 0) { | 1685 if (data.lineWidth !is 0 && data.lineWidth % 2 is 0) { |
1684 x1--; | 1686 x1--; |
1685 x2--; | 1687 x2--; |
1686 } | 1688 } |
1687 } | 1689 } |
1688 if (OS.IsWinCE) { | 1690 static if (OS.IsWinCE) { |
1689 int [] points = [x1, y1, x2, y2]; | 1691 int [] points = [x1, y1, x2, y2]; |
1690 OS.Polyline (handle, cast(POINT*)points.ptr, points.length / 2); | 1692 OS.Polyline (handle, cast(POINT*)points.ptr, points.length / 2); |
1691 } else { | 1693 } else { |
1692 OS.MoveToEx (handle, x1, y1, null); | 1694 OS.MoveToEx (handle, x1, y1, null); |
1693 OS.LineTo (handle, x2, y2); | 1695 OS.LineTo (handle, x2, y2); |
1983 return; | 1985 return; |
1984 } | 1986 } |
1985 if ((data.style & DWT.MIRRORED) !is 0) { | 1987 if ((data.style & DWT.MIRRORED) !is 0) { |
1986 if (data.lineWidth !is 0 && data.lineWidth % 2 is 0) x--; | 1988 if (data.lineWidth !is 0 && data.lineWidth % 2 is 0) x--; |
1987 } | 1989 } |
1988 if (OS.IsWinCE) { | 1990 static if (OS.IsWinCE) { |
1989 /* | 1991 /* |
1990 * Bug in WinCE PPC. On certain devices, RoundRect does not draw | 1992 * Bug in WinCE PPC. On certain devices, RoundRect does not draw |
1991 * all the pixels. The workaround is to draw a round rectangle | 1993 * all the pixels. The workaround is to draw a round rectangle |
1992 * using lines and arcs. | 1994 * using lines and arcs. |
1993 */ | 1995 */ |
2174 } | 2176 } |
2175 Gdip.StringFormat_delete(format); | 2177 Gdip.StringFormat_delete(format); |
2176 return; | 2178 return; |
2177 } | 2179 } |
2178 int rop2 = 0; | 2180 int rop2 = 0; |
2179 if (OS.IsWinCE) { | 2181 static if (OS.IsWinCE) { |
2180 rop2 = OS.SetROP2(handle, OS.R2_COPYPEN); | 2182 rop2 = OS.SetROP2(handle, OS.R2_COPYPEN); |
2181 OS.SetROP2(handle, rop2); | 2183 OS.SetROP2(handle, rop2); |
2182 } else { | 2184 } else { |
2183 rop2 = OS.GetROP2(handle); | 2185 rop2 = OS.GetROP2(handle); |
2184 } | 2186 } |
2398 if ((flags & DWT.DRAW_MNEMONIC) is 0) uFormat |= OS.DT_NOPREFIX; | 2400 if ((flags & DWT.DRAW_MNEMONIC) is 0) uFormat |= OS.DT_NOPREFIX; |
2399 if ((flags & DWT.DRAW_MNEMONIC) !is 0 && (data.uiState & OS.UISF_HIDEACCEL) !is 0) { | 2401 if ((flags & DWT.DRAW_MNEMONIC) !is 0 && (data.uiState & OS.UISF_HIDEACCEL) !is 0) { |
2400 uFormat |= OS.DT_HIDEPREFIX; | 2402 uFormat |= OS.DT_HIDEPREFIX; |
2401 } | 2403 } |
2402 int rop2 = 0; | 2404 int rop2 = 0; |
2403 if (OS.IsWinCE) { | 2405 static if (OS.IsWinCE) { |
2404 rop2 = OS.SetROP2(handle, OS.R2_COPYPEN); | 2406 rop2 = OS.SetROP2(handle, OS.R2_COPYPEN); |
2405 OS.SetROP2(handle, rop2); | 2407 OS.SetROP2(handle, rop2); |
2406 } else { | 2408 } else { |
2407 rop2 = OS.GetROP2(handle); | 2409 rop2 = OS.GetROP2(handle); |
2408 } | 2410 } |
2515 if ((data.style & DWT.MIRRORED) !is 0) x--; | 2517 if ((data.style & DWT.MIRRORED) !is 0) x--; |
2516 /* | 2518 /* |
2517 * Feature in WinCE. The function Pie is not present in the | 2519 * Feature in WinCE. The function Pie is not present in the |
2518 * WinCE SDK. The fix is to emulate it by using Polygon. | 2520 * WinCE SDK. The fix is to emulate it by using Polygon. |
2519 */ | 2521 */ |
2520 if (OS.IsWinCE) { | 2522 static if (OS.IsWinCE) { |
2521 /* compute arc with a simple linear interpolation */ | 2523 /* compute arc with a simple linear interpolation */ |
2522 if (arcAngle < 0) { | 2524 if (arcAngle < 0) { |
2523 startAngle += arcAngle; | 2525 startAngle += arcAngle; |
2524 arcAngle = -arcAngle; | 2526 arcAngle = -arcAngle; |
2525 } | 2527 } |
2649 * the device is a printer, GradientFill does not fill completely | 2651 * the device is a printer, GradientFill does not fill completely |
2650 * to the right edge of the rectangle. The fix is not to use | 2652 * to the right edge of the rectangle. The fix is not to use |
2651 * GradientFill for printer devices. | 2653 * GradientFill for printer devices. |
2652 */ | 2654 */ |
2653 int rop2 = 0; | 2655 int rop2 = 0; |
2654 if (OS.IsWinCE) { | 2656 static if (OS.IsWinCE) { |
2655 rop2 = OS.SetROP2(handle, OS.R2_COPYPEN); | 2657 rop2 = OS.SetROP2(handle, OS.R2_COPYPEN); |
2656 OS.SetROP2(handle, rop2); | 2658 OS.SetROP2(handle, rop2); |
2657 } else { | 2659 } else { |
2658 rop2 = OS.GetROP2(handle); | 2660 rop2 = OS.GetROP2(handle); |
2659 } | 2661 } |
2819 if (data.gdipGraphics !is null) { | 2821 if (data.gdipGraphics !is null) { |
2820 Gdip.Graphics_FillRectangle(data.gdipGraphics, data.gdipBrush, x, y, width, height); | 2822 Gdip.Graphics_FillRectangle(data.gdipGraphics, data.gdipBrush, x, y, width, height); |
2821 return; | 2823 return; |
2822 } | 2824 } |
2823 int rop2 = 0; | 2825 int rop2 = 0; |
2824 if (OS.IsWinCE) { | 2826 static if (OS.IsWinCE) { |
2825 rop2 = OS.SetROP2(handle, OS.R2_COPYPEN); | 2827 rop2 = OS.SetROP2(handle, OS.R2_COPYPEN); |
2826 OS.SetROP2(handle, rop2); | 2828 OS.SetROP2(handle, rop2); |
2827 } else { | 2829 } else { |
2828 rop2 = OS.GetROP2(handle); | 2830 rop2 = OS.GetROP2(handle); |
2829 } | 2831 } |
3265 * | 3267 * |
3266 * @since 3.1 | 3268 * @since 3.1 |
3267 */ | 3269 */ |
3268 public int getFillRule() { | 3270 public int getFillRule() { |
3269 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); | 3271 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
3270 if (OS.IsWinCE) return DWT.FILL_EVEN_ODD; | 3272 static if (OS.IsWinCE) return DWT.FILL_EVEN_ODD; |
3271 return OS.GetPolyFillMode(handle) is OS.WINDING ? DWT.FILL_WINDING : DWT.FILL_EVEN_ODD; | 3273 return OS.GetPolyFillMode(handle) is OS.WINDING ? DWT.FILL_WINDING : DWT.FILL_EVEN_ODD; |
3272 } | 3274 } |
3273 | 3275 |
3274 /** | 3276 /** |
3275 * Returns the font currently being used by the receiver | 3277 * Returns the font currently being used by the receiver |
3611 * </ul> | 3613 * </ul> |
3612 */ | 3614 */ |
3613 public bool getXORMode() { | 3615 public bool getXORMode() { |
3614 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); | 3616 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
3615 int rop2 = 0; | 3617 int rop2 = 0; |
3616 if (OS.IsWinCE) { | 3618 static if (OS.IsWinCE) { |
3617 rop2 = OS.SetROP2 (handle, OS.R2_COPYPEN); | 3619 rop2 = OS.SetROP2 (handle, OS.R2_COPYPEN); |
3618 OS.SetROP2 (handle, rop2); | 3620 OS.SetROP2 (handle, rop2); |
3619 } else { | 3621 } else { |
3620 rop2 = OS.GetROP2(handle); | 3622 rop2 = OS.GetROP2(handle); |
3621 } | 3623 } |
3689 RECT rect; | 3691 RECT rect; |
3690 OS.GetClientRect(data.hwnd, &rect); | 3692 OS.GetClientRect(data.hwnd, &rect); |
3691 width = rect.right - rect.left; | 3693 width = rect.right - rect.left; |
3692 } | 3694 } |
3693 POINT pt; | 3695 POINT pt; |
3694 if (!OS.IsWinCE) OS.GetWindowOrgEx (handle, &pt); | 3696 static if (!OS.IsWinCE) OS.GetWindowOrgEx (handle, &pt); |
3695 return Gdip.Matrix_new(-1, 0, 0, 1, width + 2 * pt.x, 0); | 3697 return Gdip.Matrix_new(-1, 0, 0, 1, width + 2 * pt.x, 0); |
3696 } | 3698 } |
3697 return Gdip.Matrix_new(1, 0, 0, 1, 0, 0); | 3699 return Gdip.Matrix_new(1, 0, 0, 1, 0, 0); |
3698 } | 3700 } |
3699 | 3701 |
4146 * | 4148 * |
4147 * @since 3.1 | 4149 * @since 3.1 |
4148 */ | 4150 */ |
4149 public void setFillRule(int rule) { | 4151 public void setFillRule(int rule) { |
4150 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); | 4152 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
4151 if (OS.IsWinCE) return; | 4153 static if (OS.IsWinCE) return; |
4152 int mode = OS.ALTERNATE; | 4154 int mode = OS.ALTERNATE; |
4153 switch (rule) { | 4155 switch (rule) { |
4154 case DWT.FILL_WINDING: mode = OS.WINDING; break; | 4156 case DWT.FILL_WINDING: mode = OS.WINDING; break; |
4155 case DWT.FILL_EVEN_ODD: mode = OS.ALTERNATE; break; | 4157 case DWT.FILL_EVEN_ODD: mode = OS.ALTERNATE; break; |
4156 default: | 4158 default: |