diff options
author | Tor Lillqvist <tlillqvist@suse.com> | 2012-06-05 16:35:49 +0300 |
---|---|---|
committer | Tor Lillqvist <tlillqvist@suse.com> | 2012-06-05 17:17:41 +0300 |
commit | 92f23297c93dc105e2ffd9ff09c0dafff1ee0fd3 (patch) | |
tree | c3ba983227366359d40d6a41ead18d625303005e | |
parent | 71dbf5bfd0b9622ad485a5b7620e11d8405ed474 (diff) |
Work in progress: Add "touch" module for Android and iOS stuff
Change-Id: I10652743194d44d8465ddf8079f6b4458e6710f9
-rw-r--r-- | Makefile.top | 1 | ||||
-rw-r--r-- | Module_tail_build.mk | 1 | ||||
-rw-r--r-- | Repository.mk | 8 | ||||
-rw-r--r-- | RepositoryModule_ooo.mk | 1 | ||||
-rw-r--r-- | touch/CustomTarget_touch_javamaker.mk | 21 | ||||
-rw-r--r-- | touch/InternalUnoApi_touch.mk | 33 | ||||
-rw-r--r-- | touch/Library_libotouch.mk | 39 | ||||
-rw-r--r-- | touch/Makefile | 7 | ||||
-rw-r--r-- | touch/Module_touch.mk | 22 | ||||
-rw-r--r-- | touch/Package_inc.mk | 13 | ||||
-rw-r--r-- | touch/README | 20 | ||||
-rw-r--r-- | touch/idl/org/libreoffice/touch/Document.idl | 25 | ||||
-rw-r--r-- | touch/idl/org/libreoffice/touch/DocumentRenderCallback.idl | 25 | ||||
-rw-r--r-- | touch/idl/org/libreoffice/touch/XDocument.idl | 73 | ||||
-rw-r--r-- | touch/idl/org/libreoffice/touch/XDocumentRenderCallback.idl | 55 | ||||
-rw-r--r-- | touch/inc/touch/libotouch.hxx | 15 | ||||
-rw-r--r-- | touch/prj/build.lst | 1 | ||||
-rw-r--r-- | touch/prj/d.lst | 0 | ||||
-rw-r--r-- | touch/source/generic/libotouch.cxx | 11 | ||||
-rw-r--r-- | touch/source/ios/ios.cxx | 10 | ||||
-rw-r--r-- | touch/source/uno/Document.cxx | 213 |
21 files changed, 594 insertions, 0 deletions
diff --git a/Makefile.top b/Makefile.top index a560236443a6..e243c3b2640d 100644 --- a/Makefile.top +++ b/Makefile.top @@ -130,6 +130,7 @@ test\ testtools\ toolkit\ tools\ +touch\ translations\ twain\ ucb\ diff --git a/Module_tail_build.mk b/Module_tail_build.mk index 949195aeb1d4..334bce88b2d4 100644 --- a/Module_tail_build.mk +++ b/Module_tail_build.mk @@ -110,6 +110,7 @@ $(eval $(call gb_Module_add_moduledirs,tail_end,\ test \ toolkit \ tools \ + touch \ twain \ ucb \ unixODBC \ diff --git a/Repository.mk b/Repository.mk index 2edad91db13a..2ac927d3dbdf 100644 --- a/Repository.mk +++ b/Repository.mk @@ -385,6 +385,14 @@ $(eval $(call gb_Helper_register_libraries,OOOLIBS, \ xsltfilter \ )) +ifneq (,$(filter ANDROID IOS,$(OS))) + +$(eval $(call gb_Helper_register_libraries,OOOLIBS, \ + libotouch \ +)) + +endif + ifeq ($(filter MACOSX WNT,$(OS)),) $(eval $(call gb_Helper_register_libraries,OOOLIBS, \ diff --git a/RepositoryModule_ooo.mk b/RepositoryModule_ooo.mk index ca84fcc0f60a..6d879c6b849c 100644 --- a/RepositoryModule_ooo.mk +++ b/RepositoryModule_ooo.mk @@ -133,6 +133,7 @@ $(eval $(call gb_Module_add_moduledirs,ooo,\ testtools \ toolkit \ tools \ + touch \ $(if $(filter TRANSLATIONS,$(BUILD_TYPE)),\ translations \ ) \ diff --git a/touch/CustomTarget_touch_javamaker.mk b/touch/CustomTarget_touch_javamaker.mk new file mode 100644 index 000000000000..a375c74110c2 --- /dev/null +++ b/touch/CustomTarget_touch_javamaker.mk @@ -0,0 +1,21 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# Copyright 2012 LibreOffice contributors. +# +# 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/. + +$(eval $(call gb_CustomTarget_CustomTarget,touch/touch_javamaker)) + +touch_javamaker_DIR := $(call gb_CustomTarget_get_workdir,touch) + +$(call gb_CustomTarget_get_target,touch/touch_javamaker) : $(touch_javamaker_DIR)/done + +$(touch_javamaker_DIR)/done : $(call gb_UnoApiTarget_get_target,touch) \ + $(call gb_Executable_get_target_for_build,javamaker) | $(touch_javamaker_DIR)/.dir + $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),JVM,1) + $(call gb_Helper_abbreviate_dirs, \ + $(call gb_Helper_execute,javamaker -BUCR -nD -O$(touch_javamaker_DIR)/class -X$(OUTDIR)/bin/types.rdb $<) && touch $@) + +# vim: set noet sw=4 ts=4: diff --git a/touch/InternalUnoApi_touch.mk b/touch/InternalUnoApi_touch.mk new file mode 100644 index 000000000000..bb03402b28e4 --- /dev/null +++ b/touch/InternalUnoApi_touch.mk @@ -0,0 +1,33 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# Copyright 2012 LibreOffice contributors. +# +# 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/. + +$(eval $(call gb_InternalUnoApi_InternalUnoApi,touch)) + +$(eval $(call gb_InternalUnoApi_use_api,touch,\ + udkapi \ +)) + +$(eval $(call gb_InternalUnoApi_define_api_dependencies,touch, \ + offapi,\ + udkapi \ +)) + +$(eval $(call gb_InternalUnoApi_set_include,touch,\ + -I$(SRCDIR)/touch/idl \ + -I$(OUTDIR)/idl \ + $$(INCLUDE) \ +)) + +$(eval $(call gb_InternalUnoApi_add_idlfiles,touch,touch/idl/org/libreoffice/touch,\ + Document \ + DocumentRenderCallback \ + XDocument \ + XDocumentRenderCallback \ +)) + +# vim: set noet sw=4 ts=4: diff --git a/touch/Library_libotouch.mk b/touch/Library_libotouch.mk new file mode 100644 index 000000000000..be355e3868ad --- /dev/null +++ b/touch/Library_libotouch.mk @@ -0,0 +1,39 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# Copyright 2012 LibreOffice contributors. +# +# 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/. + +$(eval $(call gb_Library_Library,libotouch)) + +$(eval $(call gb_Library_set_include,libotouch,\ + -I$(SRCDIR)/libotouch/inc \ + $$(INCLUDE) \ +)) + +$(eval $(call gb_Library_use_internal_comprehensive_api,libotouch,\ + udkapi \ + offapi \ + touch \ +)) + +$(eval $(call gb_Library_use_libraries,libotouch,\ + $(gb_STDLIBS) \ +)) + +$(eval $(call gb_Library_add_exception_objects,libotouch,\ + touch/source/uno/Document \ + touch/source/generic/libotouch \ +)) + +ifeq ($(OS),IOS) + +$(eval $(call gb_Library_add_objcxx_objects,libotouch,\ + touch/source/ios/ios \ +)) + +endif + +# vim: set noet sw=4 ts=4: diff --git a/touch/Makefile b/touch/Makefile new file mode 100644 index 000000000000..ccb1c85a04da --- /dev/null +++ b/touch/Makefile @@ -0,0 +1,7 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- + +module_directory:=$(dir $(realpath $(firstword $(MAKEFILE_LIST)))) + +include $(module_directory)/../solenv/gbuild/partial_build.mk + +# vim: set noet sw=4 ts=4: diff --git a/touch/Module_touch.mk b/touch/Module_touch.mk new file mode 100644 index 000000000000..fde090d3be23 --- /dev/null +++ b/touch/Module_touch.mk @@ -0,0 +1,22 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# Copyright 2012 LibreOffice contributors. +# +# 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/. + +$(eval $(call gb_Module_Module,touch)) + +ifneq (,$(filter IOS ANDROID,$(OS))) + +$(eval $(call gb_Module_add_targets,touch,\ + CustomTarget_touch_javamaker \ + InternalUnoApi_touch \ + Library_libotouch \ + Package_inc \ +)) + +endif + +# vim: set noet sw=4 ts=4: diff --git a/touch/Package_inc.mk b/touch/Package_inc.mk new file mode 100644 index 000000000000..c7c393d4819a --- /dev/null +++ b/touch/Package_inc.mk @@ -0,0 +1,13 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# Copyright 2012 LibreOffice contributors. +# +# 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/. + +$(eval $(call gb_Package_Package,touch_inc,$(SRCDIR)/touch/inc)) + +$(eval $(call gb_Package_add_file,touch_inc,inc/touch/libotouch.hxx,touch/libotouch.hxx)) + +# vim: set noet sw=4 ts=4: diff --git a/touch/README b/touch/README new file mode 100644 index 000000000000..f1be5dfc5b2a --- /dev/null +++ b/touch/README @@ -0,0 +1,20 @@ +Library that provides API used by LO-based apps on touch devices + +This is all very much a work in progress and the design can change radically +at any moment. The name "touch" for this module and the library name +"libotouch" are not fixed and might change if somebody comes up with niftier +names. + +This module will contain an UNO API to be called either from Java (for +Android), or directly (iOS). (Or, on iOS, possibly through some thin +Objective-C layer to hide the UNO.) + +The API will provide a mechanism to render "tiles" of a document at some +requested zoom level. Initially for viewer style apps, but the work should +ideally be open-ended to potentially be a base for editing apps, too. + +For starters, concentrating on text ("Writer") documents as they are +easiest. With spreadsheets come the added complexity of the cell grid being +potentially unbounded and no clear "page" area. With presentations come the +animation complications, and possibly LO-based viewer apps for presentations +will be done in a totally different fashion. diff --git a/touch/idl/org/libreoffice/touch/Document.idl b/touch/idl/org/libreoffice/touch/Document.idl new file mode 100644 index 000000000000..c05437ce3473 --- /dev/null +++ b/touch/idl/org/libreoffice/touch/Document.idl @@ -0,0 +1,25 @@ +// -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + +// Copyright 2012 LibreOffice contributors. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License 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 org_libreoffice_touch_Document_idl +#define org_libreoffice_touch_Document_idl + +#include <org/libreoffice/touch/XDocument.idl> + +module org { module libreoffice { module touch { + +service Document: + XDocument { + create( [in] string uri ); + }; + +}; }; }; + +#endif + +// vim:set shiftwidth=4 softtabstop=4 expandtab: diff --git a/touch/idl/org/libreoffice/touch/DocumentRenderCallback.idl b/touch/idl/org/libreoffice/touch/DocumentRenderCallback.idl new file mode 100644 index 000000000000..95e7e7730ed8 --- /dev/null +++ b/touch/idl/org/libreoffice/touch/DocumentRenderCallback.idl @@ -0,0 +1,25 @@ +// -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + +// Copyright 2012 LibreOffice contributors. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License 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 org_libreoffice_touch_DocumentRenderCallback_idl +#define org_libreoffice_touch_DocumentRenderCallback_idl + +#include <org/libreoffice/touch/XDocumentRenderCallback.idl> + +module org { module libreoffice { module touch { + +service DocumentRenderCallback: XDocumentRenderCallback +{ + create(); +}; + +}; }; }; + +#endif + +// vim:set shiftwidth=4 softtabstop=4 expandtab: diff --git a/touch/idl/org/libreoffice/touch/XDocument.idl b/touch/idl/org/libreoffice/touch/XDocument.idl new file mode 100644 index 000000000000..bc3d563d8708 --- /dev/null +++ b/touch/idl/org/libreoffice/touch/XDocument.idl @@ -0,0 +1,73 @@ +// -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + +// Copyright 2012 LibreOffice contributors. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License 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 org_libreoffice_touch_XDocument_idl +#define org_libreoffice_touch_XDocument_idl + +#include <com/sun/star/uno/XInterface.idl> +#include <com/sun/star/lang/IllegalArgumentException.idl> + +module org { module libreoffice { module touch { + +// Note that this is work in progress + +// Error handling? Presumably for true errors expected to be uncommon, or +// invalid usage, the methods should throw exceptions. + +// Multithreaded use of this is undefined (the intent obviously is that this +// API is called in another thread than the "main" UI thread, but calling this +// stuff on the same object simultaneously in multiple threads is undefined). + +// Represents one (Writer, for now) document + +interface XDocumentRenderCallback; + +interface XDocument: com::sun::star::uno::XInterface +{ + [attribute, readonly] long numberOfPages; + + // Renders a (part of a) page into a square bitmap, for Android in the + // android.graphics.Bitmap.Config.ARGB_8888 format. Despite the name, the + // order of bytes is R,G,B,A. Is this reliable, or coincidental depending + // on Android version and/or hardware? TBD. Will the same format be useful + // also for iOS? TBD. + + // buffer must have an exact number of bytes for a square number of + // pixels, At the UNO level buffer is represented as the address of its + // bytes, i.e. on Android it must be a "direct" ByteBuffer for that to be + // meaningful. + + // listener gets a "reasonable" number of callbacks during the rendering + // if it takes "significantly" long, and can inerrupt the rendering. + + // zoomLevel is 0 for whole page, 1 for tiled into four, etc. + + // x and y are in [0..2^zoomLevel] + + // Should we have this method copy the rendered buffer into a Bitmap + // instead and return that? A Bitmap is presumably what the caller wants + // anyway? + + // Or should we just go OpenGL ES and render into a texture? + + void render( [in] hyper buffer, + [in] long bufferSize, + [in] XDocumentRenderCallback listener, + [in] long pageNo, + [in] long zoomLevel, + [in] long x, + [in] long y) + raises( com::sun::star::lang::IllegalArgumentException ); + +}; + +}; }; }; + +#endif + +// vim:set shiftwidth=4 softtabstop=4 expandtab: diff --git a/touch/idl/org/libreoffice/touch/XDocumentRenderCallback.idl b/touch/idl/org/libreoffice/touch/XDocumentRenderCallback.idl new file mode 100644 index 000000000000..62da11c2eedb --- /dev/null +++ b/touch/idl/org/libreoffice/touch/XDocumentRenderCallback.idl @@ -0,0 +1,55 @@ +// -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + +// Copyright 2012 LibreOffice contributors. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License 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 org_libreoffice_touch_XDocumentRenderCallback_idl +#define org_libreoffice_touch_XDocumentRenderCallback_idl + +#include <com/sun/star/uno/XInterface.idl> + +module org { module libreoffice { module touch { + +interface XDocument; + +interface XDocumentRenderCallback: com::sun::star::uno::XInterface +{ + + // Return false from any of the callbacks if the render result isn't + // wanted after all and the rendering should stop + + // pageWidth and pageHeight are in [1..squareSide] where squareSide is + // the side of the render target square implied by the size of the + // buffer passed to render(). + + // This always called at the start of rendering one page + + boolean start( [in] long pageWidth, + [in] long pageHeight ); + + // Called with unspecified frequency during the rendering, possibly + // even not at all, but the intent is to call this with "reasonable" + // frquency if the rendering takes a "long" time. Maybe around ten + // times a second? + + // There is no guarantee in which order the bitmap is being rendered + + // fraction is in [0..1] and is an approximation of unknown exactness + // If the rendering code doesn't even bother guessing, it can pass + // zero all the time. The fraction in subsequent calls never + // decreases. + + boolean progress( [in] float fraction ); + + // There is no callback when the rendering finishes; render() just + // returns. +}; + +}; }; }; + +#endif + +// vim:set shiftwidth=4 softtabstop=4 expandtab: diff --git a/touch/inc/touch/libotouch.hxx b/touch/inc/touch/libotouch.hxx new file mode 100644 index 000000000000..acfa0c1b18c5 --- /dev/null +++ b/touch/inc/touch/libotouch.hxx @@ -0,0 +1,15 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * Copyright 2012 LibreOffice contributors. + * + * 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 _TOUCH_LIBOTOUCH_HXX +#define _TOUCH_LIBOTOUCH_HXX + +#endif // _TOUCH_LIBOTOUCH_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/touch/prj/build.lst b/touch/prj/build.lst new file mode 100644 index 000000000000..4709170e900f --- /dev/null +++ b/touch/prj/build.lst @@ -0,0 +1 @@ +th touch : sw sc diff --git a/touch/prj/d.lst b/touch/prj/d.lst new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/touch/prj/d.lst diff --git a/touch/source/generic/libotouch.cxx b/touch/source/generic/libotouch.cxx new file mode 100644 index 000000000000..ce572e14d9d9 --- /dev/null +++ b/touch/source/generic/libotouch.cxx @@ -0,0 +1,11 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * Copyright 2012 LibreOffice contributors. + * + * 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/. + */ + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/touch/source/ios/ios.cxx b/touch/source/ios/ios.cxx new file mode 100644 index 000000000000..be06b704a2ee --- /dev/null +++ b/touch/source/ios/ios.cxx @@ -0,0 +1,10 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * Copyright 2012 LibreOffice contributors. + * + * 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/. + */ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/touch/source/uno/Document.cxx b/touch/source/uno/Document.cxx new file mode 100644 index 000000000000..975e9ccca051 --- /dev/null +++ b/touch/source/uno/Document.cxx @@ -0,0 +1,213 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * Copyright 2012 LibreOffice contributors. + * + * 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/. + */ + +// NOTE: Work in progress, most likely makes little sense + +#include <com/sun/star/awt/XDevice.hpp> +#include <com/sun/star/awt/XToolkit.hpp> +#include <com/sun/star/beans/NamedValue.hpp> +#include <com/sun/star/beans/PropertyValues.hpp> +#include <com/sun/star/frame/XComponentLoader.hpp> +#include <com/sun/star/frame/XDesktop.hpp> +#include <com/sun/star/lang/XInitialization.hpp> +#include <com/sun/star/view/XRenderable.hpp> + +#include <cppuhelper/implbase1.hxx> +#include <cppuhelper/basemutex.hxx> + +#include <org/libreoffice/touch/Document.hpp> + +using namespace ::com::sun::star; + +using ::rtl::OUString; +using ::osl::MutexGuard; + +namespace org { namespace libreoffice { namespace touch +{ + +class DocumentImpl: + public XDocument +{ + +private: + OUString m_sURI; + uno::Reference< uno::XComponentContext > m_rContext; + uno::Reference< lang::XComponent > m_xComponent; + uno::Reference< frame::XController > m_xController; + uno::Reference< view::XRenderable > m_xRenderable; + + beans::PropertyValues m_aRenderProps; + + typedef ::cppu::WeakImplHelper1< frame::XController > MyXController_Base; + + class MyXController: + public MyXController_Base, + public ::cppu::BaseMutex + { + private: + uno::Reference< frame::XFrame > m_xFrame; + uno::Reference< frame::XModel > m_xModel; + + public: + virtual void SAL_CALL + attachFrame( const uno::Reference< frame::XFrame >& xFrame ) + throw( uno::RuntimeException ) + { + m_xFrame = xFrame; + } + + virtual sal_Bool SAL_CALL + attachModel( const uno::Reference< frame::XModel >& xModel ) + throw( uno::RuntimeException ) + { + m_xModel = xModel; + return sal_True; + } + + virtual sal_Bool SAL_CALL + suspend( sal_Bool /* bSuspend */ ) + throw( uno::RuntimeException ) + { + return sal_False; + } + + virtual uno::Any SAL_CALL getViewData() + throw( uno::RuntimeException ) + { + return uno::Any(); + } + + virtual void SAL_CALL restoreViewData( const uno::Any& /* data */ ) + throw ( uno::RuntimeException ) + { + } + + virtual uno::Reference< frame::XModel > SAL_CALL + getModel() + throw ( uno::RuntimeException ) + { + return m_xModel; + } + + virtual uno::Reference< frame::XFrame > SAL_CALL + getFrame() + throw ( uno::RuntimeException ) + { + return m_xFrame; + } + + virtual void SAL_CALL + dispose() + throw ( uno::RuntimeException ) + { + } + + virtual void SAL_CALL + addEventListener( const uno::Reference< lang::XEventListener >& /* xListener */ ) + throw ( uno::RuntimeException ) + { + } + + virtual void SAL_CALL + removeEventListener( const uno::Reference< lang::XEventListener >& /* xListener */ ) + throw ( uno::RuntimeException ) + { + } + }; + +protected: + DocumentImpl( const uno::Reference< uno::XComponentContext > context ): + m_rContext( context ) + { + } + + virtual ~DocumentImpl() + { + } + + // XInitialization + virtual void SAL_CALL + initialize( const uno::Sequence< uno::Any >& arguments ) + throw ( uno::Exception, uno::RuntimeException ) + { + if ( arguments.getLength() != 1 ) + throw lang::IllegalArgumentException( OUString(), static_cast<uno::Reference< uno::XInterface> >(this), 1 ); + + uno::Sequence< beans::NamedValue > settings; + if ( arguments[0] >>= m_sURI ) + { + // create( [in] string uri ); + uno::Reference< frame::XDesktop > desktop( m_rContext->getServiceManager()->createInstanceWithContext( "com.sun.star.frame.Desktop", m_rContext ), uno::UNO_QUERY_THROW ); + uno::Reference< frame::XComponentLoader > componentLoader( desktop, uno::UNO_QUERY_THROW ); + + (void) componentLoader; + + beans::PropertyValues loadProps(3); + loadProps[0].Name = "Hidden"; + loadProps[0].Value <<= sal_Bool(true); + loadProps[1].Name = "ReadOnly"; + loadProps[1].Value <<= sal_Bool(true); + loadProps[2].Name = "Preview"; + loadProps[2].Value <<= sal_Bool(true); + + m_xComponent = componentLoader->loadComponentFromURL( m_sURI, "_blank", 0, loadProps ); + + uno::Reference< awt::XToolkit > toolkit( m_rContext->getServiceManager()->createInstanceWithContext( "com.sun.star.awt.Toolkit", m_rContext ), uno::UNO_QUERY_THROW ); + + uno::Reference< awt::XDevice > device( toolkit->createScreenCompatibleDevice( 1024, 1024 ) ); + + m_xRenderable = uno::Reference< view::XRenderable >(m_rContext->getServiceManager()->createInstanceWithContext( "com.sun.star.view.Renderable", m_rContext ), uno::UNO_QUERY_THROW ); + + m_xController = new MyXController(); + + m_aRenderProps.realloc( 3 ); + m_aRenderProps[0].Name = "IsPrinter"; + m_aRenderProps[0].Value <<= sal_Bool(true); + m_aRenderProps[1].Name = "RenderDevice"; + m_aRenderProps[1].Value <<= device; + m_aRenderProps[2].Name = "View"; + m_aRenderProps[2].Value <<= m_xController; + } + } + + // XDocument + virtual sal_Int32 SAL_CALL + getNumberOfPages() + throw ( uno::RuntimeException ) + { + uno::Any selection; + selection <<= m_xComponent; + + return m_xRenderable->getRendererCount( selection, m_aRenderProps ); + } + + virtual void SAL_CALL + render( sal_Int64 buffer, + sal_Int32 bufferSize, + const uno::Reference< XDocumentRenderCallback >& listener, + sal_Int32 pageNo, + sal_Int32 zoomLevel, + sal_Int32 x, + sal_Int32 y ) + throw ( lang::IllegalArgumentException, uno::RuntimeException) + { + (void) buffer; + (void) bufferSize; + (void) listener; + (void) pageNo; + (void) zoomLevel; + (void) x; + (void) y ; + } + +}; + +} } } // namespace org::libreoffice::touch + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |