From 26b5a18eb006ee0119ce7c74b1249c70d68f367f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Revol?= Date: Thu, 2 May 2019 16:56:50 +0200 Subject: [PATCH] Add a BeControlLook addon Very simple for now, just reuses the Haiku one with some gradients removed. Add it to the haiku_extras package. Change-Id: I41729ed65b147fed72bf56e7c5c89367b75563bb Reviewed-on: https://review.haiku-os.org/c/1431 Reviewed-by: waddlesplash --- build/jam/packages/HaikuExtras | 2 + src/add-ons/Jamfile | 1 + .../BeControlLook/BeControlLook.cpp | 144 ++++++++++++++++++ .../BeControlLook/BeControlLook.h | 44 ++++++ .../BeControlLook/BeControlLook.rdef | 9 ++ .../control_look/BeControlLook/Jamfile | 10 ++ src/add-ons/control_look/Jamfile | 4 + 7 files changed, 214 insertions(+) create mode 100644 src/add-ons/control_look/BeControlLook/BeControlLook.cpp create mode 100644 src/add-ons/control_look/BeControlLook/BeControlLook.h create mode 100644 src/add-ons/control_look/BeControlLook/BeControlLook.rdef create mode 100644 src/add-ons/control_look/BeControlLook/Jamfile create mode 100644 src/add-ons/control_look/Jamfile diff --git a/build/jam/packages/HaikuExtras b/build/jam/packages/HaikuExtras index 8002f725bc..2468b347eb 100644 --- a/build/jam/packages/HaikuExtras +++ b/build/jam/packages/HaikuExtras @@ -7,5 +7,7 @@ HaikuPackage $(extrasPackage) ; AddFilesToPackage add-ons kernel partitioning_systems : amiga_rdb@!m68k apple@!ppc ; +AddFilesToPackage add-ons control_look : BeControlLook ; + BuildHaikuPackage $(extrasPackage) : haiku_extras ; diff --git a/src/add-ons/Jamfile b/src/add-ons/Jamfile index aae192c0fe..03310d8467 100644 --- a/src/add-ons/Jamfile +++ b/src/add-ons/Jamfile @@ -1,6 +1,7 @@ SubDir HAIKU_TOP src add-ons ; SubInclude HAIKU_TOP src add-ons accelerants ; +SubInclude HAIKU_TOP src add-ons control_look ; SubInclude HAIKU_TOP src add-ons decorators ; SubInclude HAIKU_TOP src add-ons disk_systems ; SubInclude HAIKU_TOP src add-ons index_server ; diff --git a/src/add-ons/control_look/BeControlLook/BeControlLook.cpp b/src/add-ons/control_look/BeControlLook/BeControlLook.cpp new file mode 100644 index 0000000000..fc6da3aa9b --- /dev/null +++ b/src/add-ons/control_look/BeControlLook/BeControlLook.cpp @@ -0,0 +1,144 @@ +/* + * Copyright 2019 Haiku, Inc. All rights reserved. + * Distributed under the terms of the MIT License. + * + * Authors: + * Stephan Aßmus, superstippi@gmx.de + * DarkWyrm, bpmagic@columbus.rr.com + * John Scipione, jscipione@gmail.com + * Clemens Zeidler, haiku@clemens-zeidler.de + */ + + +/*! BControlLook resembling BeOS R5 */ + + +#include "BeControlLook.h" + +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include + + +//#define DEBUG_CONTROL_LOOK +#ifdef DEBUG_CONTROL_LOOK +# define STRACE(x) printf x +#else +# define STRACE(x) ; +#endif + + +BeControlLook::BeControlLook(image_id id) + : HaikuControlLook() +{ +} + + +BeControlLook::~BeControlLook() +{ +} + + +void +BeControlLook::DrawMenuBarBackground(BView* view, BRect& rect, + const BRect& updateRect, const rgb_color& base, uint32 flags, + uint32 borders) +{ + if (!rect.IsValid() || !rect.Intersects(updateRect)) + return; + + // the surface edges + + // colors + float topTint; + float bottomTint; + + if ((flags & B_ACTIVATED) != 0) { + rgb_color bevelColor1 = tint_color(base, 1.40); + rgb_color bevelColor2 = tint_color(base, 1.25); + + topTint = 1.25; + bottomTint = 1.20; + + _DrawFrame(view, rect, + bevelColor1, bevelColor1, + bevelColor2, bevelColor2, + borders & B_TOP_BORDER); + } else { + rgb_color cornerColor = tint_color(base, 0.9); + rgb_color bevelColorTop = tint_color(base, 0.5); + rgb_color bevelColorLeft = tint_color(base, 0.7); + rgb_color bevelColorRightBottom = tint_color(base, 1.08); + + topTint = 0.69; + bottomTint = 1.03; + + _DrawFrame(view, rect, + bevelColorLeft, bevelColorTop, + bevelColorRightBottom, bevelColorRightBottom, + cornerColor, cornerColor, + borders); + } + + // draw surface top + //_FillGradient(view, rect, base, topTint, bottomTint); + view->SetLowColor(base); + view->FillRect(rect, B_SOLID_LOW); +} + + +void +BeControlLook::DrawMenuItemBackground(BView* view, BRect& rect, + const BRect& updateRect, const rgb_color& base, uint32 flags, + uint32 borders) +{ + if (!rect.IsValid() || !rect.Intersects(updateRect)) + return; + + // surface edges + float topTint; + float bottomTint; + rgb_color selectedColor = base; + + if ((flags & B_ACTIVATED) != 0) { + topTint = 0.9; + bottomTint = 1.05; + } else if ((flags & B_DISABLED) != 0) { + topTint = 0.80; + bottomTint = 1.07; + } else { + topTint = 0.6; + bottomTint = 1.12; + } + + rgb_color bevelLightColor = tint_color(selectedColor, topTint); + rgb_color bevelShadowColor = tint_color(selectedColor, bottomTint); + + // draw surface edges + _DrawFrame(view, rect, + bevelLightColor, bevelLightColor, + bevelShadowColor, bevelShadowColor, + borders); + + // draw surface top + view->SetLowColor(selectedColor); + //_FillGradient(view, rect, selectedColor, topTint, bottomTint); + view->FillRect(rect, B_SOLID_LOW); +} + + +extern "C" BControlLook* (instantiate_control_look)(image_id id) +{ + return new (std::nothrow)BeControlLook(id); +} + diff --git a/src/add-ons/control_look/BeControlLook/BeControlLook.h b/src/add-ons/control_look/BeControlLook/BeControlLook.h new file mode 100644 index 0000000000..74577b7653 --- /dev/null +++ b/src/add-ons/control_look/BeControlLook/BeControlLook.h @@ -0,0 +1,44 @@ +/* + * Copyright 2009-2019 Haiku, Inc. All rights reserved. + * Distributed under the terms of the MIT License. + * + * Authors: + * François Revol, revol@free.fr + */ +#ifndef BE_CONTROL_LOOK_H +#define BE_CONTROL_LOOK_H + + +#include + +#include "HaikuControlLook.h" + + +class BBitmap; +class BControl; +class BGradientLinear; +class BView; + +using BPrivate::HaikuControlLook; + + +class BeControlLook : public HaikuControlLook { +public: + BeControlLook(image_id id); + virtual ~BeControlLook(); + + + virtual void DrawMenuBarBackground(BView* view, BRect& rect, + const BRect& updateRect, + const rgb_color& base, + uint32 flags = 0, + uint32 borders = B_ALL_BORDERS); + + virtual void DrawMenuItemBackground(BView* view, + BRect& rect, const BRect& updateRect, + const rgb_color& base, uint32 flags = 0, + uint32 borders = B_ALL_BORDERS); +}; + + +#endif // BE_CONTROL_LOOK_H diff --git a/src/add-ons/control_look/BeControlLook/BeControlLook.rdef b/src/add-ons/control_look/BeControlLook/BeControlLook.rdef new file mode 100644 index 0000000000..787be55c2b --- /dev/null +++ b/src/add-ons/control_look/BeControlLook/BeControlLook.rdef @@ -0,0 +1,9 @@ +resource app_version { + major = 1, + middle = 0, + minor = 0, + variety = B_APPV_ALPHA, + internal = 0, + short_info = "Be Control Look", + long_info = "BeOS-like Control Look add-on ©2019 Haiku, Inc." +}; diff --git a/src/add-ons/control_look/BeControlLook/Jamfile b/src/add-ons/control_look/BeControlLook/Jamfile new file mode 100644 index 0000000000..d44884ed36 --- /dev/null +++ b/src/add-ons/control_look/BeControlLook/Jamfile @@ -0,0 +1,10 @@ +SubDir HAIKU_TOP src add-ons control_look BeControlLook ; + +UsePrivateHeaders interface ; + +AddResources BeControlLook : BeControlLook.rdef ; + +Addon BeControlLook : + BeControlLook.cpp + : be app_server [ TargetLibstdc++ ] [ TargetLibsupc++ ] +; diff --git a/src/add-ons/control_look/Jamfile b/src/add-ons/control_look/Jamfile new file mode 100644 index 0000000000..cfe86e919c --- /dev/null +++ b/src/add-ons/control_look/Jamfile @@ -0,0 +1,4 @@ +SubDir HAIKU_TOP src add-ons control_look ; + +SubInclude HAIKU_TOP src add-ons control_look BeControlLook ; +