[GTK3] Add DMG color palettes

This commit is contained in:
Maximilian Mader 2020-04-10 22:19:40 +02:00
parent 1d530a8df3
commit b67caec5cc
Signed by: Max
GPG Key ID: F71D56A3151C4FB3
5 changed files with 100 additions and 8 deletions

View File

@ -1569,6 +1569,13 @@ G_MODULE_EXPORT void on_display_border_changed(GtkWidget *w, gpointer user_data_
border_mode_changed = true; border_mode_changed = true;
} }
G_MODULE_EXPORT void on_monochrome_palette_changed(GtkWidget *w, gpointer user_data_gptr) {
GtkComboBox *box = GTK_COMBO_BOX(w);
config.monochrome_palette_id = (gchar *)gtk_combo_box_get_active_id(box);
GB_set_palette(&gb, get_monochrome_palette());
}
G_MODULE_EXPORT void on_color_menubar_override_changed(GtkWidget *w, gpointer user_data_gptr) { G_MODULE_EXPORT void on_color_menubar_override_changed(GtkWidget *w, gpointer user_data_gptr) {
config.menubar_override = (gchar *)gtk_combo_box_get_active_id(GTK_COMBO_BOX(w)); config.menubar_override = (gchar *)gtk_combo_box_get_active_id(GTK_COMBO_BOX(w));
} }
@ -1994,7 +2001,7 @@ static void vblank(GB_gameboy_t *gb) {
if (border_mode_changed) { if (border_mode_changed) {
GB_set_border_mode(gb, get_display_border_mode()); GB_set_border_mode(gb, get_display_border_mode());
update_window_geometry(); update_window_geometry();
border_mode_changed = false; border_mode_changed = false;
} }
@ -2211,6 +2218,8 @@ static void reset(GuiData *gui_data) {
GB_switch_model_and_reset(&gb, current_model); GB_switch_model_and_reset(&gb, current_model);
} }
GB_set_palette(&gb, get_monochrome_palette());
gui_data->prev_model = get_model(); gui_data->prev_model = get_model();
GtkRequisition minimum_size; GtkRequisition minimum_size;

View File

@ -142,6 +142,7 @@ G_MODULE_EXPORT void on_cgb_model_changed(GtkWidget *w, gpointer user_data_gptr)
G_MODULE_EXPORT void on_color_correction_changed(GtkWidget *w, gpointer user_data_gptr); G_MODULE_EXPORT void on_color_correction_changed(GtkWidget *w, gpointer user_data_gptr);
G_MODULE_EXPORT void on_frame_blending_changed(GtkWidget *w, gpointer user_data_gptr); G_MODULE_EXPORT void on_frame_blending_changed(GtkWidget *w, gpointer user_data_gptr);
G_MODULE_EXPORT void on_display_border_changed(GtkWidget *w, gpointer user_data_gptr); G_MODULE_EXPORT void on_display_border_changed(GtkWidget *w, gpointer user_data_gptr);
G_MODULE_EXPORT void on_monochrome_palette_changed(GtkWidget *w, gpointer user_data_gptr);
G_MODULE_EXPORT void on_color_menubar_override_changed(GtkWidget *w, gpointer user_data_gptr); G_MODULE_EXPORT void on_color_menubar_override_changed(GtkWidget *w, gpointer user_data_gptr);
G_MODULE_EXPORT void on_dmg_model_changed(GtkWidget *w, gpointer user_data_gptr); G_MODULE_EXPORT void on_dmg_model_changed(GtkWidget *w, gpointer user_data_gptr);
G_MODULE_EXPORT void on_graphic_filter_changed(GtkWidget *w, gpointer user_data_gptr); G_MODULE_EXPORT void on_graphic_filter_changed(GtkWidget *w, gpointer user_data_gptr);

View File

