Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  gtksvgprivate.h

  Sprache: C
 

/*
 * Copyright © 2025 Red Hat, Inc
 *
 * SPDX-License-Identifier: LGPL-2.1-or-later
 *
 * 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.1 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/>.
 *
 * Authors: Matthias Clasen <mclasen@redhat.com>
 */


#pragma once

#include "gtksvg.h"
#include "gtkenums.h"
#include "gtkbitmaskprivate.h"
#include "gtkcssnodeprivate.h"
#include "gtkeventcontrollerprivate.h"
#include "gtk/svg/gtksvgtypesprivate.h"
#include "gtk/svg/gtksvgenumsprivate.h"
#include "gtk/svg/gtksvgelementtypeprivate.h"
#include "gtk/svg/gtksvgfiltertypeprivate.h"
#include "gtk/svg/gtksvgpropertyprivate.h"

G_BEGIN_DECLS

#define DEFAULT_FONT_SIZE 13.333

/* Max. nesting level of paint calls we allow */
#define NESTING_LIMIT 256

/* This is a mitigation for SVG files which create millions of elements
 * in an attempt to exhaust memory.  We don't allow loading more than
 * this number of elements during the initial streaming load process.
 */

#define LOADING_LIMIT 50000

/* This is a mitigation for SVG files which create deeply nested
 * <use> elements or deeply nested references of patterns.
 */

#define DRAWING_LIMIT 150000


typedef void (* SvgElementCallback) (SvgElement *element,
                                     gpointer    data);

struct _GtkSvg
{
  GObject parent_instance;
  SvgElement *content;
  GtkSettings *settings;

  double current_width, current_height; /* Last snapshot size */

  double width, height, aspect_ratio; /* Paintable properties */

  double weight;
  unsigned int initial_state;
  unsigned int state;
  unsigned int max_state;
  unsigned int n_state_names;
  char **state_names;
  int64_t state_change_delay;
  gboolean has_animations;
  GtkSvgFeatures features;
  GtkSvgUses used;
  gboolean has_use_cycle;

  GBytes *stylesheet;

  GArray *user_styles;
  GArray *author_styles;
  gboolean style_changed;
  gboolean view_changed;
  GList *media;

  SvgElement *view;
  SvgElement *focus;
  SvgElement *initial_focus;
  SvgElement *hover;
  SvgElement *active;

  SvgElementCallback hover_callback;
  gpointer hover_data;
  SvgElementCallback activate_callback;
  gpointer activate_data;

  char *resource;

  int64_t load_time;
  int64_t current_time;
  int64_t pause_time;

  GtkOverflow overflow;
  gboolean playing;
  GtkSvgRunMode run_mode;
  GdkFrameClock *clock;
  unsigned long clock_update_id;

  int64_t next_update;
  unsigned int pending_advance;
  gboolean advance_after_snapshot;

  unsigned int gpa_version;
  char *author;
  char *license;
  char *description;
  char *keywords;

  Timeline *timeline;

  GHashTable *images;

  PangoFontMap *fontmap;
  GPtrArray *font_files;

  GskRenderNode *node;

  struct {
    double width, height;
    GdkRGBA colors[5];
    size_t n_colors;
    double weight;
    int64_t time;
    unsigned int state;
  } node_for;
};

/* --- */

gboolean       gtk_svg_set_state_names (GtkSvg                *svg,
                                        const char           **names);

GtkSvg *       gtk_svg_copy            (GtkSvg                *orig);

gboolean       gtk_svg_equal           (GtkSvg                *svg1,
                                        GtkSvg                *svg2);

void           gtk_svg_set_load_time   (GtkSvg                *self,
                                        int64_t                load_time);

void           gtk_svg_set_playing     (GtkSvg                *self,
                                        gboolean               playing);

void           gtk_svg_clear_content   (GtkSvg                *self);

void           gtk_svg_advance         (GtkSvg                *self,
                                        int64_t                current_time);

void           gtk_svg_advance_after_snapshot
                                       (GtkSvg                *self);

GtkSvgRunMode  gtk_svg_get_run_mode    (GtkSvg                *self);

int64_t        gtk_svg_get_next_update (GtkSvg                *self);

void           gtk_svg_set_activate_callback (GtkSvg             *svg,
                                              SvgElementCallback  callback,
                                              gpointer            data);
void           gtk_svg_set_hover_callback    (GtkSvg                *svg,
                                              SvgElementCallback     callback,
                                              gpointer               data);

void           gtk_svg_set_view              (GtkSvg               *self,
                                              SvgElement           *view);

gboolean       gtk_svg_handle_event    (GtkSvg                *svg,
                                        GdkEvent              *event,
                                        double                 x,
                                        double                 y);
void           gtk_svg_handle_crossing (GtkSvg                *svg,
                                        const GtkCrossingData *crossing,
                                        double                 x,
                                        double                 y);

gboolean       gtk_svg_grab_focus      (GtkSvg                *svg);
gboolean       gtk_svg_lose_focus      (GtkSvg                *svg);
gboolean       gtk_svg_move_focus      (GtkSvg                *svg,
                                        GtkDirectionType       direction);

void           gtk_svg_activate_element (GtkSvg               *svg,
                                         SvgElement           *element);

void           gtk_svg_set_active       (GtkSvg               *svg,
                                         SvgElement           *element);
SvgElement *   gtk_svg_get_active       (GtkSvg               *svg);

void           gtk_svg_emit_error        (GtkSvg              *svg,
                                          const GError        *error);
void           gtk_svg_invalid_reference (GtkSvg              *self,
                                          const char          *format,
                                          ...) G_GNUC_PRINTF (23);
void           gtk_svg_invalid_attribute (GtkSvg              *self,
                                          GMarkupParseContext *context,
                                          const char         **attr_names,
                                          const char          *attr_name,
                                          const char          *format,
                                          ...) G_GNUC_PRINTF (56);
void           gtk_svg_rendering_error   (GtkSvg              *self,
                                          const char          *format,
                                          ...) G_GNUC_PRINTF (23);
void           gtk_svg_update_error      (GtkSvg              *self,
                                          const char          *format,
                                          ...) G_GNUC_PRINTF (23);

void           ensure_fontmap            (GtkSvg              *svg);
void           apply_view                (SvgElement          *content,
                                          SvgElement          *view);

gboolean       add_font_from_url         (GtkSvg               *svg,
                                          GMarkupParseContext  *context,
                                          const char          **attr_names,
                                          const char           *attr_name,
                                          const char           *url);

GdkTexture *   get_texture               (GtkSvg               *svg,
                                          const char           *string,
                                          GError              **error);

void           compute_current_values_for_shape
                                         (SvgElement        *shape,
                                          SvgComputeContext *context);

G_END_DECLS

Messung V0.5 in Prozent
C=99 H=92 G=95

¤ Dauer der Verarbeitung: 0.11 Sekunden  (vorverarbeitet am  2026-07-03) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik