122 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			122 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /* PIKA - Photo and Image Kooker Application
 | ||
|  |  * a rebranding of The GNU Image Manipulation Program (created with heckimp) | ||
|  |  * A derived work which may be trivial. However, any changes may be (C)2023 by Aldercone Studio | ||
|  |  * | ||
|  |  * Original copyright, applying to most contents (license remains unchanged):  | ||
|  |  * Copyright (C) 1995 Spencer Kimball and Peter Mattis | ||
|  |  * | ||
|  |  * pikaviewrendererbuffer.c | ||
|  |  * Copyright (C) 2004-2006 Michael Natterer <mitch@gimp.org> | ||
|  |  * | ||
|  |  * This program is free software: you can redistribute it and/or modify | ||
|  |  * it under the terms of the GNU General Public License as published by | ||
|  |  * the Free Software Foundation; either version 3 of the License, or | ||
|  |  * (at your option) any later version. | ||
|  |  * | ||
|  |  * This program is distributed in the hope that it will be useful, | ||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||
|  |  * GNU General Public License for more details. | ||
|  |  * | ||
|  |  * You should have received a copy of the GNU General Public License | ||
|  |  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 | ||
|  |  */ | ||
|  | 
 | ||
|  | #include "config.h"
 | ||
|  | 
 | ||
|  | #include <gegl.h>
 | ||
|  | #include <gtk/gtk.h>
 | ||
|  | 
 | ||
|  | #include "libpikawidgets/pikawidgets.h"
 | ||
|  | 
 | ||
|  | #include "widgets-types.h"
 | ||
|  | 
 | ||
|  | #include "core/pikatempbuf.h"
 | ||
|  | #include "core/pikaviewable.h"
 | ||
|  | 
 | ||
|  | #include "pikaviewrendererbuffer.h"
 | ||
|  | 
 | ||
|  | 
 | ||
|  | static void   pika_view_renderer_buffer_render (PikaViewRenderer *renderer, | ||
|  |                                                 GtkWidget        *widget); | ||
|  | 
 | ||
|  | 
 | ||
|  | G_DEFINE_TYPE (PikaViewRendererBuffer, pika_view_renderer_buffer, | ||
|  |                PIKA_TYPE_VIEW_RENDERER) | ||
|  | 
 | ||
|  | #define parent_class pika_view_renderer_buffer_class_init
 | ||
|  | 
 | ||
|  | 
 | ||
|  | static void | ||
|  | pika_view_renderer_buffer_class_init (PikaViewRendererBufferClass *klass) | ||
|  | { | ||
|  |   PikaViewRendererClass *renderer_class = PIKA_VIEW_RENDERER_CLASS (klass); | ||
|  | 
 | ||
|  |   renderer_class->render = pika_view_renderer_buffer_render; | ||
|  | } | ||
|  | 
 | ||
|  | static void | ||
|  | pika_view_renderer_buffer_init (PikaViewRendererBuffer *renderer) | ||
|  | { | ||
|  | } | ||
|  | 
 | ||
|  | static void | ||
|  | pika_view_renderer_buffer_render (PikaViewRenderer *renderer, | ||
|  |                                   GtkWidget        *widget) | ||
|  | { | ||
|  |   gint         buffer_width; | ||
|  |   gint         buffer_height; | ||
|  |   gint         view_width; | ||
|  |   gint         view_height; | ||
|  |   gboolean     scaling_up; | ||
|  |   PikaTempBuf *render_buf = NULL; | ||
|  | 
 | ||
|  |   pika_viewable_get_size (renderer->viewable, &buffer_width, &buffer_height); | ||
|  | 
 | ||
|  |   pika_viewable_calc_preview_size (buffer_width, | ||
|  |                                    buffer_height, | ||
|  |                                    renderer->width, | ||
|  |                                    renderer->height, | ||
|  |                                    TRUE, 1.0, 1.0, | ||
|  |                                    &view_width, | ||
|  |                                    &view_height, | ||
|  |                                    &scaling_up); | ||
|  | 
 | ||
|  |   if (scaling_up) | ||
|  |     { | ||
|  |       PikaTempBuf *temp_buf; | ||
|  | 
 | ||
|  |       temp_buf = pika_viewable_get_new_preview (renderer->viewable, | ||
|  |                                                 renderer->context, | ||
|  |                                                 buffer_width, buffer_height); | ||
|  | 
 | ||
|  |       if (temp_buf) | ||
|  |         { | ||
|  |           render_buf = pika_temp_buf_scale (temp_buf, view_width, view_height); | ||
|  | 
 | ||
|  |           pika_temp_buf_unref (temp_buf); | ||
|  |         } | ||
|  |     } | ||
|  |   else | ||
|  |     { | ||
|  |       render_buf = pika_viewable_get_new_preview (renderer->viewable, | ||
|  |                                                   renderer->context, | ||
|  |                                                   view_width, view_height); | ||
|  |     } | ||
|  | 
 | ||
|  |   if (render_buf) | ||
|  |     { | ||
|  |       pika_view_renderer_render_temp_buf_simple (renderer, widget, render_buf); | ||
|  | 
 | ||
|  |       pika_temp_buf_unref (render_buf); | ||
|  |     } | ||
|  |   else /* no preview available */ | ||
|  |     { | ||
|  |       const gchar *icon_name; | ||
|  | 
 | ||
|  |       icon_name = pika_viewable_get_icon_name (renderer->viewable); | ||
|  | 
 | ||
|  |       pika_view_renderer_render_icon (renderer, widget, icon_name); | ||
|  |     } | ||
|  | } |