@ -555,6 +555,7 @@ Maximilian Mader https://github.com/max-m</property>
<property name="margin_top">16</property> <property name="margin_top">16</property>
<property name="margin_bottom">16</property> <property name="margin_bottom">16</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="visible">True</property> <property name="visible">True</property>
@ -597,6 +598,7 @@ Maximilian Mader https://github.com/max-m</property>
<property name="position">1</property> <property name="position">1</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="visible">True</property> <property name="visible">True</property>
@ -630,6 +632,7 @@ Maximilian Mader https://github.com/max-m</property>
<property name="position">3</property> <property name="position">3</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="visible">True</property> <property name="visible">True</property>
@ -666,7 +669,7 @@ Maximilian Mader https://github.com/max-m</property>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="label" translatable="yes">Display Border:</property> <property name="label" translatable="yes">Color palette for monochrome models:</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -674,6 +677,39 @@ Maximilian Mader https://github.com/max-m</property>
<property name="position">6</property> <property name="position">6</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkComboBoxText" id="monochrome_palette_selector">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_top">5</property>
<property name="margin_bottom">10</property>
<items>
<item id="greyscale" translatable="yes">Greyscale</item>
<item id="lime" translatable="yes">Lime (Game Boy)</item>
<item id="olive" translatable="yes">Olive (Pocket)</item>
<item id="teal" translatable="yes">Teal (Light)</item>
</items>
<signal name="changed" handler="on_monochrome_palette_changed" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">7</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Display Border:</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">8</property>
</packing>
</child>
<child> <child>
<object class="GtkComboBoxText" id="display_border_selector"> <object class="GtkComboBoxText" id="display_border_selector">
<property name="visible">True</property> <property name="visible">True</property>
@ -690,7 +726,7 @@ Maximilian Mader https://github.com/max-m</property>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">7</property> <property name="position">9</property>
</packing> </packing>
</child> </child>
@ -708,9 +744,10 @@ Maximilian Mader https://github.com/max-m</property>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">8</property> <property name="position">10</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkCheckButton" id="aspect_ratio_toggle"> <object class="GtkCheckButton" id="aspect_ratio_toggle">
<property name="label" translatable="yes">Keep Aspect Ratio</property> <property name="label" translatable="yes">Keep Aspect Ratio</property>
@ -725,9 +762,10 @@ Maximilian Mader https://github.com/max-m</property>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">9</property> <property name="position">11</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkLabel" id="menubar_override_selector_label"> <object class="GtkLabel" id="menubar_override_selector_label">
<property name="can_focus">False</property> <property name="can_focus">False</property>
@ -736,7 +774,7 @@ Maximilian Mader https://github.com/max-m</property>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">10</property> <property name="position">12</property>
</packing> </packing>
</child> </child>
<child> <child>
@ -753,7 +791,7 @@ Maximilian Mader https://github.com/max-m</property>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">11</property> <property name="position">13</property>
</packing> </packing>
</child> </child>
</object> </object>
@ -761,6 +799,7 @@ Maximilian Mader https://github.com/max-m</property>
<property name="position">1</property> <property name="position">1</property>
</packing> </packing>
</child> </child>
<child type="tab"> <child type="tab">
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>

View File

