File indexing completed on 2024-04-28 05:32:21
0001 /* 0002 this file is part of the oxygen gtk engine 0003 SPDX-FileCopyrightText: 2010 Hugo Pereira Da Costa <hugo.pereira@free.fr> 0004 SPDX-FileCopyrightText: 2011 Ruslan Kabatsayev <b7.10110111@gmail.com> 0005 0006 SPDX-License-Identifier: LGPL-2.0-or-later 0007 */ 0008 0009 #include "oxygenwindecooptions.h" 0010 #include "oxygenstyle.h" 0011 #include "oxygenwindowshadow.h" 0012 0013 namespace Oxygen 0014 { 0015 namespace WinDeco 0016 { 0017 0018 gint getMetric(Metric wm) 0019 { 0020 const int frameBorder(Style::instance().settings().frameBorder()); 0021 const bool narrowSpacing(false); // TODO: false -> read configuration 0022 const bool compositingActive(false); // TODO: implement check for this 0023 const bool hideTitleBar(false); // TODO: implement 0024 0025 switch (wm) 0026 { 0027 case BorderLeft: 0028 case BorderRight: 0029 case BorderBottom: 0030 { 0031 gint border(0); 0032 // for now we think that respectWindowState is always true, 0033 // and WM will remove borders for maximized windows by default 0034 // TODO: impelement respectWindowState 0035 if( wm==BorderBottom && frameBorder >= QtSettings::BorderNoSide ) { 0036 0037 // for tiny border, the convention is to have a larger bottom area in order to 0038 // make resizing easier 0039 border = std::max(frameBorder,4); 0040 } 0041 else if( frameBorder < QtSettings::BorderTiny ) { 0042 0043 border = 0; 0044 } 0045 else if( compositingActive && frameBorder == QtSettings::BorderTiny ) { 0046 0047 border = std::max( frameBorder, 3 ); 0048 } 0049 else { 0050 0051 border = frameBorder; 0052 } 0053 0054 return border; 0055 } 0056 0057 case BorderTop: 0058 { 0059 gint topEdge(0); 0060 if( frameBorder == QtSettings::BorderNone && hideTitleBar ) 0061 { 0062 topEdge=0; 0063 } 0064 else 0065 { 0066 topEdge=3; // TFRAMESIZE 0067 } 0068 0069 return Style::instance().settings().buttonSize()+topEdge; 0070 } 0071 0072 case ButtonSpacing: 0073 { 0074 return ( narrowSpacing ? 1 : 3 ); 0075 } 0076 0077 case ButtonMarginTop: 0078 case ButtonMarginBottom: 0079 { 0080 return 0; 0081 } 0082 0083 case ShadowLeft: 0084 case ShadowRight: 0085 case ShadowTop: 0086 case ShadowBottom: 0087 { 0088 WindowShadow shadow(Style::instance().settings(), Style::instance().helper()); 0089 return int(shadow.shadowSize()-4); 0090 } 0091 0092 default: 0093 { 0094 // -1 means we don't understand the query 0095 return -1; 0096 } 0097 } 0098 } 0099 0100 int getButtonSize() 0101 { 0102 // in oxygen all buttons have the same size 0103 return Style::instance().settings().buttonSize(); 0104 } 0105 } 0106 }