summaryrefslogtreecommitdiffstats
path: root/vcl/inc/unx/gendata.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'vcl/inc/unx/gendata.hxx')
-rw-r--r--vcl/inc/unx/gendata.hxx106
1 files changed, 106 insertions, 0 deletions
diff --git a/vcl/inc/unx/gendata.hxx b/vcl/inc/unx/gendata.hxx
new file mode 100644
index 000000000..f276b988f
--- /dev/null
+++ b/vcl/inc/unx/gendata.hxx
@@ -0,0 +1,106 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_VCL_INC_GENERIC_GENDATA_HXX
+#define INCLUDED_VCL_INC_GENERIC_GENDATA_HXX
+
+#include <osl/socket.hxx>
+
+#include <svdata.hxx>
+
+#include <memory>
+
+class FreetypeManager;
+class SalGenericDisplay;
+namespace psp
+{
+class PrintFontManager;
+class PrinterInfoManager;
+}
+
+// SalData is a bit of a mess. For ImplSVData we need a SalData base class.
+// Windows, MacOS and iOS implement their own SalData class, so there is no
+// way to do inheritance from the "top" in all plugins. We also really don't
+// want to rename GenericUnixSalData and don't want to reinterpret_cast some
+// dummy pointer everywhere, so this seems the only sensible solution.
+class VCL_PLUGIN_PUBLIC SalData
+{
+protected:
+ SalData();
+
+public:
+ virtual ~SalData();
+};
+
+// This class is kind of a misnomer. What this class is mainly about is the
+// usage of Freetype and Fontconfig, which happens to match all *nix backends;
+// except that the osx and ios backends are *nix but don't use this.
+class VCL_PLUGIN_PUBLIC GenericUnixSalData : public SalData
+{
+ friend class ::psp::PrinterInfoManager;
+
+ SalGenericDisplay* m_pDisplay;
+ // cached hostname to avoid slow lookup
+ OUString m_aHostname;
+ // for transient storage of unicode strings eg. 'u123' by input methods
+ OUString m_aUnicodeEntry;
+
+ std::unique_ptr<FreetypeManager> m_pFreetypeManager;
+ std::unique_ptr<psp::PrintFontManager> m_pPrintFontManager;
+ std::unique_ptr<psp::PrinterInfoManager> m_pPrinterInfoManager;
+
+ void InitFreetypeManager();
+ void InitPrintFontManager();
+
+public:
+ GenericUnixSalData();
+ virtual ~GenericUnixSalData() override;
+ virtual void Dispose();
+
+ SalGenericDisplay* GetDisplay() const { return m_pDisplay; }
+ void SetDisplay(SalGenericDisplay* pDisp) { m_pDisplay = pDisp; }
+
+ const OUString& GetHostname()
+ {
+ if (m_aHostname.isEmpty())
+ osl_getLocalHostname(&m_aHostname.pData);
+ return m_aHostname;
+ }
+
+ OUString& GetUnicodeCommand() { return m_aUnicodeEntry; }
+
+ FreetypeManager* GetFreetypeManager()
+ {
+ if (!m_pFreetypeManager)
+ InitFreetypeManager();
+ return m_pFreetypeManager.get();
+ }
+
+ psp::PrintFontManager* GetPrintFontManager()
+ {
+ if (!m_pPrintFontManager)
+ InitPrintFontManager();
+ // PrintFontManager needs the FreetypeManager
+ assert(m_pFreetypeManager);
+ return m_pPrintFontManager.get();
+ }
+
+ // Mostly useful for remote protocol backends
+ virtual void ErrorTrapPush() = 0;
+ virtual bool ErrorTrapPop(bool bIgnoreError = true) = 0; // true on error
+};
+
+inline GenericUnixSalData* GetGenericUnixSalData()
+{
+ return static_cast<GenericUnixSalData*>(ImplGetSVData()->mpSalData);
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */