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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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())); }
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; }
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; }