| 176 | } |
| 177 | |
| 178 | static void |
| 179 | preview_set_render_size(signal_user_data_t *ud, int width, int height) |
| 180 | { |
| 181 | GtkWidget * widget, *frame, *reset; |
| 182 | GtkWindow * window; |
| 183 | gint s_w, s_h; |
| 184 | gint factor; |
| 185 | gfloat ratio = 1.0; |
| 186 | |
| 187 | window = GTK_WINDOW(ghb_builder_widget("preview_window")); |
| 188 | widget = ghb_builder_widget("preview_image"); |
| 189 | frame = ghb_builder_widget("preview_image_frame"); |
| 190 | |
| 191 | if (ghb_dict_get_bool(ud->prefs, "reduce_hd_preview")) |
| 192 | factor = 90; |
| 193 | else |
| 194 | factor = 100; |
| 195 | |
| 196 | get_display_size(ghb_builder_widget("hb_window"), &s_w, &s_h); |
| 197 | |
| 198 | if (s_w > 0 && s_h > 0) |
| 199 | { |
| 200 | int orig_w = width; |
| 201 | int orig_h = height; |
| 202 | |
| 203 | if (width > s_w * factor / 100) |
| 204 | { |
| 205 | width = s_w * factor / 100; |
| 206 | height = height * width / orig_w; |
| 207 | } |
| 208 | if (height > s_h * factor / 100) |
| 209 | { |
| 210 | height = s_h * factor / 100; |
| 211 | width = orig_w * height / orig_h; |
| 212 | } |
| 213 | } |
| 214 | if (height && width) |
| 215 | ratio = (gfloat) width / height; |
| 216 | |
| 217 | gtk_widget_set_size_request(widget, width, height); |
| 218 | gtk_aspect_frame_set_xalign(GTK_ASPECT_FRAME(frame), 0.5); |
| 219 | gtk_aspect_frame_set_yalign(GTK_ASPECT_FRAME(frame), 0.5); |
| 220 | gtk_aspect_frame_set_ratio(GTK_ASPECT_FRAME(frame), ratio); |
| 221 | gtk_aspect_frame_set_obey_child(GTK_ASPECT_FRAME(frame), FALSE); |
| 222 | |
| 223 | if (gtk_window_is_fullscreen(window)) |
| 224 | { |
| 225 | reset = ghb_builder_widget("preview_reset"); |
| 226 | gtk_widget_set_visible(reset, FALSE); |
| 227 | } |
| 228 | else |
| 229 | { |
| 230 | gtk_window_unmaximize(window); |
| 231 | gtk_window_set_default_size(window, width, -1); |
| 232 | } |
| 233 | gtk_widget_set_size_request(widget, -1, -1); |
| 234 | |
| 235 | ud->preview->render_width = width; |
no test coverage detected