1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/* CTK - The GIMP Toolkit
 * Copyright (C) 2011 Red Hat, Inc.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
 */

#include "config.h"

#include "ctkcssinitialvalueprivate.h"

#include "ctkcssarrayvalueprivate.h"
#include "ctkcssnumbervalueprivate.h"
#include "ctkcssstringvalueprivate.h"
#include "ctkcssstylepropertyprivate.h"
#include "ctksettingsprivate.h"
#include "ctkstyleproviderprivate.h"

struct _CtkCssValue {
  CTK_CSS_VALUE_BASE<--- struct member '_CtkCssValue::class' is never used.
};

static void
ctk_css_value_initial_free (CtkCssValue *value G_GNUC_UNUSED)
{
  /* Can only happen if the unique value gets unreffed too often */
  g_assert_not_reached ();
}

static CtkCssValue *
ctk_css_value_initial_compute (CtkCssValue             *value G_GNUC_UNUSED,
                               guint                    property_id,
                               CtkStyleProviderPrivate *provider,
                               CtkCssStyle             *style,
                               CtkCssStyle             *parent_style)
{
  CtkSettings *settings;

  switch (property_id)
    {
    case CTK_CSS_PROPERTY_DPI:
      settings = _ctk_style_provider_private_get_settings (provider);
      if (settings)
        {
          CdkScreen *screen = _ctk_settings_get_screen (settings);
          double resolution = cdk_screen_get_resolution (screen);

          if (resolution > 0.0)
            return _ctk_css_number_value_new (resolution, CTK_CSS_NUMBER);
        }
      break;

    case CTK_CSS_PROPERTY_FONT_FAMILY:
      settings = _ctk_style_provider_private_get_settings (provider);
      if (settings && ctk_settings_get_font_family (settings) != NULL)
        return _ctk_css_array_value_new (_ctk_css_string_value_new (ctk_settings_get_font_family (settings)));
      break;

    default:
      break;
    }

  return _ctk_css_value_compute (_ctk_css_style_property_get_initial_value (_ctk_css_style_property_lookup_by_id (property_id)),
                                 property_id,
                                 provider,
                                 style,
                                 parent_style);
}

static gboolean
ctk_css_value_initial_equal (const CtkCssValue *value1 G_GNUC_UNUSED,
                             const CtkCssValue *value2 G_GNUC_UNUSED)
{
  return TRUE;
}

static CtkCssValue *
ctk_css_value_initial_transition (CtkCssValue *start G_GNUC_UNUSED,
                                  CtkCssValue *end G_GNUC_UNUSED,
                                  guint        property_id G_GNUC_UNUSED,
                                  double       progress G_GNUC_UNUSED)
{
  return NULL;
}

static void
ctk_css_value_initial_print (const CtkCssValue *value G_GNUC_UNUSED,
                             GString           *string)
{
  g_string_append (string, "initial");
}

static const CtkCssValueClass CTK_CSS_VALUE_INITIAL = {
  ctk_css_value_initial_free,
  ctk_css_value_initial_compute,
  ctk_css_value_initial_equal,
  ctk_css_value_initial_transition,
  ctk_css_value_initial_print
};

static CtkCssValue initial = { &CTK_CSS_VALUE_INITIAL, 1 };

CtkCssValue *
_ctk_css_initial_value_new (void)
{
  return _ctk_css_value_ref (&initial);
}

CtkCssValue *
_ctk_css_initial_value_get (void)
{
  return &initial;
}