summaryrefslogtreecommitdiffstats
path: root/src/ui/dialog/aboutbox.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/dialog/aboutbox.cpp')
-rw-r--r--src/ui/dialog/aboutbox.cpp224
1 files changed, 224 insertions, 0 deletions
diff --git a/src/ui/dialog/aboutbox.cpp b/src/ui/dialog/aboutbox.cpp
new file mode 100644
index 0000000..72d31cc
--- /dev/null
+++ b/src/ui/dialog/aboutbox.cpp
@@ -0,0 +1,224 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/**
+ * @file
+ * Inkscape About box - implementation.
+ */
+/* Authors:
+ * Derek P. Moore <derekm@hackunix.org>
+ * MenTaLguY <mental@rydia.net>
+ * Kees Cook <kees@outflux.net>
+ * Jon Phillips <jon@rejon.org>
+ * Abhishek Sharma
+ *
+ * Copyright (C) 2004 Derek P. Moore
+ * Copyright 2004 Kees Cook
+ * Copyright 2004 Jon Phillips
+ * Copyright 2005 MenTaLguY
+ *
+ * Released under GNU GPL v2+, read the file 'COPYING' for more information.
+ */
+
+#include "aboutbox.h"
+
+#include <fstream>
+
+#include <glibmm/fileutils.h>
+#include <glibmm/i18n.h>
+#include <glibmm/miscutils.h>
+
+#include <gtkmm/aspectframe.h>
+#include <gtkmm/textview.h>
+
+#include "document.h"
+#include "inkscape-version.h"
+#include "path-prefix.h"
+#include "text-editing.h"
+
+#include "object/sp-text.h"
+
+#include "ui/icon-names.h"
+#include "ui/view/svg-view-widget.h"
+
+#include "util/units.h"
+
+
+
+namespace Inkscape {
+namespace UI {
+namespace Dialog {
+
+static AboutBox *window=nullptr;
+
+void AboutBox::show_about() {
+ if (!window)
+ window = new AboutBox();
+ window->show();
+}
+
+void AboutBox::hide_about() {
+ if (window)
+ window->hide();
+}
+
+/**
+ * Constructor
+ */
+AboutBox::AboutBox()
+ : _splash_widget(nullptr)
+{
+ // call this first
+ initStrings();
+
+ // Insert the Splash widget. This is placed directly into the
+ // content area of the dialog, whereas everything else is placed
+ // automatically by the Gtk::AboutDialog parent class
+ build_splash_widget();
+ if (_splash_widget) {
+ get_content_area()->pack_end(*manage(_splash_widget), true, true);
+ _splash_widget->show_all();
+ }
+
+ // Set Application metadata, which will be automatically
+ // inserted into text widgets by the Gtk::AboutDialog parent class
+ // clang-format off
+ set_program_name ( "Inkscape");
+ set_version ( Inkscape::version_string);
+ set_logo_icon_name( INKSCAPE_ICON("org.inkscape.Inkscape"));
+ set_website ( "https://www.inkscape.org");
+ set_website_label (_("Inkscape website"));
+ set_license_type (Gtk::LICENSE_GPL_3_0);
+ set_copyright (_("© 2020 Inkscape Developers"));
+ set_comments (_("Open Source Scalable Vector Graphics Editor\n"
+ "Draw Freely."));
+ // clang-format on
+
+ get_content_area()->set_border_width(3);
+ get_action_area()->set_border_width(3);
+}
+
+/**
+ * @brief Create a Gtk::AspectFrame containing the splash image
+ */
+void AboutBox::build_splash_widget() {
+ /* TRANSLATORS: This is the filename of the `About Inkscape' picture in
+ the `screens' directory. Thus the translation of "about.svg" should be
+ the filename of its translated version, e.g. about.zh.svg for Chinese.
+
+ Please don't translate the filename unless the translated picture exists. */
+
+ // Try to get the translated version of the 'About Inkscape' file first. If the
+ // translation fails, or if the file does not exist, then fall-back to the
+ // default untranslated "about.svg" file
+ //
+ // FIXME? INKSCAPE_SCREENSDIR and "about.svg" are in UTF-8, not the
+ // native filename encoding... and the filename passed to sp_document_new
+ // should be in UTF-*8..
+ auto about = Glib::build_filename(INKSCAPE_SCREENSDIR, _("about.svg"));
+ if (!Glib::file_test (about, Glib::FILE_TEST_EXISTS)) {
+ about = Glib::build_filename(INKSCAPE_SCREENSDIR, "about.svg");
+ }
+
+ // Create an Inkscape document from the 'About Inkscape' picture
+ SPDocument *doc=SPDocument::createNewDoc (about.c_str(), TRUE);
+
+ // Leave _splash_widget as a nullptr if there is no document
+ if(doc) {
+ SPObject *version = doc->getObjectById("version");
+ if ( version && SP_IS_TEXT(version) ) {
+ sp_te_set_repr_text_multiline (SP_TEXT (version), Inkscape::version_string);
+ }
+ doc->ensureUpToDate();
+
+ auto viewer = Gtk::manage(new Inkscape::UI::View::SVGViewWidget(doc));
+
+ // temporary hack: halve the dimensions so the dialog will fit
+ double width=doc->getWidth().value("px") / 2.0;
+ double height=doc->getHeight().value("px") / 2.0;
+ viewer->setResize(width, height);
+
+ _splash_widget = new Gtk::AspectFrame();
+ _splash_widget->unset_label();
+ _splash_widget->set_shadow_type(Gtk::SHADOW_NONE);
+ _splash_widget->property_ratio() = width / height;
+ _splash_widget->add(*viewer);
+ }
+}
+
+/**
+ * @brief Read the author and translator credits from file
+ */
+void AboutBox::initStrings() {
+ //##############################
+ //# A U T H O R S
+ //##############################
+
+ // Create an empty vector to store the list of authors
+ std::vector<Glib::ustring> authors;
+
+ // Try to copy the list of authors from the "AUTHORS" file, which
+ // should have been installed into the share/doc directory
+ auto authors_filename = Glib::build_filename(INKSCAPE_DOCDIR, "AUTHORS");
+ std::ifstream authors_filestream(authors_filename);
+ if(authors_filestream) {
+ std::string author_line;
+
+ while (std::getline(authors_filestream, author_line)) {
+ authors.emplace_back(author_line);
+ }
+ }
+
+ // Set the author credits in this dialog, using the author list
+ set_authors(authors);
+
+ //##############################
+ //# T R A N S L A T O R S
+ //##############################
+
+ Glib::ustring translators_text;
+
+ // TRANSLATORS: Put here your name (and other national contributors')
+ // one per line in the form of: name surname (email). Use \n for newline.
+ Glib::ustring thisTranslation = _("translator-credits");
+
+ /**
+ * See if the translators for the current language
+ * made an entry for "translator-credits". If it exists,
+ * put it at the top of the window, add some space between
+ * it and the list of all translators.
+ *
+ * NOTE: Do we need 2 more .po entries for titles:
+ * "translators for this language"
+ * "all translators" ??
+ */
+ if (thisTranslation != "translator-credits") {
+ translators_text.append(thisTranslation);
+ translators_text.append("\n\n\n");
+ }
+
+ auto translators_filename = Glib::build_filename(INKSCAPE_DOCDIR, "TRANSLATORS");
+
+ if (Glib::file_test (translators_filename, Glib::FILE_TEST_EXISTS)) {
+ auto all_translators = Glib::file_get_contents(translators_filename);
+ translators_text.append(all_translators);
+ }
+
+ set_translator_credits(translators_text);
+}
+
+void AboutBox::on_response(int response_id) {
+ hide();
+}
+} // namespace Dialog
+} // namespace UI
+} // namespace Inkscape
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :