[haiku-commits] haiku: hrev50841 - src/apps/deskbar

  • From: jscipione@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sun, 8 Jan 2017 11:41:46 +0100 (CET)

hrev50841 adds 1 changeset to branch 'master'
old head: 3d870da3cb219ac0740a9d2cab0d7fc1e5b5f28d
new head: 066137eb05fc965261d6e50f24e41b9dcf79a5a7
overview: 
http://cgit.haiku-os.org/haiku/log/?qt=range&q=066137eb05fc+%5E3d870da3cb21

----------------------------------------------------------------------------

066137eb05fc: Deskbar: Scale cut-off leaf icon in horizontal mode
  
  Fixes #8505 restoring the aesthetic integrity of the cut-off leaf.
  
  Add vertically & horizontally centered, whole vector icon to rdef.
  
  Reformat BarMenuTitle.h rename header guard from BARMENUTITLEH to
  BAR_MENU_TITLE_H.
  
  Created TDeskbarMenuTitle subclass which deals with Deskbar menu
  item stuff like getting the icon from vector data and pushing the
  leaf down a few pixels to cut off the leaf (maintaining its aesthetic
  integrity).
  
  Made TBarMenuTitle methods virtual. Remove unused expando constructor
  parameter and private variable.
  
  Add a TODO to scale the bitmap if we can't find any vector icon data.
  With non-vector bitmap it behaves same as before this commit in
  horizontal mode.
  
  Adjust kMinimumTrayWidth to restore Deskbar's minimum width to its
  classic value since days of yore, 143px. This, perhaps not coincidently,
  is exactly the amount fit 7 replicant icons. Update constants in the
  code to reflect this reality. Adjustable width coming soon.
  
  replace dynamic_cast<TBarApp*>(be_app) with a static_cast in 1 place.

                                     [ John Scipione <jscipione@xxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev50841
Commit:      066137eb05fc965261d6e50f24e41b9dcf79a5a7
URL:         http://cgit.haiku-os.org/haiku/commit/?id=066137eb05fc
Author:      John Scipione <jscipione@xxxxxxxxx>
Date:        Sun Jan  8 02:22:34 2017 UTC

Ticket:      https://dev.haiku-os.org/ticket/8505

----------------------------------------------------------------------------

12 files changed, 185 insertions(+), 53 deletions(-)
src/apps/deskbar/BarApp.cpp         |   1 -
src/apps/deskbar/BarMenuBar.cpp     |   8 ++-
src/apps/deskbar/BarMenuBar.h       |   8 ++-
src/apps/deskbar/BarMenuTitle.cpp   | 106 +++++++++++++++++++++++++++++++-
src/apps/deskbar/BarMenuTitle.h     |  48 ++++++++++-----
src/apps/deskbar/BarView.cpp        |   5 +-
src/apps/deskbar/ExpandoMenuBar.cpp |  24 ++++----
src/apps/deskbar/ExpandoMenuBar.h   |   1 -
src/apps/deskbar/StatusView.cpp     |  11 +---
src/apps/deskbar/StatusView.h       |  12 ++--
src/apps/deskbar/icons.h            |   1 +
src/apps/deskbar/icons.rdef         |  13 ++++

----------------------------------------------------------------------------

diff --git a/src/apps/deskbar/BarApp.cpp b/src/apps/deskbar/BarApp.cpp
index d196bd8..2187d7f 100644
--- a/src/apps/deskbar/BarApp.cpp
+++ b/src/apps/deskbar/BarApp.cpp
@@ -66,7 +66,6 @@ All rights reserved.
 #include "Switcher.h"
 #include "Utilities.h"
 
-#include "icons.h"
 #include "tracker_private.h"
 
 
diff --git a/src/apps/deskbar/BarMenuBar.cpp b/src/apps/deskbar/BarMenuBar.cpp
index 2189d12..2211d6b 100644
--- a/src/apps/deskbar/BarMenuBar.cpp
+++ b/src/apps/deskbar/BarMenuBar.cpp
@@ -43,6 +43,7 @@ All rights reserved.
 
 #include "icons.h"
 
+#include "BarApp.h"
 #include "BarMenuTitle.h"
 #include "BarView.h"
 #include "BarWindow.h"
@@ -108,8 +109,9 @@ TBarMenuBar::TBarMenuBar(BRect frame, const char* name, 
TBarView* barView)
        TDeskbarMenu* beMenu = new TDeskbarMenu(barView);
        TBarWindow::SetDeskbarMenu(beMenu);
 
-       fDeskbarMenuItem = new TBarMenuTitle(0.0f, 0.0f,
-               AppResSet()->FindBitmap(B_MESSAGE_TYPE, R_LeafLogoBitmap), 
beMenu);
+       fDeskbarMenuItem = new TDeskbarMenuTitle(frame.Width(), frame.Height(),
+               NULL, beMenu);
+       fDeskbarMenuItem->FetchIcon();
        AddItem(fDeskbarMenuItem);
 }
 
