comparison src/image.c @ 1012:fe82830ab8fd

converted image loader to a GObject and use signals for notification
author nadvornik
date Fri, 29 Aug 2008 20:53:53 +0000
parents 4fe8f9656107
children b0db0bd74dba
comparison
equal deleted inserted replaced
1011:616b14da08c2 1012:fe82830ab8fd
449 449
450 DEBUG_1("%s read ahead started for :%s", get_exec_time(), imd->read_ahead_fd->path); 450 DEBUG_1("%s read ahead started for :%s", get_exec_time(), imd->read_ahead_fd->path);
451 451
452 imd->read_ahead_il = image_loader_new(imd->read_ahead_fd); 452 imd->read_ahead_il = image_loader_new(imd->read_ahead_fd);
453 453
454 image_loader_set_error_func(imd->read_ahead_il, image_read_ahead_error_cb, imd); 454 g_signal_connect (G_OBJECT(imd->read_ahead_il), "error", (GCallback)image_read_ahead_error_cb, imd);
455 if (!image_loader_start(imd->read_ahead_il, image_read_ahead_done_cb, imd)) 455 g_signal_connect (G_OBJECT(imd->read_ahead_il), "error", (GCallback)image_read_ahead_done_cb, imd);
456
457 if (!image_loader_start(imd->read_ahead_il))
456 { 458 {
457 image_read_ahead_cancel(imd); 459 image_read_ahead_cancel(imd);
458 image_complete_util(imd, TRUE); 460 image_complete_util(imd, TRUE);
459 } 461 }
460 } 462 }
616 { 618 {
617 imd->il = imd->read_ahead_il; 619 imd->il = imd->read_ahead_il;
618 imd->read_ahead_il = NULL; 620 imd->read_ahead_il = NULL;
619 621
620 /* override the old signals */ 622 /* override the old signals */
621 image_loader_set_area_ready_func(imd->il, image_load_area_cb, imd); 623 g_signal_handlers_disconnect_matched(G_OBJECT(imd->il), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, imd);
622 image_loader_set_error_func(imd->il, image_load_error_cb, imd); 624 g_signal_connect (G_OBJECT(imd->il), "area_ready", (GCallback)image_load_area_cb, imd);
623 image_loader_set_done_func(imd->il, image_load_done_cb, imd); 625 g_signal_connect (G_OBJECT(imd->il), "error", (GCallback)image_load_error_cb, imd);
626 g_signal_connect (G_OBJECT(imd->il), "done", (GCallback)image_load_done_cb, imd);
624 image_loader_set_buffer_size(imd->il, IMAGE_LOAD_BUFFER_COUNT); 627 image_loader_set_buffer_size(imd->il, IMAGE_LOAD_BUFFER_COUNT);
625 628
626 #ifdef IMAGE_THROTTLE_LARGER_IMAGES 629 #ifdef IMAGE_THROTTLE_LARGER_IMAGES
627 image_load_buffer_throttle(imd->il); 630 image_load_buffer_throttle(imd->il);
628 #endif 631 #endif
686 689
687 g_object_set(G_OBJECT(imd->pr), "loading", TRUE, NULL); 690 g_object_set(G_OBJECT(imd->pr), "loading", TRUE, NULL);
688 691
689 imd->il = image_loader_new(fd); 692 imd->il = image_loader_new(fd);
690 693
691 image_loader_set_area_ready_func(imd->il, image_load_area_cb, imd); 694 g_signal_connect (G_OBJECT(imd->il), "area_ready", (GCallback)image_load_area_cb, imd);
692 image_loader_set_error_func(imd->il, image_load_error_cb, imd); 695 g_signal_connect (G_OBJECT(imd->il), "error", (GCallback)image_load_error_cb, imd);
696 g_signal_connect (G_OBJECT(imd->il), "done", (GCallback)image_load_done_cb, imd);
693 image_loader_set_buffer_size(imd->il, IMAGE_LOAD_BUFFER_COUNT); 697 image_loader_set_buffer_size(imd->il, IMAGE_LOAD_BUFFER_COUNT);
694 698
695 if (!image_loader_start(imd->il, image_load_done_cb, imd)) 699 if (!image_loader_start(imd->il))
696 { 700 {
697 DEBUG_1("image start error"); 701 DEBUG_1("image start error");
698 702
699 g_object_set(G_OBJECT(imd->pr), "loading", FALSE, NULL); 703 g_object_set(G_OBJECT(imd->pr), "loading", FALSE, NULL);
700 704
1096 1100
1097 if (info) *info = NULL; 1101 if (info) *info = NULL;
1098 return NULL; 1102 return NULL;
1099 } 1103 }
1100 1104
1101 static void image_loader_sync_data(ImageLoader *il, gpointer data) 1105 static void image_loader_sync_read_ahead_data(ImageLoader *il, gpointer old_data, gpointer data)
1102 { 1106 {
1103 /* change data for the callbacks directly */ 1107 if (g_signal_handlers_disconnect_by_func(G_OBJECT(il), (GCallback)image_read_ahead_error_cb, old_data))
1104 1108 g_signal_connect (G_OBJECT(il), "error", (GCallback)image_read_ahead_error_cb, data);
1105 il->data_area_ready = data; 1109
1106 il->data_error = data; 1110 if (g_signal_handlers_disconnect_by_func(G_OBJECT(il), (GCallback)image_read_ahead_done_cb, old_data))
1107 il->data_done = data; 1111 g_signal_connect (G_OBJECT(il), "done", (GCallback)image_read_ahead_done_cb, data);
1108 il->data_percent = data; 1112 }
1113
1114 static void image_loader_sync_data(ImageLoader *il, gpointer old_data, gpointer data)
1115 {
1116 if (g_signal_handlers_disconnect_by_func(G_OBJECT(il), (GCallback)image_load_area_cb, old_data))
1117 g_signal_connect (G_OBJECT(il), "area_ready", (GCallback)image_load_area_cb, data);
1118
1119 if (g_signal_handlers_disconnect_by_func(G_OBJECT(il), (GCallback)image_load_error_cb, old_data))
1120 g_signal_connect (G_OBJECT(il), "error", (GCallback)image_load_error_cb, data);
1121
1122 if (g_signal_handlers_disconnect_by_func(G_OBJECT(il), (GCallback)image_load_done_cb, old_data))
1123 g_signal_connect (G_OBJECT(il), "done", (GCallback)image_load_done_cb, data);
1109 } 1124 }
1110 1125
1111 /* this is more like a move function 1126 /* this is more like a move function
1112 * it moves most data from source to imd 1127 * it moves most data from source to imd
1113 */ 1128 */
1129 if (source->il) 1144 if (source->il)
1130 { 1145 {
1131 imd->il = source->il; 1146 imd->il = source->il;
1132 source->il = NULL; 1147 source->il = NULL;
1133 1148
1134 image_loader_sync_data(imd->il, imd); 1149 image_loader_sync_data(imd->il, source, imd);
1135 1150
1136 imd->delay_alter_type = source->delay_alter_type; 1151 imd->delay_alter_type = source->delay_alter_type;
1137 source->delay_alter_type = ALTER_NONE; 1152 source->delay_alter_type = ALTER_NONE;
1138 } 1153 }
1139 1154
1156 } 1171 }
1157 1172
1158 image_loader_free(imd->read_ahead_il); 1173 image_loader_free(imd->read_ahead_il);
1159 imd->read_ahead_il = source->read_ahead_il; 1174 imd->read_ahead_il = source->read_ahead_il;
1160 source->read_ahead_il = NULL; 1175 source->read_ahead_il = NULL;
1161 if (imd->read_ahead_il) image_loader_sync_data(imd->read_ahead_il, imd); 1176 if (imd->read_ahead_il) image_loader_sync_read_ahead_data(imd->read_ahead_il, source, imd);
1162 1177
1163 file_data_unref(imd->read_ahead_fd); 1178 file_data_unref(imd->read_ahead_fd);
1164 imd->read_ahead_fd = source->read_ahead_fd; 1179 imd->read_ahead_fd = source->read_ahead_fd;
1165 source->read_ahead_fd = NULL; 1180 source->read_ahead_fd = NULL;
1166 1181