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: