ShowImage: improve attributes performance.

* Writes the attributes only if they are different or missing.
* Thanks Humdinger for point out.
This commit is contained in:
Janus 2015-04-21 12:37:58 +00:00
parent e59470891c
commit 9c1f5f4d70

View File

@ -1526,12 +1526,22 @@ ShowImageWindow::_SaveWidthAndHeight()
int32 width = bounds.IntegerWidth() + 1;
int32 height = bounds.IntegerHeight() + 1;
BFile file(&fNavigator.CurrentRef(), B_WRITE_ONLY);
if (file.InitCheck() != B_OK)
BNode node(&fNavigator.CurrentRef());
if (node.InitCheck() != B_OK)
return;
file.WriteAttr("Media:Width", B_INT32_TYPE, 0, &width, sizeof(width));
file.WriteAttr("Media:Height", B_INT32_TYPE, 0, &height, sizeof(height));
const char* kWidthAttrName = "Media:Width";
const char* kHeightAttrName = "Media:Height";
int32 widthAttr;
ssize_t attrSize = node.ReadAttr(kWidthAttrName, B_INT32_TYPE, 0, &widthAttr, sizeof(widthAttr));
if (attrSize <= 0 || widthAttr != width)
node.WriteAttr(kWidthAttrName, B_INT32_TYPE, 0, &width, sizeof(width));
int32 heightAttr;
attrSize = node.ReadAttr(kHeightAttrName, B_INT32_TYPE, 0, &heightAttr, sizeof(heightAttr));
if (attrSize <= 0 || heightAttr != height)
node.WriteAttr(kHeightAttrName, B_INT32_TYPE, 0, &height, sizeof(height));
}