Skip to content

Commit 636a374

Browse files
committed
make work on msys2 with system-fltk
1 parent 9a2b3ed commit 636a374

File tree

4 files changed

+128
-93
lines changed

4 files changed

+128
-93
lines changed

CMakeLists.txt

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ option(CFLTK_CARGO_BUILD "cfltk is built using Cargo" OFF)
2626
option(CFLTK_MSVC_CRT_STATIC "cfltk is built with crt-static" OFF)
2727
option(CFLTK_USE_CAIROEXT "Uses CairoExt FLTK feature" OFF)
2828
option(CFLTK_USE_FPIC "Compile code with -fPIC to allow incorporation into shared lib." OFF)
29+
option(CFLTK_SYSTEM_JPEG "Link installed libjpeg" OFF)
30+
option(CFLTK_SYSTEM_PNG "Link installed libpng" OFF)
31+
option(CFLTK_SYSTEM_ZLIB "Link installed zlib" OFF)
2932

3033
if (CFLTK_USE_FPIC OR CFLTK_BUILD_SHARED)
3134
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
@@ -152,9 +155,25 @@ set(pc_libs_private "-lfltk")
152155
set(other_c_flags)
153156

154157
if(CFLTK_LINK_IMAGES)
155-
set(CFLTK_LIBS ${CFLTK_LIBS} fltk::images fltk::z fltk::jpeg fltk::png)
158+
target_compile_definitions(cfltk PUBLIC CFLTK_USE_IMAGES)
159+
list(APPEND CFLTK_LIBS fltk::images)
156160
string(APPEND pc_libs_private
157-
" -lfltk_images -lfltk_z -lfltk_jpeg -lfltk_png")
161+
" -lfltk_images")
162+
if (NOT CFLTK_SYSTEM_JPEG)
163+
list(APPEND CFLTK_LIBS fltk::jpeg)
164+
string(APPEND pc_libs_private
165+
" -lfltk_jpeg")
166+
endif()
167+
if (NOT CFLTK_SYSTEM_PNG)
168+
list(APPEND CFLTK_LIBS fltk::png)
169+
string(APPEND pc_libs_private
170+
" -lfltk_png")
171+
endif()
172+
if (NOT CFLTK_SYSTEM_ZLIB)
173+
list(APPEND CFLTK_LIBS fltk::z)
174+
string(APPEND pc_libs_private
175+
" -lfltk_z")
176+
endif()
158177
endif()
159178

160179
if(CFLTK_USE_OPENGL)

src/cfl_dialog.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,8 @@ const char *Fl_password2(const char *txt, const char *deflt) {
189189
return ret;
190190
}
191191

192+
#ifdef CFLTK_USE_IMAGES
193+
192194
Fl_Help_Dialog *Fl_Help_Dialog_new(void) {
193195
LOCK(auto ret = new Fl_Help_Dialog());
194196
return ret;
@@ -264,6 +266,8 @@ int Fl_Help_Dialog_y(Fl_Help_Dialog *self) {
264266
return ret;
265267
}
266268

269+
#endif
270+
267271
void Fl_beep(int type) {
268272
LOCK(fl_beep(type));
269273
}

src/cfl_image.cpp

Lines changed: 99 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,6 @@
8888
self->release(); \
8989
}
9090

91-
extern "C" void Fl_load_system_icons(void) {
92-
Fl_File_Icon::load_system_icons();
93-
}
9491

