@@ -45,6 +45,12 @@ struct PanItemBoxShadow
4545 gint fade;
4646};
4747
48+ struct PanItemTriangleData
49+ {
50+ GqPoint coord[3 ];
51+ PanBorderType borders;
52+ };
53+
4854constexpr gint PAN_OUTLINE_THICKNESS = 1 ;
4955constexpr guint8 PAN_OUTLINE_ALPHA = 180 ;
5056constexpr GqColor PAN_OUTLINE_COLOR_1{255 , 255 , 255 , PAN_OUTLINE_ALPHA};
@@ -251,23 +257,34 @@ PanItem *pan_item_tri_new(PanWindow *pw,
251257{
252258 GdkRectangle tri_rect = util_triangle_bounding_box (c1, c2, c3);
253259
260+ auto *data = g_new0 (PanItemTriangleData, 1 );
261+ data->coord [0 ] = c1;
262+ data->coord [1 ] = c2;
263+ data->coord [2 ] = c3;
264+ data->borders = borders;
265+
254266 PanItem *pi = pan_item_new (PAN_ITEM_TRIANGLE, tri_rect.x , tri_rect.y , tri_rect.width , tri_rect.height );
255267
256268 pi->color = color;
257269 pi->color2 = border_color;
258- pi->borders = borders;
259-
260- auto *coord = g_new0 (GqPoint, 3 );
261- coord[0 ] = c1;
262- coord[1 ] = c2;
263- coord[2 ] = c3;
264- pi->data = coord;
270+ pi->data = data;
265271
266272 pw->list = g_list_prepend (pw->list , pi);
267273
268274 return pi;
269275}
270276
277+ void pan_item_tri_shift (PanItem *pi, gint x, gint y)
278+ {
279+ auto *data = static_cast <PanItemTriangleData *>(pi->data );
280+
281+ for (GqPoint &coord : data->coord )
282+ {
283+ coord.x -= x;
284+ coord.y -= y;
285+ }
286+ }
287+
271288gboolean pan_item_tri_draw (PanWindow *, PanItem *pi, GdkPixbuf *pixbuf, PixbufRenderer *,
272289 gint x, gint y, gint width, gint height)
273290{
@@ -279,12 +296,12 @@ gboolean pan_item_tri_draw(PanWindow *, PanItem *pi, GdkPixbuf *pixbuf, PixbufRe
279296 r.x -= x;
280297 r.y -= y;
281298
282- auto *pi_coord = static_cast <GqPoint *>(pi->data );
299+ auto *data = static_cast <PanItemTriangleData *>(pi->data );
283300 GqPoint coord[3 ];
284301 for (gint i = 0 ; i < 3 ; ++i)
285302 {
286- coord[i].x = pi_coord [i].x - x;
287- coord[i].y = pi_coord [i].y - y;
303+ coord[i].x = data-> coord [i].x - x;
304+ coord[i].y = data-> coord [i].y - y;
288305 }
289306
290307 pixbuf_draw_triangle (pixbuf, r, coord[0 ], coord[1 ], coord[2 ], pi->color );
@@ -294,9 +311,9 @@ gboolean pan_item_tri_draw(PanWindow *, PanItem *pi, GdkPixbuf *pixbuf, PixbufRe
294311 pixbuf_draw_line (pixbuf, r, start.x , start.y , end.x , end.y , pi->color2 );
295312 };
296313
297- if (pi ->borders & PAN_BORDER_1) draw_line (coord[0 ], coord[1 ]);
298- if (pi ->borders & PAN_BORDER_2) draw_line (coord[1 ], coord[2 ]);
299- if (pi ->borders & PAN_BORDER_3) draw_line (coord[2 ], coord[0 ]);
314+ if (data ->borders & PAN_BORDER_1) draw_line (coord[0 ], coord[1 ]);
315+ if (data ->borders & PAN_BORDER_2) draw_line (coord[1 ], coord[2 ]);
316+ if (data ->borders & PAN_BORDER_3) draw_line (coord[2 ], coord[0 ]);
300317 }
301318
302319 return FALSE ;
0 commit comments