00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include <background_wnd/painters/ipicture_painter.hpp>
00016
00017
00018 namespace win32 { namespace gui {
00019
00020 namespace detail {
00021
00022 bool ipicture_painter_base_impl::load_file(param0 file_name)
00023 {
00024 _ASSERTE(!file_name.empty());
00025
00026 return picture_.load_from_file(file_name);
00027 }
00028
00029 void ipicture_painter_base_impl::draw_picture(HDC hDC, int x, int y, int cx, int cy)
00030 {
00031
00032
00033
00034 SIZE size = { 0 };
00035 picture_.get_size(size);
00036 int ySrc = 0;
00037 if (size.cy > cy)
00038 ySrc = cy - size.cy;
00039
00040
00041
00042 size.cx = min(cx, size.cx);
00043 size.cy = min(cy, size.cy - ySrc);
00044
00045 picture_.draw(hDC, x, y, size.cx, size.cy, 0, ySrc, size.cx, size.cy);
00046 }
00047
00048 const bg_wnd::ipicture& ipicture_painter_base_impl::get_ipicture() const
00049 {
00050 return picture_;
00051 }
00052
00053 }
00054
00055
00056
00063 ipicture_painter::ipicture_painter(param0 file_name) : Base(file_name)
00064 {}
00065
00066 ipicture_painter* ipicture_painter::clone() const
00067 {
00068 return new ipicture_painter(*this);
00069 }
00070
00071 void ipicture_painter::draw(HDC hDC, int cx, int cy)
00072 {
00073 draw_picture(hDC, 0, 0, cx, cy);
00074 }
00075
00076
00077
00084 tile_ipicture_painter::tile_ipicture_painter(param0 file_name) : Base(file_name)
00085 {
00086 tile_size_.cx = 0;
00087 tile_size_.cy = 0;
00088 }
00089
00090 tile_ipicture_painter::tile_ipicture_painter(param0 file_name, param1 tile_size) : Base(file_name), tile_size_(tile_size)
00091 {}
00092
00093 tile_ipicture_painter* tile_ipicture_painter::clone() const
00094 {
00095 return new tile_ipicture_painter(*this);
00096 }
00097
00098 void tile_ipicture_painter::draw(HDC hDC, int cx, int cy)
00099 {
00100 SIZE size = tile_size_;
00101 if (tile_size_.cx == 0 && tile_size_.cy == 0)
00102 get_ipicture().get_size(size);
00103
00104 _ASSERTE(size.cx != 0 && size.cy != 0);
00105 for (int x = 0; x < cx; x += size.cx) {
00106 for (int y = 0; y < cy; y += size.cy) {
00107 draw_picture(hDC, x, y, cx - x, cy - y);
00108 }
00109 }
00110 }
00111
00116 void tile_ipicture_painter::tile_size(SIZE tile_size)
00117 {
00118 tile_size_ = tile_size;
00119 }
00120
00122 SIZE tile_ipicture_painter::tile_size() const
00123 {
00124 return tile_size_;
00125 }
00126
00127
00128 } }