there is memory leak problem with your mymarqueetest code will u plz tell me
how to remove that memory leak
plz conact me or reply on pankaj.chikh...@gmail.com its urgent plz reply me
as soon as possible


Micah Carrick wrote:
> 
> In the book "Foundations of GTK+ Development", there is a chapter on 
> creating custom widgets in which a marquee widget is created (which 
> scrolls text across the widget).
> 
> You could take a look at the source code from the book available at 
> www.gtkbook.com
> 
> - Micah Carrick
> 
>   Developer - http://www.micahcarrick.com
>   GTK+ Forums - http://www.gtkforums.com
> 
> 
> 
> Tuvok wrote:
>> Hi,
>>
>> What I need to do, is to make a bar with scrolling text inside it (like
>> the bars with stock prices on tv).
>>
>> I've tried two methods, both of which are very slow. I've done it with
>> Canvas and with Cairo. Below follows code.
>>
>> Did I do something wrong? Is there a way to make this code run faster?
>> Should I use some different libraries for it?
>>
>>
>> Rendering 4 such windows (1680x50) takes up 40-50% on both cores (AMD
>> X2, 2.4GHz).
>>
>>
>>
>> Method I: Canvas
>>
>> The rendering part of code:
>>
>>    GtkWidget *canvasWdg;
>>    GnomeCanvasItem *text;
>>    GnomeCanvasGroup *rootGroup;
>>
>>    ifstream in(filename);
>>    string textLine;
>>    getline(in, textLine);
>>
>>    canvasWdg = gnome_canvas_new();
>>
>>    gtk_container_add(GTK_CONTAINER(window), canvasWdg);
>>
>>    gnome_canvas_set_scroll_region(GNOME_CANVAS(canvasWdg), 0.0, 0.0,
>> width*1.0,
>>                                   height*1.0);
>>    rootGroup = gnome_canvas_root(GNOME_CANVAS(canvasWdg));
>>
>>    text = gnome_canvas_item_new(rootGroup, GNOME_TYPE_CANVAS_TEXT, "x",
>>                              0.0, "y", 0.0, "text", textLine.c_str(),
>>                                 "anchor", GTK_ANCHOR_NW,
>>                                 "fill_color", "white", "size",
>>                                 (int)((height*0.7)*1000),
>>                                 "size-set", TRUE, NULL);
>>
>>    double x1, x2, y1, y2;
>>    gnome_canvas_item_get_bounds(GNOME_CANVAS_ITEM(text), &x1, &y1, &x2,
>> &y2);
>> // align the text in window:
>>    gnome_canvas_item_move(GNOME_CANVAS_ITEM(text), 1.0*width,
>>                           ((height*1.0)/2-(y2-y1)/2));
>>
>>    g_timeout_add(40, moveText, text);
>>
>>    gtk_widget_show_all(window);
>>
>> and the timeout function:
>>
>> gboolean moveText(void *text)
>> {
>>
>>    gnome_canvas_item_move(GNOME_CANVAS_ITEM((GnomeCanvasItem*)text),
>> -2.0, 0.0);
>>
>>    return TRUE;
>> }
>>
>>
>>
>> Method II: Cairo
>>
>> I've made a Gtk widget, which draws with cairo on expose event; I'll put
>> here only the expose function:
>>
>> static gboolean mdk_text_scroller_expose(GtkWidget *textScroller,
>> GdkEventExpose *event)
>> {
>>
>>    MdkTextScroller *ts = MDK_TEXT_SCROLLER(textScroller);
>>
>>
>>    cairo_t *cr;
>>
>>    cr = gdk_cairo_create(textScroller->window);
>>                                                                              
>>                                                   
>>
>>     gdk_cairo_region(cr,
>> event->region);                                                              
>>                                                                 
>>
>> cairo_clip(cr);                                                              
>>                                                                              
>>         
>>
>>
>>    cairo_select_font_face(cr, "Sans", CAIRO_FONT_SLANT_NORMAL,
>> CAIRO_FONT_WEIGHT_NORMAL);
>>
>>    cairo_set_font_size(cr, ts->size);
>>    cairo_move_to(cr, ts->x+ts->xOffset, ts->y+ts->yOffset);
>>    cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
>>    cairo_show_text(cr, ts->text);
>>
>>    if (ts->width == 0 || ts->height == 0)
>>    {
>>       cairo_text_extents_t ext;
>>       cairo_text_extents(cr, ts->text, &ext);
>>       ts->width = ext.width;
>>       ts->height = ext.height;
>>    }
>>
>>    if (ts->width+ts->xOffset+100 < 0)
>>    {
>>       cairo_move_to(cr, ts->x+ts->xOffset+ts->width+100, ts->y
>> +ts->yOffset);
>>       cairo_show_text(cr, ts->text);
>>    }
>>
>>    if (ts->x+ts->xOffset+ts->width < 0)
>>    {
>>       ts->xOffset=ts->xOffset+ts->width+100;
>>    }
>>
>>
>>    cairo_stroke(cr);
>>
>>    cairo_destroy(cr);
>> }
>>
>> it's then redrawn with the same timeout call:
>>
>> gboolean moveText(void *text)
>> {
>>    mdk_change_text_position((GtkWidget*)text, -1, 0);
>>    gtk_widget_queue_draw((GtkWidget*)text);
>>
>>    return TRUE;
>> }
>>
>>
>>   
> _______________________________________________
> gtk-app-devel-list mailing list
> gtk-app-devel-list@gnome.org
> http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Scrolling-text-in-Gtk-tp17471895p25477546.html
Sent from the Gtk+ - Apps Dev mailing list archive at Nabble.com.

_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to