ImagePath: Fixed that the image was not reloaded when changing with !SetOption

This commit is contained in:
Brian Ferguson 2013-06-07 23:45:28 -06:00
parent 136689bcfb
commit f1cb311723
2 changed files with 10 additions and 3 deletions

View File

@ -166,7 +166,8 @@ TintedImage::TintedImage(const WCHAR* name, const WCHAR** optionArray, bool disa
m_Flip(RotateNoneFlipNone), m_Flip(RotateNoneFlipNone),
m_Rotate(), m_Rotate(),
m_UseExifOrientation(false), m_UseExifOrientation(false),
m_MeterWindow(meterWindow) m_MeterWindow(meterWindow),
m_HasPathChanged(false)
{ {
} }
@ -318,6 +319,7 @@ void TintedImage::LoadImage(const std::wstring& imageName, bool bLoadAlways)
{ {
std::wstring filename = m_Path + imageName; std::wstring filename = m_Path + imageName;
if (m_MeterWindow) m_MeterWindow->MakePathAbsolute(filename); if (m_MeterWindow) m_MeterWindow->MakePathAbsolute(filename);
m_HasPathChanged = false;
// Check extension and if it is missing, add .png // Check extension and if it is missing, add .png
size_t pos = filename.rfind(L'\\'); size_t pos = filename.rfind(L'\\');
@ -626,6 +628,7 @@ void TintedImage::ReadOptions(ConfigParser& parser, const WCHAR* section, const
ColorMatrix oldColorMatrix = *m_ColorMatrix; ColorMatrix oldColorMatrix = *m_ColorMatrix;
RotateFlipType oldFlip = m_Flip; RotateFlipType oldFlip = m_Flip;
REAL oldRotate = m_Rotate; REAL oldRotate = m_Rotate;
std::wstring oldPath = m_Path;
m_Path = parser.ReadString(section, m_OptionArray[OptionIndexImagePath], imagePath); m_Path = parser.ReadString(section, m_OptionArray[OptionIndexImagePath], imagePath);
if (!m_Path.empty()) if (!m_Path.empty())
@ -636,6 +639,8 @@ void TintedImage::ReadOptions(ConfigParser& parser, const WCHAR* section, const
} }
} }
m_HasPathChanged = (oldPath != m_Path);
if (!m_DisableTransform) if (!m_DisableTransform)
{ {
m_Crop.X = m_Crop.Y = m_Crop.Width = m_Crop.Height = -1; m_Crop.X = m_Crop.Y = m_Crop.Width = m_Crop.Height = -1;

View File

@ -76,8 +76,8 @@ public:
bool IsLoaded() { return (m_Bitmap != nullptr); } bool IsLoaded() { return (m_Bitmap != nullptr); }
bool IsTinted() { return (m_BitmapTint != nullptr); } bool IsTinted() { return (m_BitmapTint != nullptr); }
bool IsOptionsChanged() { return m_NeedsCrop || m_NeedsTinting || m_NeedsTransform; } bool IsOptionsChanged() { return m_NeedsCrop || m_NeedsTinting || m_NeedsTransform || m_HasPathChanged; }
void ClearOptionFlags() { m_NeedsCrop = m_NeedsTinting = m_NeedsTransform = false; } void ClearOptionFlags() { m_NeedsCrop = m_NeedsTinting = m_NeedsTransform = m_HasPathChanged = false; }
Gdiplus::Bitmap* GetOriginalImage() { return m_Bitmap; } Gdiplus::Bitmap* GetOriginalImage() { return m_Bitmap; }
Gdiplus::Bitmap* GetTintedImage() { return m_BitmapTint; } Gdiplus::Bitmap* GetTintedImage() { return m_BitmapTint; }
@ -123,7 +123,9 @@ protected:
Gdiplus::RotateFlipType m_Flip; Gdiplus::RotateFlipType m_Flip;
Gdiplus::REAL m_Rotate; Gdiplus::REAL m_Rotate;
bool m_UseExifOrientation; bool m_UseExifOrientation;
std::wstring m_Path; std::wstring m_Path;
bool m_HasPathChanged;
std::wstring m_CacheKey; std::wstring m_CacheKey;