@@ -141,6 +143,8 @@ TBarMenuBar::SmartResize(float width, float height)
                        fAppListMenuItem->SetContentSize(width / count, height);
        }
 
+       fDeskbarMenuItem->FetchIcon();
+
        InvalidateLayout();
 }
 
diff --git a/src/apps/deskbar/BarMenuBar.h b/src/apps/deskbar/BarMenuBar.h
index f470d38..0a16c72 100644
--- a/src/apps/deskbar/BarMenuBar.h
+++ b/src/apps/deskbar/BarMenuBar.h
@@ -47,6 +47,7 @@ All rights reserved.
 
 class TBarMenuTitle;
 class TBarView;
+class TDeskbarMenuTitle;
 
 class TSeparatorItem : public BSeparatorItem {
 public:
@@ -63,9 +64,10 @@ public:
 
        virtual void                    MouseMoved(BPoint where, uint32 code,
                                                                const BMessage* 
message);
-       virtual void                    Draw(BRect);
 
+       virtual void                    Draw(BRect);
                        void                    DrawBackground(BRect);
+
                        void                    SmartResize(float width = -1.0f,
                                                                float height = 
-1.0f);
 
@@ -79,9 +81,11 @@ public:
                                                                bool (* 
hookfunction)(BMenu*, void*),
                                                                void* state, 
bool both = false);
 
+       TDeskbarMenuTitle*              DeskbarMenuTitle() { return 
fDeskbarMenuItem; };
+
 private:
                        TBarView*               fBarView;
-                       TBarMenuTitle*  fDeskbarMenuItem;
+               TDeskbarMenuTitle*      fDeskbarMenuItem;
                        TBarMenuTitle*  fAppListMenuItem;
                        TSeparatorItem* fSeparatorItem;
 };
diff --git a/src/apps/deskbar/BarMenuTitle.cpp 
b/src/apps/deskbar/BarMenuTitle.cpp
index 48b1bf7..bd589f4 100644
--- a/src/apps/deskbar/BarMenuTitle.cpp
+++ b/src/apps/deskbar/BarMenuTitle.cpp
@@ -36,22 +36,28 @@ All rights reserved.
 
 #include "BarMenuTitle.h"
 
+#include <algorithm>
+
 #include <Bitmap.h>
 #include <ControlLook.h>
 #include <Debug.h>
+#include <IconUtils.h>
 
 #include "BarApp.h"
 #include "BarView.h"
 #include "BarWindow.h"
+#include "ResourceSet.h"
+#include "StatusView.h"
+
+#include "icons.h"
 
 
 TBarMenuTitle::TBarMenuTitle(float width, float height, const BBitmap* icon,
-       BMenu* menu, bool expando)
+       BMenu* menu)
        :
        BMenuItem(menu, new BMessage(B_REFS_RECEIVED)),
        fWidth(width),
        fHeight(height),
-       fInExpando(expando),
        fIcon(icon)
 {
 }
@@ -123,7 +129,7 @@ TBarMenuTitle::DrawContent()
 
        float widthOffset = rintf((frame.Width() - iconRect.Width()) / 2);
        float heightOffset = rintf((frame.Height() - iconRect.Height()) / 2);
-       iconRect.OffsetBy(widthOffset - 1.0f, heightOffset + 2.0f);
+       iconRect.OffsetBy(widthOffset - 1, heightOffset - 1);
 
        menu->DrawBitmapAsync(fIcon, iconRect);
 }
@@ -144,3 +150,97 @@ TBarMenuTitle::Invoke(BMessage* message)
 
        return BMenuItem::Invoke(message);
 }
