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 }