Няшная / Говнокод #3766 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
inline Gdiplus::Color colorrefToGdiColor(COLORREF col, char alpha)
{
	return (static_cast<unsigned long>(static_cast<unsigned char>((col & Gdiplus::Color::RedMask) >> Gdiplus::Color::RedShift)) <<   Gdiplus::Color::BlueShift) | (static_cast<unsigned long>(static_cast<unsigned char>((col & Gdiplus::Color::GreenMask) >> Gdiplus::Color::GreenShift)) << Gdiplus::Color::GreenShift) | (static_cast<unsigned long>(static_cast<unsigned char>((col & Gdiplus::Color::BlueMask) >> Gdiplus::Color::BlueShift)) << Gdiplus::Color::RedShift) | (static_cast<unsigned long>(alpha) << Gdiplus::Color::AlphaShift);
}

Тихо себя ненавижу. Слава Б-г'у это всё выкидывается.

Запостил: Altravert Altravert, (Updated )

Комментарии (19) RSS

  • Хы, а причем БГ то тут, он менеджер, а не программист. Да и когда тысячи людей делают одно, подобные казусы будут.
    Ответить
    • Shift:

      2 a chiefly dialect : a change of clothes b (1) chiefly dialect : shirt (2) : a woman's slip or chemise (3) : a usually loose-fitting or semifitted dress

      И еще маски какие-то, чем они там вообще занимаются?
      Ответить
      • Там цвет хранится одной цифрой типа 0xAARRGGBB. Маски соответственно

        enum
        {
        AlphaShift = 24,
        RedShift = 16,
        GreenShift = 8,
        BlueShift = 0
        };

        enum
        {
        AlphaMask = 0xff000000,
        RedMask = 0x00ff0000,
        GreenMask = 0x0000ff00,
        BlueMask = 0x000000ff
        };

        Также там есть методы типа
        BYTE GetGreen() const { return (BYTE) (Argb >> GreenShift); }
        на которые студия естественно громко матерится (типа ты че, баран, большие типы режешь).
        Убожество в общем.
        Ответить
  • Вот в нашем Си такого не было.
    А что, #define уже отменили? Стандартная практика же:

    #define blabla (expression)
    void func()
    {
    // Use it
    }
    #undef blabla
    Ответить
    • Дефайны я не люблю. Использую, конечно, но стараюсь обходиться. Ну как-то отпадает желание, когда в WinGDI.h видишь
      #define RGB(r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g) )<<8))|(((DWORD)(BYTE)(b))<<16)))
      Ответить
      • Дает, что можно немного сократить код, поскольку у нас тут три с половиной одинаковых куска.
        expression в данном случае будет что-то вроде того куска со статик кастами. Параметром будут слова с масками и шифтами.

        андеф чтобы прибрать за собой. На всякий случай (особенно важно в заголовочных фйайлах). В большинстве случаев не укусит, но, имхо, все равно стóит.
        Ответить
  • Вообще, у Gdiplus::Color есть конструктор принимающий 4 BYTE
    статик касты можно смело выкидывать)

    inline Gdiplus::Color COLORREFToColor(COLORREF clr, int alpha = 255)
    {
    return Gdiplus::Color(alpha, GetRValue(clr), GetGValue(clr), GetBValue(clr));
    }
    Ответить
    • Я в курсе. Но -- но -- но -- ноубадикэрс) Не для гдишного цвета это должно было быть, а макросы я не помню почему отбросил.
      Черт, это было очень давно и мне давно очень стыдно)
      Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8