+
+
+void
+TBarMenuTitle::SetIcon(const BBitmap* icon)
+{
+       delete fIcon;
+       fIcon = icon;
+}
+
+
+//     #pragma mark - TDeskbarMenuTitle
+
+
+const int32 kIconSizeCutoff = 48;
+       // icon size to stop increasing logo width in horizontal mode
+
+
+TDeskbarMenuTitle::TDeskbarMenuTitle(float width, float height,
+       const BBitmap* icon, BMenu* menu)
+       :
+       TBarMenuTitle(width, height, icon, menu),
+       fVectorIconData(NULL),
+       fVectorIconSize(0)
+{
+}
+
+
+void
+TDeskbarMenuTitle::DrawContent()
+{
+       if (fIcon == NULL)
+               return;
+
+       BMenu* menu = Menu();
+       BRect frame(Frame());
+       BRect iconRect(fIcon->Bounds());
+
+       menu->SetDrawingMode(B_OP_ALPHA);
+       iconRect.OffsetTo(frame.LeftTop());
+
+       float widthOffset = rintf((frame.Width() - iconRect.Width()) / 2);
+       float heightOffset = rintf((frame.Height() - iconRect.Height()) / 2);
+
+       // move bitmap down a few pixels so leaf gets cut off
+       heightOffset += 3;
+
+       iconRect.OffsetBy(widthOffset - 1, heightOffset - 1);
+
+       menu->DrawBitmapAsync(fIcon, iconRect);
+}
+
+
+const BBitmap*
+TDeskbarMenuTitle::FetchIcon()
+{
+       if (fVectorIconData == NULL || fVectorIconSize == 0) {
+               // haven't fetched vector icon data yet, fetch it
+               fVectorIconData = (const uint8*)AppResSet()->FindResource(
+                       B_VECTOR_ICON_TYPE, R_LeafLogoVector, &fVectorIconSize);
+       }
+
+       float width = CalcIconWidth();
+       BBitmap* icon = new BBitmap(BRect(0, 0, width - 1, width - 1),
+               B_RGBA32);
+       if (fVectorIconData != NULL && fVectorIconSize > 0
+               && BIconUtils::GetVectorIcon(fVectorIconData, fVectorIconSize, 
icon)
+                       == B_OK) {
+               // rasterized vector icon into a bitmap
+               fIcon = icon;
+       } else {
+               // fetched bitmap instead
+               fIcon = AppResSet()->FindBitmap(B_MESSAGE_TYPE, 
R_LeafLogoBitmap);
+               // TODO: scale the bitmap into icon
+               delete icon;
+       }
+
+       return fIcon;
+}
+
+
+float
+TDeskbarMenuTitle::CalcIconWidth()
+{
+       TBarApp* barApp = static_cast<TBarApp*>(be_app);
+       bool isVertical = barApp->BarView()->Vertical();
+       bool hasBitmapIcon = fVectorIconData == NULL;
+
+       float m = 3;
+       float x = (isVertical || hasBitmapIcon) ? kMinimumIconSize
+               : std::min(barApp->IconSize(), kIconSizeCutoff);
+       float b = kMinimumIconSize;
+
+       return m * x + b;
+}
diff --git a/src/apps/deskbar/BarMenuTitle.h b/src/apps/deskbar/BarMenuTitle.h
index f7bcac0..a4f68cd 100644
--- a/src/apps/deskbar/BarMenuTitle.h
+++ b/src/apps/deskbar/BarMenuTitle.h
@@ -32,8 +32,8 @@ brand product names are registered trademarks or trademarks 
of their respective
 holders.
 All rights reserved.
 */
-#ifndef BARMENUTITLE_H
-#define BARMENUTITLE_H
+#ifndef BAR_MENU_TITLE_H
+#define BAR_MENU_TITLE_H
 
 
 //
@@ -47,27 +47,45 @@ All rights reserved.
 class BBitmap;
 class BMenu;
 