@ -110,6 +110,7 @@ void on_preferences_realize(GtkWidget *w, gpointer builder_ptr) {
gtk_combo_box_set_active_id(builder_get(GTK_COMBO_BOX, "color_correction_selector"), config.color_correction_id); gtk_combo_box_set_active_id(builder_get(GTK_COMBO_BOX, "color_correction_selector"), config.color_correction_id);
gtk_combo_box_set_active_id(builder_get(GTK_COMBO_BOX, "frame_blending_selector"), config.frame_blending_mode); gtk_combo_box_set_active_id(builder_get(GTK_COMBO_BOX, "frame_blending_selector"), config.frame_blending_mode);
gtk_combo_box_set_active_id(builder_get(GTK_COMBO_BOX, "display_border_selector"), config.display_border_mode); gtk_combo_box_set_active_id(builder_get(GTK_COMBO_BOX, "display_border_selector"), config.display_border_mode);
gtk_combo_box_set_active_id(builder_get(GTK_COMBO_BOX, "monochrome_palette_selector"), config.monochrome_palette_id);
gtk_toggle_button_set_active(builder_get(GTK_TOGGLE_BUTTON, "integer_scaling_toggle"), config.use_integer_scaling); gtk_toggle_button_set_active(builder_get(GTK_TOGGLE_BUTTON, "integer_scaling_toggle"), config.use_integer_scaling);
gtk_toggle_button_set_active(builder_get(GTK_TOGGLE_BUTTON, "aspect_ratio_toggle"), config.keep_aspect_ratio); gtk_toggle_button_set_active(builder_get(GTK_TOGGLE_BUTTON, "aspect_ratio_toggle"), config.keep_aspect_ratio);
gtk_combo_box_set_active_id(builder_get(GTK_COMBO_BOX, "highpass_filter_selector"), config.high_pass_filter_id); gtk_combo_box_set_active_id(builder_get(GTK_COMBO_BOX, "highpass_filter_selector"), config.high_pass_filter_id);
@ -326,7 +327,7 @@ GB_border_mode_t get_display_border_mode(void) {
} }
// This should not happen // This should not happen
g_warning("Unknown frame blending mode: %s\nFalling back to “Never”", config.display_border_mode); g_warning("Unknown SGB border mode: %s\nFalling back to “Never”", config.display_border_mode);
default_value: return GB_BORDER_NEVER; default_value: return GB_BORDER_NEVER;
} }
@ -344,6 +345,44 @@ void set_display_border_mode(GB_border_mode_t mode) {
} }
} }
const GB_palette_t* get_monochrome_palette(void) {
if (config.monochrome_palette_id == NULL) goto default_value;
if (g_strcmp0(config.monochrome_palette_id, "greyscale") == 0) {
return &GB_PALETTE_GREY;
}
else if (g_strcmp0(config.monochrome_palette_id, "lime") == 0) {
return &GB_PALETTE_DMG;
}
else if (g_strcmp0(config.monochrome_palette_id, "olive") == 0) {
return &GB_PALETTE_MGB;
}
else if (g_strcmp0(config.monochrome_palette_id, "teal") == 0) {
return &GB_PALETTE_GBL;
}
// This should not happen
g_warning("Unknown monochrome palette: %s\nFalling back to “Greyscale”", config.monochrome_palette_id);
default_value: return &GB_PALETTE_GREY;
}
void set_monochrome_palette(const GB_palette_t *mode) {
g_message("%p | %p | %p | %p | %p", mode, &GB_PALETTE_GREY, &GB_PALETTE_DMG, &GB_PALETTE_MGB, &GB_PALETTE_GBL);
if (mode == &GB_PALETTE_GREY) {
config.monochrome_palette_id = "greyscale";
}
else if (mode == &GB_PALETTE_DMG) {
config.monochrome_palette_id = "lime";
}
else if (mode == &GB_PALETTE_MGB) {
config.monochrome_palette_id = "olive";
}
else if (mode == &GB_PALETTE_GBL) {
config.monochrome_palette_id = "teal";
}
}
GB_highpass_mode_t get_highpass_mode(void) { GB_highpass_mode_t get_highpass_mode(void) {
if (config.high_pass_filter_id == NULL) goto default_value; if (config.high_pass_filter_id == NULL) goto default_value;

View File

@ -42,6 +42,7 @@
EXPAND_GROUP_MEMBER(color_correction_id, string, "emulate_hardware") \ EXPAND_GROUP_MEMBER(color_correction_id, string, "emulate_hardware") \
EXPAND_GROUP_MEMBER(frame_blending_mode, string, "disabled") \ EXPAND_GROUP_MEMBER(frame_blending_mode, string, "disabled") \
EXPAND_GROUP_MEMBER(display_border_mode, string, "never") \ EXPAND_GROUP_MEMBER(display_border_mode, string, "never") \
EXPAND_GROUP_MEMBER(monochrome_palette_id, string, "greyscale") \
EXPAND_GROUP_MEMBER(keep_aspect_ratio, boolean, true) \ EXPAND_GROUP_MEMBER(keep_aspect_ratio, boolean, true) \
EXPAND_GROUP_MEMBER(use_integer_scaling, boolean, true) \ EXPAND_GROUP_MEMBER(use_integer_scaling, boolean, true) \
EXPAND_GROUP_MEMBER(menubar_override, string, "auto") \ EXPAND_GROUP_MEMBER(menubar_override, string, "auto") \
@ -100,6 +101,9 @@ void set_display_border_mode(GB_border_mode_t);
GB_highpass_mode_t get_highpass_mode(void); GB_highpass_mode_t get_highpass_mode(void);
void set_highpass_mode(GB_highpass_mode_t); void set_highpass_mode(GB_highpass_mode_t);
const GB_palette_t* get_monochrome_palette(void);
void set_monochrome_palette(const GB_palette_t*);
GB_model_t get_dmg_model(void); GB_model_t get_dmg_model(void);
GB_model_t get_sgb_model(void); GB_model_t get_sgb_model(void);
GB_model_t get_cgb_model(void); GB_model_t get_cgb_model(void);