The basic idea is that the probability density function will form a trepezoid. I don't know of any built in functions for this because it's not a very common distribution, but using a bit of geometry you can solve for the values exactly.
UniformDiffCDF <- Vectorize(function(alow,ahigh,blow,bhigh,cutoff) {
breaks <- c(alow-bhigh, ahigh-bhigh, alow-blow, ahigh-blow)
height <- 2/sum(breaks * c(-1, -1, 1, 1))
if (cutoff > breaks[4]) return(1)
prob <- 0
if (cutoff < breaks[1]) return(prob)
if (cutoff < breaks[2]) {
prob <- prob + 1/2 * (cutoff - breaks[1]) * approx(breaks[1:2], c(0, height), cutoff)$y
return(prob)
} else {
prob <- prob + 1/2 * (breaks[2]-breaks[1]) * height
}
if (cutoff < breaks[3]) {
prob <- prob + (cutoff-breaks[2])*height
return(prob)
} else {
prob <- prob + (breaks[3]-breaks[2])*height
}
tri <- 1/2 * (breaks[4]-breaks[3]) * height
prob <- prob + tri - 1/2 * (breaks[4]- cutoff) * approx(breaks[4:3], c(0,height), cutoff)$y
return(prob)
}, vectorize.args="cutoff")
So for example
curve(UniformDiffCDF(5,7,2,6, x), from=-2, to=6)

The corresponding PDF would be
UniformDiffPDF <- Vectorize(function(alow,ahigh,blow,bhigh,cutoff) {
breaks <- c(alow-bhigh, ahigh-bhigh, alow-blow, ahigh-blow)
height <- 2/sum(breaks * c(-1, -1, 1, 1))
if (cutoff > breaks[4]) return(0)
if (cutoff < breaks[1]) return(0)
if (cutoff < breaks[2]) {
return(approx(breaks[1:2], c(0, height), cutoff)$y)
}
if (cutoff < breaks[3]) {
return(height)
}
return(approx(breaks[4:3], c(0,height), cutoff)$y)
}, vectorize.args="cutoff")
