// description: get pixel from image buffer // syntax: imageObj.getPixel(x, y); void NaImage::GetPixel(V8_FUNCTION_ARGS) { Isolate *isolate = args.GetIsolate(); Local<Object> obj = args.This(); NaImage *pImage = reinterpret_cast<NaImage*>(UnwrapObject(obj)); if (pImage == nullptr) { // error args.GetReturnValue().Set(Integer::New(isolate, -1)); return; } if (args.Length() < 2) { // error args.GetReturnValue().Set(Integer::New(isolate, -1)); return; } int x = args[0]->Int32Value(); int y = args[1]->Int32Value(); HGDIOBJ hOldBitmap = ::SelectObject(pImage->m_hMemoryDC, pImage->m_hBitmap); COLORREF color = ::GetPixel(pImage->m_hMemoryDC, x, y); ::SelectObject(pImage->m_hMemoryDC, hOldBitmap); // return args.GetReturnValue().Set(Integer::New(isolate, color)); }
void NaImage::SetHeight(V8_SETTER_ARGS) { NaImage *pImage = reinterpret_cast<NaImage*>(UnwrapObject(info.This())); if (pImage) { // Not Impl } }
JSObject * WrapperFactory::WaiveXray(JSContext *cx, JSObject *obj) { obj = UnwrapObject(obj); MOZ_ASSERT(!js::IsInnerObject(obj)); JSObject *waiver = GetXrayWaiver(obj); if (waiver) return waiver; return CreateXrayWaiver(cx, obj); }
static JSObject * GetCurrentOuter(JSContext *cx, JSObject *obj) { obj = JS_ObjectToOuterObject(cx, obj); if (IsWrapper(obj) && !js::GetObjectClass(obj)->ext.innerObject) { obj = UnwrapObject(obj); NS_ASSERTION(js::GetObjectClass(obj)->ext.innerObject, "weird object, expecting an outer window proxy"); } return obj; }
JSObject * WrapperFactory::GetXrayWaiver(JSObject *obj) { // Object should come fully unwrapped but outerized. MOZ_ASSERT(obj == UnwrapObject(obj)); MOZ_ASSERT(!js::GetObjectClass(obj)->ext.outerObject); XPCWrappedNativeScope *scope = GetObjectScope(obj); MOZ_ASSERT(scope); if (!scope->mWaiverWrapperMap) return NULL; return xpc_UnmarkGrayObject(scope->mWaiverWrapperMap->Find(obj)); }
JSObject * WrapperFactory::WaiveXray(JSContext *cx, JSObject *obj) { obj = UnwrapObject(obj); // We have to make sure that if we're wrapping an outer window, that // the .wrappedJSObject also wraps the outer window. obj = GetCurrentOuter(cx, obj); { // See if we already have a waiver wrapper for this object. CompartmentPrivate *priv = (CompartmentPrivate *)JS_GetCompartmentPrivate(js::GetObjectCompartment(obj)); JSObject *wobj = nsnull; if (priv && priv->waiverWrapperMap) { wobj = priv->waiverWrapperMap->Find(obj); xpc_UnmarkGrayObject(wobj); } // No wrapper yet, make one. if (!wobj) { JSObject *proto = js::GetObjectProto(obj); if (proto && !(proto = WaiveXray(cx, proto))) return nsnull; JSAutoEnterCompartment ac; if (!ac.enter(cx, obj) || !JS_WrapObject(cx, &proto)) return nsnull; wobj = Wrapper::New(cx, obj, proto, JS_GetGlobalForObject(cx, obj), &WaiveXrayWrapperWrapper); if (!wobj) return nsnull; // Add the new wrapper so we find it next time. if (priv) { if (!priv->waiverWrapperMap) { priv->waiverWrapperMap = JSObject2JSObjectMap::newMap(XPC_WRAPPER_MAP_SIZE); if (!priv->waiverWrapperMap) return nsnull; } if (!priv->waiverWrapperMap->Add(obj, wobj)) return nsnull; } } obj = wobj; } return obj; }
// description: height property getter/setter void NaImage::GetHeight(V8_GETTER_ARGS) { NaImage *pImage = reinterpret_cast<NaImage*>(UnwrapObject(info.This())); Isolate *isolate = info.GetIsolate(); int nHeight = 0; if (pImage) { nHeight = pImage->m_rc.bottom - pImage->m_rc.top; } info.GetReturnValue().Set( Integer::New(isolate, nHeight) ); }
// description: width property getter/setter void NaImage::GetWidth(V8_GETTER_ARGS) { NaImage *pImage = reinterpret_cast<NaImage*>(UnwrapObject(info.This())); Isolate *isolate = info.GetIsolate(); int nWidth = 0; if (pImage) { nWidth = pImage->m_rc.right - pImage->m_rc.left; } info.GetReturnValue().Set( Integer::New(isolate, nWidth) ); }