summaryrefslogtreecommitdiff
path: root/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx
diff options
context:
space:
mode:
authorManolo Gouy <Manolo>2016-03-10 22:26:40 +0000
committerManolo Gouy <Manolo>2016-03-10 22:26:40 +0000
commit31fcd84ca990ded6b96f0e3a82adc3f38d0cdb2c (patch)
tree13212ec1fa76ebbfb144b831df6edd669acf5d69 /src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx
parent7098924b82110cf468d3cbdc4742bd9a2632296d (diff)
Rewrite all window icon-related Fl_Window API with the window driver approach.
It seems this allows not to #include <windows.h> in the public header files. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11342 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx')
-rw-r--r--src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx57
1 files changed, 57 insertions, 0 deletions
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$".
//