mirror of
https://github.com/gryf/wmaker.git
synced 2026-01-10 15:54:17 +01:00
WPrefs: use length of array instead of hard-coded constant for sample colours
In the panel for Appearance configuration, there are some sample colours proposed to users; the code used to have a bunch of constants hard-coded to handle these colours. This patch replace all constants with the macro wlengthof to use the number of element in the array determined by the compiler, so modifying the list won't cause hidden bugs. This include a somehow smarter code to dispatch the colours in the window to automatically arrange them cleanly whatever their number is. Took opportunity to de-CamelCase the name of the array as it did not add complexity in the patch. Signed-off-by: Christophe CURIS <christophe.curis@free.fr>
This commit is contained in:
committed by
Carlos R. Mafra
parent
efe0da4618
commit
74dc2d2cc0
@@ -28,6 +28,7 @@
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "TexturePanel.h"
|
||||
|
||||
@@ -111,6 +112,34 @@ static const struct {
|
||||
[WARight] { N_("Right"), "right" }
|
||||
};
|
||||
|
||||
/********************************************************************/
|
||||
static const char *const sample_colors[] = {
|
||||
"black",
|
||||
"#292929",
|
||||
"#525252",
|
||||
"#848484",
|
||||
"#adadad",
|
||||
"#d6d6d6",
|
||||
"white",
|
||||
"#d6d68c",
|
||||
"#d6a57b",
|
||||
"#8cd68c",
|
||||
"#8cd6ce",
|
||||
"#d68c8c",
|
||||
"#8c9cd6",
|
||||
"#bd86d6",
|
||||
"#d68cbd",
|
||||
"#d64a4a",
|
||||
"#4a5ad6",
|
||||
"#4ad6ce",
|
||||
"#4ad65a",
|
||||
"#ced64a",
|
||||
"#d6844a",
|
||||
"#8ad631",
|
||||
"#ce29c6",
|
||||
"#ce2973"
|
||||
};
|
||||
|
||||
/********************************************************************/
|
||||
typedef struct _Panel {
|
||||
WMBox *box;
|
||||
@@ -145,7 +174,7 @@ typedef struct _Panel {
|
||||
|
||||
WMColorWell *colW;
|
||||
|
||||
WMColorWell *sampW[24];
|
||||
WMColorWell *sampW[wlengthof_nocheck(sample_colors)];
|
||||
|
||||
/* options */
|
||||
WMFrame *optF;
|
||||
@@ -340,34 +369,6 @@ static char *hand_xpm[] = {
|
||||
" "
|
||||
};
|
||||
|
||||
static char *sampleColors[] = {
|
||||
"black",
|
||||
"#292929",
|
||||
"#525252",
|
||||
"#848484",
|
||||
"#adadad",
|
||||
"#d6d6d6",
|
||||
"white",
|
||||
"#d6d68c",
|
||||
"#d6a57b",
|
||||
"#8cd68c",
|
||||
"#8cd6ce",
|
||||
"#d68c8c",
|
||||
"#8c9cd6",
|
||||
"#bd86d6",
|
||||
"#d68cbd",
|
||||
"#d64a4a",
|
||||
"#4a5ad6",
|
||||
"#4ad6ce",
|
||||
"#4ad65a",
|
||||
"#ced64a",
|
||||
"#d6844a",
|
||||
"#8ad631",
|
||||
"#ce29c6",
|
||||
"#ce2973",
|
||||
"black"
|
||||
};
|
||||
|
||||
static const struct {
|
||||
const char *key;
|
||||
const char *default_value;
|
||||
@@ -1371,8 +1372,8 @@ static void fillColorList(_Panel * panel)
|
||||
|
||||
list = WMGetUDObjectForKey(udb, "ColorList");
|
||||
if (!list) {
|
||||
for (i = 0; i < 24; i++) {
|
||||
color = WMCreateNamedColor(scr, sampleColors[i], False);
|
||||
for (i = 0; i < wlengthof(sample_colors); i++) {
|
||||
color = WMCreateNamedColor(scr, sample_colors[i], False);
|
||||
if (!color)
|
||||
continue;
|
||||
WMSetColorWellColor(panel->sampW[i], color);
|
||||
@@ -1381,7 +1382,7 @@ static void fillColorList(_Panel * panel)
|
||||
} else {
|
||||
WMPropList *c;
|
||||
|
||||
for (i = 0; i < WMIN(24, WMGetPropListItemCount(list)); i++) {
|
||||
for (i = 0; i < WMIN(wlengthof(sample_colors), WMGetPropListItemCount(list)); i++) {
|
||||
c = WMGetFromPLArray(list, i);
|
||||
if (!c || !WMIsPLString(c))
|
||||
continue;
|
||||
@@ -1964,13 +1965,31 @@ static void createPanel(Panel * p)
|
||||
WMMoveWidget(panel->colW, 30, 75);
|
||||
WMAddNotificationObserver(colorWellObserver, panel, WMColorWellDidChangeNotification, panel->colW);
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
int j;
|
||||
for (j = 0; j < 6; j++) {
|
||||
panel->sampW[i + j * 4] = WMCreateColorWell(panel->colF);
|
||||
WMResizeWidget(panel->sampW[i + j * 4], 22, 22);
|
||||
WMMoveWidget(panel->sampW[i + j * 4], 130 + i * 22, 40 + j * 22);
|
||||
WSetColorWellBordered(panel->sampW[i + j * 4], False);
|
||||
{ /* Distribute the color samples regularly in the right half */
|
||||
const int parent_width = 242;
|
||||
const int parent_height = 195;
|
||||
const int available_width = (parent_width / 2) - 7;
|
||||
const int available_height = parent_height - 7 - 20 - 7 - 7;
|
||||
const int widget_size = 22;
|
||||
|
||||
const int nb_x = (int) round(sqrt(wlengthof(sample_colors) * available_width / available_height));
|
||||
const int nb_y = (wlengthof(sample_colors) + nb_x - 1) / nb_x;
|
||||
|
||||
const int offset_x = (parent_width / 2) + (available_width - nb_x * widget_size) / 2;
|
||||
const int offset_y = (7 + 20 + 7) + (available_height - nb_y * widget_size) / 2;
|
||||
|
||||
int x, y;
|
||||
|
||||
x = 0; y = 0;
|
||||
for (i = 0; i < wlengthof(sample_colors); i++) {
|
||||
panel->sampW[i] = WMCreateColorWell(panel->colF);
|
||||
WMResizeWidget(panel->sampW[i], widget_size, widget_size);
|
||||
WMMoveWidget(panel->sampW[i], offset_x + x * widget_size, offset_y + y * widget_size);
|
||||
WSetColorWellBordered(panel->sampW[i], False);
|
||||
if (++x >= nb_x) {
|
||||
y++;
|
||||
x = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2188,7 +2207,7 @@ static void prepareForClose(_Panel * panel)
|
||||
|
||||
/* store list of colors */
|
||||
textureList = WMCreatePLArray(NULL, NULL);
|
||||
for (i = 0; i < 24; i++) {
|
||||
for (i = 0; i < wlengthof(sample_colors); i++) {
|
||||
WMColor *color;
|
||||
char *str;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user