9592
void Fl_Image_set_scaling_algorithm(int algorithm) {
9693
LOCK(Fl_Image::scaling_algorithm((Fl_RGB_Scaling)algorithm));
@@ -110,18 +107,6 @@ int Fl_RGB_Image_scaling_algorithm(void) {
110107
return (int)ret;
111108
}
112109

113-
IMAGE_DEFINE(Fl_JPEG_Image)
114-
115-
Fl_JPEG_Image *Fl_JPEG_Image_new(const char *filename) {
116-
LOCK(auto ret = new Fl_JPEG_Image(filename));
117-
return ret;
118-
}
119-
120-
Fl_JPEG_Image *Fl_JPEG_Image_from(const unsigned char *data) {
121-
LOCK(auto ret = new Fl_JPEG_Image(nullptr, data));
122-
return ret;
123-
}
124-
125110
IMAGE_DEFINE(Fl_Image)
126111

127112
void Fl_Image_color_average(Fl_Image *self, unsigned int c, float i) {
@@ -144,6 +129,104 @@ void Fl_Image_label_menu_item(Fl_Image *self, void *m) {
144129
LOCK(self->label((Fl_Menu_Item *)m));
145130
}
146131

132+
133+
IMAGE_DEFINE(Fl_Tiled_Image)
134+
135+
Fl_Tiled_Image *Fl_Tiled_Image_new(Fl_Image *i, int w, int h) {
136+
LOCK(auto ret = new Fl_Tiled_Image(i->copy(), w, h));
137+
return ret;
138+
}
139+
140+
IMAGE_DEFINE(Fl_RGB_Image)
141+
142+
Fl_RGB_Image *
143+
Fl_RGB_Image_new(const unsigned char *bits, int W, int H, int depth, int ld) {
144+
int temp = 0;
145+
if (ld == 0) {
146+
temp = abs(W * depth);
147+
} else {
148+
temp = abs(ld);
149+
}
150+
auto sz = abs(temp * H);
151+
auto *arr = new unsigned char[sz];
152+
if (!arr)
153+
return nullptr;
154+
memset(arr, 0, sz);
155+
memcpy(arr, bits, sz);
156+
LOCK(auto *img = new Fl_RGB_Image(arr, W, H, depth, ld);
157+
if (!img) return nullptr;
158+
img->alloc_array = 1);
159+
return img;
160+
}
161+
162+
Fl_RGB_Image *Fl_RGB_Image_from_data(
163+
const unsigned char *bits, int W, int H, int depth, int ld
164+
) {
165+
LOCK(auto *img = new Fl_RGB_Image(bits, W, H, depth, ld);
166+
if (!img) return nullptr;
167+
img->alloc_array = 0);
168+
return img;
169+
}
170+
171+
extern int fl_convert_pixmap(
172+
const char *const *cdata, unsigned char *out, unsigned int bg
173+
);
174+
175+
Fl_RGB_Image *Fl_RGB_Image_from_pixmap(const Fl_Pixmap *pxm) {
176+
auto rgb = new Fl_RGB_Image(nullptr, pxm->data_w(), pxm->data_h(), 4);
177+
if (pxm && pxm->data_w() > 0 && pxm->data_h() > 0) {
178+
rgb->array = new uchar[pxm->data_w() * pxm->data_h() * rgb->d()];
179+
rgb->alloc_array = 1;
180+
fl_convert_pixmap(pxm->data(), (uchar *)rgb->array, 49);
181+
}
182+
rgb->scale(pxm->w(), pxm->h(), 0, 1);
183+
return rgb;
184+
}
185+
186+
187+
IMAGE_DEFINE(Fl_Pixmap)
188+
189+
Fl_Pixmap *Fl_Pixmap_new(const char *const *D) {
190+
LOCK(Fl_Pixmap temp(D); auto ret = temp.copy(temp.w(), temp.h()));
191+
return (Fl_Pixmap *)ret;
192+
}
193+
194+
IMAGE_DEFINE(Fl_XPM_Image)
195+
196+
Fl_XPM_Image *Fl_XPM_Image_new(const char *filename) {
197+
LOCK(auto ret = new Fl_XPM_Image(filename));
198+
return ret;
199+
}
200+
201+
IMAGE_DEFINE(Fl_XBM_Image)
202+
203+
Fl_XBM_Image *Fl_XBM_Image_new(const char *filename) {
204+
LOCK(auto ret = new Fl_XBM_Image(filename));
205+
return ret;
206+
}
207+
208+
#ifdef CFLTK_USE_IMAGES
209+
210+
void Fl_register_images(void) {
211+
LOCK(fl_register_images());
212+
}
213+
214+
extern "C" void Fl_load_system_icons(void) {
215+
Fl_File_Icon::load_system_icons();
216+
}
217+
218+
IMAGE_DEFINE(Fl_JPEG_Image)
219+
220+
Fl_JPEG_Image *Fl_JPEG_Image_new(const char *filename) {
221+
LOCK(auto ret = new Fl_JPEG_Image(filename));
222+
return ret;
223+
}
224+
225+
Fl_JPEG_Image *Fl_JPEG_Image_from(const unsigned char *data) {
226+
LOCK(auto ret = new Fl_JPEG_Image(nullptr, data));
227+
return ret;
228+
}
229+
147230
IMAGE_DEFINE(Fl_PNG_Image)
148231

149232
Fl_PNG_Image *Fl_PNG_Image_new(const char *filename) {
@@ -267,86 +350,13 @@ int Fl_Anim_GIF_Image_playing(const Fl_Anim_GIF_Image *self) {
267350
return ret;
268351
}
269352

270-
IMAGE_DEFINE(Fl_Pixmap)
271-
272-
Fl_Pixmap *Fl_Pixmap_new(const char *const *D) {
273-
LOCK(Fl_Pixmap temp(D); auto ret = temp.copy(temp.w(), temp.h()));
274-
return (Fl_Pixmap *)ret;
275-
}
276-
277-
IMAGE_DEFINE(Fl_XPM_Image)
278-
279-
Fl_XPM_Image *Fl_XPM_Image_new(const char *filename) {
280-
LOCK(auto ret = new Fl_XPM_Image(filename));
281-
return ret;
282-
}
283-
284-
IMAGE_DEFINE(Fl_XBM_Image)
285-
286-
Fl_XBM_Image *Fl_XBM_Image_new(const char *filename) {
287-
LOCK(auto ret = new Fl_XBM_Image(filename));
288-
return ret;
289-
}
290-
291353
IMAGE_DEFINE(Fl_PNM_Image)
292354

293355
Fl_PNM_Image *Fl_PNM_Image_new(const char *filename) {
294356
LOCK(auto ret = new Fl_PNM_Image(filename));
295357
return ret;
296358
}
297359

298-
IMAGE_DEFINE(Fl_Tiled_Image)
299-
300-
Fl_Tiled_Image *Fl_Tiled_Image_new(Fl_Image *i, int w, int h) {
301-
LOCK(auto ret = new Fl_Tiled_Image(i->copy(), w, h));
302-
return ret;
303-
}
304-
305-
IMAGE_DEFINE(Fl_RGB_Image)
306-
307-
Fl_RGB_Image *
308-
Fl_RGB_Image_new(const unsigned char *bits, int W, int H, int depth, int ld) {
309-
int temp = 0;
310-
if (ld == 0) {
311-
temp = abs(W * depth);
312-
} else {
313-
temp = abs(ld);
314-
}
315-
auto sz = abs(temp * H);
316-
auto *arr = new unsigned char[sz];
317-
if (!arr)
318-
return nullptr;
319-
memset(arr, 0, sz);
320-
memcpy(arr, bits, sz);
321-
LOCK(auto *img = new Fl_RGB_Image(arr, W, H, depth, ld);
322-
if (!img) return nullptr;
323-
img->alloc_array = 1);
324-
return img;
325-
}
326-
327-
Fl_RGB_Image *Fl_RGB_Image_from_data(
328-
const unsigned char *bits, int W, int H, int depth, int ld
329-
) {
330-
LOCK(auto *img = new Fl_RGB_Image(bits, W, H, depth, ld);
331-
if (!img) return nullptr;
332-
img->alloc_array = 0);
333-
return img;
334-
}
335-
336-
extern int fl_convert_pixmap(
337-
const char *const *cdata, unsigned char *out, unsigned int bg
338-
);
339-
340-
Fl_RGB_Image *Fl_RGB_Image_from_pixmap(const Fl_Pixmap *pxm) {
341-
auto rgb = new Fl_RGB_Image(nullptr, pxm->data_w(), pxm->data_h(), 4);
342-
if (pxm && pxm->data_w() > 0 && pxm->data_h() > 0) {
343-
rgb->array = new uchar[pxm->data_w() * pxm->data_h() * rgb->d()];
344-
rgb->alloc_array = 1;
345-
fl_convert_pixmap(pxm->data(), (uchar *)rgb->array, 49);
346-
}
347-
rgb->scale(pxm->w(), pxm->h(), 0, 1);
348-
return rgb;
349-
}
350360

351361
IMAGE_DEFINE(Fl_Shared_Image)
352362

@@ -381,6 +391,4 @@ Fl_ICO_Image_icondirentry(const Fl_ICO_Image *self, unsigned long *size) {
381391
return temp;
382392
}
383393

384-
void Fl_register_images(void) {
385-
LOCK(fl_register_images());
386-
}
394+
#endif

src/cfl_surface.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ void Fl_Image_Surface_draw_decorated_window(
8282
Fl_Image_Surface *self, void *widget, int delta_x, int delta_y
8383
){LOCK(self->draw_decorated_window((Fl_Window *)widget, delta_x, delta_y))}
8484

85+
#ifdef CFLTK_USE_IMAGES
86+
8587
Fl_SVG_File_Surface *Fl_SVG_File_Surface_new(
8688
int width, int height, const char *file
8789
) {
@@ -117,3 +119,5 @@ void Fl_SVG_File_Surface_draw_decorated_window(
117119
) {
118120
LOCK(self->draw_decorated_window((Fl_Window *)widget, delta_x, delta_y));
119121
}
122+
123+
#endif

0 commit comments

Comments
 (0)