/* game-view.c generated by valac 0.15.2.11-7b14d, the Vala compiler * generated from game-view.vala, do not modify */ #include #include #include #include #include #include #include #include #include #include #include #include #define TYPE_GAME_VIEW (game_view_get_type ()) #define GAME_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_GAME_VIEW, GameView)) #define GAME_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_GAME_VIEW, GameViewClass)) #define IS_GAME_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_GAME_VIEW)) #define IS_GAME_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_GAME_VIEW)) #define GAME_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_GAME_VIEW, GameViewClass)) typedef struct _GameView GameView; typedef struct _GameViewClass GameViewClass; typedef struct _GameViewPrivate GameViewPrivate; #define TYPE_GAME (game_get_type ()) #define GAME(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_GAME, Game)) #define GAME_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_GAME, GameClass)) #define IS_GAME(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_GAME)) #define IS_GAME_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_GAME)) #define GAME_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_GAME, GameClass)) typedef struct _Game Game; typedef struct _GameClass GameClass; #define _cairo_pattern_destroy0(var) ((var == NULL) ? NULL : (var = (cairo_pattern_destroy (var), NULL))) #define _game_unref0(var) ((var == NULL) ? NULL : (var = (game_unref (var), NULL))) #define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL))) #define _cairo_destroy0(var) ((var == NULL) ? NULL : (var = (cairo_destroy (var), NULL))) #define _cairo_surface_destroy0(var) ((var == NULL) ? NULL : (var = (cairo_surface_destroy (var), NULL))) typedef struct _GamePrivate GamePrivate; #define TYPE_MAP (map_get_type ()) #define MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MAP, Map)) #define MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_MAP, MapClass)) #define IS_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MAP)) #define IS_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_MAP)) #define MAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_MAP, MapClass)) typedef struct _Map Map; typedef struct _MapClass MapClass; #define TYPE_TILE (tile_get_type ()) #define TILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TILE, Tile)) #define TILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_TILE, TileClass)) #define IS_TILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TILE)) #define IS_TILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_TILE)) #define TILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_TILE, TileClass)) typedef struct _Tile Tile; typedef struct _TileClass TileClass; typedef struct _TilePrivate TilePrivate; #define TYPE_SLOT (slot_get_type ()) #define SLOT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SLOT, Slot)) #define SLOT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SLOT, SlotClass)) #define IS_SLOT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SLOT)) #define IS_SLOT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SLOT)) #define SLOT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SLOT, SlotClass)) typedef struct _Slot Slot; typedef struct _SlotClass SlotClass; #define _tile_unref0(var) ((var == NULL) ? NULL : (var = (tile_unref (var), NULL))) #define _g_free0(var) (var = (g_free (var), NULL)) typedef struct _SlotPrivate SlotPrivate; struct _GameView { GtkDrawingArea parent_instance; GameViewPrivate * priv; GdkRGBA background_color; }; struct _GameViewClass { GtkDrawingAreaClass parent_class; }; struct _GameViewPrivate { cairo_pattern_t* tile_pattern; gint tile_pattern_width; gint tile_pattern_height; gint x_offset; gint y_offset; gint tile_width; gint tile_height; gint tile_layer_offset_x; gint tile_layer_offset_y; Game* _game; GamesPreimage* _theme; gboolean _paused; }; struct _Game { GTypeInstance parent_instance; volatile int ref_count; GamePrivate * priv; Map* map; GList* tiles; Tile* hint_tiles[2]; gint move_number; guint hint_blink_counter; }; struct _GameClass { GTypeClass parent_class; void (*finalize) (Game *self); }; struct _Tile { GTypeInstance parent_instance; volatile int ref_count; TilePrivate * priv; gint number; Slot* slot; gboolean visible; gint move_number; }; struct _TileClass { GTypeClass parent_class; void (*finalize) (Tile *self); }; struct _Slot { GTypeInstance parent_instance; volatile int ref_count; SlotPrivate * priv; gint x; gint y; gint layer; }; struct _SlotClass { GTypeClass parent_class; void (*finalize) (Slot *self); }; static gpointer game_view_parent_class = NULL; GType game_view_get_type (void) G_GNUC_CONST; gpointer game_ref (gpointer instance); void game_unref (gpointer instance); GParamSpec* param_spec_game (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags); void value_set_game (GValue* value, gpointer v_object); void value_take_game (GValue* value, gpointer v_object); gpointer value_get_game (const GValue* value); GType game_get_type (void) G_GNUC_CONST; #define GAME_VIEW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_GAME_VIEW, GameViewPrivate)) enum { GAME_VIEW_DUMMY_PROPERTY, GAME_VIEW_GAME, GAME_VIEW_THEME, GAME_VIEW_PAUSED }; GameView* game_view_new (void); GameView* game_view_construct (GType object_type); void game_view_set_background (GameView* self, const gchar* colour); static void game_view_draw_game (GameView* self, cairo_t* cr, gboolean render_indexes); GamesPreimage* game_view_get_theme (GameView* self); static void game_view_update_dimensions (GameView* self); Game* game_view_get_game (GameView* self); gpointer map_ref (gpointer instance); void map_unref (gpointer instance); GParamSpec* param_spec_map (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags); void value_set_map (GValue* value, gpointer v_object); void value_take_map (GValue* value, gpointer v_object); gpointer value_get_map (const GValue* value); GType map_get_type (void) G_GNUC_CONST; gpointer tile_ref (gpointer instance); void tile_unref (gpointer instance); GParamSpec* param_spec_tile (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags); void value_set_tile (GValue* value, gpointer v_object); void value_take_tile (GValue* value, gpointer v_object); gpointer value_get_tile (const GValue* value); GType tile_get_type (void) G_GNUC_CONST; gpointer slot_ref (gpointer instance); void slot_unref (gpointer instance); GParamSpec* param_spec_slot (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags); void value_set_slot (GValue* value, gpointer v_object); void value_take_slot (GValue* value, gpointer v_object); gpointer value_get_slot (const GValue* value); GType slot_get_type (void) G_GNUC_CONST; static void game_view_get_tile_position (GameView* self, Tile* tile, gint* x, gint* y); static gint game_view_get_image_offset (GameView* self, gint number); gboolean game_view_get_paused (GameView* self); Tile* game_get_selected_tile (Game* self); guint map_get_width (Map* self); guint map_get_height (Map* self); static void game_view_redraw_tile_cb (GameView* self, Tile* tile); static gboolean game_view_real_draw (GtkWidget* base, cairo_t* cr); static gboolean game_view_real_button_press_event (GtkWidget* base, GdkEventButton* event); static Tile* game_view_find_tile (GameView* self, guint x, guint y); gboolean game_tile_can_move (Game* self, Tile* tile); void game_set_selected_tile (Game* self, Tile* value); gboolean tile_matches (Tile* self, Tile* tile); gboolean game_remove_pair (Game* self, Tile* tile0, Tile* tile1); void game_view_set_game (GameView* self, Game* value); static void _game_view_redraw_tile_cb_game_redraw_tile (Game* _sender, Tile* tile, gpointer self); void game_view_set_theme (GameView* self, GamesPreimage* value); void game_view_set_paused (GameView* self, gboolean value); static void game_view_finalize (GObject* obj); static void _vala_game_view_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec); static void _vala_game_view_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec); GameView* game_view_construct (GType object_type) { GameView * self = NULL; self = (GameView*) g_object_new (object_type, NULL); g_object_set ((GtkWidget*) self, "can-focus", TRUE, NULL); gtk_widget_add_events ((GtkWidget*) self, (gint) GDK_BUTTON_PRESS_MASK); return self; } GameView* game_view_new (void) { return game_view_construct (TYPE_GAME_VIEW); } void game_view_set_background (GameView* self, const gchar* colour) { gboolean _tmp0_ = FALSE; const gchar* _tmp1_; gboolean _tmp4_; g_return_if_fail (self != NULL); memset (&self->background_color, 0, sizeof (GdkRGBA)); _tmp1_ = colour; if (_tmp1_ == NULL) { _tmp0_ = TRUE; } else { const gchar* _tmp2_; gboolean _tmp3_ = FALSE; _tmp2_ = colour; _tmp3_ = gdk_rgba_parse (&self->background_color, _tmp2_); _tmp0_ = !_tmp3_; } _tmp4_ = _tmp0_; if (_tmp4_) { gdouble _tmp5_; gdouble _tmp6_; self->background_color.blue = (gdouble) 0; _tmp5_ = self->background_color.blue; self->background_color.green = _tmp5_; _tmp6_ = self->background_color.green; self->background_color.red = _tmp6_; } gtk_widget_queue_draw ((GtkWidget*) self); } static gpointer _tile_ref0 (gpointer self) { return self ? tile_ref (self) : NULL; } static void game_view_draw_game (GameView* self, cairo_t* cr, gboolean render_indexes) { GamesPreimage* _tmp0_; GamesPreimage* _tmp1_; gint _tmp2_; gint _tmp3_; gint image_width; gint _tmp4_; gint _tmp5_; gint image_height; gboolean _tmp6_ = FALSE; gboolean _tmp7_; gboolean _tmp17_; Game* _tmp40_; Game* _tmp41_; GList* _tmp42_; gboolean _tmp101_; gboolean _tmp102_; g_return_if_fail (self != NULL); g_return_if_fail (cr != NULL); _tmp0_ = game_view_get_theme (self); _tmp1_ = _tmp0_; if (_tmp1_ == NULL) { return; } game_view_update_dimensions (self); _tmp2_ = self->priv->tile_width; _tmp3_ = self->priv->tile_layer_offset_x; image_width = _tmp2_ + _tmp3_; _tmp4_ = self->priv->tile_height; _tmp5_ = self->priv->tile_layer_offset_y; image_height = _tmp4_ + _tmp5_; _tmp7_ = render_indexes; if (!_tmp7_) { gboolean _tmp8_ = FALSE; gboolean _tmp9_ = FALSE; cairo_pattern_t* _tmp10_; gboolean _tmp13_; gboolean _tmp16_; _tmp10_ = self->priv->tile_pattern; if (_tmp10_ == NULL) { _tmp9_ = TRUE; } else { gint _tmp11_; gint _tmp12_; _tmp11_ = self->priv->tile_pattern_width; _tmp12_ = image_width; _tmp9_ = _tmp11_ != _tmp12_; } _tmp13_ = _tmp9_; if (_tmp13_) { _tmp8_ = TRUE; } else { gint _tmp14_; gint _tmp15_; _tmp14_ = self->priv->tile_pattern_height; _tmp15_ = image_height; _tmp8_ = _tmp14_ != _tmp15_; } _tmp16_ = _tmp8_; _tmp6_ = _tmp16_; } else { _tmp6_ = FALSE; } _tmp17_ = _tmp6_; if (_tmp17_) { gint _tmp18_; gint _tmp19_; gint _tmp20_; gint width; gint _tmp21_; gint height; cairo_t* _tmp22_; cairo_surface_t* _tmp23_ = NULL; gint _tmp24_; gint _tmp25_; cairo_surface_t* _tmp26_; cairo_surface_t* surface; cairo_surface_t* _tmp27_; cairo_t* _tmp28_; cairo_t* c; GamesPreimage* _tmp29_; GamesPreimage* _tmp30_; gint _tmp31_; gint _tmp32_; GdkPixbuf* _tmp33_ = NULL; GdkPixbuf* pixbuf; GdkPixbuf* _tmp34_; cairo_t* _tmp35_; GdkPixbuf* _tmp36_; cairo_t* _tmp37_; cairo_surface_t* _tmp38_; cairo_pattern_t* _tmp39_; _tmp18_ = image_width; self->priv->tile_pattern_width = _tmp18_; _tmp19_ = image_height; self->priv->tile_pattern_height = _tmp19_; _tmp20_ = image_width; width = _tmp20_ * 43; _tmp21_ = image_height; height = _tmp21_ * 2; _tmp22_ = cr; _tmp23_ = cairo_get_target (_tmp22_); _tmp24_ = width; _tmp25_ = height; _tmp26_ = cairo_surface_create_similar (_tmp23_, CAIRO_CONTENT_COLOR_ALPHA, _tmp24_, _tmp25_); surface = _tmp26_; _tmp27_ = surface; _tmp28_ = cairo_create (_tmp27_); c = _tmp28_; _tmp29_ = game_view_get_theme (self); _tmp30_ = _tmp29_; _tmp31_ = width; _tmp32_ = height; _tmp33_ = games_preimage_render (_tmp30_, _tmp31_, _tmp32_); pixbuf = _tmp33_; _tmp34_ = pixbuf; if (_tmp34_ == NULL) { _g_object_unref0 (pixbuf); _cairo_destroy0 (c); _cairo_surface_destroy0 (surface); return; } _tmp35_ = c; _tmp36_ = pixbuf; gdk_cairo_set_source_pixbuf (_tmp35_, _tmp36_, (gdouble) 0, (gdouble) 0); _tmp37_ = c; cairo_paint (_tmp37_); _tmp38_ = surface; _tmp39_ = cairo_pattern_create_for_surface (_tmp38_); _cairo_pattern_destroy0 (self->priv->tile_pattern); self->priv->tile_pattern = _tmp39_; _g_object_unref0 (pixbuf); _cairo_destroy0 (c); _cairo_surface_destroy0 (surface); } _tmp40_ = game_view_get_game (self); _tmp41_ = _tmp40_; _tmp42_ = _tmp41_->tiles; { GList* tile_collection = NULL; GList* tile_it = NULL; tile_collection = _tmp42_; for (tile_it = tile_collection; tile_it != NULL; tile_it = tile_it->next) { Tile* _tmp43_; Tile* tile = NULL; _tmp43_ = _tile_ref0 ((Tile*) tile_it->data); tile = _tmp43_; { Tile* _tmp44_; gboolean _tmp45_; gint x = 0; gint y = 0; Tile* _tmp46_; gint _tmp47_ = 0; gint _tmp48_ = 0; Tile* _tmp49_; gint _tmp50_; gint _tmp51_ = 0; gint _tmp52_; gint texture_x; gint texture_y; gboolean _tmp53_; gboolean _tmp54_; gboolean _tmp79_; cairo_t* _tmp95_; gint _tmp96_; gint _tmp97_; gint _tmp98_; gint _tmp99_; cairo_t* _tmp100_; _tmp44_ = tile; _tmp45_ = _tmp44_->visible; if (!_tmp45_) { _tile_unref0 (tile); continue; } _tmp46_ = tile; game_view_get_tile_position (self, _tmp46_, &_tmp47_, &_tmp48_); x = _tmp47_; y = _tmp48_; _tmp49_ = tile; _tmp50_ = _tmp49_->number; _tmp51_ = game_view_get_image_offset (self, _tmp50_); _tmp52_ = image_width; texture_x = _tmp51_ * _tmp52_; texture_y = 0; _tmp53_ = game_view_get_paused (self); _tmp54_ = _tmp53_; if (_tmp54_) { gint _tmp55_ = 0; gint _tmp56_; _tmp55_ = game_view_get_image_offset (self, -1); _tmp56_ = image_width; texture_x = _tmp55_ * _tmp56_; texture_y = 0; } else { Tile* _tmp57_; Game* _tmp58_; Game* _tmp59_; Tile* _tmp60_; Tile* _tmp61_; _tmp57_ = tile; _tmp58_ = game_view_get_game (self); _tmp59_ = _tmp58_; _tmp60_ = game_get_selected_tile (_tmp59_); _tmp61_ = _tmp60_; if (_tmp57_ == _tmp61_) { gint _tmp62_; _tmp62_ = image_height; texture_y = _tmp62_; } else { gboolean _tmp63_ = FALSE; Game* _tmp64_; Game* _tmp65_; guint _tmp66_; gboolean _tmp77_; _tmp64_ = game_view_get_game (self); _tmp65_ = _tmp64_; _tmp66_ = _tmp65_->hint_blink_counter; if ((_tmp66_ % 2) == ((guint) 1)) { gboolean _tmp67_ = FALSE; Tile* _tmp68_; Game* _tmp69_; Game* _tmp70_; Tile* _tmp71_; gboolean _tmp76_; _tmp68_ = tile; _tmp69_ = game_view_get_game (self); _tmp70_ = _tmp69_; _tmp71_ = _tmp70_->hint_tiles[0]; if (_tmp68_ == _tmp71_) { _tmp67_ = TRUE; } else { Tile* _tmp72_; Game* _tmp73_; Game* _tmp74_; Tile* _tmp75_; _tmp72_ = tile; _tmp73_ = game_view_get_game (self); _tmp74_ = _tmp73_; _tmp75_ = _tmp74_->hint_tiles[1]; _tmp67_ = _tmp72_ == _tmp75_; } _tmp76_ = _tmp67_; _tmp63_ = _tmp76_; } else { _tmp63_ = FALSE; } _tmp77_ = _tmp63_; if (_tmp77_) { gint _tmp78_; _tmp78_ = image_height; texture_y = _tmp78_; } } } _tmp79_ = render_indexes; if (_tmp79_) { cairo_t* _tmp80_; Tile* _tmp81_; gint _tmp82_; Tile* _tmp83_; gint _tmp84_; Tile* _tmp85_; gint _tmp86_; _tmp80_ = cr; _tmp81_ = tile; _tmp82_ = _tmp81_->number; _tmp83_ = tile; _tmp84_ = _tmp83_->number; _tmp85_ = tile; _tmp86_ = _tmp85_->number; cairo_set_source_rgb (_tmp80_, _tmp82_ / 255.0, _tmp84_ / 255.0, _tmp86_ / 255.0); } else { cairo_matrix_t matrix = {0}; gint _tmp87_; gint _tmp88_; gint _tmp89_; gint _tmp90_; cairo_pattern_t* _tmp91_; cairo_matrix_t _tmp92_; cairo_t* _tmp93_; cairo_pattern_t* _tmp94_; cairo_matrix_init_identity (&matrix); _tmp87_ = texture_x; _tmp88_ = x; _tmp89_ = texture_y; _tmp90_ = y; cairo_matrix_translate (&matrix, (gdouble) (_tmp87_ - _tmp88_), (gdouble) (_tmp89_ - _tmp90_)); _tmp91_ = self->priv->tile_pattern; _tmp92_ = matrix; cairo_pattern_set_matrix (_tmp91_, &_tmp92_); _tmp93_ = cr; _tmp94_ = self->priv->tile_pattern; cairo_set_source (_tmp93_, _tmp94_); } _tmp95_ = cr; _tmp96_ = x; _tmp97_ = y; _tmp98_ = image_width; _tmp99_ = image_height; cairo_rectangle (_tmp95_, (gdouble) _tmp96_, (gdouble) _tmp97_, (gdouble) _tmp98_, (gdouble) _tmp99_); _tmp100_ = cr; cairo_fill (_tmp100_); _tile_unref0 (tile); } } } _tmp101_ = game_view_get_paused (self); _tmp102_ = _tmp101_; if (_tmp102_) { cairo_t* _tmp103_; cairo_t* _tmp104_; cairo_t* _tmp105_; cairo_t* _tmp106_; gint _tmp107_ = 0; const gchar* _tmp108_ = NULL; gchar* _tmp109_; gchar* text; cairo_text_extents_t extents = {0}; cairo_t* _tmp110_; const gchar* _tmp111_; cairo_text_extents_t _tmp112_ = {0}; cairo_t* _tmp113_; gint _tmp114_ = 0; cairo_text_extents_t _tmp115_; gdouble _tmp116_; gint _tmp117_ = 0; cairo_text_extents_t _tmp118_; gdouble _tmp119_; cairo_t* _tmp120_; cairo_t* _tmp121_; const gchar* _tmp122_; _tmp103_ = cr; cairo_set_source_rgba (_tmp103_, (gdouble) 0, (gdouble) 0, (gdouble) 0, 0.75); _tmp104_ = cr; cairo_paint (_tmp104_); _tmp105_ = cr; cairo_select_font_face (_tmp105_, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); _tmp106_ = cr; _tmp107_ = gtk_widget_get_allocated_width ((GtkWidget*) self); cairo_set_font_size (_tmp106_, _tmp107_ * 0.125); _tmp108_ = _ ("Paused"); _tmp109_ = g_strdup (_tmp108_); text = _tmp109_; _tmp110_ = cr; _tmp111_ = text; cairo_text_extents (_tmp110_, _tmp111_, &_tmp112_); extents = _tmp112_; _tmp113_ = cr; _tmp114_ = gtk_widget_get_allocated_width ((GtkWidget*) self); _tmp115_ = extents; _tmp116_ = _tmp115_.width; _tmp117_ = gtk_widget_get_allocated_height ((GtkWidget*) self); _tmp118_ = extents; _tmp119_ = _tmp118_.height; cairo_move_to (_tmp113_, (_tmp114_ - _tmp116_) / 2.0, (_tmp117_ + _tmp119_) / 2.0); _tmp120_ = cr; cairo_set_source_rgb (_tmp120_, (gdouble) 1, (gdouble) 1, (gdouble) 1); _tmp121_ = cr; _tmp122_ = text; cairo_show_text (_tmp121_, _tmp122_); _g_free0 (text); } } static void game_view_update_dimensions (GameView* self) { gint _tmp0_ = 0; gint width; gint _tmp1_ = 0; gint height; GamesPreimage* _tmp2_; GamesPreimage* _tmp3_; GamesPreimage* _tmp4_; GamesPreimage* _tmp5_; gint _tmp6_ = 0; GamesPreimage* _tmp7_; GamesPreimage* _tmp8_; gint _tmp9_ = 0; gdouble aspect; Game* _tmp10_; Game* _tmp11_; Map* _tmp12_; guint _tmp13_; guint _tmp14_; gdouble map_width; Game* _tmp15_; Game* _tmp16_; Map* _tmp17_; guint _tmp18_; guint _tmp19_; gdouble _tmp20_; gdouble map_height; gint _tmp21_; gdouble _tmp22_; gint _tmp23_; gdouble _tmp24_; gdouble _tmp25_ = 0.0; gdouble unit_width; gdouble _tmp26_; gdouble _tmp27_; gdouble unit_height; gdouble _tmp28_; gdouble _tmp29_; gint _tmp30_; gint _tmp31_; gint _tmp32_; Game* _tmp33_; Game* _tmp34_; Map* _tmp35_; guint _tmp36_; guint _tmp37_; gdouble _tmp38_; gint _tmp39_; Game* _tmp40_; Game* _tmp41_; Map* _tmp42_; guint _tmp43_; guint _tmp44_; gdouble _tmp45_; g_return_if_fail (self != NULL); _tmp0_ = gtk_widget_get_allocated_width ((GtkWidget*) self); width = _tmp0_; _tmp1_ = gtk_widget_get_allocated_height ((GtkWidget*) self); height = _tmp1_; _tmp2_ = game_view_get_theme (self); _tmp3_ = _tmp2_; if (_tmp3_ == NULL) { return; } _tmp4_ = game_view_get_theme (self); _tmp5_ = _tmp4_; _tmp6_ = games_preimage_get_height (_tmp5_); _tmp7_ = game_view_get_theme (self); _tmp8_ = _tmp7_; _tmp9_ = games_preimage_get_width (_tmp8_); aspect = (((gdouble) _tmp6_) / 2) / (((gdouble) _tmp9_) / 43); _tmp10_ = game_view_get_game (self); _tmp11_ = _tmp10_; _tmp12_ = _tmp11_->map; _tmp13_ = map_get_width (_tmp12_); _tmp14_ = _tmp13_; map_width = _tmp14_ + 2.0; _tmp15_ = game_view_get_game (self); _tmp16_ = _tmp15_; _tmp17_ = _tmp16_->map; _tmp18_ = map_get_height (_tmp17_); _tmp19_ = _tmp18_; _tmp20_ = aspect; map_height = (_tmp19_ + 2.0) * _tmp20_; _tmp21_ = width; _tmp22_ = map_width; _tmp23_ = height; _tmp24_ = map_height; _tmp25_ = MIN (_tmp21_ / _tmp22_, _tmp23_ / _tmp24_); unit_width = _tmp25_; _tmp26_ = unit_width; _tmp27_ = aspect; unit_height = _tmp26_ * _tmp27_; _tmp28_ = unit_width; self->priv->tile_width = (gint) (_tmp28_ * 2); _tmp29_ = unit_height; self->priv->tile_height = (gint) (_tmp29_ * 2); _tmp30_ = self->priv->tile_width; self->priv->tile_layer_offset_x = _tmp30_ / 7; _tmp31_ = self->priv->tile_height; self->priv->tile_layer_offset_y = _tmp31_ / 10; _tmp32_ = width; _tmp33_ = game_view_get_game (self); _tmp34_ = _tmp33_; _tmp35_ = _tmp34_->map; _tmp36_ = map_get_width (_tmp35_); _tmp37_ = _tmp36_; _tmp38_ = unit_width; self->priv->x_offset = ((gint) (_tmp32_ - (_tmp37_ * _tmp38_))) / 2; _tmp39_ = height; _tmp40_ = game_view_get_game (self); _tmp41_ = _tmp40_; _tmp42_ = _tmp41_->map; _tmp43_ = map_get_height (_tmp42_); _tmp44_ = _tmp43_; _tmp45_ = unit_height; self->priv->y_offset = ((gint) (_tmp39_ - (_tmp44_ * _tmp45_))) / 2; } static void game_view_get_tile_position (GameView* self, Tile* tile, gint* x, gint* y) { gint _vala_x = 0; gint _vala_y = 0; gint _tmp0_; Tile* _tmp1_; Slot* _tmp2_; gint _tmp3_; gint _tmp4_; Tile* _tmp5_; Slot* _tmp6_; gint _tmp7_; gint _tmp8_; gint _tmp9_; Tile* _tmp10_; Slot* _tmp11_; gint _tmp12_; gint _tmp13_; Tile* _tmp14_; Slot* _tmp15_; gint _tmp16_; gint _tmp17_; g_return_if_fail (self != NULL); g_return_if_fail (tile != NULL); _tmp0_ = self->priv->x_offset; _tmp1_ = tile; _tmp2_ = _tmp1_->slot; _tmp3_ = _tmp2_->x; _tmp4_ = self->priv->tile_width; _tmp5_ = tile; _tmp6_ = _tmp5_->slot; _tmp7_ = _tmp6_->layer; _tmp8_ = self->priv->tile_layer_offset_x; _vala_x = (_tmp0_ + ((_tmp3_ * _tmp4_) / 2)) + (_tmp7_ * _tmp8_); _tmp9_ = self->priv->y_offset; _tmp10_ = tile; _tmp11_ = _tmp10_->slot; _tmp12_ = _tmp11_->y; _tmp13_ = self->priv->tile_height; _tmp14_ = tile; _tmp15_ = _tmp14_->slot; _tmp16_ = _tmp15_->layer; _tmp17_ = self->priv->tile_layer_offset_y; _vala_y = (_tmp9_ + ((_tmp12_ * _tmp13_) / 2)) - (_tmp16_ * _tmp17_); if (x) { *x = _vala_x; } if (y) { *y = _vala_y; } } static gint game_view_get_image_offset (GameView* self, gint number) { gint result = 0; gint _tmp0_; gint set; gboolean _tmp1_ = FALSE; gint _tmp2_; gboolean _tmp4_; gint _tmp5_; gint _tmp7_; gint _tmp9_; g_return_val_if_fail (self != NULL, 0); _tmp0_ = number; set = _tmp0_ / 4; _tmp2_ = number; if (_tmp2_ < 0) { _tmp1_ = TRUE; } else { gint _tmp3_; _tmp3_ = set; _tmp1_ = _tmp3_ >= 36; } _tmp4_ = _tmp1_; if (_tmp4_) { result = 42; return result; } _tmp5_ = set; if (_tmp5_ == 33) { gint _tmp6_; _tmp6_ = number; result = 33 + (_tmp6_ % 4); return result; } _tmp7_ = set; if (_tmp7_ == 35) { gint _tmp8_; _tmp8_ = number; result = 38 + (_tmp8_ % 4); return result; } _tmp9_ = set; if (_tmp9_ == 34) { result = 37; return result; } result = set; return result; } static void game_view_redraw_tile_cb (GameView* self, Tile* tile) { gint x = 0; gint y = 0; Tile* _tmp0_; gint _tmp1_ = 0; gint _tmp2_ = 0; gint _tmp3_; gint _tmp4_; g_return_if_fail (self != NULL); g_return_if_fail (tile != NULL); game_view_update_dimensions (self); _tmp0_ = tile; game_view_get_tile_position (self, _tmp0_, &_tmp1_, &_tmp2_); x = _tmp1_; y = _tmp2_; _tmp3_ = self->priv->tile_pattern_width; _tmp4_ = self->priv->tile_pattern_height; gtk_widget_queue_draw_area ((GtkWidget*) self, x, y, _tmp3_, _tmp4_); } static gboolean game_view_real_draw (GtkWidget* base, cairo_t* cr) { GameView * self; gboolean result = FALSE; Game* _tmp0_; Game* _tmp1_; cairo_t* _tmp2_; GdkRGBA _tmp3_; cairo_t* _tmp4_; cairo_t* _tmp5_; self = (GameView*) base; g_return_val_if_fail (cr != NULL, FALSE); _tmp0_ = game_view_get_game (self); _tmp1_ = _tmp0_; if (_tmp1_ == NULL) { result = FALSE; return result; } _tmp2_ = cr; _tmp3_ = self->background_color; gdk_cairo_set_source_rgba (_tmp2_, &_tmp3_); _tmp4_ = cr; cairo_paint (_tmp4_); _tmp5_ = cr; game_view_draw_game (self, _tmp5_, FALSE); result = TRUE; return result; } static gboolean game_view_real_button_press_event (GtkWidget* base, GdkEventButton* event) { GameView * self; gboolean result = FALSE; gboolean _tmp0_ = FALSE; Game* _tmp1_; Game* _tmp2_; gboolean _tmp5_; GdkEventButton _tmp6_; GdkEventType _tmp7_; GdkEventButton _tmp8_; gdouble _tmp9_; GdkEventButton _tmp10_; gdouble _tmp11_; Tile* _tmp12_ = NULL; Tile* tile; gboolean _tmp13_ = FALSE; Tile* _tmp14_; gboolean _tmp19_; GdkEventButton _tmp20_; guint _tmp21_; self = (GameView*) base; g_return_val_if_fail (event != NULL, FALSE); _tmp1_ = game_view_get_game (self); _tmp2_ = _tmp1_; if (_tmp2_ == NULL) { _tmp0_ = TRUE; } else { gboolean _tmp3_; gboolean _tmp4_; _tmp3_ = game_view_get_paused (self); _tmp4_ = _tmp3_; _tmp0_ = _tmp4_; } _tmp5_ = _tmp0_; if (_tmp5_) { result = FALSE; return result; } _tmp6_ = *event; _tmp7_ = _tmp6_.type; if (_tmp7_ != GDK_BUTTON_PRESS) { result = FALSE; return result; } _tmp8_ = *event; _tmp9_ = _tmp8_.x; _tmp10_ = *event; _tmp11_ = _tmp10_.y; _tmp12_ = game_view_find_tile (self, (guint) _tmp9_, (guint) _tmp11_); tile = _tmp12_; _tmp14_ = tile; if (_tmp14_ == NULL) { _tmp13_ = TRUE; } else { Game* _tmp15_; Game* _tmp16_; Tile* _tmp17_; gboolean _tmp18_ = FALSE; _tmp15_ = game_view_get_game (self); _tmp16_ = _tmp15_; _tmp17_ = tile; _tmp18_ = game_tile_can_move (_tmp16_, _tmp17_); _tmp13_ = !_tmp18_; } _tmp19_ = _tmp13_; if (_tmp19_) { result = TRUE; _tile_unref0 (tile); return result; } _tmp20_ = *event; _tmp21_ = _tmp20_.button; if (_tmp21_ == ((guint) 1)) { Game* _tmp22_; Game* _tmp23_; Tile* _tmp24_; Tile* _tmp25_; Tile* _tmp29_; Game* _tmp30_; Game* _tmp31_; Tile* _tmp32_; Tile* _tmp33_; Game* _tmp36_; Game* _tmp37_; Tile* _tmp38_; Tile* _tmp39_; Tile* _tmp40_; gboolean _tmp41_ = FALSE; _tmp22_ = game_view_get_game (self); _tmp23_ = _tmp22_; _tmp24_ = game_get_selected_tile (_tmp23_); _tmp25_ = _tmp24_; if (_tmp25_ == NULL) { Game* _tmp26_; Game* _tmp27_; Tile* _tmp28_; _tmp26_ = game_view_get_game (self); _tmp27_ = _tmp26_; _tmp28_ = tile; game_set_selected_tile (_tmp27_, _tmp28_); result = TRUE; _tile_unref0 (tile); return result; } _tmp29_ = tile; _tmp30_ = game_view_get_game (self); _tmp31_ = _tmp30_; _tmp32_ = game_get_selected_tile (_tmp31_); _tmp33_ = _tmp32_; if (_tmp29_ == _tmp33_) { Game* _tmp34_; Game* _tmp35_; _tmp34_ = game_view_get_game (self); _tmp35_ = _tmp34_; game_set_selected_tile (_tmp35_, NULL); result = TRUE; _tile_unref0 (tile); return result; } _tmp36_ = game_view_get_game (self); _tmp37_ = _tmp36_; _tmp38_ = game_get_selected_tile (_tmp37_); _tmp39_ = _tmp38_; _tmp40_ = tile; _tmp41_ = tile_matches (_tmp39_, _tmp40_); if (_tmp41_) { Game* _tmp42_; Game* _tmp43_; Game* _tmp44_; Game* _tmp45_; Tile* _tmp46_; Tile* _tmp47_; Tile* _tmp48_; _tmp42_ = game_view_get_game (self); _tmp43_ = _tmp42_; _tmp44_ = game_view_get_game (self); _tmp45_ = _tmp44_; _tmp46_ = game_get_selected_tile (_tmp45_); _tmp47_ = _tmp46_; _tmp48_ = tile; game_remove_pair (_tmp43_, _tmp47_, _tmp48_); result = TRUE; _tile_unref0 (tile); return result; } else { Game* _tmp49_; Game* _tmp50_; Tile* _tmp51_; _tmp49_ = game_view_get_game (self); _tmp50_ = _tmp49_; _tmp51_ = tile; game_set_selected_tile (_tmp50_, _tmp51_); result = TRUE; _tile_unref0 (tile); return result; } } result = FALSE; _tile_unref0 (tile); return result; } static Tile* game_view_find_tile (GameView* self, guint x, guint y) { Tile* result = NULL; cairo_surface_t* _tmp0_; cairo_surface_t* surface; cairo_surface_t* _tmp1_; cairo_t* _tmp2_; cairo_t* cr; cairo_t* _tmp3_; cairo_t* _tmp4_; cairo_t* _tmp5_; guint _tmp6_; guint _tmp7_; cairo_t* _tmp8_; cairo_surface_t* _tmp9_; guchar* _tmp10_ = NULL; guchar* data; gint data_length1; gint _data_size_; guchar* _tmp11_; gint _tmp11__length1; guchar _tmp12_; guchar number; Game* _tmp13_; Game* _tmp14_; GList* _tmp15_; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = cairo_image_surface_create (CAIRO_FORMAT_RGB24, 1, 1); surface = _tmp0_; _tmp1_ = surface; _tmp2_ = cairo_create (_tmp1_); cr = _tmp2_; _tmp3_ = cr; cairo_set_source_rgba (_tmp3_, (gdouble) 255, (gdouble) 255, (gdouble) 255, (gdouble) 255); _tmp4_ = cr; cairo_paint (_tmp4_); _tmp5_ = cr; _tmp6_ = x; _tmp7_ = y; cairo_translate (_tmp5_, (gdouble) (-_tmp6_), (gdouble) (-_tmp7_)); _tmp8_ = cr; game_view_draw_game (self, _tmp8_, TRUE); _tmp9_ = surface; _tmp10_ = cairo_image_surface_get_data (_tmp9_); data = _tmp10_; data_length1 = -1; _data_size_ = data_length1; _tmp11_ = data; _tmp11__length1 = data_length1; _tmp12_ = _tmp11_[0]; number = _tmp12_; _tmp13_ = game_view_get_game (self); _tmp14_ = _tmp13_; _tmp15_ = _tmp14_->tiles; { GList* tile_collection = NULL; GList* tile_it = NULL; tile_collection = _tmp15_; for (tile_it = tile_collection; tile_it != NULL; tile_it = tile_it->next) { Tile* _tmp16_; Tile* tile = NULL; _tmp16_ = _tile_ref0 ((Tile*) tile_it->data); tile = _tmp16_; { Tile* _tmp17_; gint _tmp18_; guchar _tmp19_; _tmp17_ = tile; _tmp18_ = _tmp17_->number; _tmp19_ = number; if (_tmp18_ == ((gint) _tmp19_)) { result = tile; _cairo_destroy0 (cr); _cairo_surface_destroy0 (surface); return result; } _tile_unref0 (tile); } } } result = NULL; _cairo_destroy0 (cr); _cairo_surface_destroy0 (surface); return result; } Game* game_view_get_game (GameView* self) { Game* result; Game* _tmp0_; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = self->priv->_game; result = _tmp0_; return result; } static gpointer _game_ref0 (gpointer self) { return self ? game_ref (self) : NULL; } static void _game_view_redraw_tile_cb_game_redraw_tile (Game* _sender, Tile* tile, gpointer self) { game_view_redraw_tile_cb (self, tile); } void game_view_set_game (GameView* self, Game* value) { Game* _tmp0_; Game* _tmp1_; Game* _tmp2_; g_return_if_fail (self != NULL); _tmp0_ = value; _tmp1_ = _game_ref0 (_tmp0_); _game_unref0 (self->priv->_game); self->priv->_game = _tmp1_; _tmp2_ = self->priv->_game; g_signal_connect_object (_tmp2_, "redraw-tile", (GCallback) _game_view_redraw_tile_cb_game_redraw_tile, self, 0); gtk_widget_queue_draw ((GtkWidget*) self); g_object_notify ((GObject *) self, "game"); } GamesPreimage* game_view_get_theme (GameView* self) { GamesPreimage* result; GamesPreimage* _tmp0_; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = self->priv->_theme; result = _tmp0_; return result; } static gpointer _g_object_ref0 (gpointer self) { return self ? g_object_ref (self) : NULL; } void game_view_set_theme (GameView* self, GamesPreimage* value) { GamesPreimage* _tmp0_; GamesPreimage* _tmp1_; g_return_if_fail (self != NULL); _tmp0_ = value; _tmp1_ = _g_object_ref0 (_tmp0_); _g_object_unref0 (self->priv->_theme); self->priv->_theme = _tmp1_; _cairo_pattern_destroy0 (self->priv->tile_pattern); self->priv->tile_pattern = NULL; gtk_widget_queue_draw ((GtkWidget*) self); g_object_notify ((GObject *) self, "theme"); } gboolean game_view_get_paused (GameView* self) { gboolean result; gboolean _tmp0_; g_return_val_if_fail (self != NULL, FALSE); _tmp0_ = self->priv->_paused; result = _tmp0_; return result; } void game_view_set_paused (GameView* self, gboolean value) { gboolean _tmp0_; g_return_if_fail (self != NULL); _tmp0_ = value; self->priv->_paused = _tmp0_; gtk_widget_queue_draw ((GtkWidget*) self); g_object_notify ((GObject *) self, "paused"); } static void game_view_class_init (GameViewClass * klass) { game_view_parent_class = g_type_class_peek_parent (klass); g_type_class_add_private (klass, sizeof (GameViewPrivate)); GTK_WIDGET_CLASS (klass)->draw = game_view_real_draw; GTK_WIDGET_CLASS (klass)->button_press_event = game_view_real_button_press_event; G_OBJECT_CLASS (klass)->get_property = _vala_game_view_get_property; G_OBJECT_CLASS (klass)->set_property = _vala_game_view_set_property; G_OBJECT_CLASS (klass)->finalize = game_view_finalize; g_object_class_install_property (G_OBJECT_CLASS (klass), GAME_VIEW_GAME, param_spec_game ("game", "game", "game", TYPE_GAME, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE)); g_object_class_install_property (G_OBJECT_CLASS (klass), GAME_VIEW_THEME, g_param_spec_object ("theme", "theme", "theme", GAMES_TYPE_PREIMAGE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE)); g_object_class_install_property (G_OBJECT_CLASS (klass), GAME_VIEW_PAUSED, g_param_spec_boolean ("paused", "paused", "paused", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE)); } static void game_view_instance_init (GameView * self) { self->priv = GAME_VIEW_GET_PRIVATE (self); self->priv->tile_pattern = NULL; self->priv->tile_pattern_width = 0; self->priv->tile_pattern_height = 0; self->priv->_theme = NULL; self->priv->_paused = FALSE; } static void game_view_finalize (GObject* obj) { GameView * self; self = GAME_VIEW (obj); _cairo_pattern_destroy0 (self->priv->tile_pattern); _game_unref0 (self->priv->_game); _g_object_unref0 (self->priv->_theme); G_OBJECT_CLASS (game_view_parent_class)->finalize (obj); } GType game_view_get_type (void) { static volatile gsize game_view_type_id__volatile = 0; if (g_once_init_enter (&game_view_type_id__volatile)) { static const GTypeInfo g_define_type_info = { sizeof (GameViewClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) game_view_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GameView), 0, (GInstanceInitFunc) game_view_instance_init, NULL }; GType game_view_type_id; game_view_type_id = g_type_register_static (GTK_TYPE_DRAWING_AREA, "GameView", &g_define_type_info, 0); g_once_init_leave (&game_view_type_id__volatile, game_view_type_id); } return game_view_type_id__volatile; } static void _vala_game_view_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) { GameView * self; self = GAME_VIEW (object); switch (property_id) { case GAME_VIEW_GAME: value_set_game (value, game_view_get_game (self)); break; case GAME_VIEW_THEME: g_value_set_object (value, game_view_get_theme (self)); break; case GAME_VIEW_PAUSED: g_value_set_boolean (value, game_view_get_paused (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void _vala_game_view_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) { GameView * self; self = GAME_VIEW (object); switch (property_id) { case GAME_VIEW_GAME: game_view_set_game (self, value_get_game (value)); break; case GAME_VIEW_THEME: game_view_set_theme (self, g_value_get_object (value)); break; case GAME_VIEW_PAUSED: game_view_set_paused (self, g_value_get_boolean (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }