Kaydet (Commit) 688e32b7 authored tarafından Jan-Marek Glogowski's avatar Jan-Marek Glogowski Kaydeden (comit) Thorsten Behrens

KF5 minimal graphics support

This way we pass the "No mpGraphics set" message.

Change-Id: I097a823c295b251304dfbec8a71eba31b3d2b9ef
üst e3169172
......@@ -20,11 +20,13 @@
#include "Kf5Frame.hxx"
#include "Kf5Instance.hxx"
#include "Kf5Graphics.hxx"
#include "Kf5Widget.hxx"
#include <QtGui/QWindow>
Kf5Frame::Kf5Frame( Kf5Frame* pParent, SalFrameStyleFlags nStyle )
: m_bGraphicsInUse( false )
{
Kf5Instance *pInst = static_cast<Kf5Instance*>( GetSalData()->m_pInstance );
pInst->insertFrame( this );
......@@ -76,18 +78,43 @@ Kf5Frame::~Kf5Frame()
pInst->eraseFrame( this );
}
void Kf5Frame::TriggerPaintEvent()
{
QSize aSize( m_pQWidget->size() );
SalPaintEvent aPaintEvt(0, 0, aSize.width(), aSize.height(), true);
CallCallback(SalEvent::Paint, &aPaintEvt);
m_pQWidget->update();
}
SalGraphics* Kf5Frame::AcquireGraphics()
{
return nullptr;
if( m_bGraphicsInUse )
return nullptr;
if( !m_pGraphics.get() )
{
m_pGraphics.reset( new Kf5Graphics( this ) );
m_pQImage.reset( new QImage( m_pQWidget->size(), QImage::Format_ARGB32 ) );
m_pGraphics->ChangeQImage( m_pQImage.get() );
TriggerPaintEvent();
}
m_bGraphicsInUse = true;
return m_pGraphics.get();
}
void Kf5Frame::ReleaseGraphics( SalGraphics* pGraphics )
void Kf5Frame::ReleaseGraphics( SalGraphics* pSalGraph )
{
(void) pSalGraph;
assert( pSalGraph == m_pGraphics.get() );
m_bGraphicsInUse = false;
}
bool Kf5Frame::PostEvent(ImplSVEvent* pData)
bool Kf5Frame::PostEvent( ImplSVEvent* pData )
{
return false;
Kf5Instance *pInst = static_cast<Kf5Instance*>( GetSalData()->m_pInstance );
pInst->PostEvent( this, pData, SalEvent::UserEvent );
return true;
}
void Kf5Frame::SetTitle( const OUString& rTitle )
......@@ -112,14 +139,20 @@ void Kf5Frame::SetExtendedFrameStyle( SalExtStyle nExtStyle )
void Kf5Frame::Show( bool bVisible, bool bNoActivate )
{
assert( m_pQWidget.get() );
m_pQWidget->setVisible( bVisible );
}
void Kf5Frame::SetMinClientSize( long nWidth, long nHeight )
{
if( ! isChild() )
m_pQWidget->setMinimumSize( nWidth, nHeight );
}
void Kf5Frame::SetMaxClientSize( long nWidth, long nHeight )
{
if( ! isChild() )
m_pQWidget->setMaximumSize( nWidth, nHeight );
}
void Kf5Frame::SetPosSize( long nX, long nY, long nWidth, long nHeight, sal_uInt16 nFlags )
......@@ -128,6 +161,8 @@ void Kf5Frame::SetPosSize( long nX, long nY, long nWidth, long nHeight, sal_uInt
void Kf5Frame::GetClientSize( long& rWidth, long& rHeight )
{
rWidth = m_pQWidget->width();
rHeight = m_pQWidget->height();
}
void Kf5Frame::GetWorkArea( tools::Rectangle& rRect )
......@@ -136,7 +171,7 @@ void Kf5Frame::GetWorkArea( tools::Rectangle& rRect )
SalFrame* Kf5Frame::GetParent() const
{
return nullptr;
return m_pParent;
}
void Kf5Frame::SetWindowState( const SalFrameState* pState )
......
......@@ -23,21 +23,43 @@
#include <memory>
class Kf5Graphics;
class Kf5Instance;
class Kf5Widget;
class QWidget;
class QPaintDevice;
class QImage;
class Kf5Frame
: public SalFrame
{
std::unique_ptr< Kf5Widget > m_pQWidget;
friend class Kf5Widget;
std::unique_ptr< QWidget > m_pQWidget;
std::unique_ptr< QImage > m_pQImage;
std::unique_ptr< Kf5Graphics > m_pGraphics;
bool m_bGraphicsInUse;
SalFrameStyleFlags m_nStyle;
Kf5Frame *m_pParent;
bool isChild( bool bPlug = true, bool bSysChild = true )
{
SalFrameStyleFlags nMask = SalFrameStyleFlags::NONE;
if( bPlug )
nMask |= SalFrameStyleFlags::PLUG;
if( bSysChild )
nMask |= SalFrameStyleFlags::SYSTEMCHILD;
return bool(m_nStyle & nMask);
}
void TriggerPaintEvent();
public:
Kf5Frame( Kf5Frame* pParent, SalFrameStyleFlags nSalFrameStyle );
Kf5Frame( Kf5Frame* pParent,
SalFrameStyleFlags nSalFrameStyle );
virtual ~Kf5Frame() override;
Kf5Widget* GetQWidget() const { return m_pQWidget.get(); }
QWidget* GetQWidget() const { return m_pQWidget.get(); }
virtual SalGraphics* AcquireGraphics() override;
virtual void ReleaseGraphics( SalGraphics* pGraphics ) override;
......
......@@ -18,8 +18,19 @@
*/
#include "Kf5Graphics.hxx"
#include "Kf5Frame.hxx"
Kf5Graphics::Kf5Graphics()
#include <QtGui/QImage>
Kf5Graphics::Kf5Graphics( Kf5Frame *pFrame )
: m_pFrame( pFrame )
, m_pQImage( nullptr )
{
}
Kf5Graphics::Kf5Graphics( QImage *pQImage )
: m_pFrame( nullptr )
, m_pQImage( pQImage )
{
}
......@@ -27,6 +38,11 @@ Kf5Graphics::~Kf5Graphics()
{
}
void Kf5Graphics::ChangeQImage( QImage *pQImage )
{
m_pQImage = pQImage;
}
SalGraphicsImpl* Kf5Graphics::GetImpl() const
{
return nullptr;
......@@ -42,4 +58,38 @@ bool Kf5Graphics::supportsOperation( OutDevSupportType ) const
return false;
}
#if ENABLE_CAIRO_CANVAS
bool Kf5Graphics::SupportsCairo() const
{
return false;
}
cairo::SurfaceSharedPtr Kf5Graphics::CreateSurface(const cairo::CairoSurfaceSharedPtr& rSurface) const
{
return nullptr;
}
cairo::SurfaceSharedPtr Kf5Graphics::CreateSurface(const OutputDevice& rRefDevice, int x, int y, int width, int height) const
{
return nullptr;
}
cairo::SurfaceSharedPtr Kf5Graphics::CreateBitmapSurface(const OutputDevice& rRefDevice, const BitmapSystemData& rData, const Size& rSize) const
{
return nullptr;
}
css::uno::Any Kf5Graphics::GetNativeSurfaceHandle(cairo::SurfaceSharedPtr& rSurface, const basegfx::B2ISize& rSize) const
{
return css::uno::Any();
}
SystemFontData Kf5Graphics::GetSysFontData( int nFallbacklevel ) const
{
return SystemFontData();
}
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -22,19 +22,37 @@
#include <salgdi.hxx>
class Kf5Frame;
class QImage;
class Kf5Graphics : public SalGraphics
{
Kf5Frame* mpFrame;
Kf5Frame *m_pFrame;
QImage *m_pQImage;
public:
Kf5Graphics();
virtual ~Kf5Graphics() override;
Kf5Graphics( Kf5Frame *pFrame );
Kf5Graphics( QImage *pImage );
virtual ~Kf5Graphics() override;
void ChangeQImage( QImage *pImage );
virtual SalGraphicsImpl* GetImpl() const override;
virtual SystemGraphicsData
GetGraphicsData() const override;
virtual bool supportsOperation( OutDevSupportType ) const override;
virtual SystemGraphicsData GetGraphicsData() const override;
virtual bool supportsOperation( OutDevSupportType ) const override;
#if ENABLE_CAIRO_CANVAS
virtual bool SupportsCairo() const override;
virtual cairo::SurfaceSharedPtr CreateSurface(const cairo::CairoSurfaceSharedPtr& rSurface) const override;
virtual cairo::SurfaceSharedPtr CreateSurface(const OutputDevice& rRefDevice,
int x, int y, int width, int height) const override;
virtual cairo::SurfaceSharedPtr CreateBitmapSurface(const OutputDevice& rRefDevice,
const BitmapSystemData& rData, const Size& rSize) const override;
virtual css::uno::Any GetNativeSurfaceHandle(cairo::SurfaceSharedPtr& rSurface,
const basegfx::B2ISize& rSize) const override;
virtual SystemFontData GetSysFontData( int nFallbacklevel ) const override;
#endif // ENABLE_CAIRO_CANVAS
// GDI
virtual bool setClipRegion( const vcl::Region& ) override;
virtual void ResetClipRegion() override;
......
......@@ -20,6 +20,13 @@
#include "Kf5Widget.hxx"
#include <Kf5Widget.moc>
#include "Kf5Frame.hxx"
#include "Kf5Graphics.hxx"
#include <QtGui/QImage>
#include <QtGui/QPainter>
#include <QtGui/QPaintEvent>
Kf5Widget::Kf5Widget( Kf5Frame &rFrame, QWidget *parent, Qt::WindowFlags f )
: QWidget( parent, f )
, m_pFrame( &rFrame )
......@@ -31,4 +38,18 @@ Kf5Widget::~Kf5Widget()
{
}
void Kf5Widget::paintEvent( QPaintEvent *pEvent )
{
QPainter p( this );
p.drawImage( pEvent->rect().topLeft(), *m_pFrame->m_pQImage, pEvent->rect() );
}
void Kf5Widget::resizeEvent( QResizeEvent* )
{
QImage *pImage = new QImage( m_pFrame->m_pQWidget->size(), QImage::Format_ARGB32 );
m_pFrame->m_pGraphics->ChangeQImage( pImage );
m_pFrame->m_pQImage.reset( pImage );
m_pFrame->CallCallback( SalEvent::Resize, nullptr );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -22,6 +22,8 @@
#include <QtWidgets/QWidget>
class Kf5Frame;
class QPaintEvent;
class QResizeEvent;
class Kf5Widget
: public QWidget
......@@ -30,6 +32,9 @@ class Kf5Widget
Kf5Frame *m_pFrame;
void paintEvent( QPaintEvent* ) override;
void resizeEvent( QResizeEvent* ) override;
public:
Kf5Widget( Kf5Frame &rFrame,
QWidget *parent = Q_NULLPTR,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment