Line data Source code
1 : /* File: gui_sketch_texture.inl; Copyright and License: see below */
2 :
3 : #include "u8/u8_log.h"
4 : #include "u8/u8_trace.h"
5 : #include <assert.h>
6 :
7 4 : static inline void gui_sketch_texture_init( gui_sketch_texture_t *this_ )
8 : {
9 4 : (*this_).memory_fence_1 = 12345;
10 4 : (*this_).memory_fence_2 = 54321;
11 : (*this_).surface
12 4 : = cairo_image_surface_create_for_data( &((*this_).buf[0]),
13 : CAIRO_FORMAT_ARGB32,
14 : GUI_SKETCH_TEXTURE_MAX_WIDTH,
15 : GUI_SKETCH_TEXTURE_MAX_HEIGHT,
16 : GUI_SKETCH_TEXTURE_MAX_WIDTH * GUI_SKETCH_TEXTURE_BYTES_PER_PIXEL /* = stride */
17 : );
18 4 : }
19 :
20 4 : static inline void gui_sketch_texture_destroy( gui_sketch_texture_t *this_ )
21 : {
22 4 : cairo_surface_destroy( (*this_).surface );
23 4 : }
24 :
25 0 : static inline u8_error_t gui_sketch_texture_draw( gui_sketch_texture_t *this_,
26 : GdkTexture *icon,
27 : double left,
28 : double top,
29 : cairo_t *cr )
30 : {
31 0 : U8_TRACE_BEGIN();
32 0 : assert( icon != NULL );
33 0 : assert( cr != NULL );
34 0 : u8_error_t result = U8_ERROR_NONE;
35 :
36 0 : const int icon_width = gdk_texture_get_width( icon );
37 0 : const int icon_height = gdk_texture_get_height( icon );
38 0 : if (( icon_width <= GUI_SKETCH_TEXTURE_MAX_WIDTH )&&( icon_height <= GUI_SKETCH_TEXTURE_MAX_HEIGHT ))
39 : {
40 0 : cairo_surface_flush( (*this_).surface );
41 0 : gdk_texture_download( icon,
42 0 : &((*this_).buf[0]),
43 : GUI_SKETCH_TEXTURE_MAX_WIDTH * GUI_SKETCH_TEXTURE_BYTES_PER_PIXEL /* = stride */
44 : );
45 0 : cairo_surface_mark_dirty( (*this_).surface );
46 : /* check that boundaries of (*this_).buf have not been overwritten: */
47 0 : assert( (*this_).memory_fence_1 == 12345 );
48 0 : assert( (*this_).memory_fence_2 == 54321 );
49 :
50 0 : cairo_set_source_surface( cr, (*this_).surface, left, top );
51 0 : cairo_rectangle( cr, left, top, icon_width, icon_height );
52 0 : cairo_fill( cr );
53 : }
54 : else
55 : {
56 0 : result = U8_ERROR_EDGE_CASE_PARAM;
57 : }
58 :
59 0 : U8_TRACE_END_ERR( result );
60 0 : return result;
61 : }
62 :
63 :
64 : /*
65 : Copyright 2024-2025 Andreas Warnke
66 :
67 : Licensed under the Apache License, Version 2.0 (the "License");
68 : you may not use this file except in compliance with the License.
69 : You may obtain a copy of the License at
70 :
71 : http://www.apache.org/licenses/LICENSE-2.0
72 :
73 : Unless required by applicable law or agreed to in writing, software
74 : distributed under the License is distributed on an "AS IS" BASIS,
75 : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
76 : See the License for the specific language governing permissions and
77 : limitations under the License.
78 : */
|