+
 class TBarMenuTitle : public BMenuItem {
 public:
-       TBarMenuTitle(float width, float height, const BBitmap* icon,
-               BMenu* menu, bool expando = false);
-       virtual ~TBarMenuTitle();
+                                                               
TBarMenuTitle(float width, float height,
+                                                                       const 
BBitmap* icon, BMenu* menu);
+       virtual                                         ~TBarMenuTitle();
+
+       virtual void                            SetContentSize(float width, 
float height);
+       virtual void                            Draw();
 
-       void SetContentSize(float width, float height);
-       void Draw();
+       virtual status_t                        Invoke(BMessage* message);
 
-       status_t Invoke(BMessage* message);
+       const   BBitmap*                        Icon() { return fIcon; };
+       virtual void                            SetIcon(const BBitmap* icon);
 
 protected:
-       void DrawContent();
-       void GetContentSize(float* width, float* height);
+       virtual void                            DrawContent();
+       virtual void                            GetContentSize(float* width, 
float* height);
+
+                       float                           fWidth;
+                       float                           fHeight;
+       const   BBitmap*                        fIcon;
+};
+
+
+class TDeskbarMenuTitle : public TBarMenuTitle {
+public:
+                                                               
TDeskbarMenuTitle(float width, float height,
+                                                                       const 
BBitmap* icon, BMenu* menu);
+
+       virtual void                            DrawContent();
+
+       const   BBitmap*                        FetchIcon();
+                       float                           CalcIconWidth();
 
 private:
-       float fWidth;
-       float fHeight;
-       bool fInExpando;
-       const BBitmap* fIcon;
+       const   uint8*                          fVectorIconData;
+                       size_t                          fVectorIconSize;
 };
 
 
-#endif // BARMENUTITLE_H
+#endif // BAR_MENU_TITLE_H
diff --git a/src/apps/deskbar/BarView.cpp b/src/apps/deskbar/BarView.cpp
index bd45e30..809f78b 100644
--- a/src/apps/deskbar/BarView.cpp
+++ b/src/apps/deskbar/BarView.cpp
@@ -49,6 +49,7 @@ All rights reserved.
 #include "icons.h"
 #include "BarApp.h"
 #include "BarMenuBar.h"
+#include "BarMenuTitle.h"
 #include "BarWindow.h"
 #include "DeskbarMenu.h"
 #include "DeskbarUtils.h"
@@ -394,8 +395,10 @@ TBarView::PlaceDeskbarMenu()
                        width += 1;
                } else {
                        // shows apps to the right of bemenu
+                       width = fBarMenuBar->DeskbarMenuTitle()->CalcIconWidth()
+                               + kMinimumIconSize;
                        fBarMenuBar->AddSeparatorItem();
-                       width = floorf(width) / 2 + kSepItemWidth;
+                       width += kSepItemWidth;
                }
                loc = Bounds().LeftTop();
        } else {
diff --git a/src/apps/deskbar/ExpandoMenuBar.cpp 
b/src/apps/deskbar/ExpandoMenuBar.cpp
index f3226f8..3dacb7e 100644
--- a/src/apps/deskbar/ExpandoMenuBar.cpp
+++ b/src/apps/deskbar/ExpandoMenuBar.cpp
@@ -55,6 +55,7 @@ All rights reserved.
 #include "icons.h"
 
 #include "BarApp.h"
+#include "BarMenuBar.h"
 #include "BarMenuTitle.h"
 #include "BarView.h"
 #include "BarWindow.h"
@@ -95,7 +96,6 @@ TExpandoMenuBar::TExpandoMenuBar(TBarView* barView, bool 
vertical)
        fVertical(vertical),
        fOverflow(false),
        fFirstBuild(true),
-       fDeskbarMenuWidth(kMinMenuItemWidth),
        fPreviousDragTargetItem(NULL),
        fLastMousedOverItem(NULL),
        fLastClickedItem(NULL)
@@ -103,13 +103,6 @@ TExpandoMenuBar::TExpandoMenuBar(TBarView* barView, bool 
vertical)
        SetItemMargins(0.0f, 0.0f, 0.0f, 0.0f);
        SetFont(be_plain_font);
        SetMaxItemWidth();
-
-       // top or bottom mode, add deskbar menu and sep for menubar tracking
-       // consistency
-       const BBitmap* logoBitmap = AppResSet()->FindBitmap(B_MESSAGE_TYPE,
-               R_LeafLogoBitmap);
-       if (logoBitmap != NULL)
-               fDeskbarMenuWidth = logoBitmap->Bounds().Width() + 16;
 }
 
 
@@ -369,7 +362,7 @@ TExpandoMenuBar::MouseMoved(BPoint where, uint32 code, 
const BMessage* message)
                                        break;
                                }
 
