// Generated by gmmproc 2.86.0 -- DO NOT MODIFY!
#ifndef _GTKMM_SVGWIDGET_H
#define _GTKMM_SVGWIDGET_H


#include <glibmm/ustring.h>
#include <sigc++/sigc++.h>

/* Copyright (C) 2026 The gtkmm Development Team
 *
 * 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 <https://www.gnu.org/licenses/>.
 */


#include <gtkmm/widget.h>
#include <gtkmm/svg.h>

#ifndef DOXYGEN_SHOULD_SKIP_THIS
#endif /* DOXYGEN_SHOULD_SKIP_THIS */


#ifndef DOXYGEN_SHOULD_SKIP_THIS
namespace Gtk
{ class GTKMM_API SvgWidget_Class; } // namespace Gtk
#endif //DOXYGEN_SHOULD_SKIP_THIS

namespace Gtk
{
/** A widget that renders SVG, with animations and event handling.
 *
 * %Gtk::SvgWidget uses Gtk::Svg internally, and you should read
 * its documentation to learn about the supported SVG features and
 * extensions.
 *
 * On top of the Gtk::Svg rendering, %Gtk::SvgWidget adds event handling.
 * <kbd>Tab</kbd> and <kbd>Shift</kbd>+<kbd>Tab</kbd> keys can be used
 * to move the focus and <kbd>Enter</kbd> and clicks will activate links
 * by emitting signal_activate().
 *
 * The `tabindex` and `autofocus` attributes can be used to influence
 * what elements act as focus locations, and where focus goes initially.
 *
 * The styling of the SVG content is following input-related pseudo
 * classes such as `:focus`, `:active`, `:hover` or `:visited`.
 *
 * If Gtk::Widget::property_has_tooltip() is set, then the content
 * of `<title>` elements will be shown as tooltips.
 *
 * SVG animations and different `<view>`s can be triggered by input
 * events as well. The following events are supported: focus, blur,
 * mouseenter, mouseleave, click.
 * See the [SVG animation](https://svgwg.org/specs/animations/)
 * specification for details.
 *
 * @ingroup Widgets
 * @newin{4,24}
 */

class GTKMM_API SvgWidget : public Widget
{
  public:
#ifndef DOXYGEN_SHOULD_SKIP_THIS
  typedef SvgWidget CppObjectType;
  typedef SvgWidget_Class CppClassType;
  typedef GtkSvgWidget BaseObjectType;
  typedef GtkSvgWidgetClass BaseClassType;
#endif /* DOXYGEN_SHOULD_SKIP_THIS */

  SvgWidget(SvgWidget&& src) noexcept;
  SvgWidget& operator=(SvgWidget&& src) noexcept;

  // noncopyable
  SvgWidget(const SvgWidget&) = delete;
  SvgWidget& operator=(const SvgWidget&) = delete;

  ~SvgWidget() noexcept override;

#ifndef DOXYGEN_SHOULD_SKIP_THIS

private:
  friend GTKMM_API class SvgWidget_Class;
  static CppClassType svgwidget_class_;

protected:
  explicit SvgWidget(const Glib::ConstructParams& construct_params);
  explicit SvgWidget(GtkSvgWidget* castitem);

#endif /* DOXYGEN_SHOULD_SKIP_THIS */

public:

  /** Get the GType for this class, for use with the underlying GObject type system.
   */
  static GType get_type()      G_GNUC_CONST;

#ifndef DOXYGEN_SHOULD_SKIP_THIS


  static GType get_base_type() G_GNUC_CONST;
#endif

  /// Provides access to the underlying C GObject.
  GtkSvgWidget*       gobj()       { return reinterpret_cast<GtkSvgWidget*>(gobject_); }

  /// Provides access to the underlying C GObject.
  const GtkSvgWidget* gobj() const { return reinterpret_cast<GtkSvgWidget*>(gobject_); }

private:

     
public:
  SvgWidget();

  
  /** Loads SVG content into an existing SVG widget.
   * 
   * To track errors while loading SVG content, connect
   * to the signal_error() signal.
   * 
   * This clears any previously loaded content.
   * 
   * @newin{4,24}
   * 
   * @param bytes The data to data.
   */
  void load_from_bytes(const Glib::RefPtr<const Glib::Bytes>& bytes);
  
  /** Sets a CSS user stylesheet to use.
   * 
   * Note that styles are applied at load time, so this
   * function must be called before loading SVG.
   * 
   * @newin{4,24}
   * 
   * @param bytes CSS data.
   */
  void set_stylesheet(const Glib::RefPtr<const Glib::Bytes>& bytes =  {});
  // Glib::Bytes is immutable. No need for a non-const get-method.
  
  /** Gets the CSS user stylesheet.
   * 
   * @newin{4,24}
   * 
   * @return A `Bytes` with the CSS data.
   */
  Glib::RefPtr<Glib::Bytes> get_stylesheet() const;
  
