void copy_rect(ahm::PropertyValue *pTarget, ahm::PropertyValue *pSource) { if(isRect(pTarget) && isRect(pSource)) { // same types! if( pTarget->derivedType() == ahm::PropertyValue::TYPE_RECT && pSource->derivedType() == ahm::PropertyValue::TYPE_RECT) { ahm::PropertyValueRect* pSourceRect = (ahm::PropertyValueRect* ) pSource; ahm::PropertyValueRect* pTargetRect = (ahm::PropertyValueRect* ) pTarget; copy_scalar(pTargetRect->left(), pSourceRect->left()); copy_scalar(pTargetRect->top(), pSourceRect->top()); copy_scalar(pTargetRect->right(), pSourceRect->right()); copy_scalar(pTargetRect->bottom(), pSourceRect->bottom()); } else if( pTarget->derivedType() == ahm::PropertyValue::TYPE_FLOAT_RECT && pSource->derivedType() == ahm::PropertyValue::TYPE_FLOAT_RECT) { ahm::PropertyValueFloatRect* pSourceFloatRect = (ahm::PropertyValueFloatRect* ) pSource; ahm::PropertyValueFloatRect* pTargetFloatRect = (ahm::PropertyValueFloatRect* ) pTarget; ahm::FLOAT_RECT frect = { 0,0,0,0}; pSourceFloatRect->getValue(frect); pTargetFloatRect->setValue(frect); } // different types else if( pTarget->derivedType() == ahm::PropertyValue::TYPE_RECT && pSource->derivedType() == ahm::PropertyValue::TYPE_FLOAT_RECT) { ahm::PropertyValueFloatRect* pSourceFloatRect = (ahm::PropertyValueFloatRect* ) pSource; ahm::PropertyValueRect* pTargetRect = (ahm::PropertyValueRect* ) pTarget; ahm::FLOAT_RECT frect = { 0,0,0,0 }; setFloat(pTargetRect->left(), frect.left); setFloat(pTargetRect->top(), frect.top); setFloat(pTargetRect->right(), frect.right); setFloat(pTargetRect->bottom(), frect.bottom); } else if( pTarget->derivedType() == ahm::PropertyValue::TYPE_FLOAT_RECT && pSource->derivedType() == ahm::PropertyValue::TYPE_RECT) { ahm::PropertyValueRect* pSourceRect = (ahm::PropertyValueRect* ) pSource; ahm::PropertyValueFloatRect* pTargetFloatRect = (ahm::PropertyValueFloatRect* ) pTarget; ahm::FLOAT_RECT frect = { 0,0,0,0 }; getFloat(frect.left, pSourceRect->left()); getFloat(frect.top, pSourceRect->top()); getFloat(frect.right, pSourceRect->right()); getFloat(frect.bottom, pSourceRect->bottom()); pTargetFloatRect->setValue(frect); } } }
pdfout_data * pdfout_data_copy (fz_context *ctx, pdfout_data *data) { if (pdfout_data_is_scalar (ctx, data)) return copy_scalar (ctx, data); else if (pdfout_data_is_hash (ctx, data)) return copy_hash (ctx, data); else if (pdfout_data_is_array (ctx, data)) return copy_array (ctx, data); else abort (); }
int handle_scalar(struct streamstate* stp) { struct mapping* map = stp->curmap; struct keyvalue* kv = stp->curkv; if (kv) { /* * this scalar is the value for current keyvalue */ kv->type = KV_SCALAR; kv->scalar = copy_scalar(stp); if (! kv->scalar) return 1; kv->valuemark = stp->event.start_mark; stp->curkv = NULL; } else { /* * this scalar is the name of a new keyvalue pair */ if (stp->event.data.scalar.length > MAX_KEYLEN) { snprintf(stp->errbuf, sizeof(stp->errbuf), "%s:%zu:%zu:key name exceeds maximum length %d", stp->filename, stp->event.start_mark.line+1, stp->event.start_mark.column+1, MAX_KEYLEN); return 1; } kv = stp->curkv = map->kvlist = new_keyvalue(stp, map->kvlist); if (! kv) return 1; kv->key = copy_scalar(stp); if (! kv->key) return 1; kv->keymark = stp->event.start_mark; } return 0; }
void setRectValues(ahm::PropertyValue *pTarget, ahm::PropertyValue* pSourceLeft, ahm::PropertyValue* pSourceTop, ahm::PropertyValue* pSourceRight, ahm::PropertyValue* pSourceBottom) { if(pTarget) { if(pTarget->derivedType() == ahm::PropertyValue::TYPE_RECT) { ahm::PropertyValueRect *pTargetRect = (ahm::PropertyValueRect *) pTarget; copy_scalar(pTargetRect->left(), pSourceLeft); copy_scalar(pTargetRect->top(), pSourceTop); copy_scalar(pTargetRect->right(), pSourceRight); copy_scalar(pTargetRect->bottom(), pSourceBottom); } else if(pTarget->derivedType() == ahm::PropertyValue::TYPE_FLOAT_RECT) { ahm::PropertyValueFloatRect *pTargetRect = (ahm::PropertyValueFloatRect *) pTarget; ahm::FLOAT_RECT frect = {0,0,0,0 }; getFloat(frect.left, pSourceLeft); getFloat(frect.top, pSourceTop); getFloat(frect.right, pSourceRight); getFloat(frect.bottom, pSourceBottom); // change pTargetRect->setValue(frect); } } }