mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-01 00:32:11 +00:00
cc94065f1b
It's only used by the GTK backend and all other users are located there as well. Further more, it's unlikely that the will ever be another X11 backend or that these classes will get reused elsewhere. So in order to keep changes to `WindowSurface` out of the common widget space, move it into `gtk`. While on it, also clean up the affected moz.build files a bit by making orders more consistent. No functional changes intended. Differential Revision: https://phabricator.services.mozilla.com/D114422
76 lines
1.7 KiB
C++
76 lines
1.7 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
|