2010-08-23 Patrick Gansterer <paroga@paroga.com>
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 24 Aug 2010 03:04:18 +0000 (03:04 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 24 Aug 2010 03:04:18 +0000 (03:04 +0000)
        Reviewed by Adam Roben.

        Support all available biBitCount values in BitmapInfo
        https://bugs.webkit.org/show_bug.cgi?id=43724

        Add an enum with all possible values for biBitCount.
        Also remove explicit initialization of bmiHeader members,
        because that is already done in the constructor.

        * platform/win/BitmapInfo.cpp: Added property svn:eol-style.
        (WebCore::bitmapInfoForSize):
        (WebCore::BitmapInfo::create):
        (WebCore::BitmapInfo::createBottomUp):
        * platform/win/BitmapInfo.h: Added property svn:eol-style.
        (WebCore::BitmapInfo::):
        (WebCore::BitmapInfo::bytesPerLine):
        (WebCore::BitmapInfo::paddedBytesPerLine):
        (WebCore::BitmapInfo::paddedWidth):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::paint):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@65857 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/platform/win/BitmapInfo.cpp
WebCore/platform/win/BitmapInfo.h
WebCore/platform/win/PopupMenuWin.cpp

index a17ce52..98fcbbb 100644 (file)
@@ -1,3 +1,26 @@
+2010-08-23  Patrick Gansterer  <paroga@paroga.com>
+
+        Reviewed by Adam Roben.
+
+        Support all available biBitCount values in BitmapInfo
+        https://bugs.webkit.org/show_bug.cgi?id=43724
+
+        Add an enum with all possible values for biBitCount.
+        Also remove explicit initialization of bmiHeader members,
+        because that is already done in the constructor.
+
+        * platform/win/BitmapInfo.cpp: Added property svn:eol-style.
+        (WebCore::bitmapInfoForSize):
+        (WebCore::BitmapInfo::create):
+        (WebCore::BitmapInfo::createBottomUp):
+        * platform/win/BitmapInfo.h: Added property svn:eol-style.
+        (WebCore::BitmapInfo::):
+        (WebCore::BitmapInfo::bytesPerLine):
+        (WebCore::BitmapInfo::paddedBytesPerLine):
+        (WebCore::BitmapInfo::paddedWidth):
+        * platform/win/PopupMenuWin.cpp:
+        (WebCore::PopupMenuWin::paint):
+
 2010-08-23  Kent Tamura  <tkent@chromium.org>
 
         Unreviewed, build fix for r65852.
 
         Set bmiHeader.biSize only at constructor.
 
-        * platform/win/BitmapInfo.cpp: Added property svn:eol-style.
+        * platform/win/BitmapInfo.cpp:
         (WebCore::bitmapInfoForSize):
         (WebCore::BitmapInfo::create):
         (WebCore::BitmapInfo::createBottomUp):
-        * platform/win/BitmapInfo.h: Added property svn:eol-style.
+        * platform/win/BitmapInfo.h:
         (WebCore::BitmapInfo::is16bit):
         (WebCore::BitmapInfo::is32bit):
         (WebCore::BitmapInfo::width):
index 514f722..610a27e 100644 (file)
 
 namespace WebCore {
 
-BitmapInfo bitmapInfoForSize(int width, int height, WORD bitCount)
+BitmapInfo bitmapInfoForSize(int width, int height, BitmapInfo::BitCount bitCount)
 {
-    ASSERT_ARG(bitCount, bitCount == 16 || bitCount == 32);
-
     BitmapInfo bitmapInfo;
     bitmapInfo.bmiHeader.biWidth         = width;
     bitmapInfo.bmiHeader.biHeight        = height;
     bitmapInfo.bmiHeader.biPlanes        = 1;
     bitmapInfo.bmiHeader.biBitCount      = bitCount;
     bitmapInfo.bmiHeader.biCompression   = BI_RGB;
-    bitmapInfo.bmiHeader.biSizeImage     = 0;
-    bitmapInfo.bmiHeader.biXPelsPerMeter = 0;
-    bitmapInfo.bmiHeader.biYPelsPerMeter = 0;
-    bitmapInfo.bmiHeader.biClrUsed       = 0;
-    bitmapInfo.bmiHeader.biClrImportant  = 0;
 
     return bitmapInfo;
 }
@@ -58,12 +51,12 @@ BitmapInfo::BitmapInfo()
     bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
 }
 
-BitmapInfo BitmapInfo::create(const IntSize& size, WORD bitCount)
+BitmapInfo BitmapInfo::create(const IntSize& size, BitCount bitCount)
 {
     return bitmapInfoForSize(size.width(), size.height(), bitCount);
 }
 
-BitmapInfo BitmapInfo::createBottomUp(const IntSize& size, WORD bitCount)
+BitmapInfo BitmapInfo::createBottomUp(const IntSize& size, BitCount bitCount)
 {
     return bitmapInfoForSize(size.width(), -size.height(), bitCount);
 }
index d1c3319..caf1b31 100644 (file)
 namespace WebCore {
 
 struct BitmapInfo : public BITMAPINFO {
+    enum BitCount {
+        BitCount1 = 1,
+        BitCount4 = 4,
+        BitCount8 = 8,
+        BitCount16 = 16,
+        BitCount24 = 24,
+        BitCount32 = 32
+    };
+
     BitmapInfo();
-    static BitmapInfo create(const IntSize&, WORD bitCount = 32);
-    static BitmapInfo createBottomUp(const IntSize&, WORD bitCount = 32);
+    static BitmapInfo create(const IntSize&, BitCount bitCount = BitCount32);
+    static BitmapInfo createBottomUp(const IntSize&, BitCount bitCount = BitCount32);
 
     bool is16bit() const { return bmiHeader.biBitCount == 16; }
     bool is32bit() const { return bmiHeader.biBitCount == 32; }
     unsigned width() const { return abs(bmiHeader.biWidth); }
     unsigned height() const { return abs(bmiHeader.biHeight); }
     IntSize size() const { return IntSize(width(), height()); }
-    unsigned paddedWidth() const { return is16bit() ? (width() + 1) & ~0x1 : width(); }
+    unsigned bytesPerLine() const { return (width() * bmiHeader.biBitCount + 7) / 8; }
+    unsigned paddedBytesPerLine() const { return (bytesPerLine() + 3) & ~0x3; }
+    unsigned paddedWidth() const { return paddedBytesPerLine() * 8 / bmiHeader.biBitCount; }
     unsigned numPixels() const { return paddedWidth() * height(); }
-    unsigned paddedBytesPerLine() const { return is16bit() ? paddedWidth() * 2 : width() * 4; }
-    unsigned bytesPerLine() const { return width() * bmiHeader.biBitCount / 8; }};
+};
+
 } // namespace WebCore
 
 #endif // BitmapInfo_h
index aaadc53..6e22024 100644 (file)
@@ -581,7 +581,7 @@ void PopupMenuWin::paint(const IntRect& damageRect, HDC hdc)
     }
     if (!m_bmp) {
 #if OS(WINCE)
-        BitmapInfo bitmapInfo = BitmapInfo::createBottomUp(clientRect().size(), 16);
+        BitmapInfo bitmapInfo = BitmapInfo::createBottomUp(clientRect().size(), BitmapInfo::BitCount16);
 #else
         BitmapInfo bitmapInfo = BitmapInfo::createBottomUp(clientRect().size());
 #endif