Home | History | Annotate | Download | only in win
      1 /*
      2  * Copyright (C) 2009 Apple Inc. All Rights Reserved.
      3  * Copyright (C) 2009 Brent Fulgham
      4  * Copyright (C) 2007-2009 Torch Mobile, Inc. All Rights Reserved.
      5  * Copyright (C) 2010 Patrick Gansterer <paroga (at) paroga.com>
      6  *
      7  * Redistribution and use in source and binary forms, with or without
      8  * modification, are permitted provided that the following conditions
      9  * are met:
     10  * 1. Redistributions of source code must retain the above copyright
     11  *    notice, this list of conditions and the following disclaimer.
     12  * 2. Redistributions in binary form must reproduce the above copyright
     13  *    notice, this list of conditions and the following disclaimer in the
     14  *    documentation and/or other materials provided with the distribution.
     15  *
     16  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
     17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     19  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
     20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27  */
     28 
     29 #ifndef BitmapInfo_h
     30 #define BitmapInfo_h
     31 
     32 #include "IntSize.h"
     33 #include <windows.h>
     34 
     35 namespace WebCore {
     36 
     37 struct BitmapInfo : public BITMAPINFO {
     38     enum BitCount {
     39         BitCount1 = 1,
     40         BitCount4 = 4,
     41         BitCount8 = 8,
     42         BitCount16 = 16,
     43         BitCount24 = 24,
     44         BitCount32 = 32
     45     };
     46 
     47     BitmapInfo();
     48     static BitmapInfo create(const IntSize&, BitCount bitCount = BitCount32);
     49     static BitmapInfo createBottomUp(const IntSize&, BitCount bitCount = BitCount32);
     50 
     51     bool is16bit() const { return bmiHeader.biBitCount == 16; }
     52     bool is32bit() const { return bmiHeader.biBitCount == 32; }
     53     unsigned width() const { return abs(bmiHeader.biWidth); }
     54     unsigned height() const { return abs(bmiHeader.biHeight); }
     55     IntSize size() const { return IntSize(width(), height()); }
     56     unsigned bytesPerLine() const { return (width() * bmiHeader.biBitCount + 7) / 8; }
     57     unsigned paddedBytesPerLine() const { return (bytesPerLine() + 3) & ~0x3; }
     58     unsigned paddedWidth() const { return paddedBytesPerLine() * 8 / bmiHeader.biBitCount; }
     59     unsigned numPixels() const { return paddedWidth() * height(); }
     60 };
     61 
     62 } // namespace WebCore
     63 
     64 #endif // BitmapInfo_h
     65