std::vector<DisplayModeDescriptor> LinuxDisplay::QuerySupportedDisplayModes() const { std::vector<DisplayModeDescriptor> displayModeDescs; DisplayModeDescriptor modeDesc; /* Get all screen sizes from X11 extension Xrandr */ int numSizes = 0; auto scrSizes = XRRSizes(GetNative(), screen_, &numSizes); for (int i = 0; i < numSizes; ++i) { /* Initialize resolution */ modeDesc.resolution.width = static_cast<std::uint32_t>(scrSizes[i].width); modeDesc.resolution.height = static_cast<std::uint32_t>(scrSizes[i].height); /* Add one display mode for each rate */ int numRates = 0; auto rates = XRRRates(GetNative(), screen_, i, &numRates); for (int j = 0; j < numRates; ++j) { modeDesc.refreshRate = static_cast<std::uint32_t>(rates[j]); displayModeDescs.push_back(modeDesc); } } /* Sort final display mode list and remove duplciate entries */ FinalizeDisplayModes(displayModeDescs); return displayModeDescs; }
Offset2D LinuxDisplay::GetOffset() const { /* Get display offset from position of root window */ XWindowAttributes attribs = {}; XGetWindowAttributes(GetNative(), RootWindow(GetNative(), screen_), &attribs); return Offset2D { attribs.x, attribs.y }; }
void NoteChildren(JSObject* aProxy, nsCycleCollectionTraversalCallback& aCb) const override { auto location = static_cast<BrowsingContext::LocationProxy*>(GetNative(aProxy)); CycleCollectionNoteChild(aCb, location->GetBrowsingContext(), "js::GetObjectPrivate(obj)->GetBrowsingContext()"); }
void NWindow::OnSize(int width, int height) { if(rootFrame_) rootFrame_->SetSize(width, height); HRGN rgn = ::CreateRectRgn(0, 0, width, height); if(rgn != NULL) ::SetWindowRgn(GetNative(), rgn, FALSE); }
std::unique_ptr<Display> Display::QueryPrimary() { /* Allocate single X11 display handler */ auto sharedX11Display = std::make_shared<LinuxSharedX11Display>(); auto dpy = sharedX11Display->GetNative(); /* Make new display with default screen index */ return MakeUnique<LinuxDisplay>(sharedX11Display, DefaultScreen(dpy)); }
bool NxsFilePath::OpenInput(std::ifstream &inFStream) const { inFStream.close(); inFStream.clear(); inFStream.open(GetNative().c_str()); if (inFStream.good()) return true; inFStream.close(); inFStream.clear(); return false; }
std::vector<std::unique_ptr<Display>> Display::QueryList() { std::vector<std::unique_ptr<Display>> displayList; /* Allocate shared X11 display handler */ auto sharedX11Display = std::make_shared<LinuxSharedX11Display>(); auto dpy = sharedX11Display->GetNative(); for (int i = 0, n = ScreenCount(dpy); i < n; ++i) { /* Make new display with current screen index */ displayList.emplace_back(MakeUnique<LinuxDisplay>(sharedX11Display, i)); } return displayList; }
DisplayModeDescriptor LinuxDisplay::GetDisplayMode() const { DisplayModeDescriptor modeDesc; auto dpy = GetNative(); if (auto scr = ScreenOfDisplay(dpy, screen_)) { auto rootWnd = RootWindow(dpy, screen_); /* Get screen resolution from X11 screen */ modeDesc.resolution.width = static_cast<std::uint32_t>(scr->width); modeDesc.resolution.height = static_cast<std::uint32_t>(scr->height); /* Get refresh reate from X11 extension Xrandr */ if (auto scrCfg = XRRGetScreenInfo(dpy, rootWnd)) { modeDesc.refreshRate = static_cast<std::uint32_t>(XRRConfigCurrentRate(scrCfg)); XRRFreeScreenConfigInfo(scrCfg); } } return modeDesc; }
IWmeDebugObject *CScValue::DbgGetValNative() { return GetNative(); }
IWmeObject* CScValue::GetValNative() { return (CBScriptable*)GetNative(); }
std::wstring LinuxDisplay::GetDeviceName() const { const char* name = DisplayString(GetNative()); std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter; return converter.from_bytes(name); }
bool LinuxDisplay::IsPrimary() const { return (screen_ == DefaultScreen(GetNative())); }