File: gimpfont.c

package info (click to toggle)
gimp 3.0.4-6.2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 210,548 kB
  • sloc: ansic: 842,405; lisp: 10,761; python: 10,318; cpp: 7,238; perl: 4,355; sh: 1,043; xml: 963; yacc: 609; lex: 348; javascript: 150; makefile: 43
file content (100 lines) | stat: -rw-r--r-- 2,767 bytes parent folder | download | duplicates (2)
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
/* LIBGIMP - The GIMP Library
 * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball
 *
 * gimpfont.c
 * Copyright (C) 2023 Jehan
 *
 * 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 3 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
 * <https://www.gnu.org/licenses/>.
 */

#include "config.h"

#include <pango/pangofc-fontmap.h>

#include "gimp.h"

#include "gimpfont.h"

struct _GimpFont
{
  GimpResource parent_instance;
};

G_DEFINE_TYPE (GimpFont, gimp_font, GIMP_TYPE_RESOURCE);


static void  gimp_font_class_init (GimpFontClass *klass)
{
}

static void  gimp_font_init (GimpFont *font)
{
}

/**
 * gimp_font_get_pango_font_description:
 * @font: (transfer none): the [class@Gimp.Font]
 *
 * Returns a [struct@Pango.FontDescription] representing @font.
 *
 * Returns: (transfer full): a %PangoFontDescription representing @font.
 *
 * Since: 3.0
 **/
PangoFontDescription *
gimp_font_get_pango_font_description (GimpFont *font)
{
  static gboolean       fc_configs_loaded = FALSE;
  PangoFontDescription *desc              = NULL;

  if (!fc_configs_loaded)
    {
      gchar  *config;
      gchar  *sysconfig;
      gchar **fonts_renaming_config;
      gchar **dirs;

      FcConfigSetCurrent (FcInitLoadConfig ());

      config = _gimp_fonts_get_custom_configs (&sysconfig, &fonts_renaming_config, &dirs);

      FcConfigParseAndLoad (FcConfigGetCurrent (),
                            (const guchar *)config ,
                            FcFalse);

      FcConfigParseAndLoad (FcConfigGetCurrent (),
                            (const guchar *)sysconfig ,
                            FcFalse);

      for (int i = 0; dirs[i] != NULL; ++i)
        if (dirs[i])
          FcConfigAppFontAddDir (FcConfigGetCurrent (), (const FcChar8 *)dirs[i]);

      for (int i = 0; fonts_renaming_config[i] != NULL; ++i)
        if (fonts_renaming_config[i])
          FcConfigParseAndLoadFromMemory (FcConfigGetCurrent (), (const FcChar8 *)fonts_renaming_config[i], FcTrue);

      g_strfreev (fonts_renaming_config);
      g_free (sysconfig);
      g_free (config);
      g_strfreev (dirs);

      fc_configs_loaded = TRUE;
    }

  desc = pango_font_description_from_string (_gimp_font_get_lookup_name (font));

  return desc;
}