-                               if 
(!dynamic_cast<TBarApp*>(be_app)->Settings()->hideLabels) {
+                               if 
(!static_cast<TBarApp*>(be_app)->Settings()->hideLabels) {
                                        // item has a visible label, set tool 
tip if truncated
                                        fLastMousedOverItem = menuItem;
                                        if (strcasecmp(item->TruncatedLabel(), 
item->Label()) > 0) {
@@ -741,8 +734,11 @@ TExpandoMenuBar::CheckItemSizes(int32 delta)
 
        bool drawLabels = 
!static_cast<TBarApp*>(be_app)->Settings()->hideLabels;
 
+       float deskbarMenuWidth
+               = fBarView->BarMenuBar()->DeskbarMenuTitle()->CalcIconWidth();
+
        float maxWidth = fBarView->DragRegion()->Frame().left
-               - fDeskbarMenuWidth - kSepItemWidth;
+               - deskbarMenuWidth - kSepItemWidth;
        int32 iconSize = static_cast<TBarApp*>(be_app)->IconSize();
        float iconOnlyWidth = kIconPadding + iconSize + kIconPadding;
        float minItemWidth = drawLabels
@@ -751,7 +747,7 @@ TExpandoMenuBar::CheckItemSizes(int32 delta)
        float maxItemWidth = drawLabels
                ? gMinimumWindowWidth + iconSize - kMinimumIconSize
                : iconOnlyWidth;
-       float menuWidth = maxItemWidth * CountItems() + fDeskbarMenuWidth
+       float menuWidth = maxItemWidth * CountItems() + deskbarMenuWidth
                + kSepItemWidth;
 
        bool reset = false;
@@ -881,10 +877,12 @@ TExpandoMenuBar::CheckForSizeOverrun()
        float minItemWidth = 
!static_cast<TBarApp*>(be_app)->Settings()->hideLabels
                ? iconOnlyWidth + kMinMenuItemWidth
                : iconOnlyWidth - kIconPadding;
-       float menuWidth = minItemWidth * CountItems() + fDeskbarMenuWidth
+       float deskbarMenuWidth
+               = fBarView->BarMenuBar()->DeskbarMenuTitle()->CalcIconWidth();
+       float menuWidth = minItemWidth * CountItems() + deskbarMenuWidth
                + kSepItemWidth;
        float maxWidth = fBarView->DragRegion()->Frame().left
-               - fDeskbarMenuWidth - kSepItemWidth;
+               - deskbarMenuWidth - kSepItemWidth;
 
        return menuWidth > maxWidth;
 }
diff --git a/src/apps/deskbar/ExpandoMenuBar.h 
b/src/apps/deskbar/ExpandoMenuBar.h
index 5f338c5..5be5f24 100644
--- a/src/apps/deskbar/ExpandoMenuBar.h
+++ b/src/apps/deskbar/ExpandoMenuBar.h
@@ -116,7 +116,6 @@ private:
                        bool                    fOverflow : 1;
                        bool                    fFirstBuild : 1;
 
-                       float                   fDeskbarMenuWidth;
                        TTeamMenuItem*  fPreviousDragTargetItem;
                        BMenuItem*              fLastMousedOverItem;
                        BMenuItem*              fLastClickedItem;
diff --git a/src/apps/deskbar/StatusView.cpp b/src/apps/deskbar/StatusView.cpp
index 89913dc..1137f4d 100644
--- a/src/apps/deskbar/StatusView.cpp
+++ b/src/apps/deskbar/StatusView.cpp
@@ -69,6 +69,8 @@ All rights reserved.
 #include "icons.h"
 
 #include "BarApp.h"
+#include "BarMenuBar.h"
+#include "BarMenuTitle.h"
 #include "DeskbarUtils.h"
 #include "ResourceSet.h"
 #include "StatusViewShelf.h"
@@ -138,15 +140,8 @@ TReplicantTray::TReplicantTray(TBarView* parent, bool 
vertical)
        fMinimumTrayWidth(kMinimumTrayWidth),
        fAlignmentSupport(false)
 {
-       // init the minimum window width according to the logo.
-       const BBitmap* logoBitmap = AppResSet()->FindBitmap(B_MESSAGE_TYPE,
-               R_LeafLogoBitmap);
-       if (logoBitmap != NULL) {
-               gMinimumWindowWidth = std::max(gMinimumWindowWidth,
-                       2 * (logoBitmap->Bounds().Width() + 8));
-       }
        gMinimumWindowWidth = std::max(gMinimumWindowWidth,
-                       be_plain_font->StringWidth("WWWWWWWWW") + 20);
+               be_plain_font->StringWidth("WWWWWWWWW") + 20);
        if (vertical)
                fMinimumTrayWidth = gMinimumWindowWidth - kGutter - 
kDragRegionWidth;
 
diff --git a/src/apps/deskbar/StatusView.h b/src/apps/deskbar/StatusView.h
index 8a7e88d..9a61685 100644
--- a/src/apps/deskbar/StatusView.h
+++ b/src/apps/deskbar/StatusView.h
@@ -48,17 +48,15 @@ All rights reserved.
 
 const float kMaxReplicantHeight = 16.0f;
 const float kMaxReplicantWidth = 16.0f;
-const int32 kMinimumReplicantCount = 6;
+const int32 kMinimumReplicantCount = 7;
 const int32 kIconGap = 2;
 const int32 kGutter = 1;
 const int32 kDragRegionWidth = 6;
 
-// 1 pixel for left gutter
-// space for replicant tray (6 items)
-// 6 pixel drag region
-const float kMinimumTrayWidth = kIconGap
-               + (kMinimumReplicantCount * kIconGap)
-               + (kMinimumReplicantCount * kMaxReplicantWidth) + kGutter;
+// space for replicant tray with gap on each side (7 items)
+// minus 6 pixel drag region
+const float kMinimumTrayWidth = kMinimumReplicantCount
+       * (kIconGap + kMaxReplicantWidth + kIconGap) - kDragRegionWidth;
 const float kMinimumTrayHeight = kGutter + kMaxReplicantHeight + kGutter;
 
 extern float gMinimumWindowWidth;
diff --git a/src/apps/deskbar/icons.h b/src/apps/deskbar/icons.h
index e5e65e0..9bc9db5 100644
--- a/src/apps/deskbar/icons.h
+++ b/src/apps/deskbar/icons.h
@@ -1,5 +1,6 @@
 enum {
        R_LeafLogoBitmap = 14,
+       R_LeafLogoVector = 15,
        R_LargeNewGroupIcon = 16,
        R_SmallNewGroupIcon = 17,
        R_TeamIcon = 18,
diff --git a/src/apps/deskbar/icons.rdef b/src/apps/deskbar/icons.rdef
index d023d86..88a3052 100644
--- a/src/apps/deskbar/icons.rdef
+++ b/src/apps/deskbar/icons.rdef
@@ -192,6 +192,19 @@ resource(R_LeafLogoBitmap) archive(, 0x00000000) BBitmap {
        }
 };
 
+resource(R_LeafLogoVector) #'VICN' array {
+       $"6E6369660102010602407715BE05F73AC66F3D61964A3C0A4C40170000AAFFFF"
+       $"00337F010216B9CBCB3DB9CBCB3DBC63CDC0C1BACE05BF13CE7BC14B63C0EACC"
+       $"FAC116CD4DC3DFCEAEC644CBE0C55BCC8FC5F4CB9FC4F0CB0CC592CBD1C5BFCB"
+       $"29C704CB1CC646CB1DC77DCAACC8A0C9CEC831CA54C929C92BCA66C78FC9D7C8"
+       $"4ACA0BC757C9D5C6DEC9F8C725CA29C6F4CAD1C6FCCA7EC6FECB42C624CC6EC5"
+       $"62CBF6C59CCA78C4B2C625C52AC7F6C4CAC58AC5B0C55DC77DC58EC65EC4FBC6"
+       $"FCC509C57DC4D0C65CC3C1C5E4C14FC703C283C671C0D8C73BBF09C852BFB3C8"
+       $"10BEB8C8CCBE3DC9B2BE74C943BE3AC94BBE32C87BBE2AC8E5BBFFC8D4B96CCA"
+       $"A7BACBC96BB67CCAA9B337C8EFB331C964B337C8EFB328CA02B328CA02B328CA"
+       $"02B9CDCB3EB6D2CB6AB9CDCB3E010A000100202009"
+};
+
 resource(R_LargeNewGroupIcon) archive(, 0x00000000) BBitmap {
        "_frame" = rect { 0.0, 0.0, 31.0, 31.0 },
        "_cspace" = 4,


Other related posts: