Пример #1
0
Value Object_BBox::DoSetProp(Environment &env, const Symbol *pSymbol, const Value &value,
							const SymbolSet &attrs, bool &evaluatedFlag)
{
	Signal &sig = GetSignal();
	evaluatedFlag = true;
	if (pSymbol->IsIdentical(Gura_UserSymbol(xMin))) {
		if (!value.MustBe_number(sig)) return Value::Nil;
		_bbox.xMin = static_cast<FT_Pos>(value.GetLong());
		return Value(_bbox.xMin);
	} else if (pSymbol->IsIdentical(Gura_UserSymbol(yMin))) {
		if (!value.MustBe_number(sig)) return Value::Nil;
		_bbox.yMin = static_cast<FT_Pos>(value.GetLong());
		return Value(_bbox.yMin);
	} else if (pSymbol->IsIdentical(Gura_UserSymbol(xMax))) {
		if (!value.MustBe_number(sig)) return Value::Nil;
		_bbox.xMax = static_cast<FT_Pos>(value.GetLong());
		return Value(_bbox.xMax);
	} else if (pSymbol->IsIdentical(Gura_UserSymbol(yMax))) {
		if (!value.MustBe_number(sig)) return Value::Nil;
		_bbox.yMax = static_cast<FT_Pos>(value.GetLong());
		return Value(_bbox.yMax);
	}
	evaluatedFlag = false;
	return Value::Nil;
}
Пример #2
0
bool Object_Point::DoDirProp(Environment &env, SymbolSet &symbols)
{
	Signal &sig = GetSignal();
	if (!Object::DoDirProp(env, symbols)) return false;
	symbols.insert(Gura_UserSymbol(x));
	symbols.insert(Gura_UserSymbol(y));
	return true;
}
Пример #3
0
bool Object_DisplayMode::DoDirProp(Environment &env, SymbolSet &symbols)
{
	Signal &sig = GetSignal();
	if (!Object::DoDirProp(env, symbols)) return false;
	symbols.insert(Gura_UserSymbol(format));
	symbols.insert(Gura_UserSymbol(w));
	symbols.insert(Gura_UserSymbol(h));
	symbols.insert(Gura_UserSymbol(refresh_rate));
	return true;
}
Пример #4
0
Value Object_AudioCVT::DoGetProp(Environment &env, const Symbol *pSymbol,
							  const SymbolSet &attrs, bool &evaluatedFlag)
{
	evaluatedFlag = true;
	if (pSymbol->IsIdentical(Gura_UserSymbol(needed))) {
		return Value(_cvt.needed);
	} else if (pSymbol->IsIdentical(Gura_UserSymbol(src_format))) {
		return Value(_cvt.src_format);
	} else if (pSymbol->IsIdentical(Gura_UserSymbol(dst_format))) {
		return Value(_cvt.dst_format);
	} else if (pSymbol->IsIdentical(Gura_UserSymbol(rate_incr))) {
		return Value(_cvt.rate_incr);
	} else if (pSymbol->IsIdentical(Gura_UserSymbol(buf))) {
		return Value::Nil;
	} else if (pSymbol->IsIdentical(Gura_UserSymbol(len))) {
		return Value(_cvt.len);
	} else if (pSymbol->IsIdentical(Gura_UserSymbol(len_cvt))) {
		return Value(_cvt.len_cvt);
	} else if (pSymbol->IsIdentical(Gura_UserSymbol(len_mult))) {
		return Value(_cvt.len_mult);
	} else if (pSymbol->IsIdentical(Gura_UserSymbol(len_ratio))) {
		return Value(_cvt.len_ratio);
	}
	evaluatedFlag = false;
	return Value::Nil;
}
Пример #5
0
Value Object_Point::DoGetProp(Environment &env, const Symbol *pSymbol,
							 const SymbolSet &attrs, bool &evaluatedFlag)
{
	evaluatedFlag = true;
	if (pSymbol->IsIdentical(Gura_UserSymbol(x))) {
		return Value(_point.x);
	} else if (pSymbol->IsIdentical(Gura_UserSymbol(y))) {
		return Value(_point.y);
	}
	evaluatedFlag = false;
	return Value::Nil;
}
Пример #6
0
Value Object_BBox::DoGetProp(Environment &env, const Symbol *pSymbol,
						const SymbolSet &attrs, bool &evaluatedFlag)
{
	evaluatedFlag = true;
	if (pSymbol->IsIdentical(Gura_UserSymbol(xMin))) {
		return Value(_bbox.xMin);
	} else if (pSymbol->IsIdentical(Gura_UserSymbol(yMin))) {
		return Value(_bbox.yMin);
	} else if (pSymbol->IsIdentical(Gura_UserSymbol(xMax))) {
		return Value(_bbox.xMax);
	} else if (pSymbol->IsIdentical(Gura_UserSymbol(yMax))) {
		return Value(_bbox.yMax);
	}
	evaluatedFlag = false;
	return Value::Nil;
}
Пример #7
0
Value Object_DisplayMode::DoGetProp(Environment &env, const Symbol *pSymbol,
							  const SymbolSet &attrs, bool &evaluatedFlag)
{
	evaluatedFlag = true;
	if (pSymbol->IsIdentical(Gura_UserSymbol(format))) {
		return Value(_mode.format);
	} else if (pSymbol->IsIdentical(Gura_UserSymbol(w))) {
		return Value(_mode.w);
	} else if (pSymbol->IsIdentical(Gura_UserSymbol(h))) {
		return Value(_mode.h);
	} else if (pSymbol->IsIdentical(Gura_UserSymbol(refresh_rate))) {
		return Value(_mode.refresh_rate);
	}
	evaluatedFlag = false;
	return Value::Nil;
}
Пример #8
0
Value Object_Point::DoSetProp(Environment &env,
							 const Symbol *pSymbol, const Value &value,
							 const SymbolSet &attrs, bool &evaluatedFlag)
{
	Signal &sig = GetSignal();
	evaluatedFlag = true;
	if (pSymbol->IsIdentical(Gura_UserSymbol(x))) {
		if (!value.MustBe_number(sig)) return Value::Nil;
		_point.x = static_cast<Sint16>(value.GetInt());
		return value;
	} else if (pSymbol->IsIdentical(Gura_UserSymbol(y))) {
		if (!value.MustBe_number(sig)) return Value::Nil;
		_point.y = static_cast<Sint16>(value.GetInt());
		return value;
	}
	evaluatedFlag = false;
	return Value::Nil;
}
Пример #9
0
bool Object_AudioCVT::DoDirProp(Environment &env, SymbolSet &symbols)
{
	Signal &sig = GetSignal();
	if (!Object::DoDirProp(env, symbols)) return false;
	symbols.insert(Gura_UserSymbol(needed));
	symbols.insert(Gura_UserSymbol(src_format));
	symbols.insert(Gura_UserSymbol(dst_format));
	symbols.insert(Gura_UserSymbol(rate_incr));
	symbols.insert(Gura_UserSymbol(buf));
	symbols.insert(Gura_UserSymbol(len));
	symbols.insert(Gura_UserSymbol(len_cvt));
	symbols.insert(Gura_UserSymbol(len_mult));
	symbols.insert(Gura_UserSymbol(len_ratio));
	return true;
}
Пример #10
0
Value Object_content::DoGetProp(Environment &env, const Symbol *pSymbol,
						const SymbolSet &attrs, bool &evaluatedFlag)
{
	evaluatedFlag = true;
	if (pSymbol->IsIdentical(Gura_UserSymbol(images))) {
		return Value(new Object_list(env, _valList));
	}
	evaluatedFlag = false;
	return Value::Nil;
}
Пример #11
0
Tcl_Obj *Object_interp::ConvToTclObj(Environment &env, Signal &sig, const Value &value)
{
	if (value.IsInvalid()) {
		return ::Tcl_NewStringObj("", 0);
	} else if (value.Is_boolean()) {
		return ::Tcl_NewBooleanObj(value.GetBoolean());
	} else if (value.Is_binary()) {
		const Binary &binary = value.GetBinary();
		return ::Tcl_NewByteArrayObj(
			reinterpret_cast<const unsigned char *>(binary.data()), static_cast<int>(binary.size()));
	} else if (value.Is_number()) {
		Number num = value.GetNumber();
		if (static_cast<Number>(static_cast<long>(num)) == num) {
			return ::Tcl_NewLongObj(static_cast<long>(num));
		} else {
			return ::Tcl_NewDoubleObj(num);
		}
	} else if (value.Is_list()) {
		int objc;
		Tcl_Obj **objv = CreateTclObjArray(env, sig, value.GetList(), &objc);
		if (!sig.IsSignalled()) {
			return ::Tcl_NewListObj(objc, objv);
		}
	} else if (value.Is_string()) {
		const char *str = value.GetString();
		return ::Tcl_NewStringObj(str, static_cast<int>(::strlen(str)));
	} else if (value.Is_function()) {
		Handler *pHandler = new Handler(Object_interp::Reference(this),
				Object_function::Reference(Object_function::GetObject(value)));
		String cmdName = NewCommandName();
		::Tcl_CreateCommand(_interp, cmdName.c_str(), CommandProc,
											pHandler, CommandDeleteProc);
		return ::Tcl_NewStringObj(cmdName.c_str(), static_cast<int>(cmdName.size()));
	} else if (value.IsType(VTYPE_variable)) {
		const Object_variable *pObjVariable =
						dynamic_cast<const Object_variable *>(value.GetObject());
		const char *varName = pObjVariable->GetVarName();
		return ::Tcl_NewStringObj(varName, static_cast<int>(::strlen(varName)));
	} else if (value.IsObject()) {
		Object *pObj = value.GetObject();
		const Function *pFunc =
					pObj->LookupFunction(Gura_UserSymbol(__tclname__), ENVREF_Escalate);
		if (pFunc != nullptr) {
			Value valueThis(pObj, VFLAG_NoFundOwner); // reference to self
			AutoPtr<Argument> pArg(new Argument(pFunc));
			pArg->SetValueThis(valueThis);
			Value result = pFunc->Eval(*pObj, *pArg);
			if (!sig.IsSignalled()) {
				return ConvToTclObj(env, sig, result);
			}
		}
	}
	String str = value.ToString(false);
	return ::Tcl_NewStringObj(str.c_str(), static_cast<int>(str.size()));
}
Пример #12
0
Value Object_GlyphSlot::DoGetProp(Environment &env, const Symbol *pSymbol,
						const SymbolSet &attrs, bool &evaluatedFlag)
{
	evaluatedFlag = true;
	if (pSymbol->IsIdentical(Gura_UserSymbol(advance))) {
		AutoPtr<Object_Vector> pObj(new Object_Vector(
								Object::Reference(this), &_glyphSlot->advance));
		return Value(pObj.release());
	} else if (pSymbol->IsIdentical(Gura_UserSymbol(format))) {
		return Value(_glyphSlot->format);
	} else if (pSymbol->IsIdentical(Gura_UserSymbol(bitmap))) {
		AutoPtr<Object_Bitmap> pObj(new Object_Bitmap(
								Object::Reference(this), &_glyphSlot->bitmap));
		return Value(pObj.release());
	} else if (pSymbol->IsIdentical(Gura_UserSymbol(bitmap_left))) {
		return Value(_glyphSlot->bitmap_left);
	} else if (pSymbol->IsIdentical(Gura_UserSymbol(bitmap_top))) {
		return Value(_glyphSlot->bitmap_top);
	} else if (pSymbol->IsIdentical(Gura_UserSymbol(outline))) {
		AutoPtr<Object_Outline> pObj(new Object_Outline(
								Object::Reference(this), &_glyphSlot->outline));
		return Value(pObj.release());
	}
	evaluatedFlag = false;
	return Value::Nil;
}
Пример #13
0
bool Object_GlyphSlot::DoDirProp(Environment &env, SymbolSet &symbols)
{
	Signal &sig = GetSignal();
	if (!Object::DoDirProp(env, symbols)) return false;
	symbols.insert(Gura_UserSymbol(advance));
	symbols.insert(Gura_UserSymbol(format));
	symbols.insert(Gura_UserSymbol(bitmap));
	symbols.insert(Gura_UserSymbol(bitmap_left));
	symbols.insert(Gura_UserSymbol(bitmap_top));
	symbols.insert(Gura_UserSymbol(outline));
	return true;
}