pankaj.chikhale wrote:
>
>
> 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...@euifone.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-tp17471895p25477596.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