00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "button.h"
00023 #include "../tool/resource_manager.h"
00024 #include "../graphic/sprite.h"
00025 #include "../include/app.h"
00026
00027 Button::Button (const Rectanglei &rect, const Profile *res_profile,
00028 const std::string& resource_id, bool _img_scale) : Widget(rect)
00029 {
00030 image = resource_manager.LoadSprite(res_profile,resource_id);
00031 image->cache.EnableLastFrameCache();
00032
00033
00034 img_scale = _img_scale;
00035
00036 if (img_scale)
00037 image->ScaleSize(rect.GetSize());
00038 }
00039
00040 Button::Button (const Point2i &m_position, const Profile *res_profile,
00041 const std::string& resource_id, bool _img_scale)
00042 {
00043 image = resource_manager.LoadSprite(res_profile, resource_id);
00044 position = m_position;
00045 size = image->GetSize();
00046
00047
00048 img_scale = _img_scale;
00049 }
00050
00051 Button::~Button()
00052 {
00053 delete image;
00054 }
00055
00056 void Button::Draw(const Point2i &mousePosition, Surface& surf) const
00057 {
00058 uint frame = Contains(mousePosition)?1:0;
00059
00060 image->SetCurrentFrame(frame);
00061
00062 if (img_scale) {
00063
00064 image->Blit(surf, position);
00065 } else {
00066
00067 Point2i pos = position;
00068
00069 pos.x += (GetSizeX()/2) - (image->GetWidth()/2);
00070 pos.y += (GetSizeY()/2) - (image->GetHeight()/2);
00071
00072 image->Blit(surf, pos);
00073 }
00074 }
00075
00076 void Button::SetSizePosition(const Rectanglei &rect)
00077 {
00078 StdSetSizePosition(rect);
00079
00080 if (img_scale)
00081 image->ScaleSize(size);
00082 }