forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			75 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 | |
|  *
 | |
|  * 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 __mozilla_widget_nsShmImage_h__
 | |
| #define __mozilla_widget_nsShmImage_h__
 | |
| 
 | |
| #if defined(MOZ_X11)
 | |
| #  define MOZ_HAVE_SHMIMAGE
 | |
| #endif
 | |
| 
 | |
| #ifdef MOZ_HAVE_SHMIMAGE
 | |
| 
 | |
| #include "mozilla/gfx/2D.h"
 | |
| #include "nsIWidget.h"
 | |
| #include "Units.h"
 | |
| 
 | |
| #include <X11/Xlib-xcb.h>
 | |
| #include <xcb/shm.h>
 | |
| 
 | |
| class nsShmImage {
 | |
|   // bug 1168843, compositor thread may create shared memory instances that are destroyed by main thread on shutdown, so this must use thread-safe RC to avoid hitting assertion
 | |
|   NS_INLINE_DECL_THREADSAFE_REFCOUNTING(nsShmImage)
 | |
| 
 | |
| public:
 | |
|   static bool UseShm();
 | |
| 
 | |
|   already_AddRefed<mozilla::gfx::DrawTarget>
 | |
|     CreateDrawTarget(const mozilla::LayoutDeviceIntRegion& aRegion);
 | |
| 
 | |
|   void Put(const mozilla::LayoutDeviceIntRegion& aRegion);
 | |
| 
 | |
|   nsShmImage(Display* aDisplay,
 | |
|              Drawable aWindow,
 | |
|              Visual* aVisual,
 | |
|              unsigned int aDepth);
 | |
| 
 | |
| private:
 | |
|   ~nsShmImage();
 | |
| 
 | |
|   bool InitExtension();
 | |
| 
 | |
|   bool CreateShmSegment();
 | |
|   void DestroyShmSegment();
 | |
| 
 | |
|   bool CreateImage(const mozilla::gfx::IntSize& aSize);
 | |
|   void DestroyImage();
 | |
| 
 | |
|   void WaitIfPendingReply();
 | |
| 
 | |
|   Display*                     mDisplay;
 | |
|   xcb_connection_t*            mConnection;
 | |
|   Window                       mWindow;
 | |
|   Visual*                      mVisual;
 | |
|   unsigned int                 mDepth;
 | |
| 
 | |
|   mozilla::gfx::SurfaceFormat  mFormat;
 | |
|   mozilla::gfx::IntSize        mSize;
 | |
|   int                          mStride;
 | |
| 
 | |
|   xcb_pixmap_t                 mPixmap;
 | |
|   xcb_gcontext_t               mGC;
 | |
|   xcb_get_input_focus_cookie_t mSyncRequest;
 | |
|   bool                         mRequestPending;
 | |
| 
 | |
|   xcb_shm_seg_t                mShmSeg;
 | |
|   int                          mShmId;
 | |
|   uint8_t*                     mShmAddr;
 | |
| };
 | |
| 
 | |
| #endif // MOZ_HAVE_SHMIMAGE
 | |
| 
 | |
| #endif
 | 
