From 31fcd84ca990ded6b96f0e3a82adc3f38d0cdb2c Mon Sep 17 00:00:00 2001 From: Manolo Gouy Date: Thu, 10 Mar 2016 22:26:40 +0000 Subject: Rewrite all window icon-related Fl_Window API with the window driver approach. It seems this allows not to #include in the public header files. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11342 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx | 57 ++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to 'src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx') diff --git a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx index e61fa4799..796f60c36 100644 --- a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx +++ b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx @@ -30,6 +30,8 @@ Fl_Window_Driver *Fl_Window_Driver::newWindowDriver(Fl_Window *w) Fl_WinAPI_Window_Driver::Fl_WinAPI_Window_Driver(Fl_Window *win) : Fl_Window_Driver(win) { + icon_ = new Fl_Window_Driver::icon_data; + memset(icon_, 0, sizeof(Fl_Window_Driver::icon_data)); } Fl_WinAPI_Window_Driver::~Fl_WinAPI_Window_Driver() @@ -190,6 +192,61 @@ void Fl_WinAPI_Window_Driver::draw() { } Fl_Window_Driver::draw(); } +void Fl_WinAPI_Window_Driver::icons(const Fl_RGB_Image *icons[], int count) { + free_icons(); + + if (count > 0) { + icon_->icons = new Fl_RGB_Image*[count]; + icon_->count = count; + // FIXME: Fl_RGB_Image lacks const modifiers on methods + for (int i = 0;i < count;i++) + icon_->icons[i] = (Fl_RGB_Image*)((Fl_RGB_Image*)icons[i])->copy(); + } + + if (Fl_X::i(pWindow)) + Fl_X::i(pWindow)->set_icons(); +} + +const void *Fl_WinAPI_Window_Driver::icon() const { + return icon_->legacy_icon; +} + +void Fl_WinAPI_Window_Driver::icon(const void * ic) { + free_icons(); + icon_->legacy_icon = ic; +} + +void Fl_WinAPI_Window_Driver::free_icons() { + int i; + icon_->legacy_icon = 0L; + if (icon_->icons) { + for (i = 0;i < icon_->count;i++) + delete icon_->icons[i]; + delete [] icon_->icons; + icon_->icons = 0L; + } + icon_->count = 0; + if (icon_->big_icon) + DestroyIcon(icon_->big_icon); + if (icon_->small_icon) + DestroyIcon(icon_->small_icon); + icon_->big_icon = NULL; + icon_->small_icon = NULL; +} + +void Fl_WinAPI_Window_Driver::icons(HICON big_icon, HICON small_icon) +{ + free_icons(); + + if (big_icon != NULL) + icon_->big_icon = CopyIcon(big_icon); + if (small_icon != NULL) + icon_->small_icon = CopyIcon(small_icon); + + if (Fl_X::i(pWindow)) + Fl_X::i(pWindow)->set_icons(); +} + // // End of "$Id$". // -- cgit v1.2.3