  /** Sets the state of the widget.
   * 
   * The state change will apply transitions that are defined
   * in the SVG. See Gtk::Svg for details about states
   * and transitions.
   * 
   * @newin{4,24}
   * 
   * @param state The state to set, as a value between 0 and 63.
   */
  void set_state(unsigned int state);
  
  /** Gets the current state of the widget.
   * 
   * @newin{4,24}
   * 
   * @return The state.
   */
  unsigned int get_state() const;

 
  // no_default_handler because GtkSvgWidgetClass is private.
  
  /**
   * @par Slot Prototype:
   * <tt>void on_my_%error(const SvgErrorExtra& error)</tt>
   *
   * Flags: Run Last
   *
   * Signals that an error occurred.
   * 
   * Errors can occur both during parsing and during rendering.
   * 
   * The expected error values are in the Gtk::SvgError enumeration,
   * context information about the location of parsing errors can
   * be obtained with the various `gtk_svg_error` functions.
   * 
   * Parsing errors are never fatal, so the parsing will resume after
   * the error. Errors may however cause parts of the given data or
   * even all of it to not be parsed at all. So it is a useful idea
   * to check that the parsing succeeds by connecting to this signal.
   * 
   * ::: note
   * This signal is emitted in the middle of parsing or rendering,
   * and if you handle it, you must be careful. Logging the errors
   * you receive is fine, but modifying the widget hierarchy or
   * changing the paintable state definitively isn't.
   * 
   * If in doubt, defer to an idle.
   * 
   * @newin{4,24}
   * 
   * @param error The error.
   */

  Glib::SignalProxy<void(const SvgErrorExtra&)> signal_error();

  
  /**
   * @par Slot Prototype:
   * <tt>void on_my_%activate(const Glib::ustring& id, const Glib::ustring& href)</tt>
   *
   * Flags: Run Last
   *
   * Emitted when a link or other element is activated.
   * 
   * Activating elements can be achieved by clicking
   * or by hitting <kbd>Enter</kbd> while the element
   * has focus.
   * 
   * @newin{4,24}
   * 
   * @param id The ID of the element.
   * @param href The href, if the element is a link.
   */

  Glib::SignalProxy<void(const Glib::ustring&, const Glib::ustring&)> signal_activate();


  /** Resource to load SVG data from.
   * 
   * This property is meant for use in ui files.
   * 
   * @newin{4,24}
   *
   * Default value: ""
   *
   * @return A PropertyProxy that allows you to get or set the value of the property,
   * or receive notification when the value of the property changes.
   */
  Glib::PropertyProxy< std::string > property_resource() ;

/** Resource to load SVG data from.
   * 
   * This property is meant for use in ui files.
   * 
   * @newin{4,24}
   *
   * Default value: ""
   *
   * @return A PropertyProxy_ReadOnly that allows you to get the value of the property,
   * or receive notification when the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly< std::string > property_resource() const;

  /** The current state of the renderer.
   * 
   * This can be a number between 0 and 63.
   * 
   * @newin{4,24}
   *
   * Default value: 0
   *
   * @return A PropertyProxy that allows you to get or set the value of the property,
   * or receive notification when the value of the property changes.
   */
  Glib::PropertyProxy< unsigned int > property_state() ;

/** The current state of the renderer.
   * 
   * This can be a number between 0 and 63.
   * 
   * @newin{4,24}
   *
   * Default value: 0
   *
   * @return A PropertyProxy_ReadOnly that allows you to get the value of the property,
   * or receive notification when the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly< unsigned int > property_state() const;

  /** A CSS stylesheet to apply to the SVG.
   * 
   * @newin{4,24}
   *
   * @return A PropertyProxy that allows you to get or set the value of the property,
   * or receive notification when the value of the property changes.
   */
  Glib::PropertyProxy< Glib::RefPtr<Glib::Bytes> > property_stylesheet() ;

/** A CSS stylesheet to apply to the SVG.
   * 
   * @newin{4,24}
   *
   * @return A PropertyProxy_ReadOnly that allows you to get the value of the property,
   * or receive notification when the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly< Glib::RefPtr<Glib::Bytes> > property_stylesheet() const;


public:

public:
  //C++ methods used to invoke GTK+ virtual functions:

protected:
  //GTK+ Virtual Functions (override these to change behaviour):

  //Default Signal Handlers::


};

} // namespace Gtk


namespace Glib
{
  /** A Glib::wrap() method for this object.
   *
   * @param object The C instance.
   * @param take_copy False if the result should take ownership of the C instance. True if it should take a new copy or ref.
   * @result A C++ instance that wraps this C instance.
   *
   * @relates Gtk::SvgWidget
   */
  GTKMM_API
  Gtk::SvgWidget* wrap(GtkSvgWidget* object, bool take_copy = false);
} //namespace Glib


#endif /* _GTKMM_SVGWIDGET_H */

