/* This file is (c) 2012 Tvangeste <i.4m.l33t@yandex.ru>
 * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */

#include "gdappstyle.hh"

#if QT_VERSION >= 0x040600

#include "dictionarybar.hh"

#include <QWidget>
#include <QToolButton>
#include <QDebug>

GdAppStyle::GdAppStyle(QProxyStyle * parent) : QProxyStyle(parent) {}

int GdAppStyle::pixelMetric ( PixelMetric metric, const QStyleOption * option, const QWidget * widget) const
{
  int defaultVal = QProxyStyle::pixelMetric(metric, option, widget);

  if ( dictionaryBarButton( widget ) )
  {
    if ( metric == QStyle::PM_ButtonShiftVertical || metric == QStyle::PM_ButtonShiftHorizontal )
    {
      if (option ->state & State_Sunken ) {
        return defaultVal;
      }

      if ( option ->state & State_On ) {
        // No shift for for the checked tool buttons on the dictionary bar,
        // that's why the whole thing with QProxyStyle is neded, to achieve this.
        return 0;
      }
    }
  }

  // Qt don't upscale icons for high dpi scales
  // We limit maximum small icon size to 21 pixel
  // (standard icon size for Lingvo dictionaries)
  if( metric == QStyle::PM_SmallIconSize )
    return defaultVal < 21 ? defaultVal : 21;

  return defaultVal;
}

bool GdAppStyle::dictionaryBarButton(const QWidget * widget) const {
  if (widget) {
    const QWidget * parent = widget->parentWidget();
    if ( parent &&
         qobject_cast<const DictionaryBar *>( parent ) &&
         qobject_cast<const QToolButton *>( widget ) )
      return true;
  }

  return false;
}

#endif // QT_VERSION