summaryrefslogtreecommitdiff
path: root/atari
diff options
context:
space:
mode:
authorOle Loots <ole@monochrom.net>2011-09-20 20:11:32 +0000
committerOle Loots <ole@monochrom.net>2011-09-20 20:11:32 +0000
commit8bb14fa5695bb1e5b3960f1ecbba4e66aaec1baf (patch)
treed33616ab63ce869ec1aa5a8b70bbd399bb91ed00 /atari
parent8b445036f3197b3d88d9cdf5ce2682c3fd526fc6 (diff)
downloadnetsurf-8bb14fa5695bb1e5b3960f1ecbba4e66aaec1baf.tar.gz
netsurf-8bb14fa5695bb1e5b3960f1ecbba4e66aaec1baf.tar.bz2
Obey to clipping rules... (walk the rectangle list)
svn path=/trunk/netsurf/; revision=12825
Diffstat (limited to 'atari')
-rwxr-xr-xatari/toolbar.c68
1 files changed, 42 insertions, 26 deletions
diff --git a/atari/toolbar.c b/atari/toolbar.c
index a7e84904d..9f41bf3d4 100755
--- a/atari/toolbar.c
+++ b/atari/toolbar.c
@@ -69,15 +69,17 @@ static void __CDECL button_redraw( COMPONENT *c, long buff[8])
{
OBJECT *tree = (OBJECT*)mt_CompDataSearch( &app, c, CDT_OBJECT );
struct gui_window * gw = mt_CompDataSearch( &app, c, CDT_OWNER );
- LGRECT work,clip;
+ LGRECT work,clip;
+ GRECT todo,crect;
short pxy[4];
mt_CompGetLGrect(&app, c, WF_WORKXYWH, &work);
- clip = work;
+ clip = work;
+ /* return if component and redraw region does not intersect: */
if ( !rc_lintersect( (LGRECT*)&buff[4], &clip ) ) {
- LOG(("useless button_redraw"));
return;
- }
+ }
+ /* clip contains intersecting part: */
pxy[0] = clip.g_x;
pxy[1] = clip.g_y;
pxy[2] = clip.g_w + clip.g_x;
@@ -97,10 +99,24 @@ static void __CDECL button_redraw( COMPONENT *c, long buff[8])
pxy[3] = MIN( (short)buff[5] + buff[7], work.g_y + work.g_h - 2);
vswr_mode( vdih, MD_REPLACE);
v_bar( vdih, (short*)&pxy );
- /* mt_objc_draw( tree, 0, 8, clip.g_x, clip.g_y, clip.g_w, clip.g_h, app.aes_global ); */
- /* The above seems to have problems with some AES, so we try this: */
- int err = ObjcDrawParent(OC_OBJC, tree, 0, 0, 1|OC_MSG );
- LOG(("ObjcDrawParent: %d", err ));
+
+ /* go through the rectangle list, using classic AES methods. */
+ /* Windom ComGetLGrect is buggy for WF_FIRST/NEXTXYWH */
+ crect.g_x = clip.g_x;
+ crect.g_y = clip.g_y;
+ crect.g_w = clip.g_w;
+ crect.g_h = clip.g_h;
+ wind_get(gw->root->handle->handle, WF_FIRSTXYWH,
+ &todo.g_x, &todo.g_y, &todo.g_w, &todo.g_h );
+ while( (todo.g_w > 0) && (todo.g_h > 0) ){
+
+ if( rc_intersect(&crect, &todo) ){
+ objc_draw( tree, 0, 0, todo.g_x, todo.g_y, todo.g_w, todo.g_h );
+ }
+ wind_get(gw->root->handle->handle, WF_NEXTXYWH,
+ &todo.g_x, &todo.g_y, &todo.g_w, &todo.g_h );
+ }
+
if( gw->root->toolbar->buttons[0].comp == c && work.g_x == buff[4] ){
vsl_color( vdih, LWHITE );
pxy[0] = (short)buff[4];
@@ -170,14 +186,14 @@ void __CDECL evnt_throbber_redraw( COMPONENT *c, long buff[8])
short pxy[4];
struct gui_window * gw = (struct gui_window *)mt_CompDataSearch(&app, c, CDT_OWNER);
if( gw->root->toolbar->throbber.running == false ) {
- idx = THROBBER_INACTIVE_INDEX;
+ idx = THROBBER_INACTIVE_INDEX;
} else {
idx = gw->root->toolbar->throbber.index;
if( idx > THROBBER_MAX_INDEX || idx < THROBBER_MIN_INDEX ) {
idx = THROBBER_MIN_INDEX;
}
}
-
+
mt_CompGetLGrect(&app, c, WF_WORKXYWH, &work);
clip = work;
if ( !rc_lintersect( (LGRECT*)&buff[4], &clip ) ) return;
@@ -185,7 +201,7 @@ void __CDECL evnt_throbber_redraw( COMPONENT *c, long buff[8])
vsf_interior( vdih , 1 );
if(app.nplanes > 2 )
vsf_color( vdih, LWHITE );
- else
+ else
vsf_color( vdih, WHITE );
pxy[0] = (short)buff[4];
pxy[1] = (short)buff[5];
@@ -266,7 +282,7 @@ void __CDECL evnt_url_redraw( COMPONENT *c, long buff[8] )
/* draw white txt box: */
pxy[0] = pxy[0] + 1;
pxy[1] = pxy[1] + ((TOOLBAR_HEIGHT - URLBOX_HEIGHT)/2) - 1;
- pxy[2] = pxy[2] - 1;
+ pxy[2] = pxy[2] - 1;
pxy[3] = work.g_y + ((TOOLBAR_HEIGHT - URLBOX_HEIGHT)/2) + URLBOX_HEIGHT ;
vsf_color( vdih, WHITE);
v_bar( vdih, pxy );
@@ -293,7 +309,7 @@ void __CDECL evnt_url_redraw( COMPONENT *c, long buff[8] )
}
}
}
-
+
if( window_url_widget_has_focus( gw ) ) {
/* draw caret: */
pxy[0] = 3 + work.g_x + ((tb->url.caret_pos - tb->url.scrollx) * tb->url.char_size);
@@ -321,7 +337,7 @@ void __CDECL evnt_url_click( COMPONENT *c, long buff[8] )
short pxy[4];
short mx, my, mb, kstat;
int old;
- graf_mkstate( &mx, &my, &mb, &kstat );
+ graf_mkstate( &mx, &my, &mb, &kstat );
struct gui_window * gw = (struct gui_window *)mt_CompDataSearch(&app, c, CDT_OWNER);
assert( gw != NULL );
CMP_TOOLBAR tb = gw->root->toolbar;
@@ -344,7 +360,7 @@ void __CDECL evnt_url_click( COMPONENT *c, long buff[8] )
tb->url.selection_len = strlen(tb->url.text) - tb->url.caret_pos;
if( old == tb->url.selection_len )
/* avoid redraw when nothing changed */
- return;
+ return;
} else {
/* TODO: recognize click + shift key */
tb->url.selection_len = 0;
@@ -368,14 +384,14 @@ static void __CDECL evnt_toolbar_redraw( COMPONENT *c, long buff[8], void *data
if( work.g_y + work.g_h != clip.g_y + clip.g_h ) return;
- vswr_mode( vdih, MD_REPLACE );
+ vswr_mode( vdih, MD_REPLACE );
vsl_color( vdih, BLACK );
vsl_type( vdih, 1 );
- vsl_width( vdih, 1 );
+ vsl_width( vdih, 1 );
pxy[0] = clip.g_x;
pxy[1] = pxy[3] = work.g_y + work.g_h-1 ;
pxy[2] = clip.g_x + clip.g_w;
- v_pline( vdih, 2, (short*)&pxy );
+ v_pline( vdih, 2, (short*)&pxy );
}
@@ -532,7 +548,7 @@ void tb_url_set( struct gui_window * gw, char * text )
int newsize;
if( gw->root->toolbar == NULL )
- return;
+ return;
if( gw->browser->attached == false )
return;
@@ -650,7 +666,7 @@ bool tb_url_input( struct gui_window * gw, short nkc )
tmp[len] = 0;
int r = scrap_txt_write(&app, (char*)&tmp);
ret = true;
- }
+ }
}
else if( (ctrl && code == 'V') || code == NK_INS ) {
char * clip = scrap_txt_read( &app );
@@ -674,7 +690,7 @@ bool tb_url_input( struct gui_window * gw, short nkc )
tb_url_place_caret( gw, tb->url.selection_len, false );
} else {
strcpy(
- &tb->url.text[tb->url.caret_pos],
+ &tb->url.text[tb->url.caret_pos],
&tb->url.text[tb->url.caret_pos+tb->url.selection_len]
);
}
@@ -682,7 +698,7 @@ bool tb_url_input( struct gui_window * gw, short nkc )
} else {
if( tb->url.caret_pos < tb->url.used -1) {
strcpy(
- &tb->url.text[tb->url.caret_pos+tb->url.selection_len],
+ &tb->url.text[tb->url.caret_pos+tb->url.selection_len],
&tb->url.text[tb->url.caret_pos+1]
);
tb->url.used--;
@@ -691,7 +707,7 @@ bool tb_url_input( struct gui_window * gw, short nkc )
tb->url.selection_len = 0;
}
else if( code == NK_BS ) {
- if( tb->url.caret_pos > 0 &&
+ if( tb->url.caret_pos > 0 &&
tb->url.selection_len != 0 ) {
if( tb->url.selection_len < 0 ) {
strcpy(&tb->url.text[tb->url.caret_pos+tb->url.selection_len], &tb->url.text[tb->url.caret_pos]);
@@ -718,9 +734,9 @@ bool tb_url_input( struct gui_window * gw, short nkc )
tb_url_place_caret( gw, 0, true );
}
else if( code == NK_M_END ) {
- tb_url_place_caret( gw,
- strlen((char*)&tb->url.text)-1,
- true
+ tb_url_place_caret( gw,
+ strlen((char*)&tb->url.text)-1,
+ true
);
}
else if( code == NK_ENTER || code == NK_RET ) {