| 498 | } |
| 499 | |
| 500 | Sizef UINodeDrawable::LayerDrawable::calcDrawableSize( const std::string& drawableSizeEq ) { |
| 501 | Sizef size; |
| 502 | |
| 503 | if ( NULL == mDrawable ) |
| 504 | return Sizef::Zero; |
| 505 | |
| 506 | if ( drawableSizeEq == "auto" ) { |
| 507 | if ( mDrawable->getDrawableType() == Drawable::RECTANGLE ) { |
| 508 | size = mSize; |
| 509 | } else { |
| 510 | size = mDrawable->getPixelsSize(); |
| 511 | } |
| 512 | } else if ( drawableSizeEq == "expand" ) { |
| 513 | size = mSize; |
| 514 | } else if ( drawableSizeEq == "contain" ) { |
| 515 | Sizef drawableSize( mDrawable->getSize() ); |
| 516 | Float Scale1 = mSize.getWidth() / drawableSize.getWidth(); |
| 517 | Float Scale2 = mSize.getHeight() / drawableSize.getHeight(); |
| 518 | if ( Scale1 < 1 || Scale2 < 1 ) { |
| 519 | Scale1 = eemin( Scale1, Scale2 ); |
| 520 | size = Sizef( drawableSize.getWidth() * Scale1, drawableSize.getHeight() * Scale1 ); |
| 521 | } else { |
| 522 | size = drawableSize; |
| 523 | } |
| 524 | } else if ( drawableSizeEq == "cover" ) { |
| 525 | Sizef drawableSize( mDrawable->getSize() ); |
| 526 | Float Scale1 = mSize.getWidth() / drawableSize.getWidth(); |
| 527 | Float Scale2 = mSize.getHeight() / drawableSize.getHeight(); |
| 528 | Scale1 = eemax( Scale1, Scale2 ); |
| 529 | size = Sizef( drawableSize.getWidth() * Scale1, drawableSize.getHeight() * Scale1 ); |
| 530 | } else { |
| 531 | std::vector<std::string> sizePart = String::split( drawableSizeEq, ' ' ); |
| 532 | |
| 533 | if ( sizePart.size() == 1 ) { |
| 534 | sizePart.push_back( "auto" ); |
| 535 | } |
| 536 | |
| 537 | if ( sizePart.size() == 2 ) { |
| 538 | if ( sizePart[0] == "auto" && sizePart[1] == "auto" ) { |
| 539 | if ( mDrawable->getDrawableType() == Drawable::RECTANGLE ) { |
| 540 | size = mSize; |
| 541 | } else { |
| 542 | size = mDrawable->getSize(); |
| 543 | } |
| 544 | } else if ( sizePart[0] != "auto" ) { |
| 545 | CSS::StyleSheetLength wl( sizePart[0] ); |
| 546 | size.x = mContainer->getOwner()->convertLength( |
| 547 | wl, mContainer->getOwner()->getPixelsSize().getWidth() ); |
| 548 | |
| 549 | if ( sizePart[1] == "auto" ) { |
| 550 | Sizef drawableSize( mDrawable->getSize() ); |
| 551 | size.y = |
| 552 | drawableSize.getHeight() * ( size.getWidth() / drawableSize.getWidth() ); |
| 553 | } else { |
| 554 | CSS::StyleSheetLength hl( sizePart[1] ); |
| 555 | size.y = mContainer->getOwner()->convertLength( |
| 556 | hl, mContainer->getOwner()->getPixelsSize().getHeight() ); |
| 557 | } |
no test coverage detected