X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fmain.c;h=cd2f1acb5a085bec2e8d33d30fbd49844382e7cd;hb=e971e3d263563d25fec184168b7a200160c632ff;hp=b1247d88d680ec012d36215fc0bede6fcb8f782b;hpb=d1f9b38df9dbe416341869c1bd630fe24367673e;p=geometrycompositor.git diff --git a/source/main.c b/source/main.c index b1247d8..cd2f1ac 100644 --- a/source/main.c +++ b/source/main.c @@ -422,6 +422,8 @@ void update_window_mask(Compositor *compositor, CompositedWindow *window) return; rects = XShapeGetRectangles(compositor->display, window->window, ShapeBounding, &rect_count, &rect_order); + if(!rects) + return; width = window->width+2*window->border; height = window->height+2*window->border; @@ -603,8 +605,8 @@ void update_monitor_vertices(CompositedScreen *screen, CompositedMonitor *monito unsigned x, y; unsigned i; float aspect; - float cyl_radius; - float cyl_arc; + float curve_radius; + float curve_arc; float sin_ksv; float cos_ksv; float distance; @@ -620,13 +622,15 @@ void update_monitor_vertices(CompositedScreen *screen, CompositedMonitor *monito if(monitor->curvature_depth) { - cyl_radius = (monitor->curvature_depth*monitor->curvature_depth+0.25f)/(2.0f*monitor->curvature_depth); - cyl_arc = 2.0f*asin(0.5f/cyl_radius); + curve_radius = (monitor->curvature_depth*monitor->curvature_depth+0.25f)/(2.0f*monitor->curvature_depth); + curve_arc = 2.0f*asin(0.5f/curve_radius); } sin_ksv = monitor->keystone_vertical/sqrt(1.0f+monitor->keystone_vertical*monitor->keystone_vertical); cos_ksv = sqrt(1.0f-sin_ksv*sin_ksv); distance = monitor->perspective+sin_ksv*((sin_ksv>0)-monitor->vertical_center)/aspect; + if(monitor->curvature_depth<0) + distance += -monitor->curvature_depth; eye[0] = 0.0f; eye[1] = (monitor->vertical_center-0.5f)/aspect+sin_ksv*distance; @@ -649,19 +653,19 @@ void update_monitor_vertices(CompositedScreen *screen, CompositedMonitor *monito { if(monitor->curvature_type==CYLINDRICAL) { - v[2] = (1.0f-cos(v[0]*cyl_arc))*cyl_radius-monitor->curvature_depth; - v[0] = sin(v[0]*cyl_arc)*cyl_radius; + v[2] = (1.0f-cos(v[0]*curve_arc))*curve_radius-monitor->curvature_depth; + v[0] = sin(v[0]*curve_arc)*curve_radius; } else if(monitor->curvature_type==SPHERICAL) { float r; - v[0] = tan(v[0]*cyl_arc)*cyl_radius; - v[1] = tan(v[1]*cyl_arc)*cyl_radius; - r = sqrt(v[0]*v[0]+v[1]*v[1]+cyl_radius*cyl_radius)/fabs(cyl_radius); + v[0] = tan(v[0]*curve_arc)*curve_radius; + v[1] = tan(v[1]*curve_arc)*curve_radius; + r = sqrt(v[0]*v[0]+v[1]*v[1]+curve_radius*curve_radius)/fabs(curve_radius); v[0] /= r; v[1] /= r; - v[2] = cyl_radius-cyl_radius/r-monitor->curvature_depth; + v[2] = curve_radius-curve_radius/r-monitor->curvature_depth; } } } @@ -1348,8 +1352,6 @@ void process_events(Compositor *compositor) process_damage_event(compositor, (XDamageNotifyEvent *)&event); else if(event.type==compositor->shape_event+ShapeNotify) process_shape_event(compositor, (XShapeEvent *)&event); - else - printf("Event %d\n", event.type); } } }